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":"Modal.js","names":[],"sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count, function-lines — size, fullscreen and\n * fullscreenOnMobile are three distinct decisions (a fixed width, always full, full\n * only on a phone), and the rest is the dialog contract: open, onClose, title,\n * children, footer, closeOnBackdrop, closeOnEsc, hideCloseButton. The body is the\n * focus trap and the scroll lock, which must be installed and torn down together.\n */\nimport { useEffect, useId, useRef } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useEscapeLayer } from \"@/components/Portal/escape-layer\";\nimport { useFocusTrap } from \"@/hooks/use-focus-trap\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Modal.module.css\";\nimport { usePortalHost } from \"../Portal/portal-host\";\n\nexport type ModalSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\";\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n title?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n size?: ModalSize;\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n className?: string;\n hideCloseButton?: boolean;\n /** Force fullscreen at all breakpoints. */\n fullscreen?: boolean;\n /** Auto-fullscreen on mobile viewports (< 640px). Default `false`. */\n fullscreenOnMobile?: boolean;\n /**\n * Accessible name for the dialog. Only needed when there is no `title` —\n * with a `title` the dialog is named by it through `aria-labelledby`.\n */\n \"aria-label\"?: string;\n}\n\n/**\n * Portal-rendered modal dialog with backdrop, Esc handler, and slots for\n * header/body/footer. Locks body scroll while open.\n *\n * Keyboard focus is trapped in the dialog while it is open (`useFocusTrap`): it\n * enters on the first tab stop — or the dialog itself when there is none —,\n * `Tab`/`Shift+Tab` cycle inside it, including the panels of a `Popover` or\n * `HoverCard` opened from it, and closing returns focus to the element that\n * opened it. `aria-modal=\"true\"` tells a screen reader the page behind is inert;\n * the trap is what makes that true for the keyboard.\n *\n * The `dialog` role needs an accessible name: a `title` supplies it via\n * `aria-labelledby`, and a titleless dialog should pass `aria-label`. The\n * header heading is only rendered when there is a title, so a close-button-only\n * header does not leave an empty `h3` behind.\n */\nexport function Modal({\n open,\n onClose,\n title,\n children,\n footer,\n size = \"md\",\n closeOnBackdrop = true,\n closeOnEsc = true,\n className,\n hideCloseButton = false,\n fullscreen = false,\n fullscreenOnMobile = false,\n \"aria-label\": ariaLabel,\n}: ModalProps) {\n const titleId = useId();\n const dialogRef = useRef<HTMLDivElement>(null);\n useFocusTrap(dialogRef, open);\n useEscapeLayer(open, closeOnEsc ? onClose : null);\n useEffect(() => {\n if (!open) return;\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previousOverflow;\n };\n }, [open]);\n\n const portalHost = usePortalHost();\n\n if (!open || !portalHost) return null;\n\n return createPortal(\n <div\n className={styles.overlay}\n role=\"presentation\"\n onClick={() => {\n if (closeOnBackdrop) onClose();\n }}\n >\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n aria-labelledby={title ? titleId : undefined}\n aria-label={title ? undefined : ariaLabel}\n className={cn(\n styles.dialog,\n sizeClassName(size),\n fullscreen && styles.fullscreen,\n fullscreenOnMobile && styles.fullscreenOnMobile,\n className,\n )}\n onClick={(event) => event.stopPropagation()}\n >\n {(title || !hideCloseButton) && (\n <header className={styles.header}>\n {title && (\n <h3 id={titleId} className={styles.title}>\n {title}\n </h3>\n )}\n {!hideCloseButton && (\n <button\n type=\"button\"\n className={styles.close}\n aria-label=\"Fechar\"\n onClick={onClose}\n >\n <CloseIcon />\n </button>\n )}\n </header>\n )}\n <div className={styles.body}>{children}</div>\n {footer && <footer className={styles.footer}>{footer}</footer>}\n </div>\n </div>,\n portalHost,\n );\n}\n\n/**\n * Resolve the width class for a {@link ModalSize}.\n *\n * `2xl`/`3xl` are not valid CSS identifiers, so their rules are `.size2Xl` and\n * `.size3Xl` — spelled exactly as the build exports them. The build camelCases\n * CSS-module keys (`localsConvention: \"camelCaseOnly\"`), which turns `.size2xl`\n * into the key `size2Xl`; a lookup of `styles.size2xl` was `undefined` in `dist/`\n * and both sizes rendered with no `max-width` at all (issue #405).\n *\n * @param size - The requested modal size.\n * @returns The CSS-module class name for that size.\n */\nfunction sizeClassName(size: ModalSize): string | undefined {\n if (size === \"2xl\") return styles.size2Xl;\n if (size === \"3xl\") return styles.size3Xl;\n return styles[size];\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M6 6l12 12M6 18L18 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n"],"mappings":";;;;;;;;;AAwDA,
|
|
1
|
+
{"version":3,"file":"Modal.js","names":["styles","Modal_module_default","Modal","ariaLabel","titleId","useId","dialogRef","useRef","useFocusTrap","open","useEscapeLayer","closeOnEsc","onClose","useEffect","previousOverflow","portalHost","usePortalHost","createPortal","closeOnBackdrop","title","cn","sizeClassName","size","fullscreen","fullscreenOnMobile","className","event","hideCloseButton","CloseIcon","footer"],"sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count, function-lines — size, fullscreen and\n * fullscreenOnMobile are three distinct decisions (a fixed width, always full, full\n * only on a phone), and the rest is the dialog contract: open, onClose, title,\n * children, footer, closeOnBackdrop, closeOnEsc, hideCloseButton. The body is the\n * focus trap and the scroll lock, which must be installed and torn down together.\n */\nimport { useEffect, useId, useRef } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useEscapeLayer } from \"@/components/Portal/escape-layer\";\nimport { useFocusTrap } from \"@/hooks/use-focus-trap\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Modal.module.css\";\nimport { usePortalHost } from \"../Portal/portal-host\";\n\nexport type ModalSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\";\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n title?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n size?: ModalSize;\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n className?: string;\n hideCloseButton?: boolean;\n /** Force fullscreen at all breakpoints. */\n fullscreen?: boolean;\n /** Auto-fullscreen on mobile viewports (< 640px). Default `false`. */\n fullscreenOnMobile?: boolean;\n /**\n * Accessible name for the dialog. Only needed when there is no `title` —\n * with a `title` the dialog is named by it through `aria-labelledby`.\n */\n \"aria-label\"?: string;\n}\n\n/**\n * Portal-rendered modal dialog with backdrop, Esc handler, and slots for\n * header/body/footer. Locks body scroll while open.\n *\n * Keyboard focus is trapped in the dialog while it is open (`useFocusTrap`): it\n * enters on the first tab stop — or the dialog itself when there is none —,\n * `Tab`/`Shift+Tab` cycle inside it, including the panels of a `Popover` or\n * `HoverCard` opened from it, and closing returns focus to the element that\n * opened it. `aria-modal=\"true\"` tells a screen reader the page behind is inert;\n * the trap is what makes that true for the keyboard.\n *\n * The `dialog` role needs an accessible name: a `title` supplies it via\n * `aria-labelledby`, and a titleless dialog should pass `aria-label`. The\n * header heading is only rendered when there is a title, so a close-button-only\n * header does not leave an empty `h3` behind.\n */\nexport function Modal({\n open,\n onClose,\n title,\n children,\n footer,\n size = \"md\",\n closeOnBackdrop = true,\n closeOnEsc = true,\n className,\n hideCloseButton = false,\n fullscreen = false,\n fullscreenOnMobile = false,\n \"aria-label\": ariaLabel,\n}: ModalProps) {\n const titleId = useId();\n const dialogRef = useRef<HTMLDivElement>(null);\n useFocusTrap(dialogRef, open);\n useEscapeLayer(open, closeOnEsc ? onClose : null);\n useEffect(() => {\n if (!open) return;\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previousOverflow;\n };\n }, [open]);\n\n const portalHost = usePortalHost();\n\n if (!open || !portalHost) return null;\n\n return createPortal(\n <div\n className={styles.overlay}\n role=\"presentation\"\n onClick={() => {\n if (closeOnBackdrop) onClose();\n }}\n >\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n aria-labelledby={title ? titleId : undefined}\n aria-label={title ? undefined : ariaLabel}\n className={cn(\n styles.dialog,\n sizeClassName(size),\n fullscreen && styles.fullscreen,\n fullscreenOnMobile && styles.fullscreenOnMobile,\n className,\n )}\n onClick={(event) => event.stopPropagation()}\n >\n {(title || !hideCloseButton) && (\n <header className={styles.header}>\n {title && (\n <h3 id={titleId} className={styles.title}>\n {title}\n </h3>\n )}\n {!hideCloseButton && (\n <button\n type=\"button\"\n className={styles.close}\n aria-label=\"Fechar\"\n onClick={onClose}\n >\n <CloseIcon />\n </button>\n )}\n </header>\n )}\n <div className={styles.body}>{children}</div>\n {footer && <footer className={styles.footer}>{footer}</footer>}\n </div>\n </div>,\n portalHost,\n );\n}\n\n/**\n * Resolve the width class for a {@link ModalSize}.\n *\n * `2xl`/`3xl` are not valid CSS identifiers, so their rules are `.size2Xl` and\n * `.size3Xl` — spelled exactly as the build exports them. The build camelCases\n * CSS-module keys (`localsConvention: \"camelCaseOnly\"`), which turns `.size2xl`\n * into the key `size2Xl`; a lookup of `styles.size2xl` was `undefined` in `dist/`\n * and both sizes rendered with no `max-width` at all (issue #405).\n *\n * @param size - The requested modal size.\n * @returns The CSS-module class name for that size.\n */\nfunction sizeClassName(size: ModalSize): string | undefined {\n if (size === \"2xl\") return styles.size2Xl;\n if (size === \"3xl\") return styles.size3Xl;\n return styles[size];\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M6 6l12 12M6 18L18 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n"],"mappings":";;;;;;;;;AAwDA,SAAgBE,EAAM,EAClB,SACA,YACA,UACA,aACA,WACA,UAAO,MACP,qBAAkB,IAClB,gBAAa,IACb,cACA,qBAAkB,IAClB,gBAAa,IACb,wBAAqB,IACrB,cAAcC,KACH;CACX,IAAMC,IAAUC,EAAM,GAChBC,IAAYC,EAAuB,IAAI;CAG7C,AAFAC,EAAaF,GAAWG,CAAI,GAC5BC,EAAeD,GAAME,IAAaC,IAAU,IAAI,GAChDC,QAAgB;EACZ,IAAI,CAACJ,GAAM;EACX,IAAMK,IAAmB,SAAS,KAAK,MAAM;EAE7C,OADA,SAAS,KAAK,MAAM,WAAW,gBAClB;GACT,SAAS,KAAK,MAAM,WAAWA;EACnC;CACJ,GAAG,CAACL,CAAI,CAAC;CAET,IAAMM,IAAaC,EAAc;CAIjC,OAFI,CAACP,KAAQ,CAACM,IAAmB,OAE1BE,EACH,kBAAC,OAAD;EACI,WAAWjB,EAAO;EAClB,MAAK;EACL,eAAe;GACX,AAAIkB,KAAiBN,EAAQ;EACjC;EAEA,UAAA,kBAAC,OAAD;GACI,KAAKN;GACL,MAAK;GACL,cAAW;GACX,UAAU;GACV,mBAAiBa,IAAQf,IAAU,KAAA;GACnC,cAAYe,IAAQ,KAAA,IAAYhB;GAChC,WAAWiB,EACPpB,EAAO,QACPqB,EAAcC,CAAI,GAClBC,KAAcvB,EAAO,YACrBwB,KAAsBxB,EAAO,oBAC7ByB,CACJ;GACA,UAAU,MAAUC,EAAM,gBAAgB;GAd9C,UAAA;KAgBMP,KAAS,CAACQ,MACR,kBAAC,UAAD;KAAQ,WAAW3B,EAAO;KAA1B,UAAA,CACKmB,KACG,kBAAC,MAAD;MAAI,IAAIf;MAAS,WAAWJ,EAAO;MAC9B,UAAAmB;KACD,CAAA,GAEP,CAACQ,KACE,kBAAC,UAAD;MACI,MAAK;MACL,WAAW3B,EAAO;MAClB,cAAW;MACX,SAASY;MAET,UAAA,kBAACgB,GAAD,CAAY,CAAA;KACR,CAAA,CAER;;IAEZ,kBAAC,OAAD;KAAK,WAAW5B,EAAO;KAAO;IAAc,CAAA;IAC3C6B,KAAU,kBAAC,UAAD;KAAQ,WAAW7B,EAAO;KAAS,UAAA6B;IAAe,CAAA;GAC5D;;CACJ,CAAA,GACLd,CACJ;AACJ;AAcA,SAASM,EAAc,GAAqC;CAGxD,OAFIC,MAAS,QAActB,EAAO,UAC9BsB,MAAS,QAActB,EAAO,UAC3BA,EAAOsB;AAClB;AAEA,SAASM,IAAY;CACjB,OACI,kBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EACjD,UAAA,kBAAC,QAAD;GACI,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;EACjB,CAAA;CACA,CAAA;AAEb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.module.cjs","names":[],"sources":["../../../src/components/Modal/Modal.module.css"],"sourcesContent":[".overlay {\n position: fixed;\n inset: 0;\n background-color: rgba(15, 23, 42, 0.55);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: max(var(--tempest-space-4), var(--tempest-safe-area-top))\n max(var(--tempest-space-4), var(--tempest-safe-area-right))\n max(var(--tempest-space-4), var(--tempest-safe-area-bottom))\n max(var(--tempest-space-4), var(--tempest-safe-area-left));\n z-index: var(--tempest-z-modal);\n animation: tempest-fade-in var(--tempest-duration-base) var(--tempest-ease-out);\n}\n\n.dialog {\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n border-radius: var(--tempest-radius-xl);\n box-shadow: var(--tempest-shadow-xl);\n width: 100%;\n max-height: 90vh;\n max-height: 90dvh;\n display: flex;\n flex-direction: column;\n animation: tempest-modal-in var(--tempest-duration-base) var(--tempest-ease-emphasized);\n}\n\n.sm {\n max-width: 400px;\n}\n.md {\n max-width: 560px;\n}\n.lg {\n max-width: 800px;\n}\n.xl {\n max-width: 1024px;\n}\n.size2Xl {\n max-width: 1280px;\n}\n.size3Xl {\n max-width: 1440px;\n}\n\n/* Fullscreen — fill entire viewport regardless of size. */\n.fullscreen {\n max-width: 100%;\n max-height: 100vh;\n max-height: 100dvh;\n width: 100%;\n height: 100%;\n border-radius: 0;\n}\n\n/* Auto-fullscreen below mobile breakpoint. */\n@media (max-width: 639.98px) {\n .fullscreenOnMobile {\n max-width: 100%;\n max-height: 100vh;\n max-height: 100dvh;\n width: 100%;\n height: 100%;\n border-radius: 0;\n }\n}\n\n/* Mobile padding adjustment for non-fullscreen modals. */\n@media (max-width: 639.98px) {\n .dialog:not(.fullscreen):not(.fullscreenOnMobile) {\n border-radius: var(--tempest-radius-lg);\n }\n .body {\n padding: var(--tempest-space-4);\n }\n .header,\n .footer {\n padding: var(--tempest-space-3) var(--tempest-space-4);\n }\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-bottom: 1px solid var(--tempest-border);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-snug);\n color: var(--tempest-text);\n}\n\n.close {\n background: none;\n border: none;\n color: var(--tempest-text-muted);\n padding: var(--tempest-space-1);\n border-radius: var(--tempest-radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .close:hover {\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n }\n}\n\n.close: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.body {\n padding: var(--tempest-space-5);\n overflow-y: auto;\n line-height: var(--tempest-leading-normal);\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-top: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n border-radius: 0 0 var(--tempest-radius-xl) var(--tempest-radius-xl);\n}\n\n@keyframes tempest-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes tempest-modal-in {\n from {\n opacity: 0;\n transform: translateY(12px) scale(0.96);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .overlay,\n .dialog {\n animation: none;\n }\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"Modal.module.cjs","names":["overlay","tempestFadeIn","dialog","tempestModalIn","sm","md","lg","xl","size2Xl","size3Xl","fullscreen","fullscreenOnMobile","body","header","footer","title","close","Modal_module_default"],"sources":["../../../src/components/Modal/Modal.module.css"],"sourcesContent":[".overlay {\n position: fixed;\n inset: 0;\n background-color: rgba(15, 23, 42, 0.55);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: max(var(--tempest-space-4), var(--tempest-safe-area-top))\n max(var(--tempest-space-4), var(--tempest-safe-area-right))\n max(var(--tempest-space-4), var(--tempest-safe-area-bottom))\n max(var(--tempest-space-4), var(--tempest-safe-area-left));\n z-index: var(--tempest-z-modal);\n animation: tempest-fade-in var(--tempest-duration-base) var(--tempest-ease-out);\n}\n\n.dialog {\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n border-radius: var(--tempest-radius-xl);\n box-shadow: var(--tempest-shadow-xl);\n width: 100%;\n max-height: 90vh;\n max-height: 90dvh;\n display: flex;\n flex-direction: column;\n animation: tempest-modal-in var(--tempest-duration-base) var(--tempest-ease-emphasized);\n}\n\n.sm {\n max-width: 400px;\n}\n.md {\n max-width: 560px;\n}\n.lg {\n max-width: 800px;\n}\n.xl {\n max-width: 1024px;\n}\n.size2Xl {\n max-width: 1280px;\n}\n.size3Xl {\n max-width: 1440px;\n}\n\n/* Fullscreen — fill entire viewport regardless of size. */\n.fullscreen {\n max-width: 100%;\n max-height: 100vh;\n max-height: 100dvh;\n width: 100%;\n height: 100%;\n border-radius: 0;\n}\n\n/* Auto-fullscreen below mobile breakpoint. */\n@media (max-width: 639.98px) {\n .fullscreenOnMobile {\n max-width: 100%;\n max-height: 100vh;\n max-height: 100dvh;\n width: 100%;\n height: 100%;\n border-radius: 0;\n }\n}\n\n/* Mobile padding adjustment for non-fullscreen modals. */\n@media (max-width: 639.98px) {\n .dialog:not(.fullscreen):not(.fullscreenOnMobile) {\n border-radius: var(--tempest-radius-lg);\n }\n .body {\n padding: var(--tempest-space-4);\n }\n .header,\n .footer {\n padding: var(--tempest-space-3) var(--tempest-space-4);\n }\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-bottom: 1px solid var(--tempest-border);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-snug);\n color: var(--tempest-text);\n}\n\n.close {\n background: none;\n border: none;\n color: var(--tempest-text-muted);\n padding: var(--tempest-space-1);\n border-radius: var(--tempest-radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .close:hover {\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n }\n}\n\n.close: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.body {\n padding: var(--tempest-space-5);\n overflow-y: auto;\n line-height: var(--tempest-leading-normal);\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-top: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n border-radius: 0 0 var(--tempest-radius-xl) var(--tempest-radius-xl);\n}\n\n@keyframes tempest-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes tempest-modal-in {\n from {\n opacity: 0;\n transform: translateY(12px) scale(0.96);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .overlay,\n .dialog {\n animation: none;\n }\n}\n"],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.module.js","names":[],"sources":["../../../src/components/Modal/Modal.module.css"],"sourcesContent":[".overlay {\n position: fixed;\n inset: 0;\n background-color: rgba(15, 23, 42, 0.55);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: max(var(--tempest-space-4), var(--tempest-safe-area-top))\n max(var(--tempest-space-4), var(--tempest-safe-area-right))\n max(var(--tempest-space-4), var(--tempest-safe-area-bottom))\n max(var(--tempest-space-4), var(--tempest-safe-area-left));\n z-index: var(--tempest-z-modal);\n animation: tempest-fade-in var(--tempest-duration-base) var(--tempest-ease-out);\n}\n\n.dialog {\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n border-radius: var(--tempest-radius-xl);\n box-shadow: var(--tempest-shadow-xl);\n width: 100%;\n max-height: 90vh;\n max-height: 90dvh;\n display: flex;\n flex-direction: column;\n animation: tempest-modal-in var(--tempest-duration-base) var(--tempest-ease-emphasized);\n}\n\n.sm {\n max-width: 400px;\n}\n.md {\n max-width: 560px;\n}\n.lg {\n max-width: 800px;\n}\n.xl {\n max-width: 1024px;\n}\n.size2Xl {\n max-width: 1280px;\n}\n.size3Xl {\n max-width: 1440px;\n}\n\n/* Fullscreen — fill entire viewport regardless of size. */\n.fullscreen {\n max-width: 100%;\n max-height: 100vh;\n max-height: 100dvh;\n width: 100%;\n height: 100%;\n border-radius: 0;\n}\n\n/* Auto-fullscreen below mobile breakpoint. */\n@media (max-width: 639.98px) {\n .fullscreenOnMobile {\n max-width: 100%;\n max-height: 100vh;\n max-height: 100dvh;\n width: 100%;\n height: 100%;\n border-radius: 0;\n }\n}\n\n/* Mobile padding adjustment for non-fullscreen modals. */\n@media (max-width: 639.98px) {\n .dialog:not(.fullscreen):not(.fullscreenOnMobile) {\n border-radius: var(--tempest-radius-lg);\n }\n .body {\n padding: var(--tempest-space-4);\n }\n .header,\n .footer {\n padding: var(--tempest-space-3) var(--tempest-space-4);\n }\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-bottom: 1px solid var(--tempest-border);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-snug);\n color: var(--tempest-text);\n}\n\n.close {\n background: none;\n border: none;\n color: var(--tempest-text-muted);\n padding: var(--tempest-space-1);\n border-radius: var(--tempest-radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .close:hover {\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n }\n}\n\n.close: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.body {\n padding: var(--tempest-space-5);\n overflow-y: auto;\n line-height: var(--tempest-leading-normal);\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-top: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n border-radius: 0 0 var(--tempest-radius-xl) var(--tempest-radius-xl);\n}\n\n@keyframes tempest-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes tempest-modal-in {\n from {\n opacity: 0;\n transform: translateY(12px) scale(0.96);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .overlay,\n .dialog {\n animation: none;\n }\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"Modal.module.js","names":["overlay","tempestFadeIn","dialog","tempestModalIn","sm","md","lg","xl","size2Xl","size3Xl","fullscreen","fullscreenOnMobile","body","header","footer","title","close","Modal_module_default"],"sources":["../../../src/components/Modal/Modal.module.css"],"sourcesContent":[".overlay {\n position: fixed;\n inset: 0;\n background-color: rgba(15, 23, 42, 0.55);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: max(var(--tempest-space-4), var(--tempest-safe-area-top))\n max(var(--tempest-space-4), var(--tempest-safe-area-right))\n max(var(--tempest-space-4), var(--tempest-safe-area-bottom))\n max(var(--tempest-space-4), var(--tempest-safe-area-left));\n z-index: var(--tempest-z-modal);\n animation: tempest-fade-in var(--tempest-duration-base) var(--tempest-ease-out);\n}\n\n.dialog {\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n border-radius: var(--tempest-radius-xl);\n box-shadow: var(--tempest-shadow-xl);\n width: 100%;\n max-height: 90vh;\n max-height: 90dvh;\n display: flex;\n flex-direction: column;\n animation: tempest-modal-in var(--tempest-duration-base) var(--tempest-ease-emphasized);\n}\n\n.sm {\n max-width: 400px;\n}\n.md {\n max-width: 560px;\n}\n.lg {\n max-width: 800px;\n}\n.xl {\n max-width: 1024px;\n}\n.size2Xl {\n max-width: 1280px;\n}\n.size3Xl {\n max-width: 1440px;\n}\n\n/* Fullscreen — fill entire viewport regardless of size. */\n.fullscreen {\n max-width: 100%;\n max-height: 100vh;\n max-height: 100dvh;\n width: 100%;\n height: 100%;\n border-radius: 0;\n}\n\n/* Auto-fullscreen below mobile breakpoint. */\n@media (max-width: 639.98px) {\n .fullscreenOnMobile {\n max-width: 100%;\n max-height: 100vh;\n max-height: 100dvh;\n width: 100%;\n height: 100%;\n border-radius: 0;\n }\n}\n\n/* Mobile padding adjustment for non-fullscreen modals. */\n@media (max-width: 639.98px) {\n .dialog:not(.fullscreen):not(.fullscreenOnMobile) {\n border-radius: var(--tempest-radius-lg);\n }\n .body {\n padding: var(--tempest-space-4);\n }\n .header,\n .footer {\n padding: var(--tempest-space-3) var(--tempest-space-4);\n }\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-bottom: 1px solid var(--tempest-border);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-snug);\n color: var(--tempest-text);\n}\n\n.close {\n background: none;\n border: none;\n color: var(--tempest-text-muted);\n padding: var(--tempest-space-1);\n border-radius: var(--tempest-radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .close:hover {\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n }\n}\n\n.close: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.body {\n padding: var(--tempest-space-5);\n overflow-y: auto;\n line-height: var(--tempest-leading-normal);\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-top: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n border-radius: 0 0 var(--tempest-radius-xl) var(--tempest-radius-xl);\n}\n\n@keyframes tempest-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes tempest-modal-in {\n from {\n opacity: 0;\n transform: translateY(12px) scale(0.96);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .overlay,\n .dialog {\n animation: none;\n }\n}\n"],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalsManager.cjs","names":[],"sources":["../../../src/components/ModalsManager/ModalsManager.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines — the imperative API (open, close, confirm, prompt) and\n * the stack that renders it live in one file so the returned promise and the mounted\n * element cannot drift apart.\n */\nimport { createContext, useCallback, useContext, useMemo, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { ConfirmDialog } from \"@/components/ConfirmDialog\";\nimport { Modal } from \"@/components/Modal\";\nimport type { ModalSize } from \"@/components/Modal\";\nimport styles from \"./ModalsManager.module.css\";\n\n/** Options accepted by {@link ModalsApi.open}. */\nexport interface OpenModalOptions {\n /** Header title. */\n title?: ReactNode;\n /** Modal body content. */\n children: ReactNode;\n /** Dialog size. Default `md`. */\n size?: ModalSize;\n /** Allow closing by clicking the backdrop. Default `true`. */\n closeOnBackdrop?: boolean;\n /** Allow closing with the Esc key. Default `true`. */\n closeOnEsc?: boolean;\n /** Hide the header close button. */\n hideCloseButton?: boolean;\n /** Called after the modal is removed from the stack. */\n onClose?: () => void;\n}\n\n/** Options accepted by {@link ModalsApi.confirm}. */\nexport interface ConfirmModalOptions {\n /** Header title. */\n title?: ReactNode;\n /** Prompt message rendered in the dialog body. */\n message: ReactNode;\n /** Confirm button label. Default `Confirmar`. */\n confirmLabel?: string;\n /** Cancel button label. Default `Cancelar`. */\n cancelLabel?: string;\n /** Render the confirm button in the danger variant. */\n danger?: boolean;\n /** Called when the user confirms. */\n onConfirm?: () => void | Promise<void>;\n /** Called when the user cancels or dismisses. */\n onCancel?: () => void;\n}\n\n/** Imperative API returned by {@link useModals}. */\nexport interface ModalsApi {\n /** Push a content modal. Returns its stack id. */\n open: (options: OpenModalOptions) => string;\n /** Push a confirmation dialog. Returns its stack id. */\n confirm: (options: ConfirmModalOptions) => string;\n /** Remove the modal with the given id. */\n close: (id: string) => void;\n /** Remove every modal from the stack. */\n closeAll: () => void;\n}\n\ninterface ContentEntry {\n kind: \"content\";\n id: string;\n options: OpenModalOptions;\n}\n\ninterface ConfirmEntry {\n kind: \"confirm\";\n id: string;\n options: ConfirmModalOptions;\n}\n\ntype StackEntry = ContentEntry | ConfirmEntry;\n\nconst ModalsContext = createContext<ModalsApi | null>(null);\n\n/** Props for {@link ModalsProvider}. */\nexport interface ModalsProviderProps {\n children: ReactNode;\n}\n\n/**\n * Provides imperative modal control via {@link useModals} and renders the open\n * modal stack. Mount once near the app root.\n *\n * @example\n * <ModalsProvider>\n * <App />\n * </ModalsProvider>\n */\nexport function ModalsProvider({ children }: ModalsProviderProps) {\n const [stack, setStack] = useState<StackEntry[]>([]);\n const counter = useRef(0);\n\n const nextId = useCallback((): string => {\n counter.current += 1;\n return `modal-${counter.current}`;\n }, []);\n\n const close = useCallback((id: string): void => {\n setStack((current) => current.filter((entry) => entry.id !== id));\n }, []);\n\n const closeAll = useCallback((): void => {\n setStack([]);\n }, []);\n\n const open = useCallback(\n (options: OpenModalOptions): string => {\n const id = nextId();\n setStack((current) => [...current, { kind: \"content\", id, options }]);\n return id;\n },\n [nextId],\n );\n\n const confirm = useCallback(\n (options: ConfirmModalOptions): string => {\n const id = nextId();\n setStack((current) => [...current, { kind: \"confirm\", id, options }]);\n return id;\n },\n [nextId],\n );\n\n const api = useMemo<ModalsApi>(\n () => ({ open, confirm, close, closeAll }),\n [open, confirm, close, closeAll],\n );\n\n return (\n <ModalsContext.Provider value={api}>\n {children}\n <div className={styles.stack}>\n {stack.map((entry) =>\n entry.kind === \"content\" ? (\n <ContentModal key={entry.id} entry={entry} close={close} />\n ) : (\n <ConfirmModal key={entry.id} entry={entry} close={close} />\n ),\n )}\n </div>\n </ModalsContext.Provider>\n );\n}\n\ninterface ContentModalProps {\n entry: ContentEntry;\n close: (id: string) => void;\n}\n\nfunction ContentModal({ entry, close }: ContentModalProps) {\n const { options, id } = entry;\n const handleClose = (): void => {\n options.onClose?.();\n close(id);\n };\n return (\n <Modal\n open\n onClose={handleClose}\n title={options.title}\n size={options.size}\n closeOnBackdrop={options.closeOnBackdrop}\n closeOnEsc={options.closeOnEsc}\n hideCloseButton={options.hideCloseButton}\n >\n {options.children}\n </Modal>\n );\n}\n\ninterface ConfirmModalProps {\n entry: ConfirmEntry;\n close: (id: string) => void;\n}\n\nfunction ConfirmModal({ entry, close }: ConfirmModalProps) {\n const { options, id } = entry;\n const [loading, setLoading] = useState(false);\n\n const handleConfirm = async (): Promise<void> => {\n try {\n setLoading(true);\n await options.onConfirm?.();\n } finally {\n setLoading(false);\n close(id);\n }\n };\n\n const handleCancel = (): void => {\n options.onCancel?.();\n close(id);\n };\n\n return (\n <ConfirmDialog\n open\n title={options.title ?? \"\"}\n description={options.message}\n confirmLabel={options.confirmLabel}\n cancelLabel={options.cancelLabel}\n variant={options.danger ? \"danger\" : \"primary\"}\n loading={loading}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n />\n );\n}\n\n/**\n * Access the imperative modals API. Must be used within a {@link ModalsProvider}.\n *\n * @example\n * const modals = useModals();\n * modals.confirm({ message: \"Excluir item?\", danger: true, onConfirm: del });\n *\n * @throws Error when called outside a {@link ModalsProvider}.\n */\nexport function useModals(): ModalsApi {\n const api = useContext(ModalsContext);\n if (api === null) {\n throw new Error(\"useModals must be used within a <ModalsProvider>\");\n }\n return api;\n}\n"],"mappings":"oLA0EA,
|
|
1
|
+
{"version":3,"file":"ModalsManager.cjs","names":["createContext","useState","useRef","useCallback","useMemo","styles","Modal","ConfirmDialog","useContext","require_Modal","require_ConfirmDialog","require_ModalsManager_module","react","react_jsx_runtime","ModalsContext","ModalsProvider","stack","setStack","counter","nextId","close","current","entry","id","closeAll","open","confirm","api","children","ContentModal","ConfirmModal","options","loading","setLoading","useModals"],"sources":["../../../src/components/ModalsManager/ModalsManager.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines — the imperative API (open, close, confirm, prompt) and\n * the stack that renders it live in one file so the returned promise and the mounted\n * element cannot drift apart.\n */\nimport { createContext, useCallback, useContext, useMemo, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { ConfirmDialog } from \"@/components/ConfirmDialog\";\nimport { Modal } from \"@/components/Modal\";\nimport type { ModalSize } from \"@/components/Modal\";\nimport styles from \"./ModalsManager.module.css\";\n\n/** Options accepted by {@link ModalsApi.open}. */\nexport interface OpenModalOptions {\n /** Header title. */\n title?: ReactNode;\n /** Modal body content. */\n children: ReactNode;\n /** Dialog size. Default `md`. */\n size?: ModalSize;\n /** Allow closing by clicking the backdrop. Default `true`. */\n closeOnBackdrop?: boolean;\n /** Allow closing with the Esc key. Default `true`. */\n closeOnEsc?: boolean;\n /** Hide the header close button. */\n hideCloseButton?: boolean;\n /** Called after the modal is removed from the stack. */\n onClose?: () => void;\n}\n\n/** Options accepted by {@link ModalsApi.confirm}. */\nexport interface ConfirmModalOptions {\n /** Header title. */\n title?: ReactNode;\n /** Prompt message rendered in the dialog body. */\n message: ReactNode;\n /** Confirm button label. Default `Confirmar`. */\n confirmLabel?: string;\n /** Cancel button label. Default `Cancelar`. */\n cancelLabel?: string;\n /** Render the confirm button in the danger variant. */\n danger?: boolean;\n /** Called when the user confirms. */\n onConfirm?: () => void | Promise<void>;\n /** Called when the user cancels or dismisses. */\n onCancel?: () => void;\n}\n\n/** Imperative API returned by {@link useModals}. */\nexport interface ModalsApi {\n /** Push a content modal. Returns its stack id. */\n open: (options: OpenModalOptions) => string;\n /** Push a confirmation dialog. Returns its stack id. */\n confirm: (options: ConfirmModalOptions) => string;\n /** Remove the modal with the given id. */\n close: (id: string) => void;\n /** Remove every modal from the stack. */\n closeAll: () => void;\n}\n\ninterface ContentEntry {\n kind: \"content\";\n id: string;\n options: OpenModalOptions;\n}\n\ninterface ConfirmEntry {\n kind: \"confirm\";\n id: string;\n options: ConfirmModalOptions;\n}\n\ntype StackEntry = ContentEntry | ConfirmEntry;\n\nconst ModalsContext = createContext<ModalsApi | null>(null);\n\n/** Props for {@link ModalsProvider}. */\nexport interface ModalsProviderProps {\n children: ReactNode;\n}\n\n/**\n * Provides imperative modal control via {@link useModals} and renders the open\n * modal stack. Mount once near the app root.\n *\n * @example\n * <ModalsProvider>\n * <App />\n * </ModalsProvider>\n */\nexport function ModalsProvider({ children }: ModalsProviderProps) {\n const [stack, setStack] = useState<StackEntry[]>([]);\n const counter = useRef(0);\n\n const nextId = useCallback((): string => {\n counter.current += 1;\n return `modal-${counter.current}`;\n }, []);\n\n const close = useCallback((id: string): void => {\n setStack((current) => current.filter((entry) => entry.id !== id));\n }, []);\n\n const closeAll = useCallback((): void => {\n setStack([]);\n }, []);\n\n const open = useCallback(\n (options: OpenModalOptions): string => {\n const id = nextId();\n setStack((current) => [...current, { kind: \"content\", id, options }]);\n return id;\n },\n [nextId],\n );\n\n const confirm = useCallback(\n (options: ConfirmModalOptions): string => {\n const id = nextId();\n setStack((current) => [...current, { kind: \"confirm\", id, options }]);\n return id;\n },\n [nextId],\n );\n\n const api = useMemo<ModalsApi>(\n () => ({ open, confirm, close, closeAll }),\n [open, confirm, close, closeAll],\n );\n\n return (\n <ModalsContext.Provider value={api}>\n {children}\n <div className={styles.stack}>\n {stack.map((entry) =>\n entry.kind === \"content\" ? (\n <ContentModal key={entry.id} entry={entry} close={close} />\n ) : (\n <ConfirmModal key={entry.id} entry={entry} close={close} />\n ),\n )}\n </div>\n </ModalsContext.Provider>\n );\n}\n\ninterface ContentModalProps {\n entry: ContentEntry;\n close: (id: string) => void;\n}\n\nfunction ContentModal({ entry, close }: ContentModalProps) {\n const { options, id } = entry;\n const handleClose = (): void => {\n options.onClose?.();\n close(id);\n };\n return (\n <Modal\n open\n onClose={handleClose}\n title={options.title}\n size={options.size}\n closeOnBackdrop={options.closeOnBackdrop}\n closeOnEsc={options.closeOnEsc}\n hideCloseButton={options.hideCloseButton}\n >\n {options.children}\n </Modal>\n );\n}\n\ninterface ConfirmModalProps {\n entry: ConfirmEntry;\n close: (id: string) => void;\n}\n\nfunction ConfirmModal({ entry, close }: ConfirmModalProps) {\n const { options, id } = entry;\n const [loading, setLoading] = useState(false);\n\n const handleConfirm = async (): Promise<void> => {\n try {\n setLoading(true);\n await options.onConfirm?.();\n } finally {\n setLoading(false);\n close(id);\n }\n };\n\n const handleCancel = (): void => {\n options.onCancel?.();\n close(id);\n };\n\n return (\n <ConfirmDialog\n open\n title={options.title ?? \"\"}\n description={options.message}\n confirmLabel={options.confirmLabel}\n cancelLabel={options.cancelLabel}\n variant={options.danger ? \"danger\" : \"primary\"}\n loading={loading}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n />\n );\n}\n\n/**\n * Access the imperative modals API. Must be used within a {@link ModalsProvider}.\n *\n * @example\n * const modals = useModals();\n * modals.confirm({ message: \"Excluir item?\", danger: true, onConfirm: del });\n *\n * @throws Error when called outside a {@link ModalsProvider}.\n */\nexport function useModals(): ModalsApi {\n const api = useContext(ModalsContext);\n if (api === null) {\n throw new Error(\"useModals must be used within a <ModalsProvider>\");\n }\n return api;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalsManager.js","names":[],"sources":["../../../src/components/ModalsManager/ModalsManager.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines — the imperative API (open, close, confirm, prompt) and\n * the stack that renders it live in one file so the returned promise and the mounted\n * element cannot drift apart.\n */\nimport { createContext, useCallback, useContext, useMemo, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { ConfirmDialog } from \"@/components/ConfirmDialog\";\nimport { Modal } from \"@/components/Modal\";\nimport type { ModalSize } from \"@/components/Modal\";\nimport styles from \"./ModalsManager.module.css\";\n\n/** Options accepted by {@link ModalsApi.open}. */\nexport interface OpenModalOptions {\n /** Header title. */\n title?: ReactNode;\n /** Modal body content. */\n children: ReactNode;\n /** Dialog size. Default `md`. */\n size?: ModalSize;\n /** Allow closing by clicking the backdrop. Default `true`. */\n closeOnBackdrop?: boolean;\n /** Allow closing with the Esc key. Default `true`. */\n closeOnEsc?: boolean;\n /** Hide the header close button. */\n hideCloseButton?: boolean;\n /** Called after the modal is removed from the stack. */\n onClose?: () => void;\n}\n\n/** Options accepted by {@link ModalsApi.confirm}. */\nexport interface ConfirmModalOptions {\n /** Header title. */\n title?: ReactNode;\n /** Prompt message rendered in the dialog body. */\n message: ReactNode;\n /** Confirm button label. Default `Confirmar`. */\n confirmLabel?: string;\n /** Cancel button label. Default `Cancelar`. */\n cancelLabel?: string;\n /** Render the confirm button in the danger variant. */\n danger?: boolean;\n /** Called when the user confirms. */\n onConfirm?: () => void | Promise<void>;\n /** Called when the user cancels or dismisses. */\n onCancel?: () => void;\n}\n\n/** Imperative API returned by {@link useModals}. */\nexport interface ModalsApi {\n /** Push a content modal. Returns its stack id. */\n open: (options: OpenModalOptions) => string;\n /** Push a confirmation dialog. Returns its stack id. */\n confirm: (options: ConfirmModalOptions) => string;\n /** Remove the modal with the given id. */\n close: (id: string) => void;\n /** Remove every modal from the stack. */\n closeAll: () => void;\n}\n\ninterface ContentEntry {\n kind: \"content\";\n id: string;\n options: OpenModalOptions;\n}\n\ninterface ConfirmEntry {\n kind: \"confirm\";\n id: string;\n options: ConfirmModalOptions;\n}\n\ntype StackEntry = ContentEntry | ConfirmEntry;\n\nconst ModalsContext = createContext<ModalsApi | null>(null);\n\n/** Props for {@link ModalsProvider}. */\nexport interface ModalsProviderProps {\n children: ReactNode;\n}\n\n/**\n * Provides imperative modal control via {@link useModals} and renders the open\n * modal stack. Mount once near the app root.\n *\n * @example\n * <ModalsProvider>\n * <App />\n * </ModalsProvider>\n */\nexport function ModalsProvider({ children }: ModalsProviderProps) {\n const [stack, setStack] = useState<StackEntry[]>([]);\n const counter = useRef(0);\n\n const nextId = useCallback((): string => {\n counter.current += 1;\n return `modal-${counter.current}`;\n }, []);\n\n const close = useCallback((id: string): void => {\n setStack((current) => current.filter((entry) => entry.id !== id));\n }, []);\n\n const closeAll = useCallback((): void => {\n setStack([]);\n }, []);\n\n const open = useCallback(\n (options: OpenModalOptions): string => {\n const id = nextId();\n setStack((current) => [...current, { kind: \"content\", id, options }]);\n return id;\n },\n [nextId],\n );\n\n const confirm = useCallback(\n (options: ConfirmModalOptions): string => {\n const id = nextId();\n setStack((current) => [...current, { kind: \"confirm\", id, options }]);\n return id;\n },\n [nextId],\n );\n\n const api = useMemo<ModalsApi>(\n () => ({ open, confirm, close, closeAll }),\n [open, confirm, close, closeAll],\n );\n\n return (\n <ModalsContext.Provider value={api}>\n {children}\n <div className={styles.stack}>\n {stack.map((entry) =>\n entry.kind === \"content\" ? (\n <ContentModal key={entry.id} entry={entry} close={close} />\n ) : (\n <ConfirmModal key={entry.id} entry={entry} close={close} />\n ),\n )}\n </div>\n </ModalsContext.Provider>\n );\n}\n\ninterface ContentModalProps {\n entry: ContentEntry;\n close: (id: string) => void;\n}\n\nfunction ContentModal({ entry, close }: ContentModalProps) {\n const { options, id } = entry;\n const handleClose = (): void => {\n options.onClose?.();\n close(id);\n };\n return (\n <Modal\n open\n onClose={handleClose}\n title={options.title}\n size={options.size}\n closeOnBackdrop={options.closeOnBackdrop}\n closeOnEsc={options.closeOnEsc}\n hideCloseButton={options.hideCloseButton}\n >\n {options.children}\n </Modal>\n );\n}\n\ninterface ConfirmModalProps {\n entry: ConfirmEntry;\n close: (id: string) => void;\n}\n\nfunction ConfirmModal({ entry, close }: ConfirmModalProps) {\n const { options, id } = entry;\n const [loading, setLoading] = useState(false);\n\n const handleConfirm = async (): Promise<void> => {\n try {\n setLoading(true);\n await options.onConfirm?.();\n } finally {\n setLoading(false);\n close(id);\n }\n };\n\n const handleCancel = (): void => {\n options.onCancel?.();\n close(id);\n };\n\n return (\n <ConfirmDialog\n open\n title={options.title ?? \"\"}\n description={options.message}\n confirmLabel={options.confirmLabel}\n cancelLabel={options.cancelLabel}\n variant={options.danger ? \"danger\" : \"primary\"}\n loading={loading}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n />\n );\n}\n\n/**\n * Access the imperative modals API. Must be used within a {@link ModalsProvider}.\n *\n * @example\n * const modals = useModals();\n * modals.confirm({ message: \"Excluir item?\", danger: true, onConfirm: del });\n *\n * @throws Error when called outside a {@link ModalsProvider}.\n */\nexport function useModals(): ModalsApi {\n const api = useContext(ModalsContext);\n if (api === null) {\n throw new Error(\"useModals must be used within a <ModalsProvider>\");\n }\n return api;\n}\n"],"mappings":";;;;;;AA0EA,
|
|
1
|
+
{"version":3,"file":"ModalsManager.js","names":["styles","ModalsManager_module_default","ModalsContext","createContext","ModalsProvider","stack","setStack","useState","counter","useRef","nextId","useCallback","close","current","entry","id","closeAll","open","confirm","api","useMemo","children","ContentModal","ConfirmModal","Modal","options","loading","setLoading","ConfirmDialog","useModals","useContext"],"sources":["../../../src/components/ModalsManager/ModalsManager.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines — the imperative API (open, close, confirm, prompt) and\n * the stack that renders it live in one file so the returned promise and the mounted\n * element cannot drift apart.\n */\nimport { createContext, useCallback, useContext, useMemo, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { ConfirmDialog } from \"@/components/ConfirmDialog\";\nimport { Modal } from \"@/components/Modal\";\nimport type { ModalSize } from \"@/components/Modal\";\nimport styles from \"./ModalsManager.module.css\";\n\n/** Options accepted by {@link ModalsApi.open}. */\nexport interface OpenModalOptions {\n /** Header title. */\n title?: ReactNode;\n /** Modal body content. */\n children: ReactNode;\n /** Dialog size. Default `md`. */\n size?: ModalSize;\n /** Allow closing by clicking the backdrop. Default `true`. */\n closeOnBackdrop?: boolean;\n /** Allow closing with the Esc key. Default `true`. */\n closeOnEsc?: boolean;\n /** Hide the header close button. */\n hideCloseButton?: boolean;\n /** Called after the modal is removed from the stack. */\n onClose?: () => void;\n}\n\n/** Options accepted by {@link ModalsApi.confirm}. */\nexport interface ConfirmModalOptions {\n /** Header title. */\n title?: ReactNode;\n /** Prompt message rendered in the dialog body. */\n message: ReactNode;\n /** Confirm button label. Default `Confirmar`. */\n confirmLabel?: string;\n /** Cancel button label. Default `Cancelar`. */\n cancelLabel?: string;\n /** Render the confirm button in the danger variant. */\n danger?: boolean;\n /** Called when the user confirms. */\n onConfirm?: () => void | Promise<void>;\n /** Called when the user cancels or dismisses. */\n onCancel?: () => void;\n}\n\n/** Imperative API returned by {@link useModals}. */\nexport interface ModalsApi {\n /** Push a content modal. Returns its stack id. */\n open: (options: OpenModalOptions) => string;\n /** Push a confirmation dialog. Returns its stack id. */\n confirm: (options: ConfirmModalOptions) => string;\n /** Remove the modal with the given id. */\n close: (id: string) => void;\n /** Remove every modal from the stack. */\n closeAll: () => void;\n}\n\ninterface ContentEntry {\n kind: \"content\";\n id: string;\n options: OpenModalOptions;\n}\n\ninterface ConfirmEntry {\n kind: \"confirm\";\n id: string;\n options: ConfirmModalOptions;\n}\n\ntype StackEntry = ContentEntry | ConfirmEntry;\n\nconst ModalsContext = createContext<ModalsApi | null>(null);\n\n/** Props for {@link ModalsProvider}. */\nexport interface ModalsProviderProps {\n children: ReactNode;\n}\n\n/**\n * Provides imperative modal control via {@link useModals} and renders the open\n * modal stack. Mount once near the app root.\n *\n * @example\n * <ModalsProvider>\n * <App />\n * </ModalsProvider>\n */\nexport function ModalsProvider({ children }: ModalsProviderProps) {\n const [stack, setStack] = useState<StackEntry[]>([]);\n const counter = useRef(0);\n\n const nextId = useCallback((): string => {\n counter.current += 1;\n return `modal-${counter.current}`;\n }, []);\n\n const close = useCallback((id: string): void => {\n setStack((current) => current.filter((entry) => entry.id !== id));\n }, []);\n\n const closeAll = useCallback((): void => {\n setStack([]);\n }, []);\n\n const open = useCallback(\n (options: OpenModalOptions): string => {\n const id = nextId();\n setStack((current) => [...current, { kind: \"content\", id, options }]);\n return id;\n },\n [nextId],\n );\n\n const confirm = useCallback(\n (options: ConfirmModalOptions): string => {\n const id = nextId();\n setStack((current) => [...current, { kind: \"confirm\", id, options }]);\n return id;\n },\n [nextId],\n );\n\n const api = useMemo<ModalsApi>(\n () => ({ open, confirm, close, closeAll }),\n [open, confirm, close, closeAll],\n );\n\n return (\n <ModalsContext.Provider value={api}>\n {children}\n <div className={styles.stack}>\n {stack.map((entry) =>\n entry.kind === \"content\" ? (\n <ContentModal key={entry.id} entry={entry} close={close} />\n ) : (\n <ConfirmModal key={entry.id} entry={entry} close={close} />\n ),\n )}\n </div>\n </ModalsContext.Provider>\n );\n}\n\ninterface ContentModalProps {\n entry: ContentEntry;\n close: (id: string) => void;\n}\n\nfunction ContentModal({ entry, close }: ContentModalProps) {\n const { options, id } = entry;\n const handleClose = (): void => {\n options.onClose?.();\n close(id);\n };\n return (\n <Modal\n open\n onClose={handleClose}\n title={options.title}\n size={options.size}\n closeOnBackdrop={options.closeOnBackdrop}\n closeOnEsc={options.closeOnEsc}\n hideCloseButton={options.hideCloseButton}\n >\n {options.children}\n </Modal>\n );\n}\n\ninterface ConfirmModalProps {\n entry: ConfirmEntry;\n close: (id: string) => void;\n}\n\nfunction ConfirmModal({ entry, close }: ConfirmModalProps) {\n const { options, id } = entry;\n const [loading, setLoading] = useState(false);\n\n const handleConfirm = async (): Promise<void> => {\n try {\n setLoading(true);\n await options.onConfirm?.();\n } finally {\n setLoading(false);\n close(id);\n }\n };\n\n const handleCancel = (): void => {\n options.onCancel?.();\n close(id);\n };\n\n return (\n <ConfirmDialog\n open\n title={options.title ?? \"\"}\n description={options.message}\n confirmLabel={options.confirmLabel}\n cancelLabel={options.cancelLabel}\n variant={options.danger ? \"danger\" : \"primary\"}\n loading={loading}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n />\n );\n}\n\n/**\n * Access the imperative modals API. Must be used within a {@link ModalsProvider}.\n *\n * @example\n * const modals = useModals();\n * modals.confirm({ message: \"Excluir item?\", danger: true, onConfirm: del });\n *\n * @throws Error when called outside a {@link ModalsProvider}.\n */\nexport function useModals(): ModalsApi {\n const api = useContext(ModalsContext);\n if (api === null) {\n throw new Error(\"useModals must be used within a <ModalsProvider>\");\n }\n return api;\n}\n"],"mappings":";;;;;;AA0EA,IAAME,IAAgBC,EAAgC,IAAI;AAgB1D,SAAgBC,EAAe,EAAE,eAAiC;CAC9D,IAAM,CAACC,GAAOC,KAAYC,EAAuB,CAAC,CAAC,GAC7CC,IAAUC,EAAO,CAAC,GAElBC,IAASC,SACX,EAAQ,WAAW,GACZ,SAASH,EAAQ,YACzB,CAAC,CAAC,GAECI,IAAQD,GAAa,MAAqB;EAC5C,GAAU,MAAYE,EAAQ,QAAQ,MAAUC,EAAM,OAAOC,CAAE,CAAC;CACpE,GAAG,CAAC,CAAC,GAECC,IAAWL,QAAwB;EACrC,EAAS,CAAC,CAAC;CACf,GAAG,CAAC,CAAC,GAECM,IAAON,GACR,MAAsC;EACnC,IAAMI,IAAKL,EAAO;EAElB,OADAJ,GAAU,MAAY,CAAC,GAAGO,GAAS;GAAE,MAAM;GAAW;GAAI;EAAQ,CAAC,CAAC,GAC7DE;CACX,GACA,CAACL,CAAM,CACX,GAEMQ,IAAUP,GACX,MAAyC;EACtC,IAAMI,IAAKL,EAAO;EAElB,OADAJ,GAAU,MAAY,CAAC,GAAGO,GAAS;GAAE,MAAM;GAAW;GAAI;EAAQ,CAAC,CAAC,GAC7DE;CACX,GACA,CAACL,CAAM,CACX,GAEMS,IAAMC,SACD;EAAE;EAAM;EAAS;EAAO;CAAS,IACxC;EAACH;EAAMC;EAASN;EAAOI;CAAQ,CACnC;CAEA,OACI,kBAACd,EAAc,UAAf;EAAwB,OAAOiB;EAA/B,UAAA,CACKE,GACD,kBAAC,OAAD;GAAK,WAAWrB,EAAO;GAClB,UAAAK,EAAM,KAAK,MACRS,EAAM,SAAS,YACX,kBAACQ,GAAD;IAAoC;IAAc;GAAQ,GAAvCR,EAAM,EAAiC,IAE1D,kBAACS,GAAD;IAAoC;IAAc;GAAQ,GAAvCT,EAAM,EAAiC,CAElE;EACC,CAAA,CACe;;AAEhC;AAOA,SAASQ,EAAa,EAAE,UAAO,YAA4B;CACvD,IAAM,EAAE,YAAS,UAAOR;CAKxB,OACI,kBAACU,GAAD;EACI,MAAA;EACA,eAPwB;GAE5B,AADAC,EAAQ,UAAU,GAClBb,EAAMG,CAAE;EACZ;EAKQ,OAAOU,EAAQ;EACf,MAAMA,EAAQ;EACd,iBAAiBA,EAAQ;EACzB,YAAYA,EAAQ;EACpB,iBAAiBA,EAAQ;EAExB,UAAAA,EAAQ;CACN,CAAA;AAEf;AAOA,SAASF,EAAa,EAAE,UAAO,YAA4B;CACvD,IAAM,EAAE,YAAS,UAAOT,GAClB,CAACY,GAASC,KAAcpB,EAAS,EAAK;CAiB5C,OACI,kBAACqB,GAAD;EACI,MAAA;EACA,OAAOH,EAAQ,SAAS;EACxB,aAAaA,EAAQ;EACrB,cAAcA,EAAQ;EACtB,aAAaA,EAAQ;EACrB,SAASA,EAAQ,SAAS,WAAW;EAC5B;EACT,WAAW,YAxB8B;GAC7C,IAAI;IAEA,AADAE,EAAW,EAAI,GACf,MAAMF,EAAQ,YAAY;GAC9B,UAAU;IAEN,AADAE,EAAW,EAAK,GAChBf,EAAMG,CAAE;GACZ;EACJ;EAiBQ,gBAfyB;GAE7B,AADAU,EAAQ,WAAW,GACnBb,EAAMG,CAAE;EACZ;CAaK,CAAA;AAET;AAWA,SAAgBc,IAAuB;CACnC,IAAMV,IAAMW,EAAW5B,CAAa;CACpC,IAAIiB,MAAQ,MACR,MAAU,MAAM,kDAAkD;CAEtE,OAAOA;AACX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalsManager.module.cjs","names":[],"sources":["../../../src/components/ModalsManager/ModalsManager.module.css"],"sourcesContent":[".stack {\n display: contents;\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"ModalsManager.module.cjs","names":["stack","ModalsManager_module_default"],"sources":["../../../src/components/ModalsManager/ModalsManager.module.css"],"sourcesContent":[".stack {\n display: contents;\n}\n"],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalsManager.module.js","names":[],"sources":["../../../src/components/ModalsManager/ModalsManager.module.css"],"sourcesContent":[".stack {\n display: contents;\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"ModalsManager.module.js","names":["stack","ModalsManager_module_default"],"sources":["../../../src/components/ModalsManager/ModalsManager.module.css"],"sourcesContent":[".stack {\n display: contents;\n}\n"],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Money.cjs","names":[],"sources":["../../../src/components/Money/Money.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport { numberFormat } from \"@/utils/intl-cache\";\n\nexport interface MoneyProps extends HTMLAttributes<HTMLSpanElement> {\n /** Amount in the smallest currency unit (e.g. cents). */\n cents: number;\n /** ISO 4217 currency code. Defaults to \"BRL\". */\n currency?: string;\n /** BCP 47 locale used for formatting. Defaults to \"pt-BR\". */\n locale?: string;\n}\n\n/**\n * Render a monetary amount given in cents as a localized currency string\n * inside a `<span>`.\n *\n * The integer cents are divided by 100 and formatted with `Intl.NumberFormat`.\n *\n * @example\n * <Money cents={1990} /> // \"R$ 19,90\"\n * <Money cents={500} currency=\"USD\" locale=\"en-US\" /> // \"$5.00\"\n */\nexport function Money({ cents, currency = \"BRL\", locale = \"pt-BR\", ...props }: MoneyProps) {\n const formatted = numberFormat(locale, { style: \"currency\", currency }).format(cents / 100);\n\n return <span {...props}>{formatted}</span>;\n}\n"],"mappings":"iFAsBA,
|
|
1
|
+
{"version":3,"file":"Money.cjs","names":["numberFormat","require_intl_cache","react_jsx_runtime","Money","props","formatted","locale","cents"],"sources":["../../../src/components/Money/Money.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport { numberFormat } from \"@/utils/intl-cache\";\n\nexport interface MoneyProps extends HTMLAttributes<HTMLSpanElement> {\n /** Amount in the smallest currency unit (e.g. cents). */\n cents: number;\n /** ISO 4217 currency code. Defaults to \"BRL\". */\n currency?: string;\n /** BCP 47 locale used for formatting. Defaults to \"pt-BR\". */\n locale?: string;\n}\n\n/**\n * Render a monetary amount given in cents as a localized currency string\n * inside a `<span>`.\n *\n * The integer cents are divided by 100 and formatted with `Intl.NumberFormat`.\n *\n * @example\n * <Money cents={1990} /> // \"R$ 19,90\"\n * <Money cents={500} currency=\"USD\" locale=\"en-US\" /> // \"$5.00\"\n */\nexport function Money({ cents, currency = \"BRL\", locale = \"pt-BR\", ...props }: MoneyProps) {\n const formatted = numberFormat(locale, { style: \"currency\", currency }).format(cents / 100);\n\n return <span {...props}>{formatted}</span>;\n}\n"],"mappings":"A,iFAsBA,SAAgBG,EAAM,CAAE,QAAO,WAAW,MAAO,SAAS,QAAS,GAAGC,GAAqB,CACvF,IAAMC,EAAYL,EAAAA,aAAaM,EAAQ,CAAE,MAAO,WAAY,UAAS,CAAC,CAAC,CAAC,OAAOC,EAAQ,GAAG,EAE1F,OAAO,EAAAL,EAAA,IAAA,CAAC,OAAD,CAAM,GAAIE,EAAQ,SAAAC,CAAgB,CAAA,CAC7C,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Money.js","names":[],"sources":["../../../src/components/Money/Money.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport { numberFormat } from \"@/utils/intl-cache\";\n\nexport interface MoneyProps extends HTMLAttributes<HTMLSpanElement> {\n /** Amount in the smallest currency unit (e.g. cents). */\n cents: number;\n /** ISO 4217 currency code. Defaults to \"BRL\". */\n currency?: string;\n /** BCP 47 locale used for formatting. Defaults to \"pt-BR\". */\n locale?: string;\n}\n\n/**\n * Render a monetary amount given in cents as a localized currency string\n * inside a `<span>`.\n *\n * The integer cents are divided by 100 and formatted with `Intl.NumberFormat`.\n *\n * @example\n * <Money cents={1990} /> // \"R$ 19,90\"\n * <Money cents={500} currency=\"USD\" locale=\"en-US\" /> // \"$5.00\"\n */\nexport function Money({ cents, currency = \"BRL\", locale = \"pt-BR\", ...props }: MoneyProps) {\n const formatted = numberFormat(locale, { style: \"currency\", currency }).format(cents / 100);\n\n return <span {...props}>{formatted}</span>;\n}\n"],"mappings":";;;AAsBA,
|
|
1
|
+
{"version":3,"file":"Money.js","names":["Money","props","formatted","numberFormat","locale","cents"],"sources":["../../../src/components/Money/Money.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport { numberFormat } from \"@/utils/intl-cache\";\n\nexport interface MoneyProps extends HTMLAttributes<HTMLSpanElement> {\n /** Amount in the smallest currency unit (e.g. cents). */\n cents: number;\n /** ISO 4217 currency code. Defaults to \"BRL\". */\n currency?: string;\n /** BCP 47 locale used for formatting. Defaults to \"pt-BR\". */\n locale?: string;\n}\n\n/**\n * Render a monetary amount given in cents as a localized currency string\n * inside a `<span>`.\n *\n * The integer cents are divided by 100 and formatted with `Intl.NumberFormat`.\n *\n * @example\n * <Money cents={1990} /> // \"R$ 19,90\"\n * <Money cents={500} currency=\"USD\" locale=\"en-US\" /> // \"$5.00\"\n */\nexport function Money({ cents, currency = \"BRL\", locale = \"pt-BR\", ...props }: MoneyProps) {\n const formatted = numberFormat(locale, { style: \"currency\", currency }).format(cents / 100);\n\n return <span {...props}>{formatted}</span>;\n}\n"],"mappings":";;;AAsBA,SAAgBA,EAAM,EAAE,UAAO,cAAW,OAAO,YAAS,SAAS,GAAGC,KAAqB;CACvF,IAAMC,IAAYC,EAAaC,GAAQ;EAAE,OAAO;EAAY;CAAS,CAAC,CAAC,CAAC,OAAOC,IAAQ,GAAG;CAE1F,OAAO,kBAAC,QAAD;EAAM,GAAIJ;EAAQ,UAAAC;CAAgB,CAAA;AAC7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelect.cjs","names":[],"sources":["../../../src/components/MultiSelect/MultiSelect.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — options/value/onChange\n * plus the shared field contract, the knobs that make it multi (maxItems, filter,\n * emptyMessage) and portal. The body is the listbox with chip removal, type-ahead and\n * the ARIA active-descendant wiring reading one active index.\n */\nimport { useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport { useListboxDismiss } from \"@/components/Combobox/use-listbox-dismiss\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./MultiSelect.module.css\";\n\nexport interface MultiSelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps {\n options: MultiSelectOption[];\n /** Currently selected values. */\n value: string[];\n onChange: (value: string[]) => void;\n label?: string;\n placeholder?: string;\n helperText?: string;\n error?: string;\n disabled?: boolean;\n /** Cap the number of selectable items. */\n maxItems?: number;\n /** Custom filter — return true to keep the option. Default: case-insensitive substring on label. */\n filter?: (option: MultiSelectOption, query: string) => boolean;\n /** Message shown when no option matches. */\n emptyMessage?: string;\n /**\n * Render the list in a portal, positioned under the field. Default `true`.\n *\n * In flow, an ancestor with `overflow` other than `visible` clips the list —\n * in the last row of a `DataTable` none of it was visible (measured in Chrome\n * at 1440 px). In a portal it escapes the clip, takes the field's width,\n * flips above the field when there is no room below, and follows it on\n * scroll, resize and when the field grows a line of chips.\n */\n portal?: boolean;\n className?: string;\n}\n\nfunction defaultFilter(option: MultiSelectOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\n/** Gap between field and list, in px — the in-flow CSS uses the same 4 px. */\nconst LIST_OFFSET = 4;\n\n/**\n * MultiSelect — a filterable dropdown that selects many options, shown as\n * removable chips inside the field. Selecting toggles a value; Backspace on an\n * empty query removes the last chip.\n *\n * Keyboard: ArrowUp/ArrowDown navigate — the active option is announced through\n * `aria-activedescendant`, focus stays on the input — Enter toggles the active\n * option, Esc closes, Backspace (empty input) pops the last chip, and\n * Tab/Shift+Tab leave the field closing the list.\n */\nexport function MultiSelect({\n options,\n value,\n onChange,\n label,\n placeholder = \"Selecione\",\n helperText,\n error,\n disabled,\n maxItems,\n filter = defaultFilter,\n emptyMessage = \"Nenhuma opção encontrada\",\n portal = true,\n className,\n}: MultiSelectProps) {\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(0);\n const [fieldNode, setFieldNode] = useState<HTMLDivElement | null>(null);\n const [listNode, setListNode] = useState<HTMLUListElement | null>(null);\n const floatingStyle = useAnchorPosition({\n anchor: fieldNode,\n floating: listNode,\n side: \"bottom\",\n align: \"start\",\n offset: LIST_OFFSET,\n enabled: portal && open,\n matchWidth: true,\n });\n\n const selectedSet = useMemo(() => new Set(value), [value]);\n const selectedOptions = useMemo(\n () =>\n value\n .map((v) => options.find((o) => o.value === v))\n .filter((o): o is MultiSelectOption => Boolean(o)),\n [value, options],\n );\n const filtered = useMemo(\n () => options.filter((o) => filter(o, query)),\n [options, filter, query],\n );\n\n const atMax = maxItems !== undefined && value.length >= maxItems;\n\n const toggle = useCallback(\n (option: MultiSelectOption): void => {\n if (option.disabled) return;\n if (selectedSet.has(option.value)) {\n onChange(value.filter((v) => v !== option.value));\n } else {\n if (atMax) return;\n onChange([...value, option.value]);\n }\n setQuery(\"\");\n inputRef.current?.focus();\n },\n [selectedSet, onChange, value, atMax],\n );\n\n const removeAt = useCallback(\n (optionValue: string): void => {\n onChange(value.filter((v) => v !== optionValue));\n },\n [onChange, value],\n );\n\n const close = useCallback((): void => {\n setOpen(false);\n setQuery(\"\");\n }, []);\n\n const { onInputBlur, onListMouseDown } = useListboxDismiss({\n open,\n rootRef,\n listNode,\n onDismiss: close,\n });\n const optionId = (index: number): string => `${id}-option-${index}`;\n const activeOption = open ? filtered[activeIndex] : undefined;\n\n /**\n * Open the list and keep focus on the input when the empty part of the field\n * is pressed.\n *\n * Only a press on the field itself counts: a press on a chip or on its remove\n * button has its own handler, and the input focuses itself.\n */\n const handleFieldMouseDown = (event: React.MouseEvent<HTMLDivElement>): void => {\n if (disabled || event.target !== event.currentTarget) return;\n event.preventDefault();\n inputRef.current?.focus();\n setOpen(true);\n };\n\n /**\n * Keyboard model of the input.\n *\n * `Escape` calls `preventDefault()` only while the list is open: that marks the\n * key as consumed, so an enclosing `Modal` or `Drawer` stays open and the next\n * `Escape` reaches it. With the list closed the key is left alone and dismisses\n * the enclosing layer, as the user expects.\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex((current) => Math.min(filtered.length - 1, current + 1));\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(0, current - 1));\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n const option = filtered[activeIndex];\n if (option) toggle(option);\n } else if (event.key === \"Escape\") {\n if (open) event.preventDefault();\n close();\n } else if (event.key === \"Backspace\" && query === \"\" && value.length > 0) {\n removeAt(value[value.length - 1]);\n }\n };\n\n const list = (\n <ul\n ref={setListNode}\n id={`${id}-listbox`}\n role=\"listbox\"\n aria-multiselectable\n className={cn(styles.menu, portal && styles.portalled)}\n style={floatingStyle}\n onMouseDown={onListMouseDown}\n >\n {filtered.length === 0 ? (\n <li className={styles.empty}>{emptyMessage}</li>\n ) : (\n filtered.map((option, index) => {\n const isSelected = selectedSet.has(option.value);\n return (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled || (!isSelected && atMax)}\n className={cn(\n styles.option,\n index === activeIndex && styles.active,\n isSelected && styles.selected,\n )}\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={() => toggle(option)}\n >\n <span className={styles.check} aria-hidden>\n {isSelected ? \"✓\" : \"\"}\n </span>\n {option.label}\n </li>\n );\n })\n )}\n </ul>\n );\n\n return (\n <div ref={rootRef} className={cn(styles.wrapper, error && styles.error, className)}>\n {label && (\n <label htmlFor={id} className={styles.label}>\n {label}\n </label>\n )}\n <div\n ref={setFieldNode}\n className={cn(styles.field, disabled && styles.disabled)}\n onMouseDown={handleFieldMouseDown}\n >\n {selectedOptions.map((option) => (\n <span key={option.value} className={styles.chip}>\n {option.label}\n <button\n type=\"button\"\n className={styles.chipRemove}\n aria-label={`Remover ${option.label}`}\n disabled={disabled}\n onMouseDown={(event) => {\n event.preventDefault();\n removeAt(option.value);\n }}\n >\n ×\n </button>\n </span>\n ))}\n <input\n id={id}\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={`${id}-listbox`}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeOption ? optionId(activeIndex) : undefined}\n className={styles.input}\n placeholder={value.length === 0 ? placeholder : \"\"}\n disabled={disabled}\n value={query}\n onFocus={() => setOpen(true)}\n onChange={(event) => {\n setQuery(event.target.value);\n setOpen(true);\n setActiveIndex(0);\n }}\n onKeyDown={handleKeyDown}\n onBlur={onInputBlur}\n />\n </div>\n {open && (portal ? <Portal>{list}</Portal> : list)}\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helper}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MultiSelect.cjs","names":["useId","useRef","useState","useAnchorPosition","useMemo","useCallback","useListboxDismiss","cn","styles","Portal","require_cn","require_Portal","require_anchor_position","require_use_listbox_dismiss","require_MultiSelect_module","react","react_jsx_runtime","defaultFilter","query","option","LIST_OFFSET","MultiSelect","id","rootRef","inputRef","open","setOpen","setQuery","activeIndex","setActiveIndex","fieldNode","setFieldNode","listNode","setListNode","floatingStyle","portal","selectedSet","value","selectedOptions","options","o","v","filtered","filter","atMax","maxItems","toggle","onChange","removeAt","optionValue","close","optionId","index","activeOption","handleFieldMouseDown","disabled","event","handleKeyDown","current","list","onListMouseDown","emptyMessage","isSelected","error","className","label","placeholder","onInputBlur","helperText"],"sources":["../../../src/components/MultiSelect/MultiSelect.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — options/value/onChange\n * plus the shared field contract, the knobs that make it multi (maxItems, filter,\n * emptyMessage) and portal. The body is the listbox with chip removal, type-ahead and\n * the ARIA active-descendant wiring reading one active index.\n */\nimport { useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport { useListboxDismiss } from \"@/components/Combobox/use-listbox-dismiss\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./MultiSelect.module.css\";\n\nexport interface MultiSelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps {\n options: MultiSelectOption[];\n /** Currently selected values. */\n value: string[];\n onChange: (value: string[]) => void;\n label?: string;\n placeholder?: string;\n helperText?: string;\n error?: string;\n disabled?: boolean;\n /** Cap the number of selectable items. */\n maxItems?: number;\n /** Custom filter — return true to keep the option. Default: case-insensitive substring on label. */\n filter?: (option: MultiSelectOption, query: string) => boolean;\n /** Message shown when no option matches. */\n emptyMessage?: string;\n /**\n * Render the list in a portal, positioned under the field. Default `true`.\n *\n * In flow, an ancestor with `overflow` other than `visible` clips the list —\n * in the last row of a `DataTable` none of it was visible (measured in Chrome\n * at 1440 px). In a portal it escapes the clip, takes the field's width,\n * flips above the field when there is no room below, and follows it on\n * scroll, resize and when the field grows a line of chips.\n */\n portal?: boolean;\n className?: string;\n}\n\nfunction defaultFilter(option: MultiSelectOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\n/** Gap between field and list, in px — the in-flow CSS uses the same 4 px. */\nconst LIST_OFFSET = 4;\n\n/**\n * MultiSelect — a filterable dropdown that selects many options, shown as\n * removable chips inside the field. Selecting toggles a value; Backspace on an\n * empty query removes the last chip.\n *\n * Keyboard: ArrowUp/ArrowDown navigate — the active option is announced through\n * `aria-activedescendant`, focus stays on the input — Enter toggles the active\n * option, Esc closes, Backspace (empty input) pops the last chip, and\n * Tab/Shift+Tab leave the field closing the list.\n */\nexport function MultiSelect({\n options,\n value,\n onChange,\n label,\n placeholder = \"Selecione\",\n helperText,\n error,\n disabled,\n maxItems,\n filter = defaultFilter,\n emptyMessage = \"Nenhuma opção encontrada\",\n portal = true,\n className,\n}: MultiSelectProps) {\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(0);\n const [fieldNode, setFieldNode] = useState<HTMLDivElement | null>(null);\n const [listNode, setListNode] = useState<HTMLUListElement | null>(null);\n const floatingStyle = useAnchorPosition({\n anchor: fieldNode,\n floating: listNode,\n side: \"bottom\",\n align: \"start\",\n offset: LIST_OFFSET,\n enabled: portal && open,\n matchWidth: true,\n });\n\n const selectedSet = useMemo(() => new Set(value), [value]);\n const selectedOptions = useMemo(\n () =>\n value\n .map((v) => options.find((o) => o.value === v))\n .filter((o): o is MultiSelectOption => Boolean(o)),\n [value, options],\n );\n const filtered = useMemo(\n () => options.filter((o) => filter(o, query)),\n [options, filter, query],\n );\n\n const atMax = maxItems !== undefined && value.length >= maxItems;\n\n const toggle = useCallback(\n (option: MultiSelectOption): void => {\n if (option.disabled) return;\n if (selectedSet.has(option.value)) {\n onChange(value.filter((v) => v !== option.value));\n } else {\n if (atMax) return;\n onChange([...value, option.value]);\n }\n setQuery(\"\");\n inputRef.current?.focus();\n },\n [selectedSet, onChange, value, atMax],\n );\n\n const removeAt = useCallback(\n (optionValue: string): void => {\n onChange(value.filter((v) => v !== optionValue));\n },\n [onChange, value],\n );\n\n const close = useCallback((): void => {\n setOpen(false);\n setQuery(\"\");\n }, []);\n\n const { onInputBlur, onListMouseDown } = useListboxDismiss({\n open,\n rootRef,\n listNode,\n onDismiss: close,\n });\n const optionId = (index: number): string => `${id}-option-${index}`;\n const activeOption = open ? filtered[activeIndex] : undefined;\n\n /**\n * Open the list and keep focus on the input when the empty part of the field\n * is pressed.\n *\n * Only a press on the field itself counts: a press on a chip or on its remove\n * button has its own handler, and the input focuses itself.\n */\n const handleFieldMouseDown = (event: React.MouseEvent<HTMLDivElement>): void => {\n if (disabled || event.target !== event.currentTarget) return;\n event.preventDefault();\n inputRef.current?.focus();\n setOpen(true);\n };\n\n /**\n * Keyboard model of the input.\n *\n * `Escape` calls `preventDefault()` only while the list is open: that marks the\n * key as consumed, so an enclosing `Modal` or `Drawer` stays open and the next\n * `Escape` reaches it. With the list closed the key is left alone and dismisses\n * the enclosing layer, as the user expects.\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex((current) => Math.min(filtered.length - 1, current + 1));\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(0, current - 1));\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n const option = filtered[activeIndex];\n if (option) toggle(option);\n } else if (event.key === \"Escape\") {\n if (open) event.preventDefault();\n close();\n } else if (event.key === \"Backspace\" && query === \"\" && value.length > 0) {\n removeAt(value[value.length - 1]);\n }\n };\n\n const list = (\n <ul\n ref={setListNode}\n id={`${id}-listbox`}\n role=\"listbox\"\n aria-multiselectable\n className={cn(styles.menu, portal && styles.portalled)}\n style={floatingStyle}\n onMouseDown={onListMouseDown}\n >\n {filtered.length === 0 ? (\n <li className={styles.empty}>{emptyMessage}</li>\n ) : (\n filtered.map((option, index) => {\n const isSelected = selectedSet.has(option.value);\n return (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled || (!isSelected && atMax)}\n className={cn(\n styles.option,\n index === activeIndex && styles.active,\n isSelected && styles.selected,\n )}\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={() => toggle(option)}\n >\n <span className={styles.check} aria-hidden>\n {isSelected ? \"✓\" : \"\"}\n </span>\n {option.label}\n </li>\n );\n })\n )}\n </ul>\n );\n\n return (\n <div ref={rootRef} className={cn(styles.wrapper, error && styles.error, className)}>\n {label && (\n <label htmlFor={id} className={styles.label}>\n {label}\n </label>\n )}\n <div\n ref={setFieldNode}\n className={cn(styles.field, disabled && styles.disabled)}\n onMouseDown={handleFieldMouseDown}\n >\n {selectedOptions.map((option) => (\n <span key={option.value} className={styles.chip}>\n {option.label}\n <button\n type=\"button\"\n className={styles.chipRemove}\n aria-label={`Remover ${option.label}`}\n disabled={disabled}\n onMouseDown={(event) => {\n event.preventDefault();\n removeAt(option.value);\n }}\n >\n ×\n </button>\n </span>\n ))}\n <input\n id={id}\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={`${id}-listbox`}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeOption ? optionId(activeIndex) : undefined}\n className={styles.input}\n placeholder={value.length === 0 ? placeholder : \"\"}\n disabled={disabled}\n value={query}\n onFocus={() => setOpen(true)}\n onChange={(event) => {\n setQuery(event.target.value);\n setOpen(true);\n setActiveIndex(0);\n }}\n onKeyDown={handleKeyDown}\n onBlur={onInputBlur}\n />\n </div>\n {open && (portal ? <Portal>{list}</Portal> : list)}\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helper}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelect.js","names":[],"sources":["../../../src/components/MultiSelect/MultiSelect.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — options/value/onChange\n * plus the shared field contract, the knobs that make it multi (maxItems, filter,\n * emptyMessage) and portal. The body is the listbox with chip removal, type-ahead and\n * the ARIA active-descendant wiring reading one active index.\n */\nimport { useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport { useListboxDismiss } from \"@/components/Combobox/use-listbox-dismiss\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./MultiSelect.module.css\";\n\nexport interface MultiSelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps {\n options: MultiSelectOption[];\n /** Currently selected values. */\n value: string[];\n onChange: (value: string[]) => void;\n label?: string;\n placeholder?: string;\n helperText?: string;\n error?: string;\n disabled?: boolean;\n /** Cap the number of selectable items. */\n maxItems?: number;\n /** Custom filter — return true to keep the option. Default: case-insensitive substring on label. */\n filter?: (option: MultiSelectOption, query: string) => boolean;\n /** Message shown when no option matches. */\n emptyMessage?: string;\n /**\n * Render the list in a portal, positioned under the field. Default `true`.\n *\n * In flow, an ancestor with `overflow` other than `visible` clips the list —\n * in the last row of a `DataTable` none of it was visible (measured in Chrome\n * at 1440 px). In a portal it escapes the clip, takes the field's width,\n * flips above the field when there is no room below, and follows it on\n * scroll, resize and when the field grows a line of chips.\n */\n portal?: boolean;\n className?: string;\n}\n\nfunction defaultFilter(option: MultiSelectOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\n/** Gap between field and list, in px — the in-flow CSS uses the same 4 px. */\nconst LIST_OFFSET = 4;\n\n/**\n * MultiSelect — a filterable dropdown that selects many options, shown as\n * removable chips inside the field. Selecting toggles a value; Backspace on an\n * empty query removes the last chip.\n *\n * Keyboard: ArrowUp/ArrowDown navigate — the active option is announced through\n * `aria-activedescendant`, focus stays on the input — Enter toggles the active\n * option, Esc closes, Backspace (empty input) pops the last chip, and\n * Tab/Shift+Tab leave the field closing the list.\n */\nexport function MultiSelect({\n options,\n value,\n onChange,\n label,\n placeholder = \"Selecione\",\n helperText,\n error,\n disabled,\n maxItems,\n filter = defaultFilter,\n emptyMessage = \"Nenhuma opção encontrada\",\n portal = true,\n className,\n}: MultiSelectProps) {\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(0);\n const [fieldNode, setFieldNode] = useState<HTMLDivElement | null>(null);\n const [listNode, setListNode] = useState<HTMLUListElement | null>(null);\n const floatingStyle = useAnchorPosition({\n anchor: fieldNode,\n floating: listNode,\n side: \"bottom\",\n align: \"start\",\n offset: LIST_OFFSET,\n enabled: portal && open,\n matchWidth: true,\n });\n\n const selectedSet = useMemo(() => new Set(value), [value]);\n const selectedOptions = useMemo(\n () =>\n value\n .map((v) => options.find((o) => o.value === v))\n .filter((o): o is MultiSelectOption => Boolean(o)),\n [value, options],\n );\n const filtered = useMemo(\n () => options.filter((o) => filter(o, query)),\n [options, filter, query],\n );\n\n const atMax = maxItems !== undefined && value.length >= maxItems;\n\n const toggle = useCallback(\n (option: MultiSelectOption): void => {\n if (option.disabled) return;\n if (selectedSet.has(option.value)) {\n onChange(value.filter((v) => v !== option.value));\n } else {\n if (atMax) return;\n onChange([...value, option.value]);\n }\n setQuery(\"\");\n inputRef.current?.focus();\n },\n [selectedSet, onChange, value, atMax],\n );\n\n const removeAt = useCallback(\n (optionValue: string): void => {\n onChange(value.filter((v) => v !== optionValue));\n },\n [onChange, value],\n );\n\n const close = useCallback((): void => {\n setOpen(false);\n setQuery(\"\");\n }, []);\n\n const { onInputBlur, onListMouseDown } = useListboxDismiss({\n open,\n rootRef,\n listNode,\n onDismiss: close,\n });\n const optionId = (index: number): string => `${id}-option-${index}`;\n const activeOption = open ? filtered[activeIndex] : undefined;\n\n /**\n * Open the list and keep focus on the input when the empty part of the field\n * is pressed.\n *\n * Only a press on the field itself counts: a press on a chip or on its remove\n * button has its own handler, and the input focuses itself.\n */\n const handleFieldMouseDown = (event: React.MouseEvent<HTMLDivElement>): void => {\n if (disabled || event.target !== event.currentTarget) return;\n event.preventDefault();\n inputRef.current?.focus();\n setOpen(true);\n };\n\n /**\n * Keyboard model of the input.\n *\n * `Escape` calls `preventDefault()` only while the list is open: that marks the\n * key as consumed, so an enclosing `Modal` or `Drawer` stays open and the next\n * `Escape` reaches it. With the list closed the key is left alone and dismisses\n * the enclosing layer, as the user expects.\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex((current) => Math.min(filtered.length - 1, current + 1));\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(0, current - 1));\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n const option = filtered[activeIndex];\n if (option) toggle(option);\n } else if (event.key === \"Escape\") {\n if (open) event.preventDefault();\n close();\n } else if (event.key === \"Backspace\" && query === \"\" && value.length > 0) {\n removeAt(value[value.length - 1]);\n }\n };\n\n const list = (\n <ul\n ref={setListNode}\n id={`${id}-listbox`}\n role=\"listbox\"\n aria-multiselectable\n className={cn(styles.menu, portal && styles.portalled)}\n style={floatingStyle}\n onMouseDown={onListMouseDown}\n >\n {filtered.length === 0 ? (\n <li className={styles.empty}>{emptyMessage}</li>\n ) : (\n filtered.map((option, index) => {\n const isSelected = selectedSet.has(option.value);\n return (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled || (!isSelected && atMax)}\n className={cn(\n styles.option,\n index === activeIndex && styles.active,\n isSelected && styles.selected,\n )}\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={() => toggle(option)}\n >\n <span className={styles.check} aria-hidden>\n {isSelected ? \"✓\" : \"\"}\n </span>\n {option.label}\n </li>\n );\n })\n )}\n </ul>\n );\n\n return (\n <div ref={rootRef} className={cn(styles.wrapper, error && styles.error, className)}>\n {label && (\n <label htmlFor={id} className={styles.label}>\n {label}\n </label>\n )}\n <div\n ref={setFieldNode}\n className={cn(styles.field, disabled && styles.disabled)}\n onMouseDown={handleFieldMouseDown}\n >\n {selectedOptions.map((option) => (\n <span key={option.value} className={styles.chip}>\n {option.label}\n <button\n type=\"button\"\n className={styles.chipRemove}\n aria-label={`Remover ${option.label}`}\n disabled={disabled}\n onMouseDown={(event) => {\n event.preventDefault();\n removeAt(option.value);\n }}\n >\n ×\n </button>\n </span>\n ))}\n <input\n id={id}\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={`${id}-listbox`}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeOption ? optionId(activeIndex) : undefined}\n className={styles.input}\n placeholder={value.length === 0 ? placeholder : \"\"}\n disabled={disabled}\n value={query}\n onFocus={() => setOpen(true)}\n onChange={(event) => {\n setQuery(event.target.value);\n setOpen(true);\n setActiveIndex(0);\n }}\n onKeyDown={handleKeyDown}\n onBlur={onInputBlur}\n />\n </div>\n {open && (portal ? <Portal>{list}</Portal> : list)}\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helper}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MultiSelect.js","names":["styles","MultiSelect_module_default","defaultFilter","query","option","LIST_OFFSET","MultiSelect","id","useId","rootRef","useRef","inputRef","open","setOpen","useState","setQuery","activeIndex","setActiveIndex","fieldNode","setFieldNode","listNode","setListNode","floatingStyle","useAnchorPosition","portal","selectedSet","useMemo","value","selectedOptions","options","o","v","filtered","filter","atMax","maxItems","toggle","useCallback","onChange","removeAt","optionValue","close","useListboxDismiss","optionId","index","activeOption","handleFieldMouseDown","disabled","event","handleKeyDown","current","list","cn","onListMouseDown","emptyMessage","isSelected","error","className","label","placeholder","onInputBlur","Portal","helperText"],"sources":["../../../src/components/MultiSelect/MultiSelect.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — options/value/onChange\n * plus the shared field contract, the knobs that make it multi (maxItems, filter,\n * emptyMessage) and portal. The body is the listbox with chip removal, type-ahead and\n * the ARIA active-descendant wiring reading one active index.\n */\nimport { useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport { useListboxDismiss } from \"@/components/Combobox/use-listbox-dismiss\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./MultiSelect.module.css\";\n\nexport interface MultiSelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps {\n options: MultiSelectOption[];\n /** Currently selected values. */\n value: string[];\n onChange: (value: string[]) => void;\n label?: string;\n placeholder?: string;\n helperText?: string;\n error?: string;\n disabled?: boolean;\n /** Cap the number of selectable items. */\n maxItems?: number;\n /** Custom filter — return true to keep the option. Default: case-insensitive substring on label. */\n filter?: (option: MultiSelectOption, query: string) => boolean;\n /** Message shown when no option matches. */\n emptyMessage?: string;\n /**\n * Render the list in a portal, positioned under the field. Default `true`.\n *\n * In flow, an ancestor with `overflow` other than `visible` clips the list —\n * in the last row of a `DataTable` none of it was visible (measured in Chrome\n * at 1440 px). In a portal it escapes the clip, takes the field's width,\n * flips above the field when there is no room below, and follows it on\n * scroll, resize and when the field grows a line of chips.\n */\n portal?: boolean;\n className?: string;\n}\n\nfunction defaultFilter(option: MultiSelectOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\n/** Gap between field and list, in px — the in-flow CSS uses the same 4 px. */\nconst LIST_OFFSET = 4;\n\n/**\n * MultiSelect — a filterable dropdown that selects many options, shown as\n * removable chips inside the field. Selecting toggles a value; Backspace on an\n * empty query removes the last chip.\n *\n * Keyboard: ArrowUp/ArrowDown navigate — the active option is announced through\n * `aria-activedescendant`, focus stays on the input — Enter toggles the active\n * option, Esc closes, Backspace (empty input) pops the last chip, and\n * Tab/Shift+Tab leave the field closing the list.\n */\nexport function MultiSelect({\n options,\n value,\n onChange,\n label,\n placeholder = \"Selecione\",\n helperText,\n error,\n disabled,\n maxItems,\n filter = defaultFilter,\n emptyMessage = \"Nenhuma opção encontrada\",\n portal = true,\n className,\n}: MultiSelectProps) {\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(0);\n const [fieldNode, setFieldNode] = useState<HTMLDivElement | null>(null);\n const [listNode, setListNode] = useState<HTMLUListElement | null>(null);\n const floatingStyle = useAnchorPosition({\n anchor: fieldNode,\n floating: listNode,\n side: \"bottom\",\n align: \"start\",\n offset: LIST_OFFSET,\n enabled: portal && open,\n matchWidth: true,\n });\n\n const selectedSet = useMemo(() => new Set(value), [value]);\n const selectedOptions = useMemo(\n () =>\n value\n .map((v) => options.find((o) => o.value === v))\n .filter((o): o is MultiSelectOption => Boolean(o)),\n [value, options],\n );\n const filtered = useMemo(\n () => options.filter((o) => filter(o, query)),\n [options, filter, query],\n );\n\n const atMax = maxItems !== undefined && value.length >= maxItems;\n\n const toggle = useCallback(\n (option: MultiSelectOption): void => {\n if (option.disabled) return;\n if (selectedSet.has(option.value)) {\n onChange(value.filter((v) => v !== option.value));\n } else {\n if (atMax) return;\n onChange([...value, option.value]);\n }\n setQuery(\"\");\n inputRef.current?.focus();\n },\n [selectedSet, onChange, value, atMax],\n );\n\n const removeAt = useCallback(\n (optionValue: string): void => {\n onChange(value.filter((v) => v !== optionValue));\n },\n [onChange, value],\n );\n\n const close = useCallback((): void => {\n setOpen(false);\n setQuery(\"\");\n }, []);\n\n const { onInputBlur, onListMouseDown } = useListboxDismiss({\n open,\n rootRef,\n listNode,\n onDismiss: close,\n });\n const optionId = (index: number): string => `${id}-option-${index}`;\n const activeOption = open ? filtered[activeIndex] : undefined;\n\n /**\n * Open the list and keep focus on the input when the empty part of the field\n * is pressed.\n *\n * Only a press on the field itself counts: a press on a chip or on its remove\n * button has its own handler, and the input focuses itself.\n */\n const handleFieldMouseDown = (event: React.MouseEvent<HTMLDivElement>): void => {\n if (disabled || event.target !== event.currentTarget) return;\n event.preventDefault();\n inputRef.current?.focus();\n setOpen(true);\n };\n\n /**\n * Keyboard model of the input.\n *\n * `Escape` calls `preventDefault()` only while the list is open: that marks the\n * key as consumed, so an enclosing `Modal` or `Drawer` stays open and the next\n * `Escape` reaches it. With the list closed the key is left alone and dismisses\n * the enclosing layer, as the user expects.\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex((current) => Math.min(filtered.length - 1, current + 1));\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(0, current - 1));\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n const option = filtered[activeIndex];\n if (option) toggle(option);\n } else if (event.key === \"Escape\") {\n if (open) event.preventDefault();\n close();\n } else if (event.key === \"Backspace\" && query === \"\" && value.length > 0) {\n removeAt(value[value.length - 1]);\n }\n };\n\n const list = (\n <ul\n ref={setListNode}\n id={`${id}-listbox`}\n role=\"listbox\"\n aria-multiselectable\n className={cn(styles.menu, portal && styles.portalled)}\n style={floatingStyle}\n onMouseDown={onListMouseDown}\n >\n {filtered.length === 0 ? (\n <li className={styles.empty}>{emptyMessage}</li>\n ) : (\n filtered.map((option, index) => {\n const isSelected = selectedSet.has(option.value);\n return (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled || (!isSelected && atMax)}\n className={cn(\n styles.option,\n index === activeIndex && styles.active,\n isSelected && styles.selected,\n )}\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={() => toggle(option)}\n >\n <span className={styles.check} aria-hidden>\n {isSelected ? \"✓\" : \"\"}\n </span>\n {option.label}\n </li>\n );\n })\n )}\n </ul>\n );\n\n return (\n <div ref={rootRef} className={cn(styles.wrapper, error && styles.error, className)}>\n {label && (\n <label htmlFor={id} className={styles.label}>\n {label}\n </label>\n )}\n <div\n ref={setFieldNode}\n className={cn(styles.field, disabled && styles.disabled)}\n onMouseDown={handleFieldMouseDown}\n >\n {selectedOptions.map((option) => (\n <span key={option.value} className={styles.chip}>\n {option.label}\n <button\n type=\"button\"\n className={styles.chipRemove}\n aria-label={`Remover ${option.label}`}\n disabled={disabled}\n onMouseDown={(event) => {\n event.preventDefault();\n removeAt(option.value);\n }}\n >\n ×\n </button>\n </span>\n ))}\n <input\n id={id}\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={`${id}-listbox`}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeOption ? optionId(activeIndex) : undefined}\n className={styles.input}\n placeholder={value.length === 0 ? placeholder : \"\"}\n disabled={disabled}\n value={query}\n onFocus={() => setOpen(true)}\n onChange={(event) => {\n setQuery(event.target.value);\n setOpen(true);\n setActiveIndex(0);\n }}\n onKeyDown={handleKeyDown}\n onBlur={onInputBlur}\n />\n </div>\n {open && (portal ? <Portal>{list}</Portal> : list)}\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helper}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelect.module.cjs","names":[],"sources":["../../../src/components/MultiSelect/MultiSelect.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n width: 100%;\n font-family: var(--tempest-font-sans);\n position: relative;\n}\n\n.label {\n font-size: var(--tempest-text-sm);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.field {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--tempest-space-1);\n min-height: var(--tempest-control-height-md);\n padding: 4px var(--tempest-space-2);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-control-radius);\n background-color: var(--tempest-bg);\n box-shadow: var(--tempest-shadow-xs);\n cursor: text;\n transition: var(--tempest-transition-color), var(--tempest-transition-shadow);\n}\n\n.field:focus-within {\n border-color: var(--tempest-primary);\n box-shadow: 0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color);\n}\n\n.field.disabled {\n background-color: var(--tempest-surface);\n cursor: not-allowed;\n}\n\n.chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 4px 2px 8px;\n border-radius: var(--tempest-radius-full);\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-medium);\n line-height: 1.4;\n}\n\n.chipRemove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border: none;\n border-radius: 50%;\n background: transparent;\n color: inherit;\n font-size: 14px;\n line-height: 1;\n cursor: pointer;\n}\n\n.chipRemove:hover {\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n}\n\n.input {\n flex: 1;\n min-width: 80px;\n border: none;\n outline: none;\n background: transparent;\n color: var(--tempest-text);\n font-family: inherit;\n font-size: var(--tempest-control-font-md);\n height: 24px;\n}\n\n.input::placeholder {\n color: var(--tempest-text-subtle);\n}\n\n.menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n z-index: var(--tempest-z-dropdown);\n background-color: var(--tempest-bg);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n box-shadow: var(--tempest-shadow-lg);\n max-height: 280px;\n overflow-y: auto;\n padding: var(--tempest-space-1);\n list-style: none;\n margin: 0;\n}\n\n.option {\n display: flex;\n align-items: center;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-2) var(--tempest-space-3);\n border-radius: var(--tempest-radius-sm);\n cursor: pointer;\n color: var(--tempest-text);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-snug);\n}\n\n.check {\n display: inline-flex;\n width: 16px;\n justify-content: center;\n color: var(--tempest-primary);\n font-weight: var(--tempest-weight-bold);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .option:hover {\n background-color: var(--tempest-surface);\n }\n}\n\n.option.active {\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n}\n\n.option.selected {\n font-weight: var(--tempest-weight-semibold);\n}\n\n.empty {\n padding: var(--tempest-space-3);\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n text-align: center;\n}\n\n.helper {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n}\n\n.errorText {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-danger);\n}\n\n.wrapper.error .field {\n border-color: var(--tempest-danger);\n}\n\n.portalled {\n font-family: var(--tempest-font-sans);\n right: auto;\n z-index: var(--tempest-z-popover);\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"MultiSelect.module.cjs","names":["wrapper","label","field","disabled","chip","chipRemove","input","menu","option","check","active","selected","empty","helper","errorText","error","portalled","MultiSelect_module_default"],"sources":["../../../src/components/MultiSelect/MultiSelect.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n width: 100%;\n font-family: var(--tempest-font-sans);\n position: relative;\n}\n\n.label {\n font-size: var(--tempest-text-sm);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.field {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--tempest-space-1);\n min-height: var(--tempest-control-height-md);\n padding: 4px var(--tempest-space-2);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-control-radius);\n background-color: var(--tempest-bg);\n box-shadow: var(--tempest-shadow-xs);\n cursor: text;\n transition: var(--tempest-transition-color), var(--tempest-transition-shadow);\n}\n\n.field:focus-within {\n border-color: var(--tempest-primary);\n box-shadow: 0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color);\n}\n\n.field.disabled {\n background-color: var(--tempest-surface);\n cursor: not-allowed;\n}\n\n.chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 4px 2px 8px;\n border-radius: var(--tempest-radius-full);\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-medium);\n line-height: 1.4;\n}\n\n.chipRemove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border: none;\n border-radius: 50%;\n background: transparent;\n color: inherit;\n font-size: 14px;\n line-height: 1;\n cursor: pointer;\n}\n\n.chipRemove:hover {\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n}\n\n.input {\n flex: 1;\n min-width: 80px;\n border: none;\n outline: none;\n background: transparent;\n color: var(--tempest-text);\n font-family: inherit;\n font-size: var(--tempest-control-font-md);\n height: 24px;\n}\n\n.input::placeholder {\n color: var(--tempest-text-subtle);\n}\n\n.menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n z-index: var(--tempest-z-dropdown);\n background-color: var(--tempest-bg);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n box-shadow: var(--tempest-shadow-lg);\n max-height: 280px;\n overflow-y: auto;\n padding: var(--tempest-space-1);\n list-style: none;\n margin: 0;\n}\n\n.option {\n display: flex;\n align-items: center;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-2) var(--tempest-space-3);\n border-radius: var(--tempest-radius-sm);\n cursor: pointer;\n color: var(--tempest-text);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-snug);\n}\n\n.check {\n display: inline-flex;\n width: 16px;\n justify-content: center;\n color: var(--tempest-primary);\n font-weight: var(--tempest-weight-bold);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .option:hover {\n background-color: var(--tempest-surface);\n }\n}\n\n.option.active {\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n}\n\n.option.selected {\n font-weight: var(--tempest-weight-semibold);\n}\n\n.empty {\n padding: var(--tempest-space-3);\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n text-align: center;\n}\n\n.helper {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n}\n\n.errorText {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-danger);\n}\n\n.wrapper.error .field {\n border-color: var(--tempest-danger);\n}\n\n.portalled {\n font-family: var(--tempest-font-sans);\n right: auto;\n z-index: var(--tempest-z-popover);\n}\n"],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelect.module.js","names":[],"sources":["../../../src/components/MultiSelect/MultiSelect.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n width: 100%;\n font-family: var(--tempest-font-sans);\n position: relative;\n}\n\n.label {\n font-size: var(--tempest-text-sm);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.field {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--tempest-space-1);\n min-height: var(--tempest-control-height-md);\n padding: 4px var(--tempest-space-2);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-control-radius);\n background-color: var(--tempest-bg);\n box-shadow: var(--tempest-shadow-xs);\n cursor: text;\n transition: var(--tempest-transition-color), var(--tempest-transition-shadow);\n}\n\n.field:focus-within {\n border-color: var(--tempest-primary);\n box-shadow: 0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color);\n}\n\n.field.disabled {\n background-color: var(--tempest-surface);\n cursor: not-allowed;\n}\n\n.chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 4px 2px 8px;\n border-radius: var(--tempest-radius-full);\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-medium);\n line-height: 1.4;\n}\n\n.chipRemove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border: none;\n border-radius: 50%;\n background: transparent;\n color: inherit;\n font-size: 14px;\n line-height: 1;\n cursor: pointer;\n}\n\n.chipRemove:hover {\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n}\n\n.input {\n flex: 1;\n min-width: 80px;\n border: none;\n outline: none;\n background: transparent;\n color: var(--tempest-text);\n font-family: inherit;\n font-size: var(--tempest-control-font-md);\n height: 24px;\n}\n\n.input::placeholder {\n color: var(--tempest-text-subtle);\n}\n\n.menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n z-index: var(--tempest-z-dropdown);\n background-color: var(--tempest-bg);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n box-shadow: var(--tempest-shadow-lg);\n max-height: 280px;\n overflow-y: auto;\n padding: var(--tempest-space-1);\n list-style: none;\n margin: 0;\n}\n\n.option {\n display: flex;\n align-items: center;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-2) var(--tempest-space-3);\n border-radius: var(--tempest-radius-sm);\n cursor: pointer;\n color: var(--tempest-text);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-snug);\n}\n\n.check {\n display: inline-flex;\n width: 16px;\n justify-content: center;\n color: var(--tempest-primary);\n font-weight: var(--tempest-weight-bold);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .option:hover {\n background-color: var(--tempest-surface);\n }\n}\n\n.option.active {\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n}\n\n.option.selected {\n font-weight: var(--tempest-weight-semibold);\n}\n\n.empty {\n padding: var(--tempest-space-3);\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n text-align: center;\n}\n\n.helper {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n}\n\n.errorText {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-danger);\n}\n\n.wrapper.error .field {\n border-color: var(--tempest-danger);\n}\n\n.portalled {\n font-family: var(--tempest-font-sans);\n right: auto;\n z-index: var(--tempest-z-popover);\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"MultiSelect.module.js","names":["wrapper","label","field","disabled","chip","chipRemove","input","menu","option","check","active","selected","empty","helper","errorText","error","portalled","MultiSelect_module_default"],"sources":["../../../src/components/MultiSelect/MultiSelect.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n width: 100%;\n font-family: var(--tempest-font-sans);\n position: relative;\n}\n\n.label {\n font-size: var(--tempest-text-sm);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.field {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--tempest-space-1);\n min-height: var(--tempest-control-height-md);\n padding: 4px var(--tempest-space-2);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-control-radius);\n background-color: var(--tempest-bg);\n box-shadow: var(--tempest-shadow-xs);\n cursor: text;\n transition: var(--tempest-transition-color), var(--tempest-transition-shadow);\n}\n\n.field:focus-within {\n border-color: var(--tempest-primary);\n box-shadow: 0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color);\n}\n\n.field.disabled {\n background-color: var(--tempest-surface);\n cursor: not-allowed;\n}\n\n.chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 4px 2px 8px;\n border-radius: var(--tempest-radius-full);\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-medium);\n line-height: 1.4;\n}\n\n.chipRemove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border: none;\n border-radius: 50%;\n background: transparent;\n color: inherit;\n font-size: 14px;\n line-height: 1;\n cursor: pointer;\n}\n\n.chipRemove:hover {\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n}\n\n.input {\n flex: 1;\n min-width: 80px;\n border: none;\n outline: none;\n background: transparent;\n color: var(--tempest-text);\n font-family: inherit;\n font-size: var(--tempest-control-font-md);\n height: 24px;\n}\n\n.input::placeholder {\n color: var(--tempest-text-subtle);\n}\n\n.menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n z-index: var(--tempest-z-dropdown);\n background-color: var(--tempest-bg);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n box-shadow: var(--tempest-shadow-lg);\n max-height: 280px;\n overflow-y: auto;\n padding: var(--tempest-space-1);\n list-style: none;\n margin: 0;\n}\n\n.option {\n display: flex;\n align-items: center;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-2) var(--tempest-space-3);\n border-radius: var(--tempest-radius-sm);\n cursor: pointer;\n color: var(--tempest-text);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-snug);\n}\n\n.check {\n display: inline-flex;\n width: 16px;\n justify-content: center;\n color: var(--tempest-primary);\n font-weight: var(--tempest-weight-bold);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .option:hover {\n background-color: var(--tempest-surface);\n }\n}\n\n.option.active {\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n}\n\n.option.selected {\n font-weight: var(--tempest-weight-semibold);\n}\n\n.empty {\n padding: var(--tempest-space-3);\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n text-align: center;\n}\n\n.helper {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n}\n\n.errorText {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-danger);\n}\n\n.wrapper.error .field {\n border-color: var(--tempest-danger);\n}\n\n.portalled {\n font-family: var(--tempest-font-sans);\n right: auto;\n z-index: var(--tempest-z-popover);\n}\n"],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NProgress.cjs","names":[],"sources":["../../../src/components/NProgress/NProgress.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./NProgress.module.css\";\n\n/** Snapshot of the progress controller state delivered to subscribers. */\nexport interface NProgressState {\n /** Current progress, `0` (empty) to `1` (complete). */\n value: number;\n /** Whether the bar should be visible. */\n active: boolean;\n}\n\n/** Listener invoked whenever the progress state changes. */\nexport type NProgressListener = (state: NProgressState) => void;\n\n/** Imperative top-loading-bar controller. */\nexport interface NProgressController {\n /** Show the bar and start trickling toward ~0.9. */\n start: () => void;\n /** Complete to `1`, then hide the bar shortly after. */\n done: () => void;\n /** Set the progress explicitly. Values are clamped to `0..1`. */\n set: (n: number) => void;\n /** Increment progress by `amount` (default a small trickle step). */\n inc: (amount?: number) => void;\n /** Subscribe to state changes. Returns an unsubscribe function. */\n subscribe: (listener: NProgressListener) => () => void;\n}\n\nconst TRICKLE_INTERVAL_MS = 300;\nconst TRICKLE_CEILING = 0.9;\nconst DONE_HIDE_DELAY_MS = 300;\n\nfunction clamp(n: number): number {\n if (n < 0) return 0;\n if (n > 1) return 1;\n return n;\n}\n\nfunction createNProgress(): NProgressController {\n let state: NProgressState = { value: 0, active: false };\n const listeners = new Set<NProgressListener>();\n let trickleTimer: ReturnType<typeof setInterval> | null = null;\n let hideTimer: ReturnType<typeof setTimeout> | null = null;\n\n const emit = (): void => {\n for (const listener of listeners) listener(state);\n };\n\n const update = (next: Partial<NProgressState>): void => {\n state = { ...state, ...next };\n emit();\n };\n\n const stopTrickle = (): void => {\n if (trickleTimer !== null) {\n clearInterval(trickleTimer);\n trickleTimer = null;\n }\n };\n\n const clearHide = (): void => {\n if (hideTimer !== null) {\n clearTimeout(hideTimer);\n hideTimer = null;\n }\n };\n\n const inc = (amount?: number): void => {\n const current = state.value;\n if (current >= TRICKLE_CEILING) return;\n const step = amount ?? (1 - current) * 0.1 + 0.01;\n update({ value: Math.min(clamp(current + step), TRICKLE_CEILING) });\n };\n\n const start = (): void => {\n clearHide();\n if (state.active) return;\n update({ active: true, value: state.value > 0 ? state.value : 0.08 });\n stopTrickle();\n trickleTimer = setInterval(() => inc(), TRICKLE_INTERVAL_MS);\n };\n\n const done = (): void => {\n stopTrickle();\n clearHide();\n update({ value: 1, active: true });\n hideTimer = setTimeout(() => {\n update({ active: false, value: 0 });\n hideTimer = null;\n }, DONE_HIDE_DELAY_MS);\n };\n\n const set = (n: number): void => {\n clearHide();\n const value = clamp(n);\n update({ value, active: value < 1 ? true : state.active });\n };\n\n const subscribe = (listener: NProgressListener): (() => void) => {\n listeners.add(listener);\n listener(state);\n return () => {\n listeners.delete(listener);\n };\n };\n\n return { start, done, set, inc, subscribe };\n}\n\n/**\n * Module-level singleton progress controller. Drive it imperatively from\n * anywhere (router transitions, fetch interceptors) and render the visual bar\n * with {@link NProgressBar}.\n *\n * @example\n * nprogress.start();\n * await loadData();\n * nprogress.done();\n */\nexport const nprogress: NProgressController = createNProgress();\n\n/** Props for {@link NProgressBar}. */\nexport interface NProgressBarProps {\n /** Bar color. Defaults to `var(--tempest-primary)`. */\n color?: string;\n /** Bar height in pixels. Default `3`. */\n height?: number;\n /** Extra class applied to the bar element. */\n className?: string;\n}\n\n/**\n * Fixed top loading bar bound to the {@link nprogress} singleton. Mount once\n * near the app root; it renders nothing while inactive.\n *\n * @example\n * <NProgressBar />\n */\nexport function NProgressBar({ color, height = 3, className }: NProgressBarProps) {\n const [state, setState] = useState<NProgressState>({ value: 0, active: false });\n\n useEffect(() => nprogress.subscribe(setState), []);\n\n if (!state.active) return null;\n\n const style: CSSProperties = {\n width: `${Math.round(state.value * 100)}%`,\n height: `${height}px`,\n background: color ?? \"var(--tempest-primary)\",\n };\n\n return (\n <div\n className={cn(styles.bar, className)}\n style={style}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(state.value * 100)}\n />\n );\n}\n"],"mappings":"gIA8BA,
|
|
1
|
+
{"version":3,"file":"NProgress.cjs","names":["useState","cn","styles","require_cn","require_NProgress_module","react","react_jsx_runtime","TRICKLE_INTERVAL_MS","TRICKLE_CEILING","DONE_HIDE_DELAY_MS","clamp","n","createNProgress","state","listeners","trickleTimer","hideTimer","emit","listener","update","next","stopTrickle","clearHide","inc","current","step","amount","value","nprogress","NProgressBar","setState","style","height","color","className"],"sources":["../../../src/components/NProgress/NProgress.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./NProgress.module.css\";\n\n/** Snapshot of the progress controller state delivered to subscribers. */\nexport interface NProgressState {\n /** Current progress, `0` (empty) to `1` (complete). */\n value: number;\n /** Whether the bar should be visible. */\n active: boolean;\n}\n\n/** Listener invoked whenever the progress state changes. */\nexport type NProgressListener = (state: NProgressState) => void;\n\n/** Imperative top-loading-bar controller. */\nexport interface NProgressController {\n /** Show the bar and start trickling toward ~0.9. */\n start: () => void;\n /** Complete to `1`, then hide the bar shortly after. */\n done: () => void;\n /** Set the progress explicitly. Values are clamped to `0..1`. */\n set: (n: number) => void;\n /** Increment progress by `amount` (default a small trickle step). */\n inc: (amount?: number) => void;\n /** Subscribe to state changes. Returns an unsubscribe function. */\n subscribe: (listener: NProgressListener) => () => void;\n}\n\nconst TRICKLE_INTERVAL_MS = 300;\nconst TRICKLE_CEILING = 0.9;\nconst DONE_HIDE_DELAY_MS = 300;\n\nfunction clamp(n: number): number {\n if (n < 0) return 0;\n if (n > 1) return 1;\n return n;\n}\n\nfunction createNProgress(): NProgressController {\n let state: NProgressState = { value: 0, active: false };\n const listeners = new Set<NProgressListener>();\n let trickleTimer: ReturnType<typeof setInterval> | null = null;\n let hideTimer: ReturnType<typeof setTimeout> | null = null;\n\n const emit = (): void => {\n for (const listener of listeners) listener(state);\n };\n\n const update = (next: Partial<NProgressState>): void => {\n state = { ...state, ...next };\n emit();\n };\n\n const stopTrickle = (): void => {\n if (trickleTimer !== null) {\n clearInterval(trickleTimer);\n trickleTimer = null;\n }\n };\n\n const clearHide = (): void => {\n if (hideTimer !== null) {\n clearTimeout(hideTimer);\n hideTimer = null;\n }\n };\n\n const inc = (amount?: number): void => {\n const current = state.value;\n if (current >= TRICKLE_CEILING) return;\n const step = amount ?? (1 - current) * 0.1 + 0.01;\n update({ value: Math.min(clamp(current + step), TRICKLE_CEILING) });\n };\n\n const start = (): void => {\n clearHide();\n if (state.active) return;\n update({ active: true, value: state.value > 0 ? state.value : 0.08 });\n stopTrickle();\n trickleTimer = setInterval(() => inc(), TRICKLE_INTERVAL_MS);\n };\n\n const done = (): void => {\n stopTrickle();\n clearHide();\n update({ value: 1, active: true });\n hideTimer = setTimeout(() => {\n update({ active: false, value: 0 });\n hideTimer = null;\n }, DONE_HIDE_DELAY_MS);\n };\n\n const set = (n: number): void => {\n clearHide();\n const value = clamp(n);\n update({ value, active: value < 1 ? true : state.active });\n };\n\n const subscribe = (listener: NProgressListener): (() => void) => {\n listeners.add(listener);\n listener(state);\n return () => {\n listeners.delete(listener);\n };\n };\n\n return { start, done, set, inc, subscribe };\n}\n\n/**\n * Module-level singleton progress controller. Drive it imperatively from\n * anywhere (router transitions, fetch interceptors) and render the visual bar\n * with {@link NProgressBar}.\n *\n * @example\n * nprogress.start();\n * await loadData();\n * nprogress.done();\n */\nexport const nprogress: NProgressController = createNProgress();\n\n/** Props for {@link NProgressBar}. */\nexport interface NProgressBarProps {\n /** Bar color. Defaults to `var(--tempest-primary)`. */\n color?: string;\n /** Bar height in pixels. Default `3`. */\n height?: number;\n /** Extra class applied to the bar element. */\n className?: string;\n}\n\n/**\n * Fixed top loading bar bound to the {@link nprogress} singleton. Mount once\n * near the app root; it renders nothing while inactive.\n *\n * @example\n * <NProgressBar />\n */\nexport function NProgressBar({ color, height = 3, className }: NProgressBarProps) {\n const [state, setState] = useState<NProgressState>({ value: 0, active: false });\n\n useEffect(() => nprogress.subscribe(setState), []);\n\n if (!state.active) return null;\n\n const style: CSSProperties = {\n width: `${Math.round(state.value * 100)}%`,\n height: `${height}px`,\n background: color ?? \"var(--tempest-primary)\",\n };\n\n return (\n <div\n className={cn(styles.bar, className)}\n style={style}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(state.value * 100)}\n />\n );\n}\n"],"mappings":"A,gIA8BA,IAAMO,EAAsB,IACtBC,EAAkB,GAClBC,EAAqB,IAE3B,SAASC,EAAM,EAAmB,CAG9B,OAFIC,EAAI,EAAU,EACdA,EAAI,EAAU,EACXA,CACX,CAEA,SAASC,GAAuC,CAC5C,IAAIC,EAAwB,CAAE,MAAO,EAAG,OAAQ,EAAM,EAChDC,EAAY,IAAI,IAClBC,EAAsD,KACtDC,EAAkD,KAEhDC,MAAmB,CACrB,IAAK,IAAMC,KAAYJ,EAAWI,EAASL,CAAK,CACpD,EAEMM,EAAU,GAAwC,CACpD,EAAQ,CAAE,GAAGN,EAAO,GAAGO,CAAK,EAC5BH,EAAK,CACT,EAEMI,MAA0B,CACxBN,IAAiB,OACjB,cAAcA,CAAY,EAC1B,EAAe,KAEvB,EAEMO,MAAwB,CACtBN,IAAc,OACd,aAAaA,CAAS,EACtB,EAAY,KAEpB,EAEMO,EAAO,GAA0B,CACnC,IAAMC,EAAUX,EAAM,MACtB,GAAIW,GAAWhB,EAAiB,OAChC,IAAMiB,EAAOC,IAAW,EAAIF,GAAW,GAAM,IAC7CL,EAAO,CAAE,MAAO,KAAK,IAAIT,EAAMc,EAAUC,CAAI,EAAGjB,CAAe,CAAE,CAAC,CACtE,EAkCA,MAAO,CAAE,UAhCiB,CACtBc,EAAU,EACN,GAAM,SACVH,EAAO,CAAE,OAAQ,GAAM,MAAON,EAAM,MAAQ,EAAIA,EAAM,MAAQ,GAAK,CAAC,EACpEQ,EAAY,EACZ,EAAe,gBAAkBE,EAAI,EAAGhB,CAAmB,EAC/D,EA0BgB,SAxBS,CACrBc,EAAY,EACZC,EAAU,EACVH,EAAO,CAAE,MAAO,EAAG,OAAQ,EAAK,CAAC,EACjC,EAAY,eAAiB,CACzBA,EAAO,CAAE,OAAQ,GAAO,MAAO,CAAE,CAAC,EAClC,EAAY,IAChB,EAAGV,CAAkB,CACzB,EAgBsB,IAdT,GAAoB,CAC7Ba,EAAU,EACV,IAAMK,EAAQjB,EAAMC,CAAC,EACrBQ,EAAO,CAAE,QAAO,OAAQQ,EAAQ,GAAWd,EAAM,MAAO,CAAC,CAC7D,EAU2B,MAAK,UARb,IACfC,EAAU,IAAII,CAAQ,EACtBA,EAASL,CAAK,MACD,CACTC,EAAU,OAAOI,CAAQ,CAC7B,EAGsC,CAC9C,CAYA,IAAaU,EAAiChB,EAAgB,EAmB9D,SAAgBiB,EAAa,CAAE,QAAO,SAAS,EAAG,aAAgC,CAC9E,GAAM,CAAChB,EAAOiB,IAAA,EAAY9B,EAAAA,SAAAA,CAAyB,CAAE,MAAO,EAAG,OAAQ,EAAM,CAAC,EAI9E,IAFA,EAAAK,EAAA,UAAA,KAAgBuB,EAAU,UAAUE,CAAQ,EAAG,CAAC,CAAC,EAE7C,CAACjB,EAAM,OAAQ,OAAO,KAE1B,IAAMkB,EAAuB,CACzB,MAAO,GAAG,KAAK,MAAMlB,EAAM,MAAQ,GAAG,EAAE,GACxC,OAAQ,GAAGmB,EAAO,IAClB,WAAYC,GAAS,wBACzB,EAEA,OACI,EAAA3B,EAAA,IAAA,CAAC,MAAD,CACI,UAAWL,EAAAA,GAAGC,EAAAA,QAAO,IAAKgC,CAAS,EAC5B,QACP,KAAK,cACL,gBAAe,EACf,gBAAe,IACf,gBAAe,KAAK,MAAMrB,EAAM,MAAQ,GAAG,CAC9C,CAAA,CAET,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NProgress.js","names":[],"sources":["../../../src/components/NProgress/NProgress.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./NProgress.module.css\";\n\n/** Snapshot of the progress controller state delivered to subscribers. */\nexport interface NProgressState {\n /** Current progress, `0` (empty) to `1` (complete). */\n value: number;\n /** Whether the bar should be visible. */\n active: boolean;\n}\n\n/** Listener invoked whenever the progress state changes. */\nexport type NProgressListener = (state: NProgressState) => void;\n\n/** Imperative top-loading-bar controller. */\nexport interface NProgressController {\n /** Show the bar and start trickling toward ~0.9. */\n start: () => void;\n /** Complete to `1`, then hide the bar shortly after. */\n done: () => void;\n /** Set the progress explicitly. Values are clamped to `0..1`. */\n set: (n: number) => void;\n /** Increment progress by `amount` (default a small trickle step). */\n inc: (amount?: number) => void;\n /** Subscribe to state changes. Returns an unsubscribe function. */\n subscribe: (listener: NProgressListener) => () => void;\n}\n\nconst TRICKLE_INTERVAL_MS = 300;\nconst TRICKLE_CEILING = 0.9;\nconst DONE_HIDE_DELAY_MS = 300;\n\nfunction clamp(n: number): number {\n if (n < 0) return 0;\n if (n > 1) return 1;\n return n;\n}\n\nfunction createNProgress(): NProgressController {\n let state: NProgressState = { value: 0, active: false };\n const listeners = new Set<NProgressListener>();\n let trickleTimer: ReturnType<typeof setInterval> | null = null;\n let hideTimer: ReturnType<typeof setTimeout> | null = null;\n\n const emit = (): void => {\n for (const listener of listeners) listener(state);\n };\n\n const update = (next: Partial<NProgressState>): void => {\n state = { ...state, ...next };\n emit();\n };\n\n const stopTrickle = (): void => {\n if (trickleTimer !== null) {\n clearInterval(trickleTimer);\n trickleTimer = null;\n }\n };\n\n const clearHide = (): void => {\n if (hideTimer !== null) {\n clearTimeout(hideTimer);\n hideTimer = null;\n }\n };\n\n const inc = (amount?: number): void => {\n const current = state.value;\n if (current >= TRICKLE_CEILING) return;\n const step = amount ?? (1 - current) * 0.1 + 0.01;\n update({ value: Math.min(clamp(current + step), TRICKLE_CEILING) });\n };\n\n const start = (): void => {\n clearHide();\n if (state.active) return;\n update({ active: true, value: state.value > 0 ? state.value : 0.08 });\n stopTrickle();\n trickleTimer = setInterval(() => inc(), TRICKLE_INTERVAL_MS);\n };\n\n const done = (): void => {\n stopTrickle();\n clearHide();\n update({ value: 1, active: true });\n hideTimer = setTimeout(() => {\n update({ active: false, value: 0 });\n hideTimer = null;\n }, DONE_HIDE_DELAY_MS);\n };\n\n const set = (n: number): void => {\n clearHide();\n const value = clamp(n);\n update({ value, active: value < 1 ? true : state.active });\n };\n\n const subscribe = (listener: NProgressListener): (() => void) => {\n listeners.add(listener);\n listener(state);\n return () => {\n listeners.delete(listener);\n };\n };\n\n return { start, done, set, inc, subscribe };\n}\n\n/**\n * Module-level singleton progress controller. Drive it imperatively from\n * anywhere (router transitions, fetch interceptors) and render the visual bar\n * with {@link NProgressBar}.\n *\n * @example\n * nprogress.start();\n * await loadData();\n * nprogress.done();\n */\nexport const nprogress: NProgressController = createNProgress();\n\n/** Props for {@link NProgressBar}. */\nexport interface NProgressBarProps {\n /** Bar color. Defaults to `var(--tempest-primary)`. */\n color?: string;\n /** Bar height in pixels. Default `3`. */\n height?: number;\n /** Extra class applied to the bar element. */\n className?: string;\n}\n\n/**\n * Fixed top loading bar bound to the {@link nprogress} singleton. Mount once\n * near the app root; it renders nothing while inactive.\n *\n * @example\n * <NProgressBar />\n */\nexport function NProgressBar({ color, height = 3, className }: NProgressBarProps) {\n const [state, setState] = useState<NProgressState>({ value: 0, active: false });\n\n useEffect(() => nprogress.subscribe(setState), []);\n\n if (!state.active) return null;\n\n const style: CSSProperties = {\n width: `${Math.round(state.value * 100)}%`,\n height: `${height}px`,\n background: color ?? \"var(--tempest-primary)\",\n };\n\n return (\n <div\n className={cn(styles.bar, className)}\n style={style}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(state.value * 100)}\n />\n );\n}\n"],"mappings":";;;;;AA8BA,
|
|
1
|
+
{"version":3,"file":"NProgress.js","names":["styles","NProgress_module_default","TRICKLE_INTERVAL_MS","TRICKLE_CEILING","DONE_HIDE_DELAY_MS","clamp","n","createNProgress","state","listeners","trickleTimer","hideTimer","emit","listener","update","next","stopTrickle","clearHide","inc","current","step","amount","value","nprogress","NProgressBar","setState","useState","useEffect","style","height","color","cn","className"],"sources":["../../../src/components/NProgress/NProgress.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./NProgress.module.css\";\n\n/** Snapshot of the progress controller state delivered to subscribers. */\nexport interface NProgressState {\n /** Current progress, `0` (empty) to `1` (complete). */\n value: number;\n /** Whether the bar should be visible. */\n active: boolean;\n}\n\n/** Listener invoked whenever the progress state changes. */\nexport type NProgressListener = (state: NProgressState) => void;\n\n/** Imperative top-loading-bar controller. */\nexport interface NProgressController {\n /** Show the bar and start trickling toward ~0.9. */\n start: () => void;\n /** Complete to `1`, then hide the bar shortly after. */\n done: () => void;\n /** Set the progress explicitly. Values are clamped to `0..1`. */\n set: (n: number) => void;\n /** Increment progress by `amount` (default a small trickle step). */\n inc: (amount?: number) => void;\n /** Subscribe to state changes. Returns an unsubscribe function. */\n subscribe: (listener: NProgressListener) => () => void;\n}\n\nconst TRICKLE_INTERVAL_MS = 300;\nconst TRICKLE_CEILING = 0.9;\nconst DONE_HIDE_DELAY_MS = 300;\n\nfunction clamp(n: number): number {\n if (n < 0) return 0;\n if (n > 1) return 1;\n return n;\n}\n\nfunction createNProgress(): NProgressController {\n let state: NProgressState = { value: 0, active: false };\n const listeners = new Set<NProgressListener>();\n let trickleTimer: ReturnType<typeof setInterval> | null = null;\n let hideTimer: ReturnType<typeof setTimeout> | null = null;\n\n const emit = (): void => {\n for (const listener of listeners) listener(state);\n };\n\n const update = (next: Partial<NProgressState>): void => {\n state = { ...state, ...next };\n emit();\n };\n\n const stopTrickle = (): void => {\n if (trickleTimer !== null) {\n clearInterval(trickleTimer);\n trickleTimer = null;\n }\n };\n\n const clearHide = (): void => {\n if (hideTimer !== null) {\n clearTimeout(hideTimer);\n hideTimer = null;\n }\n };\n\n const inc = (amount?: number): void => {\n const current = state.value;\n if (current >= TRICKLE_CEILING) return;\n const step = amount ?? (1 - current) * 0.1 + 0.01;\n update({ value: Math.min(clamp(current + step), TRICKLE_CEILING) });\n };\n\n const start = (): void => {\n clearHide();\n if (state.active) return;\n update({ active: true, value: state.value > 0 ? state.value : 0.08 });\n stopTrickle();\n trickleTimer = setInterval(() => inc(), TRICKLE_INTERVAL_MS);\n };\n\n const done = (): void => {\n stopTrickle();\n clearHide();\n update({ value: 1, active: true });\n hideTimer = setTimeout(() => {\n update({ active: false, value: 0 });\n hideTimer = null;\n }, DONE_HIDE_DELAY_MS);\n };\n\n const set = (n: number): void => {\n clearHide();\n const value = clamp(n);\n update({ value, active: value < 1 ? true : state.active });\n };\n\n const subscribe = (listener: NProgressListener): (() => void) => {\n listeners.add(listener);\n listener(state);\n return () => {\n listeners.delete(listener);\n };\n };\n\n return { start, done, set, inc, subscribe };\n}\n\n/**\n * Module-level singleton progress controller. Drive it imperatively from\n * anywhere (router transitions, fetch interceptors) and render the visual bar\n * with {@link NProgressBar}.\n *\n * @example\n * nprogress.start();\n * await loadData();\n * nprogress.done();\n */\nexport const nprogress: NProgressController = createNProgress();\n\n/** Props for {@link NProgressBar}. */\nexport interface NProgressBarProps {\n /** Bar color. Defaults to `var(--tempest-primary)`. */\n color?: string;\n /** Bar height in pixels. Default `3`. */\n height?: number;\n /** Extra class applied to the bar element. */\n className?: string;\n}\n\n/**\n * Fixed top loading bar bound to the {@link nprogress} singleton. Mount once\n * near the app root; it renders nothing while inactive.\n *\n * @example\n * <NProgressBar />\n */\nexport function NProgressBar({ color, height = 3, className }: NProgressBarProps) {\n const [state, setState] = useState<NProgressState>({ value: 0, active: false });\n\n useEffect(() => nprogress.subscribe(setState), []);\n\n if (!state.active) return null;\n\n const style: CSSProperties = {\n width: `${Math.round(state.value * 100)}%`,\n height: `${height}px`,\n background: color ?? \"var(--tempest-primary)\",\n };\n\n return (\n <div\n className={cn(styles.bar, className)}\n style={style}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(state.value * 100)}\n />\n );\n}\n"],"mappings":";;;;;AA8BA,IAAME,IAAsB,KACtBC,IAAkB,IAClBC,IAAqB;AAE3B,SAASC,EAAM,GAAmB;CAG9B,OAFIC,IAAI,IAAU,IACdA,IAAI,IAAU,IACXA;AACX;AAEA,SAASC,IAAuC;CAC5C,IAAIC,IAAwB;EAAE,OAAO;EAAG,QAAQ;CAAM,GAChDC,oBAAY,IAAI,IAAuB,GACzCC,IAAsD,MACtDC,IAAkD,MAEhDC,UAAmB;EACrB,KAAK,IAAMC,KAAYJ,GAAW,EAASD,CAAK;CACpD,GAEMM,KAAU,MAAwC;EAEpD,AADA,IAAQ;GAAE,GAAGN;GAAO,GAAGO;EAAK,GAC5BH,EAAK;CACT,GAEMI,UAA0B;EAC5B,AAAIN,MAAiB,SACjB,cAAcA,CAAY,GAC1B,IAAe;CAEvB,GAEMO,UAAwB;EAC1B,AAAIN,MAAc,SACd,aAAaA,CAAS,GACtB,IAAY;CAEpB,GAEMO,KAAO,MAA0B;EACnC,IAAMC,IAAUX,EAAM;EACtB,IAAIW,KAAWhB,GAAiB;EAChC,IAAMiB,IAAOC,MAAW,IAAIF,KAAW,KAAM;EAC7C,EAAO,EAAE,OAAO,KAAK,IAAId,EAAMc,IAAUC,CAAI,GAAGjB,CAAe,EAAE,CAAC;CACtE;CAkCA,OAAO;EAAE,aAhCiB;GAEtB,AADAc,EAAU,GACN,GAAM,WACVH,EAAO;IAAE,QAAQ;IAAM,OAAON,EAAM,QAAQ,IAAIA,EAAM,QAAQ;GAAK,CAAC,GACpEQ,EAAY,GACZ,IAAe,kBAAkBE,EAAI,GAAGhB,CAAmB;EAC/D;EA0BgB,YAxBS;GAIrB,AAHAc,EAAY,GACZC,EAAU,GACVH,EAAO;IAAE,OAAO;IAAG,QAAQ;GAAK,CAAC,GACjC,IAAY,iBAAiB;IAEzB,AADAA,EAAO;KAAE,QAAQ;KAAO,OAAO;IAAE,CAAC,GAClC,IAAY;GAChB,GAAGV,CAAkB;EACzB;EAgBsB,MAdT,MAAoB;GAC7B,EAAU;GACV,IAAMkB,IAAQjB,EAAMC,CAAC;GACrB,EAAO;IAAE;IAAO,QAAQgB,IAAQ,KAAWd,EAAM;GAAO,CAAC;EAC7D;EAU2B;EAAK,YARb,OACfC,EAAU,IAAII,CAAQ,GACtBA,EAASL,CAAK,SACD;GACT,EAAU,OAAOK,CAAQ;EAC7B;CAGsC;AAC9C;AAYA,IAAaU,IAAiChB,EAAgB;AAmB9D,SAAgBiB,EAAa,EAAE,UAAO,YAAS,GAAG,gBAAgC;CAC9E,IAAM,CAAChB,GAAOiB,KAAYC,EAAyB;EAAE,OAAO;EAAG,QAAQ;CAAM,CAAC;CAI9E,IAFAC,QAAgBJ,EAAU,UAAUE,CAAQ,GAAG,CAAC,CAAC,GAE7C,CAACjB,EAAM,QAAQ,OAAO;CAE1B,IAAMoB,IAAuB;EACzB,OAAO,GAAG,KAAK,MAAMpB,EAAM,QAAQ,GAAG,EAAE;EACxC,QAAQ,GAAGqB,EAAO;EAClB,YAAYC,KAAS;CACzB;CAEA,OACI,kBAAC,OAAD;EACI,WAAWC,EAAG/B,EAAO,KAAKgC,CAAS;EAC5B;EACP,MAAK;EACL,iBAAe;EACf,iBAAe;EACf,iBAAe,KAAK,MAAMxB,EAAM,QAAQ,GAAG;CAC9C,CAAA;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NProgress.module.cjs","names":[],"sources":["../../../src/components/NProgress/NProgress.module.css"],"sourcesContent":[".bar {\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--tempest-z-toast, 1100);\n border-radius: 0 var(--tempest-radius-full) var(--tempest-radius-full) 0;\n box-shadow:\n 0 0 8px var(--tempest-primary),\n 0 0 4px var(--tempest-primary);\n transition: width var(--tempest-duration-fast, 120ms) var(--tempest-ease-out, ease-out);\n pointer-events: none;\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"NProgress.module.cjs","names":["bar","NProgress_module_default"],"sources":["../../../src/components/NProgress/NProgress.module.css"],"sourcesContent":[".bar {\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--tempest-z-toast, 1100);\n border-radius: 0 var(--tempest-radius-full) var(--tempest-radius-full) 0;\n box-shadow:\n 0 0 8px var(--tempest-primary),\n 0 0 4px var(--tempest-primary);\n transition: width var(--tempest-duration-fast, 120ms) var(--tempest-ease-out, ease-out);\n pointer-events: none;\n}\n"],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NProgress.module.js","names":[],"sources":["../../../src/components/NProgress/NProgress.module.css"],"sourcesContent":[".bar {\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--tempest-z-toast, 1100);\n border-radius: 0 var(--tempest-radius-full) var(--tempest-radius-full) 0;\n box-shadow:\n 0 0 8px var(--tempest-primary),\n 0 0 4px var(--tempest-primary);\n transition: width var(--tempest-duration-fast, 120ms) var(--tempest-ease-out, ease-out);\n pointer-events: none;\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"NProgress.module.js","names":["bar","NProgress_module_default"],"sources":["../../../src/components/NProgress/NProgress.module.css"],"sourcesContent":[".bar {\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--tempest-z-toast, 1100);\n border-radius: 0 var(--tempest-radius-full) var(--tempest-radius-full) 0;\n box-shadow:\n 0 0 8px var(--tempest-primary),\n 0 0 4px var(--tempest-primary);\n transition: width var(--tempest-duration-fast, 120ms) var(--tempest-ease-out, ease-out);\n pointer-events: none;\n}\n"],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Navbar.cjs","names":[],"sources":["../../../src/components/Navbar/Navbar.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Navbar.module.css\";\n\n/**\n * Visual tone of a {@link Navbar}.\n *\n * - `\"surface\"` — the page's surface and text.\n * - `\"primary\"` — the brand fill (`--tempest-primary`) with\n * `--tempest-primary-foreground` ink. Only the bar's own text follows the fill:\n * components inside it keep the page's tokens. Measured in Chromium over the\n * SDK's `#0066ff`, a link button inside it reads 1:1, muted text 1.59:1 and the\n * focus ring 1.41:1. Fine for a bar that holds a logo and plain text.\n * - `\"inverse\"` — the inverse surface: every color token inverted inside the bar,\n * so a primary `Button`, a link, the focus ring and muted text are measured\n * against the fill. See {@link NavbarProps.tone}.\n * - `\"transparent\"` — no background; the text inherits.\n */\nexport type NavbarTone = \"surface\" | \"primary\" | \"inverse\" | \"transparent\";\n\nexport interface NavbarProps extends HTMLAttributes<HTMLElement> {\n /** Left slot — typically logo + brand name. */\n logo?: ReactNode;\n /** Center slot — typically nav links. */\n nav?: ReactNode;\n /** Right slot — typically user menu / actions. */\n actions?: ReactNode;\n /** Make the bar sticky at the top of the scroll container. Default `true`. */\n sticky?: boolean;\n /**\n * Visual tone. Default `\"surface\"`.\n *\n * `\"inverse\"` writes `data-tempest-tone=\"inverse\"` and paints the bar with the\n * inverse surface's `--tempest-bg`, so the components in the slots invert with\n * it. The tokens are opt-in: `tempest-react-sdk/styles/inverse.css` for the\n * SDK's own blue, or `createTheme({ primary, inverse: createInverseSurface })`\n * for yours. With neither loaded the bar falls back to the page's\n * `--tempest-bg` and `--tempest-text` — legible, not inverted.\n *\n * A separate tone rather than a change to `\"primary\"`, because the inverse\n * fill is not always the brand's `500`: for `#0066ff` it is the `800`\n * (`#042e75`), and turning `\"primary\"` into it would repaint every bar that\n * uses it today.\n */\n tone?: NavbarTone;\n /** When set, renders a thin bottom border. Default `true`. */\n bordered?: boolean;\n}\n\n/**\n * Top app bar. Three-slot layout (logo / nav / actions) that collapses\n * gracefully on mobile (nav slot wraps below).\n *\n * @example\n * <Navbar\n * logo={<img src=\"/logo.svg\" alt=\"App\" />}\n * nav={<NavLinks />}\n * actions={<UserMenu />}\n * />\n */\nexport function Navbar({\n logo,\n nav,\n actions,\n sticky = true,\n tone = \"surface\",\n bordered = true,\n className,\n ...props\n}: NavbarProps) {\n return (\n <header\n className={cn(\n styles.navbar,\n styles[tone],\n sticky && styles.sticky,\n bordered && styles.bordered,\n className,\n )}\n data-tempest-tone={tone === \"inverse\" ? \"inverse\" : undefined}\n {...props}\n >\n {logo && <div className={styles.logo}>{logo}</div>}\n {nav && <nav className={styles.nav}>{nav}</nav>}\n {actions && <div className={styles.actions}>{actions}</div>}\n </header>\n );\n}\n"],"mappings":"0GA4DA,
|
|
1
|
+
{"version":3,"file":"Navbar.cjs","names":["cn","styles","require_cn","require_Navbar_module","react_jsx_runtime","Navbar","props","tone","sticky","bordered","className","logo","nav","actions"],"sources":["../../../src/components/Navbar/Navbar.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Navbar.module.css\";\n\n/**\n * Visual tone of a {@link Navbar}.\n *\n * - `\"surface\"` — the page's surface and text.\n * - `\"primary\"` — the brand fill (`--tempest-primary`) with\n * `--tempest-primary-foreground` ink. Only the bar's own text follows the fill:\n * components inside it keep the page's tokens. Measured in Chromium over the\n * SDK's `#0066ff`, a link button inside it reads 1:1, muted text 1.59:1 and the\n * focus ring 1.41:1. Fine for a bar that holds a logo and plain text.\n * - `\"inverse\"` — the inverse surface: every color token inverted inside the bar,\n * so a primary `Button`, a link, the focus ring and muted text are measured\n * against the fill. See {@link NavbarProps.tone}.\n * - `\"transparent\"` — no background; the text inherits.\n */\nexport type NavbarTone = \"surface\" | \"primary\" | \"inverse\" | \"transparent\";\n\nexport interface NavbarProps extends HTMLAttributes<HTMLElement> {\n /** Left slot — typically logo + brand name. */\n logo?: ReactNode;\n /** Center slot — typically nav links. */\n nav?: ReactNode;\n /** Right slot — typically user menu / actions. */\n actions?: ReactNode;\n /** Make the bar sticky at the top of the scroll container. Default `true`. */\n sticky?: boolean;\n /**\n * Visual tone. Default `\"surface\"`.\n *\n * `\"inverse\"` writes `data-tempest-tone=\"inverse\"` and paints the bar with the\n * inverse surface's `--tempest-bg`, so the components in the slots invert with\n * it. The tokens are opt-in: `tempest-react-sdk/styles/inverse.css` for the\n * SDK's own blue, or `createTheme({ primary, inverse: createInverseSurface })`\n * for yours. With neither loaded the bar falls back to the page's\n * `--tempest-bg` and `--tempest-text` — legible, not inverted.\n *\n * A separate tone rather than a change to `\"primary\"`, because the inverse\n * fill is not always the brand's `500`: for `#0066ff` it is the `800`\n * (`#042e75`), and turning `\"primary\"` into it would repaint every bar that\n * uses it today.\n */\n tone?: NavbarTone;\n /** When set, renders a thin bottom border. Default `true`. */\n bordered?: boolean;\n}\n\n/**\n * Top app bar. Three-slot layout (logo / nav / actions) that collapses\n * gracefully on mobile (nav slot wraps below).\n *\n * @example\n * <Navbar\n * logo={<img src=\"/logo.svg\" alt=\"App\" />}\n * nav={<NavLinks />}\n * actions={<UserMenu />}\n * />\n */\nexport function Navbar({\n logo,\n nav,\n actions,\n sticky = true,\n tone = \"surface\",\n bordered = true,\n className,\n ...props\n}: NavbarProps) {\n return (\n <header\n className={cn(\n styles.navbar,\n styles[tone],\n sticky && styles.sticky,\n bordered && styles.bordered,\n className,\n )}\n data-tempest-tone={tone === \"inverse\" ? \"inverse\" : undefined}\n {...props}\n >\n {logo && <div className={styles.logo}>{logo}</div>}\n {nav && <nav className={styles.nav}>{nav}</nav>}\n {actions && <div className={styles.actions}>{actions}</div>}\n </header>\n );\n}\n"],"mappings":"A,0GA4DA,SAAgBK,EAAO,CACnB,OACA,MACA,UACA,SAAS,GACT,OAAO,UACP,WAAW,GACX,YACA,GAAGC,GACS,CACZ,OACI,EAAAF,EAAA,KAAA,CAAC,SAAD,CACI,UAAWJ,EAAAA,GACPC,EAAAA,QAAO,OACPA,EAAAA,QAAOM,GACPC,GAAUP,EAAAA,QAAO,OACjBQ,GAAYR,EAAAA,QAAO,SACnBS,CACJ,EACA,oBAAmBH,IAAS,UAAY,UAAY,IAAA,GACpD,GAAID,EATR,SAAA,CAWKK,IAAQ,EAAAP,EAAA,IAAA,CAAC,MAAD,CAAK,UAAWH,EAAAA,QAAO,KAAO,SAAAU,CAAU,CAAA,EAChDC,IAAO,EAAAR,EAAA,IAAA,CAAC,MAAD,CAAK,UAAWH,EAAAA,QAAO,IAAM,SAAAW,CAAS,CAAA,EAC7CC,IAAW,EAAAT,EAAA,IAAA,CAAC,MAAD,CAAK,UAAWH,EAAAA,QAAO,QAAU,SAAAY,CAAa,CAAA,CACtD,C,EAEhB,C"}
|