tempest-react-sdk 0.77.0 → 0.79.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/alias/collect.mjs +20 -3
- package/bin/lib/alias/index.mjs +12 -1
- package/bin/lib/alias/index.test.mjs +24 -0
- package/bin/lib/css/analyze.test.mjs +21 -1
- package/bin/lib/css/collect.mjs +14 -0
- package/bin/lib/css/extract.mjs +63 -5
- package/bin/lib/css/extract.test.mjs +110 -1
- package/bin/lib/css/fix.e2e.test.mjs +50 -0
- package/bin/lib/css/index.mjs +6 -1
- package/bin/lib/fs/contain.mjs +50 -0
- package/bin/lib/icons/generate.mjs +28 -3
- package/bin/lib/icons/generate.test.mjs +57 -1
- package/bin/lib/openapi/escape.mjs +20 -6
- package/bin/lib/openapi/generate.encode.test.mjs +120 -0
- package/bin/lib/openapi/generate.hostile.test.mjs +38 -9
- package/bin/lib/openapi/generate.mjs +203 -64
- package/bin/lib/openapi/generate.pagination.test.mjs +3 -2
- package/bin/lib/openapi/generate.test.mjs +270 -3
- package/bin/lib/openapi/schema-to-zod.mjs +5 -3
- package/bin/tempest-gen.test.mjs +188 -0
- package/bin/tempest.mjs +120 -44
- 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 +185 -114
- 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 -71
- 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 +16 -5
- 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 +1 -1
- package/dist/components/CodeBlock/CodeBlock.cjs.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.js +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 +1 -1
- package/dist/components/CodeBlock/tokenize.cjs.map +1 -1
- package/dist/components/CodeBlock/tokenize.js +54 -25
- 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 +6 -6
- package/dist/components/Markdown/markdown-parse.cjs.map +1 -1
- package/dist/components/Markdown/markdown-parse.js +94 -96
- 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.map +1 -1
- package/dist/http/api-client.js.map +1 -1
- package/dist/http/build-url.cjs.map +1 -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/resumable-upload.cjs +1 -1
- package/dist/http/resumable-upload.cjs.map +1 -1
- package/dist/http/resumable-upload.js +141 -105
- package/dist/http/resumable-upload.js.map +1 -1
- package/dist/http/retry.cjs +1 -1
- package/dist/http/retry.cjs.map +1 -1
- package/dist/http/retry.js +5 -6
- 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.map +1 -1
- package/dist/sse/create-event-stream.js.map +1 -1
- package/dist/sse/use-event-stream.cjs.map +1 -1
- 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 +1 -1
- package/dist/sw/background-sync.cjs.map +1 -1
- package/dist/sw/background-sync.js +32 -31
- 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/sw.d.ts +46 -8
- 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 +1 -1
- package/dist/telemetry/app-error-reporter.cjs.map +1 -1
- package/dist/telemetry/app-error-reporter.js +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 +448 -15
- package/dist/tempest-react-sdk.js +119 -119
- 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 +3 -3
- package/dist/utils/csv.cjs.map +1 -1
- package/dist/utils/csv.js +11 -10
- 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/{telemetry/app-error-owner.cjs → utils/owner-fingerprint.cjs} +2 -2
- package/dist/utils/owner-fingerprint.cjs.map +1 -0
- package/dist/{telemetry/app-error-owner.js → utils/owner-fingerprint.js} +3 -3
- package/dist/utils/owner-fingerprint.js.map +1 -0
- 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 +2 -2
- package/dist/vite/tempest-csp.cjs.map +1 -1
- package/dist/vite/tempest-csp.js +69 -66
- 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/vite.d.ts +5 -3
- 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
- package/dist/telemetry/app-error-owner.cjs.map +0 -1
- package/dist/telemetry/app-error-owner.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"br-validators.js","names":[],"sources":["../../src/forms/br-validators.ts"],"sourcesContent":["function digitsOnly(value: string): string {\n return value.replace(/\\D/g, \"\");\n}\n\n/**\n * Validate a Brazilian CPF using the standard check-digit algorithm.\n * Accepts masked or raw input; rejects all-equal digits (\"111.111.111-11\").\n */\nexport function validateCPF(value: string): boolean {\n const digits = digitsOnly(value);\n if (digits.length !== 11) return false;\n if (/^(\\d)\\1+$/.test(digits)) return false;\n\n const numbers = digits.split(\"\").map(Number);\n\n let sum = 0;\n for (let i = 0; i < 9; i++) sum += numbers[i]! * (10 - i);\n let check = (sum * 10) % 11;\n if (check === 10) check = 0;\n if (check !== numbers[9]) return false;\n\n sum = 0;\n for (let i = 0; i < 10; i++) sum += numbers[i]! * (11 - i);\n check = (sum * 10) % 11;\n if (check === 10) check = 0;\n return check === numbers[10];\n}\n\n/**\n * Validate a Brazilian CNPJ using the standard check-digit algorithm.\n * Accepts masked or raw input; rejects all-equal digits.\n */\nexport function validateCNPJ(value: string): boolean {\n const digits = digitsOnly(value);\n if (digits.length !== 14) return false;\n if (/^(\\d)\\1+$/.test(digits)) return false;\n\n const numbers = digits.split(\"\").map(Number);\n\n const weights1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\n const weights2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\n\n let sum = 0;\n for (let i = 0; i < 12; i++) sum += numbers[i]! * weights1[i]!;\n let check = sum % 11;\n check = check < 2 ? 0 : 11 - check;\n if (check !== numbers[12]) return false;\n\n sum = 0;\n for (let i = 0; i < 13; i++) sum += numbers[i]! * weights2[i]!;\n check = sum % 11;\n check = check < 2 ? 0 : 11 - check;\n return check === numbers[13];\n}\n\n/** Format an 11-digit Brazilian CEP-like value as `00000-000`. */\nexport function formatCEP(value: string): string {\n return digitsOnly(value)\n .slice(0, 8)\n .replace(/(\\d{5})(\\d)/, \"$1-$2\");\n}\n\n/** Format an unmasked CNPJ-shaped value as `00.000.000/0000-00`. */\nexport function formatCNPJ(value: string): string {\n return digitsOnly(value)\n .slice(0, 14)\n .replace(/(\\d{2})(\\d)/, \"$1.$2\")\n .replace(/(\\d{3})(\\d)/, \"$1.$2\")\n .replace(/(\\d{3})(\\d)/, \"$1/$2\")\n .replace(/(\\d{4})(\\d)/, \"$1-$2\");\n}\n\n/** Strip any masking and return only digits. */\nexport function unmask(value: string): string {\n return digitsOnly(value);\n}\n"],"mappings":";AAAA,
|
|
1
|
+
{"version":3,"file":"br-validators.js","names":["digitsOnly","value","validateCPF","digits","numbers","sum","i","check","validateCNPJ","weights1","weights2","formatCEP","formatCNPJ","unmask"],"sources":["../../src/forms/br-validators.ts"],"sourcesContent":["function digitsOnly(value: string): string {\n return value.replace(/\\D/g, \"\");\n}\n\n/**\n * Validate a Brazilian CPF using the standard check-digit algorithm.\n * Accepts masked or raw input; rejects all-equal digits (\"111.111.111-11\").\n */\nexport function validateCPF(value: string): boolean {\n const digits = digitsOnly(value);\n if (digits.length !== 11) return false;\n if (/^(\\d)\\1+$/.test(digits)) return false;\n\n const numbers = digits.split(\"\").map(Number);\n\n let sum = 0;\n for (let i = 0; i < 9; i++) sum += numbers[i]! * (10 - i);\n let check = (sum * 10) % 11;\n if (check === 10) check = 0;\n if (check !== numbers[9]) return false;\n\n sum = 0;\n for (let i = 0; i < 10; i++) sum += numbers[i]! * (11 - i);\n check = (sum * 10) % 11;\n if (check === 10) check = 0;\n return check === numbers[10];\n}\n\n/**\n * Validate a Brazilian CNPJ using the standard check-digit algorithm.\n * Accepts masked or raw input; rejects all-equal digits.\n */\nexport function validateCNPJ(value: string): boolean {\n const digits = digitsOnly(value);\n if (digits.length !== 14) return false;\n if (/^(\\d)\\1+$/.test(digits)) return false;\n\n const numbers = digits.split(\"\").map(Number);\n\n const weights1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\n const weights2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\n\n let sum = 0;\n for (let i = 0; i < 12; i++) sum += numbers[i]! * weights1[i]!;\n let check = sum % 11;\n check = check < 2 ? 0 : 11 - check;\n if (check !== numbers[12]) return false;\n\n sum = 0;\n for (let i = 0; i < 13; i++) sum += numbers[i]! * weights2[i]!;\n check = sum % 11;\n check = check < 2 ? 0 : 11 - check;\n return check === numbers[13];\n}\n\n/** Format an 11-digit Brazilian CEP-like value as `00000-000`. */\nexport function formatCEP(value: string): string {\n return digitsOnly(value)\n .slice(0, 8)\n .replace(/(\\d{5})(\\d)/, \"$1-$2\");\n}\n\n/** Format an unmasked CNPJ-shaped value as `00.000.000/0000-00`. */\nexport function formatCNPJ(value: string): string {\n return digitsOnly(value)\n .slice(0, 14)\n .replace(/(\\d{2})(\\d)/, \"$1.$2\")\n .replace(/(\\d{3})(\\d)/, \"$1.$2\")\n .replace(/(\\d{3})(\\d)/, \"$1/$2\")\n .replace(/(\\d{4})(\\d)/, \"$1-$2\");\n}\n\n/** Strip any masking and return only digits. */\nexport function unmask(value: string): string {\n return digitsOnly(value);\n}\n"],"mappings":";AAAA,SAASA,EAAW,GAAuB;CACvC,OAAOC,EAAM,QAAQ,OAAO,EAAE;AAClC;AAMA,SAAgBC,EAAY,GAAwB;CAChD,IAAMC,IAASH,EAAWC,CAAK;CAE/B,IADIE,EAAO,WAAW,MAClB,YAAY,KAAKA,CAAM,GAAG,OAAO;CAErC,IAAMC,IAAUD,EAAO,MAAM,EAAE,CAAC,CAAC,IAAI,MAAM,GAEvCE,IAAM;CACV,KAAK,IAAIC,IAAI,GAAGA,IAAI,GAAG,KAAK,KAAOF,EAAQE,MAAO,KAAKA;CACvD,IAAIC,IAASF,IAAM,KAAM;CAEzB,IADIE,MAAU,OAAI,IAAQ,IACtBA,MAAUH,EAAQ,IAAI,OAAO;CAEjC,IAAM;CACN,KAAK,IAAIE,IAAI,GAAGA,IAAI,IAAI,KAAK,KAAOF,EAAQE,MAAO,KAAKA;CAGxD,OAFA,IAASD,IAAM,KAAM,IACjBE,MAAU,OAAI,IAAQ,IACnBA,MAAUH,EAAQ;AAC7B;AAMA,SAAgBI,EAAa,GAAwB;CACjD,IAAML,IAASH,EAAWC,CAAK;CAE/B,IADIE,EAAO,WAAW,MAClB,YAAY,KAAKA,CAAM,GAAG,OAAO;CAErC,IAAMC,IAAUD,EAAO,MAAM,EAAE,CAAC,CAAC,IAAI,MAAM,GAErCM,IAAW;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC,GAC9CC,IAAW;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC,GAEnDL,IAAM;CACV,KAAK,IAAIC,IAAI,GAAGA,IAAI,IAAI,KAAK,KAAOF,EAAQE,KAAMG,EAASH;CAC3D,IAAIC,IAAQF,IAAM;CAElB,IADA,IAAQE,IAAQ,IAAI,IAAI,KAAKA,GACzBA,MAAUH,EAAQ,KAAK,OAAO;CAElC,IAAM;CACN,KAAK,IAAIE,IAAI,GAAGA,IAAI,IAAI,KAAK,KAAOF,EAAQE,KAAMI,EAASJ;CAG3D,OAFA,IAAQD,IAAM,IACd,IAAQE,IAAQ,IAAI,IAAI,KAAKA,GACtBA,MAAUH,EAAQ;AAC7B;AAGA,SAAgBO,EAAU,GAAuB;CAC7C,OAAOX,EAAWC,CAAK,CAAC,CACnB,MAAM,GAAG,CAAC,CAAC,CACX,QAAQ,eAAe,OAAO;AACvC;AAGA,SAAgBW,EAAW,GAAuB;CAC9C,OAAOZ,EAAWC,CAAK,CAAC,CACnB,MAAM,GAAG,EAAE,CAAC,CACZ,QAAQ,eAAe,OAAO,CAAC,CAC/B,QAAQ,eAAe,OAAO,CAAC,CAC/B,QAAQ,eAAe,OAAO,CAAC,CAC/B,QAAQ,eAAe,OAAO;AACvC;AAGA,SAAgBY,EAAO,GAAuB;CAC1C,OAAOb,EAAWC,CAAK;AAC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masked-inputs.cjs","names":[],"sources":["../../src/forms/masked-inputs.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { InputHTMLAttributes } from \"react\";\nimport { Input, type InputProps } from \"@/components/Input\";\nimport { formatCEP, formatCNPJ } from \"./br-validators\";\nimport { formatCPF, formatPhone } from \"@/utils/format\";\nimport { numberFormat } from \"@/utils/intl-cache\";\n\n/**\n * Props of every masked input.\n *\n * `value` and `onChange` are optional because the primary documented usage is\n * inside `<FormField>`, which supplies both through `cloneElement` — declaring\n * them required made `<FormField name=\"cpf\"><CPFInput /></FormField>` fail to\n * type-check while working perfectly at runtime. Standalone usage still passes\n * both; an uncontrolled input without `onChange` simply reports nothing.\n */\ntype MaskedFieldProps = Omit<InputProps, \"value\" | \"onChange\"> & {\n value?: string;\n onChange?: (value: string) => void;\n};\n\nfunction maskedInput(\n mask: (input: string) => string,\n inputMode: InputHTMLAttributes<HTMLInputElement>[\"inputMode\"] = \"numeric\",\n) {\n return forwardRef<HTMLInputElement, MaskedFieldProps>(function MaskedInput(\n { value, onChange, ...props },\n ref,\n ) {\n return (\n <Input\n {...props}\n ref={ref}\n value={mask(value ?? \"\")}\n inputMode={inputMode}\n onChange={(event) => onChange?.(mask(event.target.value))}\n />\n );\n });\n}\n\nexport const CPFInput = maskedInput(formatCPF);\nexport const CNPJInput = maskedInput(formatCNPJ);\nexport const PhoneInput = maskedInput(formatPhone, \"tel\");\nexport const CEPInput = maskedInput(formatCEP);\n\nexport interface MoneyInputProps extends Omit<InputProps, \"value\" | \"onChange\" | \"type\"> {\n /** Cents (integer). Internally treated as 1/100 of the currency unit. */\n value: number;\n onChange: (cents: number) => void;\n /** Currency code for `Intl.NumberFormat`. Default: `\"BRL\"`. */\n currency?: string;\n /** Locale for `Intl.NumberFormat`. Default: `\"pt-BR\"`. */\n locale?: string;\n}\n\nfunction formatCents(cents: number, locale: string, currency: string): string {\n return numberFormat(locale, { style: \"currency\", currency }).format(cents / 100);\n}\n\nfunction parseCents(text: string): number {\n const digits = text.replace(/\\D/g, \"\");\n if (!digits) return 0;\n return Number.parseInt(digits, 10);\n}\n\n/**\n * Currency-masked input. Stores the value as an integer number of cents to\n * avoid floating-point error. Suitable for `react-hook-form` once you adapt\n * the field to expose cents.\n */\nexport const MoneyInput = forwardRef<HTMLInputElement, MoneyInputProps>(function MoneyInput(\n { value, onChange, currency = \"BRL\", locale = \"pt-BR\", ...props },\n ref,\n) {\n return (\n <Input\n {...props}\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n value={formatCents(value || 0, locale, currency)}\n onChange={(event) => onChange(parseCents(event.target.value))}\n />\n );\n});\n"],"mappings":"8MAqBA,
|
|
1
|
+
{"version":3,"file":"masked-inputs.cjs","names":["forwardRef","Input","formatCPF","formatCNPJ","formatPhone","formatCEP","numberFormat","require_Input","require_intl_cache","require_format","require_br_validators","react","react_jsx_runtime","maskedInput","props","mask","value","onChange","event","CPFInput","CNPJInput","PhoneInput","CEPInput","formatCents","locale","cents","parseCents","digits","text","MoneyInput","currency"],"sources":["../../src/forms/masked-inputs.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { InputHTMLAttributes } from \"react\";\nimport { Input, type InputProps } from \"@/components/Input\";\nimport { formatCEP, formatCNPJ } from \"./br-validators\";\nimport { formatCPF, formatPhone } from \"@/utils/format\";\nimport { numberFormat } from \"@/utils/intl-cache\";\n\n/**\n * Props of every masked input.\n *\n * `value` and `onChange` are optional because the primary documented usage is\n * inside `<FormField>`, which supplies both through `cloneElement` — declaring\n * them required made `<FormField name=\"cpf\"><CPFInput /></FormField>` fail to\n * type-check while working perfectly at runtime. Standalone usage still passes\n * both; an uncontrolled input without `onChange` simply reports nothing.\n */\ntype MaskedFieldProps = Omit<InputProps, \"value\" | \"onChange\"> & {\n value?: string;\n onChange?: (value: string) => void;\n};\n\nfunction maskedInput(\n mask: (input: string) => string,\n inputMode: InputHTMLAttributes<HTMLInputElement>[\"inputMode\"] = \"numeric\",\n) {\n return forwardRef<HTMLInputElement, MaskedFieldProps>(function MaskedInput(\n { value, onChange, ...props },\n ref,\n ) {\n return (\n <Input\n {...props}\n ref={ref}\n value={mask(value ?? \"\")}\n inputMode={inputMode}\n onChange={(event) => onChange?.(mask(event.target.value))}\n />\n );\n });\n}\n\nexport const CPFInput = maskedInput(formatCPF);\nexport const CNPJInput = maskedInput(formatCNPJ);\nexport const PhoneInput = maskedInput(formatPhone, \"tel\");\nexport const CEPInput = maskedInput(formatCEP);\n\nexport interface MoneyInputProps extends Omit<InputProps, \"value\" | \"onChange\" | \"type\"> {\n /** Cents (integer). Internally treated as 1/100 of the currency unit. */\n value: number;\n onChange: (cents: number) => void;\n /** Currency code for `Intl.NumberFormat`. Default: `\"BRL\"`. */\n currency?: string;\n /** Locale for `Intl.NumberFormat`. Default: `\"pt-BR\"`. */\n locale?: string;\n}\n\nfunction formatCents(cents: number, locale: string, currency: string): string {\n return numberFormat(locale, { style: \"currency\", currency }).format(cents / 100);\n}\n\nfunction parseCents(text: string): number {\n const digits = text.replace(/\\D/g, \"\");\n if (!digits) return 0;\n return Number.parseInt(digits, 10);\n}\n\n/**\n * Currency-masked input. Stores the value as an integer number of cents to\n * avoid floating-point error. Suitable for `react-hook-form` once you adapt\n * the field to expose cents.\n */\nexport const MoneyInput = forwardRef<HTMLInputElement, MoneyInputProps>(function MoneyInput(\n { value, onChange, currency = \"BRL\", locale = \"pt-BR\", ...props },\n ref,\n) {\n return (\n <Input\n {...props}\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n value={formatCents(value || 0, locale, currency)}\n onChange={(event) => onChange(parseCents(event.target.value))}\n />\n );\n});\n"],"mappings":"A,8MAqBA,SAASa,EACL,EACA,EAAgE,UAClE,CACE,OAAA,EAAOb,EAAAA,WAAAA,CAA+C,SAClD,CAAE,QAAO,WAAU,GAAGc,GACtB,EACF,CACE,OACI,EAAAF,EAAA,IAAA,CAACX,EAAAA,MAAD,CACI,GAAIa,EACC,MACL,MAAOC,EAAKC,GAAS,EAAE,EACZ,YACX,SAAW,GAAUC,IAAWF,EAAKG,EAAM,OAAO,KAAK,CAAC,CAC3D,CAAA,CAET,CAAC,CACL,CAEA,IAAaC,EAAWN,EAAYX,EAAAA,SAAS,EAChCkB,EAAYP,EAAYV,EAAAA,UAAU,EAClCkB,EAAaR,EAAYT,EAAAA,YAAa,KAAK,EAC3CkB,EAAWT,EAAYR,EAAAA,SAAS,EAY7C,SAASkB,EAAY,EAAe,EAAgB,EAA0B,CAC1E,OAAOjB,EAAAA,aAAakB,EAAQ,CAAE,MAAO,WAAY,UAAS,CAAC,CAAC,CAAC,OAAOC,EAAQ,GAAG,CACnF,CAEA,SAASC,EAAW,EAAsB,CACtC,IAAMC,EAASC,EAAK,QAAQ,MAAO,EAAE,EAErC,OADKD,EACE,OAAO,SAASA,EAAQ,EAAE,EADb,CAExB,CAOA,IAAaE,GAAA,EAAa7B,EAAAA,WAAAA,CAA8C,SACpE,CAAE,QAAO,WAAU,WAAW,MAAO,SAAS,QAAS,GAAGc,GAC1D,EACF,CACE,OACI,EAAAF,EAAA,IAAA,CAACX,EAAAA,MAAD,CACI,GAAIa,EACC,MACL,KAAK,OACL,UAAU,UACV,MAAOS,EAAYP,GAAS,EAAGQ,EAAQM,CAAQ,EAC/C,SAAW,GAAUb,EAASS,EAAWR,EAAM,OAAO,KAAK,CAAC,CAC/D,CAAA,CAET,CAAC,E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masked-inputs.js","names":[],"sources":["../../src/forms/masked-inputs.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { InputHTMLAttributes } from \"react\";\nimport { Input, type InputProps } from \"@/components/Input\";\nimport { formatCEP, formatCNPJ } from \"./br-validators\";\nimport { formatCPF, formatPhone } from \"@/utils/format\";\nimport { numberFormat } from \"@/utils/intl-cache\";\n\n/**\n * Props of every masked input.\n *\n * `value` and `onChange` are optional because the primary documented usage is\n * inside `<FormField>`, which supplies both through `cloneElement` — declaring\n * them required made `<FormField name=\"cpf\"><CPFInput /></FormField>` fail to\n * type-check while working perfectly at runtime. Standalone usage still passes\n * both; an uncontrolled input without `onChange` simply reports nothing.\n */\ntype MaskedFieldProps = Omit<InputProps, \"value\" | \"onChange\"> & {\n value?: string;\n onChange?: (value: string) => void;\n};\n\nfunction maskedInput(\n mask: (input: string) => string,\n inputMode: InputHTMLAttributes<HTMLInputElement>[\"inputMode\"] = \"numeric\",\n) {\n return forwardRef<HTMLInputElement, MaskedFieldProps>(function MaskedInput(\n { value, onChange, ...props },\n ref,\n ) {\n return (\n <Input\n {...props}\n ref={ref}\n value={mask(value ?? \"\")}\n inputMode={inputMode}\n onChange={(event) => onChange?.(mask(event.target.value))}\n />\n );\n });\n}\n\nexport const CPFInput = maskedInput(formatCPF);\nexport const CNPJInput = maskedInput(formatCNPJ);\nexport const PhoneInput = maskedInput(formatPhone, \"tel\");\nexport const CEPInput = maskedInput(formatCEP);\n\nexport interface MoneyInputProps extends Omit<InputProps, \"value\" | \"onChange\" | \"type\"> {\n /** Cents (integer). Internally treated as 1/100 of the currency unit. */\n value: number;\n onChange: (cents: number) => void;\n /** Currency code for `Intl.NumberFormat`. Default: `\"BRL\"`. */\n currency?: string;\n /** Locale for `Intl.NumberFormat`. Default: `\"pt-BR\"`. */\n locale?: string;\n}\n\nfunction formatCents(cents: number, locale: string, currency: string): string {\n return numberFormat(locale, { style: \"currency\", currency }).format(cents / 100);\n}\n\nfunction parseCents(text: string): number {\n const digits = text.replace(/\\D/g, \"\");\n if (!digits) return 0;\n return Number.parseInt(digits, 10);\n}\n\n/**\n * Currency-masked input. Stores the value as an integer number of cents to\n * avoid floating-point error. Suitable for `react-hook-form` once you adapt\n * the field to expose cents.\n */\nexport const MoneyInput = forwardRef<HTMLInputElement, MoneyInputProps>(function MoneyInput(\n { value, onChange, currency = \"BRL\", locale = \"pt-BR\", ...props },\n ref,\n) {\n return (\n <Input\n {...props}\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n value={formatCents(value || 0, locale, currency)}\n onChange={(event) => onChange(parseCents(event.target.value))}\n />\n );\n});\n"],"mappings":";;;;;;;AAqBA,
|
|
1
|
+
{"version":3,"file":"masked-inputs.js","names":["maskedInput","forwardRef","props","Input","mask","value","onChange","event","CPFInput","formatCPF","CNPJInput","formatCNPJ","PhoneInput","formatPhone","CEPInput","formatCEP","formatCents","numberFormat","locale","cents","parseCents","digits","text","MoneyInput","currency"],"sources":["../../src/forms/masked-inputs.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { InputHTMLAttributes } from \"react\";\nimport { Input, type InputProps } from \"@/components/Input\";\nimport { formatCEP, formatCNPJ } from \"./br-validators\";\nimport { formatCPF, formatPhone } from \"@/utils/format\";\nimport { numberFormat } from \"@/utils/intl-cache\";\n\n/**\n * Props of every masked input.\n *\n * `value` and `onChange` are optional because the primary documented usage is\n * inside `<FormField>`, which supplies both through `cloneElement` — declaring\n * them required made `<FormField name=\"cpf\"><CPFInput /></FormField>` fail to\n * type-check while working perfectly at runtime. Standalone usage still passes\n * both; an uncontrolled input without `onChange` simply reports nothing.\n */\ntype MaskedFieldProps = Omit<InputProps, \"value\" | \"onChange\"> & {\n value?: string;\n onChange?: (value: string) => void;\n};\n\nfunction maskedInput(\n mask: (input: string) => string,\n inputMode: InputHTMLAttributes<HTMLInputElement>[\"inputMode\"] = \"numeric\",\n) {\n return forwardRef<HTMLInputElement, MaskedFieldProps>(function MaskedInput(\n { value, onChange, ...props },\n ref,\n ) {\n return (\n <Input\n {...props}\n ref={ref}\n value={mask(value ?? \"\")}\n inputMode={inputMode}\n onChange={(event) => onChange?.(mask(event.target.value))}\n />\n );\n });\n}\n\nexport const CPFInput = maskedInput(formatCPF);\nexport const CNPJInput = maskedInput(formatCNPJ);\nexport const PhoneInput = maskedInput(formatPhone, \"tel\");\nexport const CEPInput = maskedInput(formatCEP);\n\nexport interface MoneyInputProps extends Omit<InputProps, \"value\" | \"onChange\" | \"type\"> {\n /** Cents (integer). Internally treated as 1/100 of the currency unit. */\n value: number;\n onChange: (cents: number) => void;\n /** Currency code for `Intl.NumberFormat`. Default: `\"BRL\"`. */\n currency?: string;\n /** Locale for `Intl.NumberFormat`. Default: `\"pt-BR\"`. */\n locale?: string;\n}\n\nfunction formatCents(cents: number, locale: string, currency: string): string {\n return numberFormat(locale, { style: \"currency\", currency }).format(cents / 100);\n}\n\nfunction parseCents(text: string): number {\n const digits = text.replace(/\\D/g, \"\");\n if (!digits) return 0;\n return Number.parseInt(digits, 10);\n}\n\n/**\n * Currency-masked input. Stores the value as an integer number of cents to\n * avoid floating-point error. Suitable for `react-hook-form` once you adapt\n * the field to expose cents.\n */\nexport const MoneyInput = forwardRef<HTMLInputElement, MoneyInputProps>(function MoneyInput(\n { value, onChange, currency = \"BRL\", locale = \"pt-BR\", ...props },\n ref,\n) {\n return (\n <Input\n {...props}\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n value={formatCents(value || 0, locale, currency)}\n onChange={(event) => onChange(parseCents(event.target.value))}\n />\n );\n});\n"],"mappings":";;;;;;;AAqBA,SAASA,EACL,GACA,IAAgE,WAClE;CACE,OAAOC,EAA+C,SAClD,EAAE,UAAO,aAAU,GAAGC,KACtB,GACF;EACE,OACI,kBAACC,GAAD;GACI,GAAID;GACC;GACL,OAAOE,EAAKC,KAAS,EAAE;GACZ;GACX,WAAW,MAAUC,IAAWF,EAAKG,EAAM,OAAO,KAAK,CAAC;EAC3D,CAAA;CAET,CAAC;AACL;AAEA,IAAaC,IAAWR,EAAYS,CAAS,GAChCC,IAAYV,EAAYW,CAAU,GAClCC,IAAaZ,EAAYa,GAAa,KAAK,GAC3CC,IAAWd,EAAYe,CAAS;AAY7C,SAASC,EAAY,GAAe,GAAgB,GAA0B;CAC1E,OAAOC,EAAaC,GAAQ;EAAE,OAAO;EAAY;CAAS,CAAC,CAAC,CAAC,OAAOC,IAAQ,GAAG;AACnF;AAEA,SAASC,EAAW,GAAsB;CACtC,IAAMC,IAASC,EAAK,QAAQ,OAAO,EAAE;CAErC,OADKD,IACE,OAAO,SAASA,GAAQ,EAAE,IADb;AAExB;AAOA,IAAaE,IAAatB,EAA8C,SACpE,EAAE,UAAO,aAAU,cAAW,OAAO,YAAS,SAAS,GAAGC,KAC1D,GACF;CACE,OACI,kBAACC,GAAD;EACI,GAAID;EACC;EACL,MAAK;EACL,WAAU;EACV,OAAOc,EAAYX,KAAS,GAAGa,GAAQM,CAAQ;EAC/C,WAAW,MAAUlB,EAASc,EAAWb,EAAM,OAAO,KAAK,CAAC;CAC/D,CAAA;AAET,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-viacep.cjs","names":[],"sources":["../../src/forms/use-viacep.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport interface ViaCEPResult {\n cep: string;\n logradouro: string;\n complemento: string;\n bairro: string;\n localidade: string;\n uf: string;\n ibge?: string;\n gia?: string;\n ddd?: string;\n siafi?: string;\n}\n\nexport interface UseViaCEPResult {\n loading: boolean;\n error: string | null;\n data: ViaCEPResult | null;\n /** Fetch the given CEP (8 digits or masked). Sets `data`/`error`. Returns the result. */\n lookup: (cep: string) => Promise<ViaCEPResult | null>;\n reset: () => void;\n}\n\n/**\n * React hook for the public ViaCEP service (`viacep.com.br`). No backend\n * required. Returns address fields when the CEP exists, or sets `error` for\n * invalid CEPs.\n */\nexport function useViaCEP(): UseViaCEPResult {\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const [data, setData] = useState<ViaCEPResult | null>(null);\n\n const lookup = useCallback(async (cep: string): Promise<ViaCEPResult | null> => {\n const digits = cep.replace(/\\D/g, \"\");\n if (digits.length !== 8) {\n setError(\"CEP inválido.\");\n return null;\n }\n setLoading(true);\n setError(null);\n try {\n const response = await fetch(`https://viacep.com.br/ws/${digits}/json/`);\n const json = (await response.json()) as ViaCEPResult & { erro?: boolean };\n if (\"erro\" in json && json.erro) {\n setError(\"CEP não encontrado.\");\n setData(null);\n return null;\n }\n setData(json);\n return json;\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const reset = useCallback(() => {\n setLoading(false);\n setError(null);\n setData(null);\n }, []);\n\n return { loading, error, data, lookup, reset };\n}\n"],"mappings":"uBA6BA,
|
|
1
|
+
{"version":3,"file":"use-viacep.cjs","names":["useState","useCallback","react","useViaCEP","loading","setLoading","error","setError","data","setData","digits","cep","json","err"],"sources":["../../src/forms/use-viacep.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport interface ViaCEPResult {\n cep: string;\n logradouro: string;\n complemento: string;\n bairro: string;\n localidade: string;\n uf: string;\n ibge?: string;\n gia?: string;\n ddd?: string;\n siafi?: string;\n}\n\nexport interface UseViaCEPResult {\n loading: boolean;\n error: string | null;\n data: ViaCEPResult | null;\n /** Fetch the given CEP (8 digits or masked). Sets `data`/`error`. Returns the result. */\n lookup: (cep: string) => Promise<ViaCEPResult | null>;\n reset: () => void;\n}\n\n/**\n * React hook for the public ViaCEP service (`viacep.com.br`). No backend\n * required. Returns address fields when the CEP exists, or sets `error` for\n * invalid CEPs.\n */\nexport function useViaCEP(): UseViaCEPResult {\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const [data, setData] = useState<ViaCEPResult | null>(null);\n\n const lookup = useCallback(async (cep: string): Promise<ViaCEPResult | null> => {\n const digits = cep.replace(/\\D/g, \"\");\n if (digits.length !== 8) {\n setError(\"CEP inválido.\");\n return null;\n }\n setLoading(true);\n setError(null);\n try {\n const response = await fetch(`https://viacep.com.br/ws/${digits}/json/`);\n const json = (await response.json()) as ViaCEPResult & { erro?: boolean };\n if (\"erro\" in json && json.erro) {\n setError(\"CEP não encontrado.\");\n setData(null);\n return null;\n }\n setData(json);\n return json;\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const reset = useCallback(() => {\n setLoading(false);\n setError(null);\n setData(null);\n }, []);\n\n return { loading, error, data, lookup, reset };\n}\n"],"mappings":"A,uBA6BA,SAAgBG,GAA6B,CACzC,GAAM,CAACC,EAASC,IAAA,EAAcL,EAAAA,SAAAA,CAAkB,EAAK,EAC/C,CAACM,EAAOC,IAAA,EAAYP,EAAAA,SAAAA,CAAwB,IAAI,EAChD,CAACQ,EAAMC,IAAA,EAAWT,EAAAA,SAAAA,CAA8B,IAAI,EAkC1D,MAAO,CAAE,UAAS,QAAO,OAAM,QAAA,EAhChBC,EAAAA,YAAAA,CAAY,KAAO,IAA8C,CAC5E,IAAMS,EAASC,EAAI,QAAQ,MAAO,EAAE,EACpC,GAAID,EAAO,SAAW,EAElB,OADAH,EAAS,eAAe,EACjB,KAEXF,EAAW,EAAI,EACfE,EAAS,IAAI,EACb,GAAI,CAEA,IAAMK,EAAQ,MAAM,MADG,MAAM,4BAA4BF,EAAO,OAAO,EAAA,CAC1C,KAAK,EAOlC,MANI,SAAUE,GAAQA,EAAK,MACvBL,EAAS,qBAAqB,EAC9BE,EAAQ,IAAI,EACL,OAEXA,EAAQG,CAAI,EACLA,EACX,OAASC,EAAK,CAEV,OADAN,EAASM,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAC,EAClD,IACX,QAAU,CACNR,EAAW,EAAK,CACpB,CACJ,EAAG,CAAC,CAQ2B,EAAQ,OAAA,EANzBJ,EAAAA,YAAAA,KAAkB,CAC5BI,EAAW,EAAK,EAChBE,EAAS,IAAI,EACbE,EAAQ,IAAI,CAChB,EAAG,CAAC,CAEmC,CAAM,CACjD,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-viacep.js","names":[],"sources":["../../src/forms/use-viacep.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport interface ViaCEPResult {\n cep: string;\n logradouro: string;\n complemento: string;\n bairro: string;\n localidade: string;\n uf: string;\n ibge?: string;\n gia?: string;\n ddd?: string;\n siafi?: string;\n}\n\nexport interface UseViaCEPResult {\n loading: boolean;\n error: string | null;\n data: ViaCEPResult | null;\n /** Fetch the given CEP (8 digits or masked). Sets `data`/`error`. Returns the result. */\n lookup: (cep: string) => Promise<ViaCEPResult | null>;\n reset: () => void;\n}\n\n/**\n * React hook for the public ViaCEP service (`viacep.com.br`). No backend\n * required. Returns address fields when the CEP exists, or sets `error` for\n * invalid CEPs.\n */\nexport function useViaCEP(): UseViaCEPResult {\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const [data, setData] = useState<ViaCEPResult | null>(null);\n\n const lookup = useCallback(async (cep: string): Promise<ViaCEPResult | null> => {\n const digits = cep.replace(/\\D/g, \"\");\n if (digits.length !== 8) {\n setError(\"CEP inválido.\");\n return null;\n }\n setLoading(true);\n setError(null);\n try {\n const response = await fetch(`https://viacep.com.br/ws/${digits}/json/`);\n const json = (await response.json()) as ViaCEPResult & { erro?: boolean };\n if (\"erro\" in json && json.erro) {\n setError(\"CEP não encontrado.\");\n setData(null);\n return null;\n }\n setData(json);\n return json;\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const reset = useCallback(() => {\n setLoading(false);\n setError(null);\n setData(null);\n }, []);\n\n return { loading, error, data, lookup, reset };\n}\n"],"mappings":";;AA6BA,
|
|
1
|
+
{"version":3,"file":"use-viacep.js","names":["useViaCEP","loading","setLoading","useState","error","setError","data","setData","useCallback","digits","cep","json","err"],"sources":["../../src/forms/use-viacep.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport interface ViaCEPResult {\n cep: string;\n logradouro: string;\n complemento: string;\n bairro: string;\n localidade: string;\n uf: string;\n ibge?: string;\n gia?: string;\n ddd?: string;\n siafi?: string;\n}\n\nexport interface UseViaCEPResult {\n loading: boolean;\n error: string | null;\n data: ViaCEPResult | null;\n /** Fetch the given CEP (8 digits or masked). Sets `data`/`error`. Returns the result. */\n lookup: (cep: string) => Promise<ViaCEPResult | null>;\n reset: () => void;\n}\n\n/**\n * React hook for the public ViaCEP service (`viacep.com.br`). No backend\n * required. Returns address fields when the CEP exists, or sets `error` for\n * invalid CEPs.\n */\nexport function useViaCEP(): UseViaCEPResult {\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const [data, setData] = useState<ViaCEPResult | null>(null);\n\n const lookup = useCallback(async (cep: string): Promise<ViaCEPResult | null> => {\n const digits = cep.replace(/\\D/g, \"\");\n if (digits.length !== 8) {\n setError(\"CEP inválido.\");\n return null;\n }\n setLoading(true);\n setError(null);\n try {\n const response = await fetch(`https://viacep.com.br/ws/${digits}/json/`);\n const json = (await response.json()) as ViaCEPResult & { erro?: boolean };\n if (\"erro\" in json && json.erro) {\n setError(\"CEP não encontrado.\");\n setData(null);\n return null;\n }\n setData(json);\n return json;\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const reset = useCallback(() => {\n setLoading(false);\n setError(null);\n setData(null);\n }, []);\n\n return { loading, error, data, lookup, reset };\n}\n"],"mappings":";;AA6BA,SAAgBA,IAA6B;CACzC,IAAM,CAACC,GAASC,KAAcC,EAAkB,EAAK,GAC/C,CAACC,GAAOC,KAAYF,EAAwB,IAAI,GAChD,CAACG,GAAMC,KAAWJ,EAA8B,IAAI;CAkC1D,OAAO;EAAE;EAAS;EAAO;EAAM,QAhChBK,EAAY,OAAO,MAA8C;GAC5E,IAAMC,IAASC,EAAI,QAAQ,OAAO,EAAE;GACpC,IAAID,EAAO,WAAW,GAElB,OADAJ,EAAS,eAAe,GACjB;GAGX,AADAH,EAAW,EAAI,GACfG,EAAS,IAAI;GACb,IAAI;IAEA,IAAMM,IAAQ,OAAM,MADG,MAAM,4BAA4BF,EAAO,OAAO,EAAA,CAC1C,KAAK;IAOlC,OANI,UAAUE,KAAQA,EAAK,QACvBN,EAAS,qBAAqB,GAC9BE,EAAQ,IAAI,GACL,SAEXA,EAAQI,CAAI,GACLA;GACX,SAASC,GAAK;IAEV,OADAP,EAASO,aAAe,QAAQA,EAAI,UAAU,OAAOA,CAAG,CAAC,GAClD;GACX,UAAU;IACN,EAAW,EAAK;GACpB;EACJ,GAAG,CAAC,CAQ2B;EAAQ,OANzBJ,QAAkB;GAG5B,AAFAN,EAAW,EAAK,GAChBG,EAAS,IAAI,GACbE,EAAQ,IAAI;EAChB,GAAG,CAAC,CAEmC;CAAM;AACjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-zod-form.cjs","names":[],"sources":["../../src/forms/use-zod-form.ts"],"sourcesContent":["import { useForm } from \"react-hook-form\";\nimport type { FieldValues, UseFormProps, UseFormReturn } from \"react-hook-form\";\nimport type { z } from \"zod\";\nimport { zodResolver } from \"./zod-resolver\";\n\n/**\n * Convenience wrapper around `react-hook-form`'s `useForm` that wires a zod\n * resolver and infers the form's value type from the schema.\n *\n * Both `react-hook-form` and `zod` are optional peer dependencies — install\n * them when your app uses forms.\n *\n * @example\n * const form = useZodForm(loginSchema, { defaultValues: { email: \"\" } });\n * form.register(\"email\");\n */\nexport function useZodForm<\n TSchema extends z.ZodTypeAny,\n TValues extends FieldValues = z.infer<TSchema> & FieldValues,\n>(schema: TSchema, options: Omit<UseFormProps<TValues>, \"resolver\"> = {}): UseFormReturn<TValues> {\n return useForm<TValues>({\n ...options,\n resolver: zodResolver(schema) as unknown as UseFormProps<TValues>[\"resolver\"],\n });\n}\n"],"mappings":"uEAgBA,
|
|
1
|
+
{"version":3,"file":"use-zod-form.cjs","names":["useForm","zodResolver","require_zod_resolver","react_hook_form","useZodForm","options","schema"],"sources":["../../src/forms/use-zod-form.ts"],"sourcesContent":["import { useForm } from \"react-hook-form\";\nimport type { FieldValues, UseFormProps, UseFormReturn } from \"react-hook-form\";\nimport type { z } from \"zod\";\nimport { zodResolver } from \"./zod-resolver\";\n\n/**\n * Convenience wrapper around `react-hook-form`'s `useForm` that wires a zod\n * resolver and infers the form's value type from the schema.\n *\n * Both `react-hook-form` and `zod` are optional peer dependencies — install\n * them when your app uses forms.\n *\n * @example\n * const form = useZodForm(loginSchema, { defaultValues: { email: \"\" } });\n * form.register(\"email\");\n */\nexport function useZodForm<\n TSchema extends z.ZodTypeAny,\n TValues extends FieldValues = z.infer<TSchema> & FieldValues,\n>(schema: TSchema, options: Omit<UseFormProps<TValues>, \"resolver\"> = {}): UseFormReturn<TValues> {\n return useForm<TValues>({\n ...options,\n resolver: zodResolver(schema) as unknown as UseFormProps<TValues>[\"resolver\"],\n });\n}\n"],"mappings":"A,uEAgBA,SAAgBI,EAGd,EAAiB,EAAmD,CAAC,EAA2B,CAC9F,OAAA,EAAOJ,EAAAA,QAAAA,CAAiB,CACpB,GAAGK,EACH,SAAUJ,EAAAA,YAAYK,CAAM,CAChC,CAAC,CACL,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-zod-form.js","names":[],"sources":["../../src/forms/use-zod-form.ts"],"sourcesContent":["import { useForm } from \"react-hook-form\";\nimport type { FieldValues, UseFormProps, UseFormReturn } from \"react-hook-form\";\nimport type { z } from \"zod\";\nimport { zodResolver } from \"./zod-resolver\";\n\n/**\n * Convenience wrapper around `react-hook-form`'s `useForm` that wires a zod\n * resolver and infers the form's value type from the schema.\n *\n * Both `react-hook-form` and `zod` are optional peer dependencies — install\n * them when your app uses forms.\n *\n * @example\n * const form = useZodForm(loginSchema, { defaultValues: { email: \"\" } });\n * form.register(\"email\");\n */\nexport function useZodForm<\n TSchema extends z.ZodTypeAny,\n TValues extends FieldValues = z.infer<TSchema> & FieldValues,\n>(schema: TSchema, options: Omit<UseFormProps<TValues>, \"resolver\"> = {}): UseFormReturn<TValues> {\n return useForm<TValues>({\n ...options,\n resolver: zodResolver(schema) as unknown as UseFormProps<TValues>[\"resolver\"],\n });\n}\n"],"mappings":";;;AAgBA,
|
|
1
|
+
{"version":3,"file":"use-zod-form.js","names":["useZodForm","useForm","options","zodResolver","schema"],"sources":["../../src/forms/use-zod-form.ts"],"sourcesContent":["import { useForm } from \"react-hook-form\";\nimport type { FieldValues, UseFormProps, UseFormReturn } from \"react-hook-form\";\nimport type { z } from \"zod\";\nimport { zodResolver } from \"./zod-resolver\";\n\n/**\n * Convenience wrapper around `react-hook-form`'s `useForm` that wires a zod\n * resolver and infers the form's value type from the schema.\n *\n * Both `react-hook-form` and `zod` are optional peer dependencies — install\n * them when your app uses forms.\n *\n * @example\n * const form = useZodForm(loginSchema, { defaultValues: { email: \"\" } });\n * form.register(\"email\");\n */\nexport function useZodForm<\n TSchema extends z.ZodTypeAny,\n TValues extends FieldValues = z.infer<TSchema> & FieldValues,\n>(schema: TSchema, options: Omit<UseFormProps<TValues>, \"resolver\"> = {}): UseFormReturn<TValues> {\n return useForm<TValues>({\n ...options,\n resolver: zodResolver(schema) as unknown as UseFormProps<TValues>[\"resolver\"],\n });\n}\n"],"mappings":";;;AAgBA,SAAgBA,EAGd,GAAiB,IAAmD,CAAC,GAA2B;CAC9F,OAAOC,EAAiB;EACpB,GAAGC;EACH,UAAUC,EAAYC,CAAM;CAChC,CAAC;AACL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-form.cjs","names":[],"sources":["../../src/forms/validate-form.ts"],"sourcesContent":["import type { z } from \"zod\";\n\nexport interface ValidateFormSuccess<T> {\n success: true;\n data: T;\n errors: Record<string, string>;\n}\n\nexport interface ValidateFormFailure {\n success: false;\n errors: Record<string, string>;\n}\n\nexport type ValidateFormResult<T> = ValidateFormSuccess<T> | ValidateFormFailure;\n\n/**\n * Validate `values` against a zod schema and return a per-field error map\n * compatible with most form libraries.\n *\n * Field paths follow zod's `issue.path.join(\".\")` convention — nested fields\n * become `\"address.city\"`, array entries `\"items.0.name\"`. The first issue\n * per path wins (subsequent ones are dropped to keep error UIs tidy).\n *\n * @param schema - zod schema describing the form shape.\n * @param values - Raw form values (typed as `unknown`).\n * @returns Either `{ success: true, data, errors: {} }` or `{ success: false, errors }`.\n */\nexport function validateForm<TSchema extends z.ZodTypeAny>(\n schema: TSchema,\n values: unknown,\n): ValidateFormResult<z.infer<TSchema>> {\n const result = schema.safeParse(values);\n if (result.success) {\n return { success: true, data: result.data, errors: {} };\n }\n const errors: Record<string, string> = {};\n for (const issue of result.error.issues) {\n const path = issue.path.length === 0 ? \"_root\" : issue.path.join(\".\");\n if (!(path in errors)) errors[path] = issue.message;\n }\n return { success: false, errors };\n}\n"],"mappings":"AA2BA,
|
|
1
|
+
{"version":3,"file":"validate-form.cjs","names":["validateForm","result","schema","values","errors","issue","path"],"sources":["../../src/forms/validate-form.ts"],"sourcesContent":["import type { z } from \"zod\";\n\nexport interface ValidateFormSuccess<T> {\n success: true;\n data: T;\n errors: Record<string, string>;\n}\n\nexport interface ValidateFormFailure {\n success: false;\n errors: Record<string, string>;\n}\n\nexport type ValidateFormResult<T> = ValidateFormSuccess<T> | ValidateFormFailure;\n\n/**\n * Validate `values` against a zod schema and return a per-field error map\n * compatible with most form libraries.\n *\n * Field paths follow zod's `issue.path.join(\".\")` convention — nested fields\n * become `\"address.city\"`, array entries `\"items.0.name\"`. The first issue\n * per path wins (subsequent ones are dropped to keep error UIs tidy).\n *\n * @param schema - zod schema describing the form shape.\n * @param values - Raw form values (typed as `unknown`).\n * @returns Either `{ success: true, data, errors: {} }` or `{ success: false, errors }`.\n */\nexport function validateForm<TSchema extends z.ZodTypeAny>(\n schema: TSchema,\n values: unknown,\n): ValidateFormResult<z.infer<TSchema>> {\n const result = schema.safeParse(values);\n if (result.success) {\n return { success: true, data: result.data, errors: {} };\n }\n const errors: Record<string, string> = {};\n for (const issue of result.error.issues) {\n const path = issue.path.length === 0 ? \"_root\" : issue.path.join(\".\");\n if (!(path in errors)) errors[path] = issue.message;\n }\n return { success: false, errors };\n}\n"],"mappings":"AA2BA,SAAgBA,EACZ,EACA,EACoC,CACpC,IAAMC,EAASC,EAAO,UAAUC,CAAM,EACtC,GAAIF,EAAO,QACP,MAAO,CAAE,QAAS,GAAM,KAAMA,EAAO,KAAM,OAAQ,CAAC,CAAE,EAE1D,IAAMG,EAAiC,CAAC,EACxC,IAAK,IAAMC,KAASJ,EAAO,MAAM,OAAQ,CACrC,IAAMK,EAAOD,EAAM,KAAK,SAAW,EAAI,QAAUA,EAAM,KAAK,KAAK,GAAG,EAC9DC,KAAQF,IAAS,EAAOE,GAAQD,EAAM,QAChD,CACA,MAAO,CAAE,QAAS,GAAO,QAAO,CACpC,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-form.js","names":[],"sources":["../../src/forms/validate-form.ts"],"sourcesContent":["import type { z } from \"zod\";\n\nexport interface ValidateFormSuccess<T> {\n success: true;\n data: T;\n errors: Record<string, string>;\n}\n\nexport interface ValidateFormFailure {\n success: false;\n errors: Record<string, string>;\n}\n\nexport type ValidateFormResult<T> = ValidateFormSuccess<T> | ValidateFormFailure;\n\n/**\n * Validate `values` against a zod schema and return a per-field error map\n * compatible with most form libraries.\n *\n * Field paths follow zod's `issue.path.join(\".\")` convention — nested fields\n * become `\"address.city\"`, array entries `\"items.0.name\"`. The first issue\n * per path wins (subsequent ones are dropped to keep error UIs tidy).\n *\n * @param schema - zod schema describing the form shape.\n * @param values - Raw form values (typed as `unknown`).\n * @returns Either `{ success: true, data, errors: {} }` or `{ success: false, errors }`.\n */\nexport function validateForm<TSchema extends z.ZodTypeAny>(\n schema: TSchema,\n values: unknown,\n): ValidateFormResult<z.infer<TSchema>> {\n const result = schema.safeParse(values);\n if (result.success) {\n return { success: true, data: result.data, errors: {} };\n }\n const errors: Record<string, string> = {};\n for (const issue of result.error.issues) {\n const path = issue.path.length === 0 ? \"_root\" : issue.path.join(\".\");\n if (!(path in errors)) errors[path] = issue.message;\n }\n return { success: false, errors };\n}\n"],"mappings":";AA2BA,
|
|
1
|
+
{"version":3,"file":"validate-form.js","names":["validateForm","result","schema","values","errors","issue","path"],"sources":["../../src/forms/validate-form.ts"],"sourcesContent":["import type { z } from \"zod\";\n\nexport interface ValidateFormSuccess<T> {\n success: true;\n data: T;\n errors: Record<string, string>;\n}\n\nexport interface ValidateFormFailure {\n success: false;\n errors: Record<string, string>;\n}\n\nexport type ValidateFormResult<T> = ValidateFormSuccess<T> | ValidateFormFailure;\n\n/**\n * Validate `values` against a zod schema and return a per-field error map\n * compatible with most form libraries.\n *\n * Field paths follow zod's `issue.path.join(\".\")` convention — nested fields\n * become `\"address.city\"`, array entries `\"items.0.name\"`. The first issue\n * per path wins (subsequent ones are dropped to keep error UIs tidy).\n *\n * @param schema - zod schema describing the form shape.\n * @param values - Raw form values (typed as `unknown`).\n * @returns Either `{ success: true, data, errors: {} }` or `{ success: false, errors }`.\n */\nexport function validateForm<TSchema extends z.ZodTypeAny>(\n schema: TSchema,\n values: unknown,\n): ValidateFormResult<z.infer<TSchema>> {\n const result = schema.safeParse(values);\n if (result.success) {\n return { success: true, data: result.data, errors: {} };\n }\n const errors: Record<string, string> = {};\n for (const issue of result.error.issues) {\n const path = issue.path.length === 0 ? \"_root\" : issue.path.join(\".\");\n if (!(path in errors)) errors[path] = issue.message;\n }\n return { success: false, errors };\n}\n"],"mappings":";AA2BA,SAAgBA,EACZ,GACA,GACoC;CACpC,IAAMC,IAASC,EAAO,UAAUC,CAAM;CACtC,IAAIF,EAAO,SACP,OAAO;EAAE,SAAS;EAAM,MAAMA,EAAO;EAAM,QAAQ,CAAC;CAAE;CAE1D,IAAMG,IAAiC,CAAC;CACxC,KAAK,IAAMC,KAASJ,EAAO,MAAM,QAAQ;EACrC,IAAMK,IAAOD,EAAM,KAAK,WAAW,IAAI,UAAUA,EAAM,KAAK,KAAK,GAAG;EACpE,AAAMC,KAAQF,MAAS,EAAOE,KAAQD,EAAM;CAChD;CACA,OAAO;EAAE,SAAS;EAAO;CAAO;AACpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod-resolver.cjs","names":[],"sources":["../../src/forms/zod-resolver.ts"],"sourcesContent":["import type {\n FieldErrors,\n FieldValues,\n Resolver,\n ResolverOptions,\n ResolverResult,\n} from \"react-hook-form\";\nimport type { z } from \"zod\";\n\ninterface ResolverError {\n type: string;\n message: string;\n}\n\n/**\n * Minimal `react-hook-form` resolver built on top of zod. Mirrors the shape\n * produced by `@hookform/resolvers/zod` so it can be passed straight to\n * `useForm({ resolver })`.\n *\n * Typed with react-hook-form's own `Resolver`, not a local look-alike: a\n * structurally similar type of our own compiled fine here and was then rejected\n * at the `useForm({ resolver })` call site — the only place a resolver is ever\n * used — which is why `useZodForm` had to cast its way past it.\n *\n * Of the resolver options only `criteriaMode` is read; the rest of\n * `ResolverOptions` is accepted and ignored, because react-hook-form always\n * passes the whole object.\n *\n * @example\n * const form = useForm<LoginForm>({ resolver: zodResolver(loginSchema) });\n */\nexport function zodResolver<TSchema extends z.ZodTypeAny>(\n schema: TSchema,\n): Resolver<z.infer<TSchema> & FieldValues> {\n type Values = z.infer<TSchema> & FieldValues;\n\n return async (\n values: Values,\n _context: unknown,\n options: ResolverOptions<Values>,\n ): Promise<ResolverResult<Values>> => {\n const result = schema.safeParse(values);\n if (result.success) {\n return { values: result.data as Values, errors: {} };\n }\n\n const errors: Record<string, ResolverError | object> = {};\n const criteriaMode = options.criteriaMode ?? \"firstError\";\n\n for (const issue of result.error.issues) {\n const path = issue.path.length === 0 ? \"_root\" : issue.path.join(\".\");\n if (criteriaMode === \"firstError\" && errors[path]) continue;\n errors[path] = { type: issue.code, message: issue.message };\n }\n\n return { values: {}, errors: errors as FieldErrors<Values> };\n };\n}\n"],"mappings":"AA+BA,
|
|
1
|
+
{"version":3,"file":"zod-resolver.cjs","names":["zodResolver","result","schema","values","errors","criteriaMode","options","issue","path"],"sources":["../../src/forms/zod-resolver.ts"],"sourcesContent":["import type {\n FieldErrors,\n FieldValues,\n Resolver,\n ResolverOptions,\n ResolverResult,\n} from \"react-hook-form\";\nimport type { z } from \"zod\";\n\ninterface ResolverError {\n type: string;\n message: string;\n}\n\n/**\n * Minimal `react-hook-form` resolver built on top of zod. Mirrors the shape\n * produced by `@hookform/resolvers/zod` so it can be passed straight to\n * `useForm({ resolver })`.\n *\n * Typed with react-hook-form's own `Resolver`, not a local look-alike: a\n * structurally similar type of our own compiled fine here and was then rejected\n * at the `useForm({ resolver })` call site — the only place a resolver is ever\n * used — which is why `useZodForm` had to cast its way past it.\n *\n * Of the resolver options only `criteriaMode` is read; the rest of\n * `ResolverOptions` is accepted and ignored, because react-hook-form always\n * passes the whole object.\n *\n * @example\n * const form = useForm<LoginForm>({ resolver: zodResolver(loginSchema) });\n */\nexport function zodResolver<TSchema extends z.ZodTypeAny>(\n schema: TSchema,\n): Resolver<z.infer<TSchema> & FieldValues> {\n type Values = z.infer<TSchema> & FieldValues;\n\n return async (\n values: Values,\n _context: unknown,\n options: ResolverOptions<Values>,\n ): Promise<ResolverResult<Values>> => {\n const result = schema.safeParse(values);\n if (result.success) {\n return { values: result.data as Values, errors: {} };\n }\n\n const errors: Record<string, ResolverError | object> = {};\n const criteriaMode = options.criteriaMode ?? \"firstError\";\n\n for (const issue of result.error.issues) {\n const path = issue.path.length === 0 ? \"_root\" : issue.path.join(\".\");\n if (criteriaMode === \"firstError\" && errors[path]) continue;\n errors[path] = { type: issue.code, message: issue.message };\n }\n\n return { values: {}, errors: errors as FieldErrors<Values> };\n };\n}\n"],"mappings":"AA+BA,SAAgBA,EACZ,EACwC,CAGxC,OAAO,MACH,EACA,EACA,IACkC,CAClC,IAAMC,EAASC,EAAO,UAAUC,CAAM,EACtC,GAAIF,EAAO,QACP,MAAO,CAAE,OAAQA,EAAO,KAAgB,OAAQ,CAAC,CAAE,EAGvD,IAAMG,EAAiD,CAAC,EAClDC,EAAeC,EAAQ,cAAgB,aAE7C,IAAK,IAAMC,KAASN,EAAO,MAAM,OAAQ,CACrC,IAAMO,EAAOD,EAAM,KAAK,SAAW,EAAI,QAAUA,EAAM,KAAK,KAAK,GAAG,EAChEF,IAAiB,cAAgBD,EAAOI,KAC5C,EAAOA,GAAQ,CAAE,KAAMD,EAAM,KAAM,QAASA,EAAM,OAAQ,EAC9D,CAEA,MAAO,CAAE,OAAQ,CAAC,EAAW,QAA8B,CAC/D,CACJ,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod-resolver.js","names":[],"sources":["../../src/forms/zod-resolver.ts"],"sourcesContent":["import type {\n FieldErrors,\n FieldValues,\n Resolver,\n ResolverOptions,\n ResolverResult,\n} from \"react-hook-form\";\nimport type { z } from \"zod\";\n\ninterface ResolverError {\n type: string;\n message: string;\n}\n\n/**\n * Minimal `react-hook-form` resolver built on top of zod. Mirrors the shape\n * produced by `@hookform/resolvers/zod` so it can be passed straight to\n * `useForm({ resolver })`.\n *\n * Typed with react-hook-form's own `Resolver`, not a local look-alike: a\n * structurally similar type of our own compiled fine here and was then rejected\n * at the `useForm({ resolver })` call site — the only place a resolver is ever\n * used — which is why `useZodForm` had to cast its way past it.\n *\n * Of the resolver options only `criteriaMode` is read; the rest of\n * `ResolverOptions` is accepted and ignored, because react-hook-form always\n * passes the whole object.\n *\n * @example\n * const form = useForm<LoginForm>({ resolver: zodResolver(loginSchema) });\n */\nexport function zodResolver<TSchema extends z.ZodTypeAny>(\n schema: TSchema,\n): Resolver<z.infer<TSchema> & FieldValues> {\n type Values = z.infer<TSchema> & FieldValues;\n\n return async (\n values: Values,\n _context: unknown,\n options: ResolverOptions<Values>,\n ): Promise<ResolverResult<Values>> => {\n const result = schema.safeParse(values);\n if (result.success) {\n return { values: result.data as Values, errors: {} };\n }\n\n const errors: Record<string, ResolverError | object> = {};\n const criteriaMode = options.criteriaMode ?? \"firstError\";\n\n for (const issue of result.error.issues) {\n const path = issue.path.length === 0 ? \"_root\" : issue.path.join(\".\");\n if (criteriaMode === \"firstError\" && errors[path]) continue;\n errors[path] = { type: issue.code, message: issue.message };\n }\n\n return { values: {}, errors: errors as FieldErrors<Values> };\n };\n}\n"],"mappings":";AA+BA,
|
|
1
|
+
{"version":3,"file":"zod-resolver.js","names":["zodResolver","result","schema","values","errors","criteriaMode","options","issue","path"],"sources":["../../src/forms/zod-resolver.ts"],"sourcesContent":["import type {\n FieldErrors,\n FieldValues,\n Resolver,\n ResolverOptions,\n ResolverResult,\n} from \"react-hook-form\";\nimport type { z } from \"zod\";\n\ninterface ResolverError {\n type: string;\n message: string;\n}\n\n/**\n * Minimal `react-hook-form` resolver built on top of zod. Mirrors the shape\n * produced by `@hookform/resolvers/zod` so it can be passed straight to\n * `useForm({ resolver })`.\n *\n * Typed with react-hook-form's own `Resolver`, not a local look-alike: a\n * structurally similar type of our own compiled fine here and was then rejected\n * at the `useForm({ resolver })` call site — the only place a resolver is ever\n * used — which is why `useZodForm` had to cast its way past it.\n *\n * Of the resolver options only `criteriaMode` is read; the rest of\n * `ResolverOptions` is accepted and ignored, because react-hook-form always\n * passes the whole object.\n *\n * @example\n * const form = useForm<LoginForm>({ resolver: zodResolver(loginSchema) });\n */\nexport function zodResolver<TSchema extends z.ZodTypeAny>(\n schema: TSchema,\n): Resolver<z.infer<TSchema> & FieldValues> {\n type Values = z.infer<TSchema> & FieldValues;\n\n return async (\n values: Values,\n _context: unknown,\n options: ResolverOptions<Values>,\n ): Promise<ResolverResult<Values>> => {\n const result = schema.safeParse(values);\n if (result.success) {\n return { values: result.data as Values, errors: {} };\n }\n\n const errors: Record<string, ResolverError | object> = {};\n const criteriaMode = options.criteriaMode ?? \"firstError\";\n\n for (const issue of result.error.issues) {\n const path = issue.path.length === 0 ? \"_root\" : issue.path.join(\".\");\n if (criteriaMode === \"firstError\" && errors[path]) continue;\n errors[path] = { type: issue.code, message: issue.message };\n }\n\n return { values: {}, errors: errors as FieldErrors<Values> };\n };\n}\n"],"mappings":";AA+BA,SAAgBA,EACZ,GACwC;CAGxC,OAAO,OACH,GACA,GACA,MACkC;EAClC,IAAMC,IAASC,EAAO,UAAUC,CAAM;EACtC,IAAIF,EAAO,SACP,OAAO;GAAE,QAAQA,EAAO;GAAgB,QAAQ,CAAC;EAAE;EAGvD,IAAMG,IAAiD,CAAC,GAClDC,IAAeC,EAAQ,gBAAgB;EAE7C,KAAK,IAAMC,KAASN,EAAO,MAAM,QAAQ;GACrC,IAAMO,IAAOD,EAAM,KAAK,WAAW,IAAI,UAAUA,EAAM,KAAK,KAAK,GAAG;GACpE,AAAIF,MAAiB,gBAAgBD,EAAOI,OAC5C,EAAOA,KAAQ;IAAE,MAAMD,EAAM;IAAM,SAASA,EAAM;GAAQ;EAC9D;EAEA,OAAO;GAAE,QAAQ,CAAC;GAAW;EAA8B;CAC/D;AACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrajectoryMap.cjs","names":[],"sources":["../../src/geo/TrajectoryMap.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the SVG plot (points,\n * current, height, padding, showGrid, showScale, strokeColor, label), the optional\n * leaflet tile layer (tileUrl, tileAttribution) and the overlay (markers,\n * onMarkerClick). The body projects the path, fits the bounds and hands the same\n * bounds to the tile layer when there is one.\n */\nimport { lazy, Suspense, useEffect, useMemo, useRef, useState, type HTMLAttributes } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { boundingBox, expandBounds } from \"./bounds\";\nimport { haversineKm } from \"./distance\";\nimport { fitProjection, type PixelPoint } from \"./projection\";\nimport type { Coordinate, GeoMarker } from \"./types\";\nimport styles from \"./TrajectoryMap.module.css\";\n\n// Leaflet layer is loaded on demand — only when a `tileUrl` is supplied, so\n// apps that stick to the tile-free SVG never pull leaflet into their bundle.\nconst LeafletTrajectory = lazy(() =>\n import(\"./leaflet-map\").then((m) => ({ default: m.LeafletTrajectory })),\n);\n\nexport interface TrajectoryMapProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Ordered coordinates forming the trajectory. */\n points: readonly Coordinate[];\n /** Optional \"current position\" marker, drawn on top of the path. */\n current?: Coordinate | null;\n /** Viewport height in pixels. Default: `320`. */\n height?: number;\n /** Inner padding in pixels kept clear on every edge. Default: `24`. */\n padding?: number;\n /** Draw a light reference grid behind the path (SVG mode). Default: `true`. */\n showGrid?: boolean;\n /** Draw a distance scale bar (SVG mode). Default: `true`. */\n showScale?: boolean;\n /** Path stroke color. Default: the primary token. */\n strokeColor?: string;\n /**\n * Tile URL template (`{z}/{x}/{y}`) of a map server **you host**. When set,\n * the map upgrades to a real Leaflet tile layer (requires `leaflet` to be\n * installed). Omit for the zero-dependency, zero-network SVG plot.\n */\n tileUrl?: string;\n /** Attribution text shown over the tile layer. */\n tileAttribution?: string;\n /** Accessible label for the map region. Default: `\"Trajetória\"`. */\n label?: string;\n /** Point markers to overlay (e.g. stops, POIs). Included in the auto-fit. */\n markers?: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n}\n\nconst NICE_KM_STEPS = [0.05, 0.1, 0.25, 0.5, 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000] as const;\n\n/** Pick the largest \"nice\" distance whose bar fits within `maxPixels`. */\nfunction pickScaleKm(kmPerPixel: number, maxPixels: number): { km: number; pixels: number } {\n const maxKm = kmPerPixel * maxPixels;\n let chosen: number = NICE_KM_STEPS[0];\n for (const step of NICE_KM_STEPS) {\n if (step <= maxKm) chosen = step;\n }\n return { km: chosen, pixels: chosen / kmPerPixel };\n}\n\n/** Format a distance in km for the scale bar (meters below 1 km). */\nfunction formatScale(km: number): string {\n return km < 1 ? `${Math.round(km * 1000)} m` : `${km % 1 === 0 ? km : km.toFixed(1)} km`;\n}\n\n/**\n * Plot a GPS trajectory. By default it renders a **tile-free SVG** map (Web\n * Mercator projection, auto-fit to the points, optional grid + scale bar) —\n * 100% self-contained, no external tiles or paid API. Pass `tileUrl` pointing\n * at a map server **you host** to upgrade to a real Leaflet tile layer.\n *\n * @example\n * // Zero-dependency SVG plot\n * <TrajectoryMap points={points} current={lastPoint} height={360} />\n *\n * @example\n * // Real tiles from your own server (requires `leaflet` installed)\n * <TrajectoryMap points={points} tileUrl=\"https://tiles.internal/{z}/{x}/{y}.png\" />\n */\nexport function TrajectoryMap({\n points,\n current,\n height = 320,\n padding = 24,\n showGrid = true,\n showScale = true,\n strokeColor,\n tileUrl,\n tileAttribution,\n label = \"Trajetória\",\n markers,\n onMarkerClick,\n className,\n style,\n ...rest\n}: TrajectoryMapProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState<number>(600);\n\n useEffect(() => {\n const node = containerRef.current;\n if (!node || typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver((entries) => {\n const measured = entries[0]?.contentRect.width;\n if (measured && measured > 0) setWidth(measured);\n });\n observer.observe(node);\n return () => observer.disconnect();\n }, []);\n\n const allPoints = useMemo<Coordinate[]>(\n () => [...points, ...(current ? [current] : []), ...(markers ?? [])],\n [points, current, markers],\n );\n\n const svg = useMemo(() => {\n const box = boundingBox(allPoints);\n if (!box) return null;\n\n const projection = fitProjection(expandBounds(box, 0.12), width, height, { padding });\n const pixels: PixelPoint[] = points.map((p) => projection.project(p));\n const polyline = pixels.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(\" \");\n\n const startPixel = pixels[0] ?? null;\n const endPixel = pixels.length > 0 ? pixels[pixels.length - 1] : null;\n const currentPixel = current ? projection.project(current) : null;\n\n // Distance-per-pixel at the map center, for the scale bar: measure the\n // center → east-edge span in both km (haversine) and pixels (projected).\n const centerCoord = {\n latitude: (box.minLatitude + box.maxLatitude) / 2,\n longitude: (box.minLongitude + box.maxLongitude) / 2,\n };\n const center = projection.project(centerCoord);\n const eastRef = projection.project({ ...centerCoord, longitude: box.maxLongitude });\n const edgeKm = haversineKm(centerCoord, { ...centerCoord, longitude: box.maxLongitude });\n const edgePixels = Math.abs(eastRef.x - center.x) || 1;\n const kmPerPixel = edgeKm / edgePixels || 0;\n\n const markerPixels = (markers ?? []).map((m) => ({ marker: m, p: projection.project(m) }));\n\n return { polyline, startPixel, endPixel, currentPixel, kmPerPixel, markerPixels };\n }, [allPoints, points, current, markers, width, height, padding]);\n\n // ── Leaflet tile mode ────────────────────────────────────────────────────\n if (tileUrl) {\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n <Suspense fallback={<div className={styles.loading}>Carregando mapa…</div>}>\n <LeafletTrajectory\n points={points}\n current={current}\n tileUrl={tileUrl}\n tileAttribution={tileAttribution}\n strokeColor={strokeColor}\n />\n </Suspense>\n </div>\n );\n }\n\n // ── Tile-free SVG mode ─────────────────────────────────────────────────────\n const scale =\n showScale && svg && svg.kmPerPixel > 0\n ? pickScaleKm(svg.kmPerPixel, Math.min(120, width * 0.35))\n : null;\n\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n {!svg ? (\n <div className={styles.empty}>Sem pontos de trajetória ainda.</div>\n ) : (\n <svg\n className={styles.svg}\n width=\"100%\"\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"xMidYMid meet\"\n >\n {showGrid && (\n <g className={styles.grid}>\n {[0.25, 0.5, 0.75].map((f) => (\n <line\n key={`h${f}`}\n x1={0}\n y1={height * f}\n x2={width}\n y2={height * f}\n />\n ))}\n {[0.25, 0.5, 0.75].map((f) => (\n <line\n key={`v${f}`}\n x1={width * f}\n y1={0}\n x2={width * f}\n y2={height}\n />\n ))}\n </g>\n )}\n\n {svg.polyline && (\n <polyline\n className={styles.path}\n points={svg.polyline}\n fill=\"none\"\n stroke={strokeColor}\n data-testid=\"trajectory-path\"\n />\n )}\n\n {svg.startPixel && (\n <circle\n className={styles.start}\n cx={svg.startPixel.x}\n cy={svg.startPixel.y}\n r={5}\n />\n )}\n {svg.endPixel && !current && (\n <circle\n className={styles.end}\n cx={svg.endPixel.x}\n cy={svg.endPixel.y}\n r={5}\n />\n )}\n {svg.currentPixel && (\n <>\n <circle\n className={styles.pulse}\n cx={svg.currentPixel.x}\n cy={svg.currentPixel.y}\n r={10}\n />\n <circle\n className={styles.current}\n cx={svg.currentPixel.x}\n cy={svg.currentPixel.y}\n r={5}\n />\n </>\n )}\n\n {svg.markerPixels.map(({ marker, p }, i) => {\n const interactive = Boolean(onMarkerClick);\n return (\n <circle\n key={marker.id ?? i}\n className={styles.marker}\n cx={p.x}\n cy={p.y}\n r={marker.radius ?? 6}\n style={marker.color ? { fill: marker.color } : undefined}\n data-marker-id={marker.id ?? i}\n tabIndex={interactive ? 0 : undefined}\n role={interactive ? \"button\" : undefined}\n aria-label={marker.label}\n onClick={interactive ? () => onMarkerClick?.(marker, i) : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onMarkerClick?.(marker, i);\n }\n }\n : undefined\n }\n >\n {marker.label ? <title>{marker.label}</title> : null}\n </circle>\n );\n })}\n\n {scale && (\n <g\n className={styles.scale}\n transform={`translate(${padding}, ${height - padding})`}\n >\n <line x1={0} y1={0} x2={scale.pixels} y2={0} />\n <line x1={0} y1={-4} x2={0} y2={4} />\n <line x1={scale.pixels} y1={-4} x2={scale.pixels} y2={4} />\n <text x={scale.pixels / 2} y={-8} textAnchor=\"middle\">\n {formatScale(scale.km)}\n </text>\n </g>\n )}\n </svg>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TrajectoryMap.cjs","names":["lazy","useRef","useState","useMemo","boundingBox","fitProjection","expandBounds","haversineKm","cn","styles","Suspense","_Fragment","require_cn","require_distance","require_bounds","require_projection","require_TrajectoryMap_module","react","react_jsx_runtime","LeafletTrajectory","m","NICE_KM_STEPS","pickScaleKm","maxKm","kmPerPixel","maxPixels","chosen","step","formatScale","km","TrajectoryMap","rest","containerRef","width","setWidth","node","observer","measured","entries","allPoints","points","current","markers","svg","box","projection","height","pixels","p","polyline","startPixel","endPixel","currentPixel","centerCoord","center","eastRef","padding","tileUrl","className","style","label","scale","showScale","showGrid","f","strokeColor","interactive","onMarkerClick","marker","i","e"],"sources":["../../src/geo/TrajectoryMap.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the SVG plot (points,\n * current, height, padding, showGrid, showScale, strokeColor, label), the optional\n * leaflet tile layer (tileUrl, tileAttribution) and the overlay (markers,\n * onMarkerClick). The body projects the path, fits the bounds and hands the same\n * bounds to the tile layer when there is one.\n */\nimport { lazy, Suspense, useEffect, useMemo, useRef, useState, type HTMLAttributes } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { boundingBox, expandBounds } from \"./bounds\";\nimport { haversineKm } from \"./distance\";\nimport { fitProjection, type PixelPoint } from \"./projection\";\nimport type { Coordinate, GeoMarker } from \"./types\";\nimport styles from \"./TrajectoryMap.module.css\";\n\n// Leaflet layer is loaded on demand — only when a `tileUrl` is supplied, so\n// apps that stick to the tile-free SVG never pull leaflet into their bundle.\nconst LeafletTrajectory = lazy(() =>\n import(\"./leaflet-map\").then((m) => ({ default: m.LeafletTrajectory })),\n);\n\nexport interface TrajectoryMapProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Ordered coordinates forming the trajectory. */\n points: readonly Coordinate[];\n /** Optional \"current position\" marker, drawn on top of the path. */\n current?: Coordinate | null;\n /** Viewport height in pixels. Default: `320`. */\n height?: number;\n /** Inner padding in pixels kept clear on every edge. Default: `24`. */\n padding?: number;\n /** Draw a light reference grid behind the path (SVG mode). Default: `true`. */\n showGrid?: boolean;\n /** Draw a distance scale bar (SVG mode). Default: `true`. */\n showScale?: boolean;\n /** Path stroke color. Default: the primary token. */\n strokeColor?: string;\n /**\n * Tile URL template (`{z}/{x}/{y}`) of a map server **you host**. When set,\n * the map upgrades to a real Leaflet tile layer (requires `leaflet` to be\n * installed). Omit for the zero-dependency, zero-network SVG plot.\n */\n tileUrl?: string;\n /** Attribution text shown over the tile layer. */\n tileAttribution?: string;\n /** Accessible label for the map region. Default: `\"Trajetória\"`. */\n label?: string;\n /** Point markers to overlay (e.g. stops, POIs). Included in the auto-fit. */\n markers?: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n}\n\nconst NICE_KM_STEPS = [0.05, 0.1, 0.25, 0.5, 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000] as const;\n\n/** Pick the largest \"nice\" distance whose bar fits within `maxPixels`. */\nfunction pickScaleKm(kmPerPixel: number, maxPixels: number): { km: number; pixels: number } {\n const maxKm = kmPerPixel * maxPixels;\n let chosen: number = NICE_KM_STEPS[0];\n for (const step of NICE_KM_STEPS) {\n if (step <= maxKm) chosen = step;\n }\n return { km: chosen, pixels: chosen / kmPerPixel };\n}\n\n/** Format a distance in km for the scale bar (meters below 1 km). */\nfunction formatScale(km: number): string {\n return km < 1 ? `${Math.round(km * 1000)} m` : `${km % 1 === 0 ? km : km.toFixed(1)} km`;\n}\n\n/**\n * Plot a GPS trajectory. By default it renders a **tile-free SVG** map (Web\n * Mercator projection, auto-fit to the points, optional grid + scale bar) —\n * 100% self-contained, no external tiles or paid API. Pass `tileUrl` pointing\n * at a map server **you host** to upgrade to a real Leaflet tile layer.\n *\n * @example\n * // Zero-dependency SVG plot\n * <TrajectoryMap points={points} current={lastPoint} height={360} />\n *\n * @example\n * // Real tiles from your own server (requires `leaflet` installed)\n * <TrajectoryMap points={points} tileUrl=\"https://tiles.internal/{z}/{x}/{y}.png\" />\n */\nexport function TrajectoryMap({\n points,\n current,\n height = 320,\n padding = 24,\n showGrid = true,\n showScale = true,\n strokeColor,\n tileUrl,\n tileAttribution,\n label = \"Trajetória\",\n markers,\n onMarkerClick,\n className,\n style,\n ...rest\n}: TrajectoryMapProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState<number>(600);\n\n useEffect(() => {\n const node = containerRef.current;\n if (!node || typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver((entries) => {\n const measured = entries[0]?.contentRect.width;\n if (measured && measured > 0) setWidth(measured);\n });\n observer.observe(node);\n return () => observer.disconnect();\n }, []);\n\n const allPoints = useMemo<Coordinate[]>(\n () => [...points, ...(current ? [current] : []), ...(markers ?? [])],\n [points, current, markers],\n );\n\n const svg = useMemo(() => {\n const box = boundingBox(allPoints);\n if (!box) return null;\n\n const projection = fitProjection(expandBounds(box, 0.12), width, height, { padding });\n const pixels: PixelPoint[] = points.map((p) => projection.project(p));\n const polyline = pixels.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(\" \");\n\n const startPixel = pixels[0] ?? null;\n const endPixel = pixels.length > 0 ? pixels[pixels.length - 1] : null;\n const currentPixel = current ? projection.project(current) : null;\n\n // Distance-per-pixel at the map center, for the scale bar: measure the\n // center → east-edge span in both km (haversine) and pixels (projected).\n const centerCoord = {\n latitude: (box.minLatitude + box.maxLatitude) / 2,\n longitude: (box.minLongitude + box.maxLongitude) / 2,\n };\n const center = projection.project(centerCoord);\n const eastRef = projection.project({ ...centerCoord, longitude: box.maxLongitude });\n const edgeKm = haversineKm(centerCoord, { ...centerCoord, longitude: box.maxLongitude });\n const edgePixels = Math.abs(eastRef.x - center.x) || 1;\n const kmPerPixel = edgeKm / edgePixels || 0;\n\n const markerPixels = (markers ?? []).map((m) => ({ marker: m, p: projection.project(m) }));\n\n return { polyline, startPixel, endPixel, currentPixel, kmPerPixel, markerPixels };\n }, [allPoints, points, current, markers, width, height, padding]);\n\n // ── Leaflet tile mode ────────────────────────────────────────────────────\n if (tileUrl) {\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n <Suspense fallback={<div className={styles.loading}>Carregando mapa…</div>}>\n <LeafletTrajectory\n points={points}\n current={current}\n tileUrl={tileUrl}\n tileAttribution={tileAttribution}\n strokeColor={strokeColor}\n />\n </Suspense>\n </div>\n );\n }\n\n // ── Tile-free SVG mode ─────────────────────────────────────────────────────\n const scale =\n showScale && svg && svg.kmPerPixel > 0\n ? pickScaleKm(svg.kmPerPixel, Math.min(120, width * 0.35))\n : null;\n\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n {!svg ? (\n <div className={styles.empty}>Sem pontos de trajetória ainda.</div>\n ) : (\n <svg\n className={styles.svg}\n width=\"100%\"\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"xMidYMid meet\"\n >\n {showGrid && (\n <g className={styles.grid}>\n {[0.25, 0.5, 0.75].map((f) => (\n <line\n key={`h${f}`}\n x1={0}\n y1={height * f}\n x2={width}\n y2={height * f}\n />\n ))}\n {[0.25, 0.5, 0.75].map((f) => (\n <line\n key={`v${f}`}\n x1={width * f}\n y1={0}\n x2={width * f}\n y2={height}\n />\n ))}\n </g>\n )}\n\n {svg.polyline && (\n <polyline\n className={styles.path}\n points={svg.polyline}\n fill=\"none\"\n stroke={strokeColor}\n data-testid=\"trajectory-path\"\n />\n )}\n\n {svg.startPixel && (\n <circle\n className={styles.start}\n cx={svg.startPixel.x}\n cy={svg.startPixel.y}\n r={5}\n />\n )}\n {svg.endPixel && !current && (\n <circle\n className={styles.end}\n cx={svg.endPixel.x}\n cy={svg.endPixel.y}\n r={5}\n />\n )}\n {svg.currentPixel && (\n <>\n <circle\n className={styles.pulse}\n cx={svg.currentPixel.x}\n cy={svg.currentPixel.y}\n r={10}\n />\n <circle\n className={styles.current}\n cx={svg.currentPixel.x}\n cy={svg.currentPixel.y}\n r={5}\n />\n </>\n )}\n\n {svg.markerPixels.map(({ marker, p }, i) => {\n const interactive = Boolean(onMarkerClick);\n return (\n <circle\n key={marker.id ?? i}\n className={styles.marker}\n cx={p.x}\n cy={p.y}\n r={marker.radius ?? 6}\n style={marker.color ? { fill: marker.color } : undefined}\n data-marker-id={marker.id ?? i}\n tabIndex={interactive ? 0 : undefined}\n role={interactive ? \"button\" : undefined}\n aria-label={marker.label}\n onClick={interactive ? () => onMarkerClick?.(marker, i) : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onMarkerClick?.(marker, i);\n }\n }\n : undefined\n }\n >\n {marker.label ? <title>{marker.label}</title> : null}\n </circle>\n );\n })}\n\n {scale && (\n <g\n className={styles.scale}\n transform={`translate(${padding}, ${height - padding})`}\n >\n <line x1={0} y1={0} x2={scale.pixels} y2={0} />\n <line x1={0} y1={-4} x2={0} y2={4} />\n <line x1={scale.pixels} y1={-4} x2={scale.pixels} y2={4} />\n <text x={scale.pixels / 2} y={-8} textAnchor=\"middle\">\n {formatScale(scale.km)}\n </text>\n </g>\n )}\n </svg>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrajectoryMap.js","names":[],"sources":["../../src/geo/TrajectoryMap.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the SVG plot (points,\n * current, height, padding, showGrid, showScale, strokeColor, label), the optional\n * leaflet tile layer (tileUrl, tileAttribution) and the overlay (markers,\n * onMarkerClick). The body projects the path, fits the bounds and hands the same\n * bounds to the tile layer when there is one.\n */\nimport { lazy, Suspense, useEffect, useMemo, useRef, useState, type HTMLAttributes } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { boundingBox, expandBounds } from \"./bounds\";\nimport { haversineKm } from \"./distance\";\nimport { fitProjection, type PixelPoint } from \"./projection\";\nimport type { Coordinate, GeoMarker } from \"./types\";\nimport styles from \"./TrajectoryMap.module.css\";\n\n// Leaflet layer is loaded on demand — only when a `tileUrl` is supplied, so\n// apps that stick to the tile-free SVG never pull leaflet into their bundle.\nconst LeafletTrajectory = lazy(() =>\n import(\"./leaflet-map\").then((m) => ({ default: m.LeafletTrajectory })),\n);\n\nexport interface TrajectoryMapProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Ordered coordinates forming the trajectory. */\n points: readonly Coordinate[];\n /** Optional \"current position\" marker, drawn on top of the path. */\n current?: Coordinate | null;\n /** Viewport height in pixels. Default: `320`. */\n height?: number;\n /** Inner padding in pixels kept clear on every edge. Default: `24`. */\n padding?: number;\n /** Draw a light reference grid behind the path (SVG mode). Default: `true`. */\n showGrid?: boolean;\n /** Draw a distance scale bar (SVG mode). Default: `true`. */\n showScale?: boolean;\n /** Path stroke color. Default: the primary token. */\n strokeColor?: string;\n /**\n * Tile URL template (`{z}/{x}/{y}`) of a map server **you host**. When set,\n * the map upgrades to a real Leaflet tile layer (requires `leaflet` to be\n * installed). Omit for the zero-dependency, zero-network SVG plot.\n */\n tileUrl?: string;\n /** Attribution text shown over the tile layer. */\n tileAttribution?: string;\n /** Accessible label for the map region. Default: `\"Trajetória\"`. */\n label?: string;\n /** Point markers to overlay (e.g. stops, POIs). Included in the auto-fit. */\n markers?: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n}\n\nconst NICE_KM_STEPS = [0.05, 0.1, 0.25, 0.5, 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000] as const;\n\n/** Pick the largest \"nice\" distance whose bar fits within `maxPixels`. */\nfunction pickScaleKm(kmPerPixel: number, maxPixels: number): { km: number; pixels: number } {\n const maxKm = kmPerPixel * maxPixels;\n let chosen: number = NICE_KM_STEPS[0];\n for (const step of NICE_KM_STEPS) {\n if (step <= maxKm) chosen = step;\n }\n return { km: chosen, pixels: chosen / kmPerPixel };\n}\n\n/** Format a distance in km for the scale bar (meters below 1 km). */\nfunction formatScale(km: number): string {\n return km < 1 ? `${Math.round(km * 1000)} m` : `${km % 1 === 0 ? km : km.toFixed(1)} km`;\n}\n\n/**\n * Plot a GPS trajectory. By default it renders a **tile-free SVG** map (Web\n * Mercator projection, auto-fit to the points, optional grid + scale bar) —\n * 100% self-contained, no external tiles or paid API. Pass `tileUrl` pointing\n * at a map server **you host** to upgrade to a real Leaflet tile layer.\n *\n * @example\n * // Zero-dependency SVG plot\n * <TrajectoryMap points={points} current={lastPoint} height={360} />\n *\n * @example\n * // Real tiles from your own server (requires `leaflet` installed)\n * <TrajectoryMap points={points} tileUrl=\"https://tiles.internal/{z}/{x}/{y}.png\" />\n */\nexport function TrajectoryMap({\n points,\n current,\n height = 320,\n padding = 24,\n showGrid = true,\n showScale = true,\n strokeColor,\n tileUrl,\n tileAttribution,\n label = \"Trajetória\",\n markers,\n onMarkerClick,\n className,\n style,\n ...rest\n}: TrajectoryMapProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState<number>(600);\n\n useEffect(() => {\n const node = containerRef.current;\n if (!node || typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver((entries) => {\n const measured = entries[0]?.contentRect.width;\n if (measured && measured > 0) setWidth(measured);\n });\n observer.observe(node);\n return () => observer.disconnect();\n }, []);\n\n const allPoints = useMemo<Coordinate[]>(\n () => [...points, ...(current ? [current] : []), ...(markers ?? [])],\n [points, current, markers],\n );\n\n const svg = useMemo(() => {\n const box = boundingBox(allPoints);\n if (!box) return null;\n\n const projection = fitProjection(expandBounds(box, 0.12), width, height, { padding });\n const pixels: PixelPoint[] = points.map((p) => projection.project(p));\n const polyline = pixels.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(\" \");\n\n const startPixel = pixels[0] ?? null;\n const endPixel = pixels.length > 0 ? pixels[pixels.length - 1] : null;\n const currentPixel = current ? projection.project(current) : null;\n\n // Distance-per-pixel at the map center, for the scale bar: measure the\n // center → east-edge span in both km (haversine) and pixels (projected).\n const centerCoord = {\n latitude: (box.minLatitude + box.maxLatitude) / 2,\n longitude: (box.minLongitude + box.maxLongitude) / 2,\n };\n const center = projection.project(centerCoord);\n const eastRef = projection.project({ ...centerCoord, longitude: box.maxLongitude });\n const edgeKm = haversineKm(centerCoord, { ...centerCoord, longitude: box.maxLongitude });\n const edgePixels = Math.abs(eastRef.x - center.x) || 1;\n const kmPerPixel = edgeKm / edgePixels || 0;\n\n const markerPixels = (markers ?? []).map((m) => ({ marker: m, p: projection.project(m) }));\n\n return { polyline, startPixel, endPixel, currentPixel, kmPerPixel, markerPixels };\n }, [allPoints, points, current, markers, width, height, padding]);\n\n // ── Leaflet tile mode ────────────────────────────────────────────────────\n if (tileUrl) {\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n <Suspense fallback={<div className={styles.loading}>Carregando mapa…</div>}>\n <LeafletTrajectory\n points={points}\n current={current}\n tileUrl={tileUrl}\n tileAttribution={tileAttribution}\n strokeColor={strokeColor}\n />\n </Suspense>\n </div>\n );\n }\n\n // ── Tile-free SVG mode ─────────────────────────────────────────────────────\n const scale =\n showScale && svg && svg.kmPerPixel > 0\n ? pickScaleKm(svg.kmPerPixel, Math.min(120, width * 0.35))\n : null;\n\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n {!svg ? (\n <div className={styles.empty}>Sem pontos de trajetória ainda.</div>\n ) : (\n <svg\n className={styles.svg}\n width=\"100%\"\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"xMidYMid meet\"\n >\n {showGrid && (\n <g className={styles.grid}>\n {[0.25, 0.5, 0.75].map((f) => (\n <line\n key={`h${f}`}\n x1={0}\n y1={height * f}\n x2={width}\n y2={height * f}\n />\n ))}\n {[0.25, 0.5, 0.75].map((f) => (\n <line\n key={`v${f}`}\n x1={width * f}\n y1={0}\n x2={width * f}\n y2={height}\n />\n ))}\n </g>\n )}\n\n {svg.polyline && (\n <polyline\n className={styles.path}\n points={svg.polyline}\n fill=\"none\"\n stroke={strokeColor}\n data-testid=\"trajectory-path\"\n />\n )}\n\n {svg.startPixel && (\n <circle\n className={styles.start}\n cx={svg.startPixel.x}\n cy={svg.startPixel.y}\n r={5}\n />\n )}\n {svg.endPixel && !current && (\n <circle\n className={styles.end}\n cx={svg.endPixel.x}\n cy={svg.endPixel.y}\n r={5}\n />\n )}\n {svg.currentPixel && (\n <>\n <circle\n className={styles.pulse}\n cx={svg.currentPixel.x}\n cy={svg.currentPixel.y}\n r={10}\n />\n <circle\n className={styles.current}\n cx={svg.currentPixel.x}\n cy={svg.currentPixel.y}\n r={5}\n />\n </>\n )}\n\n {svg.markerPixels.map(({ marker, p }, i) => {\n const interactive = Boolean(onMarkerClick);\n return (\n <circle\n key={marker.id ?? i}\n className={styles.marker}\n cx={p.x}\n cy={p.y}\n r={marker.radius ?? 6}\n style={marker.color ? { fill: marker.color } : undefined}\n data-marker-id={marker.id ?? i}\n tabIndex={interactive ? 0 : undefined}\n role={interactive ? \"button\" : undefined}\n aria-label={marker.label}\n onClick={interactive ? () => onMarkerClick?.(marker, i) : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onMarkerClick?.(marker, i);\n }\n }\n : undefined\n }\n >\n {marker.label ? <title>{marker.label}</title> : null}\n </circle>\n );\n })}\n\n {scale && (\n <g\n className={styles.scale}\n transform={`translate(${padding}, ${height - padding})`}\n >\n <line x1={0} y1={0} x2={scale.pixels} y2={0} />\n <line x1={0} y1={-4} x2={0} y2={4} />\n <line x1={scale.pixels} y1={-4} x2={scale.pixels} y2={4} />\n <text x={scale.pixels / 2} y={-8} textAnchor=\"middle\">\n {formatScale(scale.km)}\n </text>\n </g>\n )}\n </svg>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TrajectoryMap.js","names":["styles","_Fragment","TrajectoryMap_module_default","Fragment$1","LeafletTrajectory","lazy","m","NICE_KM_STEPS","pickScaleKm","maxKm","kmPerPixel","maxPixels","chosen","step","formatScale","km","TrajectoryMap","rest","containerRef","useRef","width","setWidth","useState","node","observer","measured","entries","allPoints","useMemo","points","current","markers","svg","box","boundingBox","projection","fitProjection","expandBounds","height","pixels","p","polyline","startPixel","endPixel","currentPixel","centerCoord","center","eastRef","haversineKm","padding","tileUrl","cn","className","style","label","Suspense","scale","showScale","showGrid","f","strokeColor","interactive","onMarkerClick","marker","i","e"],"sources":["../../src/geo/TrajectoryMap.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the SVG plot (points,\n * current, height, padding, showGrid, showScale, strokeColor, label), the optional\n * leaflet tile layer (tileUrl, tileAttribution) and the overlay (markers,\n * onMarkerClick). The body projects the path, fits the bounds and hands the same\n * bounds to the tile layer when there is one.\n */\nimport { lazy, Suspense, useEffect, useMemo, useRef, useState, type HTMLAttributes } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { boundingBox, expandBounds } from \"./bounds\";\nimport { haversineKm } from \"./distance\";\nimport { fitProjection, type PixelPoint } from \"./projection\";\nimport type { Coordinate, GeoMarker } from \"./types\";\nimport styles from \"./TrajectoryMap.module.css\";\n\n// Leaflet layer is loaded on demand — only when a `tileUrl` is supplied, so\n// apps that stick to the tile-free SVG never pull leaflet into their bundle.\nconst LeafletTrajectory = lazy(() =>\n import(\"./leaflet-map\").then((m) => ({ default: m.LeafletTrajectory })),\n);\n\nexport interface TrajectoryMapProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Ordered coordinates forming the trajectory. */\n points: readonly Coordinate[];\n /** Optional \"current position\" marker, drawn on top of the path. */\n current?: Coordinate | null;\n /** Viewport height in pixels. Default: `320`. */\n height?: number;\n /** Inner padding in pixels kept clear on every edge. Default: `24`. */\n padding?: number;\n /** Draw a light reference grid behind the path (SVG mode). Default: `true`. */\n showGrid?: boolean;\n /** Draw a distance scale bar (SVG mode). Default: `true`. */\n showScale?: boolean;\n /** Path stroke color. Default: the primary token. */\n strokeColor?: string;\n /**\n * Tile URL template (`{z}/{x}/{y}`) of a map server **you host**. When set,\n * the map upgrades to a real Leaflet tile layer (requires `leaflet` to be\n * installed). Omit for the zero-dependency, zero-network SVG plot.\n */\n tileUrl?: string;\n /** Attribution text shown over the tile layer. */\n tileAttribution?: string;\n /** Accessible label for the map region. Default: `\"Trajetória\"`. */\n label?: string;\n /** Point markers to overlay (e.g. stops, POIs). Included in the auto-fit. */\n markers?: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n}\n\nconst NICE_KM_STEPS = [0.05, 0.1, 0.25, 0.5, 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000] as const;\n\n/** Pick the largest \"nice\" distance whose bar fits within `maxPixels`. */\nfunction pickScaleKm(kmPerPixel: number, maxPixels: number): { km: number; pixels: number } {\n const maxKm = kmPerPixel * maxPixels;\n let chosen: number = NICE_KM_STEPS[0];\n for (const step of NICE_KM_STEPS) {\n if (step <= maxKm) chosen = step;\n }\n return { km: chosen, pixels: chosen / kmPerPixel };\n}\n\n/** Format a distance in km for the scale bar (meters below 1 km). */\nfunction formatScale(km: number): string {\n return km < 1 ? `${Math.round(km * 1000)} m` : `${km % 1 === 0 ? km : km.toFixed(1)} km`;\n}\n\n/**\n * Plot a GPS trajectory. By default it renders a **tile-free SVG** map (Web\n * Mercator projection, auto-fit to the points, optional grid + scale bar) —\n * 100% self-contained, no external tiles or paid API. Pass `tileUrl` pointing\n * at a map server **you host** to upgrade to a real Leaflet tile layer.\n *\n * @example\n * // Zero-dependency SVG plot\n * <TrajectoryMap points={points} current={lastPoint} height={360} />\n *\n * @example\n * // Real tiles from your own server (requires `leaflet` installed)\n * <TrajectoryMap points={points} tileUrl=\"https://tiles.internal/{z}/{x}/{y}.png\" />\n */\nexport function TrajectoryMap({\n points,\n current,\n height = 320,\n padding = 24,\n showGrid = true,\n showScale = true,\n strokeColor,\n tileUrl,\n tileAttribution,\n label = \"Trajetória\",\n markers,\n onMarkerClick,\n className,\n style,\n ...rest\n}: TrajectoryMapProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState<number>(600);\n\n useEffect(() => {\n const node = containerRef.current;\n if (!node || typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver((entries) => {\n const measured = entries[0]?.contentRect.width;\n if (measured && measured > 0) setWidth(measured);\n });\n observer.observe(node);\n return () => observer.disconnect();\n }, []);\n\n const allPoints = useMemo<Coordinate[]>(\n () => [...points, ...(current ? [current] : []), ...(markers ?? [])],\n [points, current, markers],\n );\n\n const svg = useMemo(() => {\n const box = boundingBox(allPoints);\n if (!box) return null;\n\n const projection = fitProjection(expandBounds(box, 0.12), width, height, { padding });\n const pixels: PixelPoint[] = points.map((p) => projection.project(p));\n const polyline = pixels.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(\" \");\n\n const startPixel = pixels[0] ?? null;\n const endPixel = pixels.length > 0 ? pixels[pixels.length - 1] : null;\n const currentPixel = current ? projection.project(current) : null;\n\n // Distance-per-pixel at the map center, for the scale bar: measure the\n // center → east-edge span in both km (haversine) and pixels (projected).\n const centerCoord = {\n latitude: (box.minLatitude + box.maxLatitude) / 2,\n longitude: (box.minLongitude + box.maxLongitude) / 2,\n };\n const center = projection.project(centerCoord);\n const eastRef = projection.project({ ...centerCoord, longitude: box.maxLongitude });\n const edgeKm = haversineKm(centerCoord, { ...centerCoord, longitude: box.maxLongitude });\n const edgePixels = Math.abs(eastRef.x - center.x) || 1;\n const kmPerPixel = edgeKm / edgePixels || 0;\n\n const markerPixels = (markers ?? []).map((m) => ({ marker: m, p: projection.project(m) }));\n\n return { polyline, startPixel, endPixel, currentPixel, kmPerPixel, markerPixels };\n }, [allPoints, points, current, markers, width, height, padding]);\n\n // ── Leaflet tile mode ────────────────────────────────────────────────────\n if (tileUrl) {\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n <Suspense fallback={<div className={styles.loading}>Carregando mapa…</div>}>\n <LeafletTrajectory\n points={points}\n current={current}\n tileUrl={tileUrl}\n tileAttribution={tileAttribution}\n strokeColor={strokeColor}\n />\n </Suspense>\n </div>\n );\n }\n\n // ── Tile-free SVG mode ─────────────────────────────────────────────────────\n const scale =\n showScale && svg && svg.kmPerPixel > 0\n ? pickScaleKm(svg.kmPerPixel, Math.min(120, width * 0.35))\n : null;\n\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n {!svg ? (\n <div className={styles.empty}>Sem pontos de trajetória ainda.</div>\n ) : (\n <svg\n className={styles.svg}\n width=\"100%\"\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"xMidYMid meet\"\n >\n {showGrid && (\n <g className={styles.grid}>\n {[0.25, 0.5, 0.75].map((f) => (\n <line\n key={`h${f}`}\n x1={0}\n y1={height * f}\n x2={width}\n y2={height * f}\n />\n ))}\n {[0.25, 0.5, 0.75].map((f) => (\n <line\n key={`v${f}`}\n x1={width * f}\n y1={0}\n x2={width * f}\n y2={height}\n />\n ))}\n </g>\n )}\n\n {svg.polyline && (\n <polyline\n className={styles.path}\n points={svg.polyline}\n fill=\"none\"\n stroke={strokeColor}\n data-testid=\"trajectory-path\"\n />\n )}\n\n {svg.startPixel && (\n <circle\n className={styles.start}\n cx={svg.startPixel.x}\n cy={svg.startPixel.y}\n r={5}\n />\n )}\n {svg.endPixel && !current && (\n <circle\n className={styles.end}\n cx={svg.endPixel.x}\n cy={svg.endPixel.y}\n r={5}\n />\n )}\n {svg.currentPixel && (\n <>\n <circle\n className={styles.pulse}\n cx={svg.currentPixel.x}\n cy={svg.currentPixel.y}\n r={10}\n />\n <circle\n className={styles.current}\n cx={svg.currentPixel.x}\n cy={svg.currentPixel.y}\n r={5}\n />\n </>\n )}\n\n {svg.markerPixels.map(({ marker, p }, i) => {\n const interactive = Boolean(onMarkerClick);\n return (\n <circle\n key={marker.id ?? i}\n className={styles.marker}\n cx={p.x}\n cy={p.y}\n r={marker.radius ?? 6}\n style={marker.color ? { fill: marker.color } : undefined}\n data-marker-id={marker.id ?? i}\n tabIndex={interactive ? 0 : undefined}\n role={interactive ? \"button\" : undefined}\n aria-label={marker.label}\n onClick={interactive ? () => onMarkerClick?.(marker, i) : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onMarkerClick?.(marker, i);\n }\n }\n : undefined\n }\n >\n {marker.label ? <title>{marker.label}</title> : null}\n </circle>\n );\n })}\n\n {scale && (\n <g\n className={styles.scale}\n transform={`translate(${padding}, ${height - padding})`}\n >\n <line x1={0} y1={0} x2={scale.pixels} y2={0} />\n <line x1={0} y1={-4} x2={0} y2={4} />\n <line x1={scale.pixels} y1={-4} x2={scale.pixels} y2={4} />\n <text x={scale.pixels / 2} y={-8} textAnchor=\"middle\">\n {formatScale(scale.km)}\n </text>\n </g>\n )}\n </svg>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrajectoryMap.module.cjs","names":[],"sources":["../../src/geo/TrajectoryMap.module.css"],"sourcesContent":[".map {\n position: relative;\n width: 100%;\n overflow: hidden;\n background: var(--tempest-surface-2);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n font-family: var(--tempest-font-sans);\n}\n\n.svg {\n display: block;\n width: 100%;\n}\n\n.empty,\n.loading {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n}\n\n.grid line {\n stroke: var(--tempest-border);\n stroke-width: 1;\n stroke-dasharray: 3 5;\n opacity: 0.5;\n}\n\n.path {\n stroke: var(--tempest-primary);\n stroke-width: 3;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n\n.start {\n fill: var(--tempest-success-solid);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.end {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.current {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.pulse {\n fill: var(--tempest-primary);\n opacity: 0.25;\n transform-origin: center;\n transform-box: fill-box;\n animation: tempest-geo-pulse 1.8s ease-out infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pulse {\n animation: none;\n }\n}\n\n@keyframes tempest-geo-pulse {\n 0% {\n transform: scale(0.6);\n opacity: 0.35;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n\n.marker {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.marker[role=\"button\"] {\n cursor: pointer;\n}\n\n.marker[role=\"button\"]:focus-visible {\n outline: none;\n stroke: var(--tempest-focus-ring-color);\n stroke-width: 3;\n}\n\n.scale line {\n stroke: var(--tempest-text);\n stroke-width: 2;\n}\n\n.scale text {\n fill: var(--tempest-text);\n font-size: var(--tempest-text-xs);\n font-family: var(--tempest-font-sans);\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"TrajectoryMap.module.cjs","names":["map","svg","empty","loading","grid","path","start","end","current","pulse","tempestGeoPulse","marker","scale","TrajectoryMap_module_default"],"sources":["../../src/geo/TrajectoryMap.module.css"],"sourcesContent":[".map {\n position: relative;\n width: 100%;\n overflow: hidden;\n background: var(--tempest-surface-2);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n font-family: var(--tempest-font-sans);\n}\n\n.svg {\n display: block;\n width: 100%;\n}\n\n.empty,\n.loading {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n}\n\n.grid line {\n stroke: var(--tempest-border);\n stroke-width: 1;\n stroke-dasharray: 3 5;\n opacity: 0.5;\n}\n\n.path {\n stroke: var(--tempest-primary);\n stroke-width: 3;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n\n.start {\n fill: var(--tempest-success-solid);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.end {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.current {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.pulse {\n fill: var(--tempest-primary);\n opacity: 0.25;\n transform-origin: center;\n transform-box: fill-box;\n animation: tempest-geo-pulse 1.8s ease-out infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pulse {\n animation: none;\n }\n}\n\n@keyframes tempest-geo-pulse {\n 0% {\n transform: scale(0.6);\n opacity: 0.35;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n\n.marker {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.marker[role=\"button\"] {\n cursor: pointer;\n}\n\n.marker[role=\"button\"]:focus-visible {\n outline: none;\n stroke: var(--tempest-focus-ring-color);\n stroke-width: 3;\n}\n\n.scale line {\n stroke: var(--tempest-text);\n stroke-width: 2;\n}\n\n.scale text {\n fill: var(--tempest-text);\n font-size: var(--tempest-text-xs);\n font-family: var(--tempest-font-sans);\n}\n"],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrajectoryMap.module.js","names":[],"sources":["../../src/geo/TrajectoryMap.module.css"],"sourcesContent":[".map {\n position: relative;\n width: 100%;\n overflow: hidden;\n background: var(--tempest-surface-2);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n font-family: var(--tempest-font-sans);\n}\n\n.svg {\n display: block;\n width: 100%;\n}\n\n.empty,\n.loading {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n}\n\n.grid line {\n stroke: var(--tempest-border);\n stroke-width: 1;\n stroke-dasharray: 3 5;\n opacity: 0.5;\n}\n\n.path {\n stroke: var(--tempest-primary);\n stroke-width: 3;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n\n.start {\n fill: var(--tempest-success-solid);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.end {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.current {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.pulse {\n fill: var(--tempest-primary);\n opacity: 0.25;\n transform-origin: center;\n transform-box: fill-box;\n animation: tempest-geo-pulse 1.8s ease-out infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pulse {\n animation: none;\n }\n}\n\n@keyframes tempest-geo-pulse {\n 0% {\n transform: scale(0.6);\n opacity: 0.35;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n\n.marker {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.marker[role=\"button\"] {\n cursor: pointer;\n}\n\n.marker[role=\"button\"]:focus-visible {\n outline: none;\n stroke: var(--tempest-focus-ring-color);\n stroke-width: 3;\n}\n\n.scale line {\n stroke: var(--tempest-text);\n stroke-width: 2;\n}\n\n.scale text {\n fill: var(--tempest-text);\n font-size: var(--tempest-text-xs);\n font-family: var(--tempest-font-sans);\n}\n"],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"TrajectoryMap.module.js","names":["map","svg","empty","loading","grid","path","start","end","current","pulse","tempestGeoPulse","marker","scale","TrajectoryMap_module_default"],"sources":["../../src/geo/TrajectoryMap.module.css"],"sourcesContent":[".map {\n position: relative;\n width: 100%;\n overflow: hidden;\n background: var(--tempest-surface-2);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n font-family: var(--tempest-font-sans);\n}\n\n.svg {\n display: block;\n width: 100%;\n}\n\n.empty,\n.loading {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n}\n\n.grid line {\n stroke: var(--tempest-border);\n stroke-width: 1;\n stroke-dasharray: 3 5;\n opacity: 0.5;\n}\n\n.path {\n stroke: var(--tempest-primary);\n stroke-width: 3;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n\n.start {\n fill: var(--tempest-success-solid);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.end {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.current {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.pulse {\n fill: var(--tempest-primary);\n opacity: 0.25;\n transform-origin: center;\n transform-box: fill-box;\n animation: tempest-geo-pulse 1.8s ease-out infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pulse {\n animation: none;\n }\n}\n\n@keyframes tempest-geo-pulse {\n 0% {\n transform: scale(0.6);\n opacity: 0.35;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n\n.marker {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.marker[role=\"button\"] {\n cursor: pointer;\n}\n\n.marker[role=\"button\"]:focus-visible {\n outline: none;\n stroke: var(--tempest-focus-ring-color);\n stroke-width: 3;\n}\n\n.scale line {\n stroke: var(--tempest-text);\n stroke-width: 2;\n}\n\n.scale text {\n fill: var(--tempest-text);\n font-size: var(--tempest-text-xs);\n font-family: var(--tempest-font-sans);\n}\n"],"mappings":";"}
|
package/dist/geo/bounds.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounds.cjs","names":[],"sources":["../../src/geo/bounds.ts"],"sourcesContent":["import type { Coordinate, GeoBounds } from \"./types\";\n\n/**\n * Compute the axis-aligned bounding box that contains every point. Returns\n * `null` for an empty list (there is nothing to bound).\n *\n * @param points - Coordinates to enclose.\n * @returns The bounds, or `null` when `points` is empty.\n */\nexport function boundingBox(points: readonly Coordinate[]): GeoBounds | null {\n if (points.length === 0) return null;\n\n let minLatitude = points[0].latitude;\n let maxLatitude = points[0].latitude;\n let minLongitude = points[0].longitude;\n let maxLongitude = points[0].longitude;\n\n for (const point of points) {\n if (point.latitude < minLatitude) minLatitude = point.latitude;\n if (point.latitude > maxLatitude) maxLatitude = point.latitude;\n if (point.longitude < minLongitude) minLongitude = point.longitude;\n if (point.longitude > maxLongitude) maxLongitude = point.longitude;\n }\n\n return { minLatitude, maxLatitude, minLongitude, maxLongitude };\n}\n\n/** Geometric center of a bounding box. */\nexport function boundsCenter(bounds: GeoBounds): Coordinate {\n return {\n latitude: (bounds.minLatitude + bounds.maxLatitude) / 2,\n longitude: (bounds.minLongitude + bounds.maxLongitude) / 2,\n };\n}\n\n/**\n * Grow a bounding box outward by `ratio` of its own span on every side, with a\n * small absolute floor so a single-point (zero-span) box still gets padding.\n * A `ratio` of `0.1` adds 10% margin — handy so a plotted trajectory does not\n * hug the edge of the viewport.\n *\n * @param bounds - The box to expand.\n * @param ratio - Fraction of the span to add per side. Default: `0.1`.\n * @returns A new, larger {@link GeoBounds}.\n */\nexport function expandBounds(bounds: GeoBounds, ratio = 0.1): GeoBounds {\n const latSpan = bounds.maxLatitude - bounds.minLatitude;\n const lonSpan = bounds.maxLongitude - bounds.minLongitude;\n const latPad = latSpan * ratio || 0.001;\n const lonPad = lonSpan * ratio || 0.001;\n\n return {\n minLatitude: bounds.minLatitude - latPad,\n maxLatitude: bounds.maxLatitude + latPad,\n minLongitude: bounds.minLongitude - lonPad,\n maxLongitude: bounds.maxLongitude + lonPad,\n };\n}\n"],"mappings":"AASA,
|
|
1
|
+
{"version":3,"file":"bounds.cjs","names":["boundingBox","points","minLatitude","maxLatitude","minLongitude","maxLongitude","point","boundsCenter","bounds","expandBounds","latSpan","lonSpan","latPad","ratio","lonPad"],"sources":["../../src/geo/bounds.ts"],"sourcesContent":["import type { Coordinate, GeoBounds } from \"./types\";\n\n/**\n * Compute the axis-aligned bounding box that contains every point. Returns\n * `null` for an empty list (there is nothing to bound).\n *\n * @param points - Coordinates to enclose.\n * @returns The bounds, or `null` when `points` is empty.\n */\nexport function boundingBox(points: readonly Coordinate[]): GeoBounds | null {\n if (points.length === 0) return null;\n\n let minLatitude = points[0].latitude;\n let maxLatitude = points[0].latitude;\n let minLongitude = points[0].longitude;\n let maxLongitude = points[0].longitude;\n\n for (const point of points) {\n if (point.latitude < minLatitude) minLatitude = point.latitude;\n if (point.latitude > maxLatitude) maxLatitude = point.latitude;\n if (point.longitude < minLongitude) minLongitude = point.longitude;\n if (point.longitude > maxLongitude) maxLongitude = point.longitude;\n }\n\n return { minLatitude, maxLatitude, minLongitude, maxLongitude };\n}\n\n/** Geometric center of a bounding box. */\nexport function boundsCenter(bounds: GeoBounds): Coordinate {\n return {\n latitude: (bounds.minLatitude + bounds.maxLatitude) / 2,\n longitude: (bounds.minLongitude + bounds.maxLongitude) / 2,\n };\n}\n\n/**\n * Grow a bounding box outward by `ratio` of its own span on every side, with a\n * small absolute floor so a single-point (zero-span) box still gets padding.\n * A `ratio` of `0.1` adds 10% margin — handy so a plotted trajectory does not\n * hug the edge of the viewport.\n *\n * @param bounds - The box to expand.\n * @param ratio - Fraction of the span to add per side. Default: `0.1`.\n * @returns A new, larger {@link GeoBounds}.\n */\nexport function expandBounds(bounds: GeoBounds, ratio = 0.1): GeoBounds {\n const latSpan = bounds.maxLatitude - bounds.minLatitude;\n const lonSpan = bounds.maxLongitude - bounds.minLongitude;\n const latPad = latSpan * ratio || 0.001;\n const lonPad = lonSpan * ratio || 0.001;\n\n return {\n minLatitude: bounds.minLatitude - latPad,\n maxLatitude: bounds.maxLatitude + latPad,\n minLongitude: bounds.minLongitude - lonPad,\n maxLongitude: bounds.maxLongitude + lonPad,\n };\n}\n"],"mappings":"AASA,SAAgBA,EAAY,EAAiD,CACzE,GAAIC,EAAO,SAAW,EAAG,OAAO,KAEhC,IAAIC,EAAcD,EAAO,EAAE,CAAC,SACxBE,EAAcF,EAAO,EAAE,CAAC,SACxBG,EAAeH,EAAO,EAAE,CAAC,UACzBI,EAAeJ,EAAO,EAAE,CAAC,UAE7B,IAAK,IAAMK,KAASL,EACZK,EAAM,SAAWJ,IAAa,EAAcI,EAAM,UAClDA,EAAM,SAAWH,IAAa,EAAcG,EAAM,UAClDA,EAAM,UAAYF,IAAc,EAAeE,EAAM,WACrDA,EAAM,UAAYD,IAAc,EAAeC,EAAM,WAG7D,MAAO,CAAE,cAAa,cAAa,eAAc,cAAa,CAClE,CAGA,SAAgBC,EAAa,EAA+B,CACxD,MAAO,CACH,UAAWC,EAAO,YAAcA,EAAO,aAAe,EACtD,WAAYA,EAAO,aAAeA,EAAO,cAAgB,CAC7D,CACJ,CAYA,SAAgBC,EAAa,EAAmB,EAAQ,GAAgB,CACpE,IAAMC,EAAUF,EAAO,YAAcA,EAAO,YACtCG,EAAUH,EAAO,aAAeA,EAAO,aACvCI,EAASF,EAAUG,GAAS,KAC5BC,EAASH,EAAUE,GAAS,KAElC,MAAO,CACH,YAAaL,EAAO,YAAcI,EAClC,YAAaJ,EAAO,YAAcI,EAClC,aAAcJ,EAAO,aAAeM,EACpC,aAAcN,EAAO,aAAeM,CACxC,CACJ,C"}
|
package/dist/geo/bounds.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounds.js","names":[],"sources":["../../src/geo/bounds.ts"],"sourcesContent":["import type { Coordinate, GeoBounds } from \"./types\";\n\n/**\n * Compute the axis-aligned bounding box that contains every point. Returns\n * `null` for an empty list (there is nothing to bound).\n *\n * @param points - Coordinates to enclose.\n * @returns The bounds, or `null` when `points` is empty.\n */\nexport function boundingBox(points: readonly Coordinate[]): GeoBounds | null {\n if (points.length === 0) return null;\n\n let minLatitude = points[0].latitude;\n let maxLatitude = points[0].latitude;\n let minLongitude = points[0].longitude;\n let maxLongitude = points[0].longitude;\n\n for (const point of points) {\n if (point.latitude < minLatitude) minLatitude = point.latitude;\n if (point.latitude > maxLatitude) maxLatitude = point.latitude;\n if (point.longitude < minLongitude) minLongitude = point.longitude;\n if (point.longitude > maxLongitude) maxLongitude = point.longitude;\n }\n\n return { minLatitude, maxLatitude, minLongitude, maxLongitude };\n}\n\n/** Geometric center of a bounding box. */\nexport function boundsCenter(bounds: GeoBounds): Coordinate {\n return {\n latitude: (bounds.minLatitude + bounds.maxLatitude) / 2,\n longitude: (bounds.minLongitude + bounds.maxLongitude) / 2,\n };\n}\n\n/**\n * Grow a bounding box outward by `ratio` of its own span on every side, with a\n * small absolute floor so a single-point (zero-span) box still gets padding.\n * A `ratio` of `0.1` adds 10% margin — handy so a plotted trajectory does not\n * hug the edge of the viewport.\n *\n * @param bounds - The box to expand.\n * @param ratio - Fraction of the span to add per side. Default: `0.1`.\n * @returns A new, larger {@link GeoBounds}.\n */\nexport function expandBounds(bounds: GeoBounds, ratio = 0.1): GeoBounds {\n const latSpan = bounds.maxLatitude - bounds.minLatitude;\n const lonSpan = bounds.maxLongitude - bounds.minLongitude;\n const latPad = latSpan * ratio || 0.001;\n const lonPad = lonSpan * ratio || 0.001;\n\n return {\n minLatitude: bounds.minLatitude - latPad,\n maxLatitude: bounds.maxLatitude + latPad,\n minLongitude: bounds.minLongitude - lonPad,\n maxLongitude: bounds.maxLongitude + lonPad,\n };\n}\n"],"mappings":";AASA,
|
|
1
|
+
{"version":3,"file":"bounds.js","names":["boundingBox","points","minLatitude","maxLatitude","minLongitude","maxLongitude","point","boundsCenter","bounds","expandBounds","latSpan","lonSpan","latPad","ratio","lonPad"],"sources":["../../src/geo/bounds.ts"],"sourcesContent":["import type { Coordinate, GeoBounds } from \"./types\";\n\n/**\n * Compute the axis-aligned bounding box that contains every point. Returns\n * `null` for an empty list (there is nothing to bound).\n *\n * @param points - Coordinates to enclose.\n * @returns The bounds, or `null` when `points` is empty.\n */\nexport function boundingBox(points: readonly Coordinate[]): GeoBounds | null {\n if (points.length === 0) return null;\n\n let minLatitude = points[0].latitude;\n let maxLatitude = points[0].latitude;\n let minLongitude = points[0].longitude;\n let maxLongitude = points[0].longitude;\n\n for (const point of points) {\n if (point.latitude < minLatitude) minLatitude = point.latitude;\n if (point.latitude > maxLatitude) maxLatitude = point.latitude;\n if (point.longitude < minLongitude) minLongitude = point.longitude;\n if (point.longitude > maxLongitude) maxLongitude = point.longitude;\n }\n\n return { minLatitude, maxLatitude, minLongitude, maxLongitude };\n}\n\n/** Geometric center of a bounding box. */\nexport function boundsCenter(bounds: GeoBounds): Coordinate {\n return {\n latitude: (bounds.minLatitude + bounds.maxLatitude) / 2,\n longitude: (bounds.minLongitude + bounds.maxLongitude) / 2,\n };\n}\n\n/**\n * Grow a bounding box outward by `ratio` of its own span on every side, with a\n * small absolute floor so a single-point (zero-span) box still gets padding.\n * A `ratio` of `0.1` adds 10% margin — handy so a plotted trajectory does not\n * hug the edge of the viewport.\n *\n * @param bounds - The box to expand.\n * @param ratio - Fraction of the span to add per side. Default: `0.1`.\n * @returns A new, larger {@link GeoBounds}.\n */\nexport function expandBounds(bounds: GeoBounds, ratio = 0.1): GeoBounds {\n const latSpan = bounds.maxLatitude - bounds.minLatitude;\n const lonSpan = bounds.maxLongitude - bounds.minLongitude;\n const latPad = latSpan * ratio || 0.001;\n const lonPad = lonSpan * ratio || 0.001;\n\n return {\n minLatitude: bounds.minLatitude - latPad,\n maxLatitude: bounds.maxLatitude + latPad,\n minLongitude: bounds.minLongitude - lonPad,\n maxLongitude: bounds.maxLongitude + lonPad,\n };\n}\n"],"mappings":";AASA,SAAgBA,EAAY,GAAiD;CACzE,IAAIC,EAAO,WAAW,GAAG,OAAO;CAEhC,IAAIC,IAAcD,EAAO,EAAE,CAAC,UACxBE,IAAcF,EAAO,EAAE,CAAC,UACxBG,IAAeH,EAAO,EAAE,CAAC,WACzBI,IAAeJ,EAAO,EAAE,CAAC;CAE7B,KAAK,IAAMK,KAASL,GAIhB,AAHIK,EAAM,WAAWJ,MAAa,IAAcI,EAAM,WAClDA,EAAM,WAAWH,MAAa,IAAcG,EAAM,WAClDA,EAAM,YAAYF,MAAc,IAAeE,EAAM,YACrDA,EAAM,YAAYD,MAAc,IAAeC,EAAM;CAG7D,OAAO;EAAE;EAAa;EAAa;EAAc;CAAa;AAClE;AAGA,SAAgBC,EAAa,GAA+B;CACxD,OAAO;EACH,WAAWC,EAAO,cAAcA,EAAO,eAAe;EACtD,YAAYA,EAAO,eAAeA,EAAO,gBAAgB;CAC7D;AACJ;AAYA,SAAgBC,EAAa,GAAmB,IAAQ,IAAgB;CACpE,IAAMC,IAAUF,EAAO,cAAcA,EAAO,aACtCG,IAAUH,EAAO,eAAeA,EAAO,cACvCI,IAASF,IAAUG,KAAS,MAC5BC,IAASH,IAAUE,KAAS;CAElC,OAAO;EACH,aAAaL,EAAO,cAAcI;EAClC,aAAaJ,EAAO,cAAcI;EAClC,cAAcJ,EAAO,eAAeM;EACpC,cAAcN,EAAO,eAAeM;CACxC;AACJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("./distance.cjs");function t(t={}){let{minDistanceKm:n=.005,maxPoints:r=1/0,positionOptions:i,onUpdate:a,onError:o,onStatusChange:s}=t,c=[],l=0,u=null,d=null,f=`idle`;function p(e){f!==e&&(f=e,s?.(e))}function m(t){let i={latitude:t.coords.latitude,longitude:t.coords.longitude,timestamp:t.timestamp,accuracy:t.coords.accuracy};if(u){let t=e.haversineKm(u,i);if(t<n)return;l+=t}u=i,c.push(i),c.length>r&&(c=c.slice(c.length-r)),a?.(c)}function h(e){p(`error`),o?.(e)}function g(){
|
|
1
|
+
const e=require("./distance.cjs");function t(t={}){let{minDistanceKm:n=.005,maxPoints:r=1/0,positionOptions:i,onUpdate:a,onError:o,onStatusChange:s}=t,c=[],l=0,u=null,d=null,f=`idle`;function p(e){f!==e&&(f=e,s?.(e))}function m(t){let i={latitude:t.coords.latitude,longitude:t.coords.longitude,timestamp:t.timestamp,accuracy:t.coords.accuracy};if(u){let t=e.haversineKm(u,i);if(t<n)return;l+=t}u=i,c.push(i),c.length>r&&(c=c.slice(c.length-r)),a?.(c)}function h(e){p(`error`),o?.(e)}function g(){d===null&&(typeof navigator>`u`||!navigator.geolocation?p(`error`):(p(`tracking`),d=navigator.geolocation.watchPosition(m,h,i)))}function _(){d!==null&&typeof navigator<`u`&&navigator.geolocation&&navigator.geolocation.clearWatch(d),d=null,p(`idle`)}function v(){_(),c=[],l=0,u=null,a?.(c)}return{start:g,stop:_,clear:v,get points(){return c},get distanceKm(){return l},get status(){return f}}}exports.createPositionTracker=t;
|
|
2
2
|
//# sourceMappingURL=create-position-tracker.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-position-tracker.cjs","names":[],"sources":["../../src/geo/create-position-tracker.ts"],"sourcesContent":["import { haversineKm } from \"./distance\";\nimport type { TrackPoint } from \"./types\";\n\n/** Lifecycle status of a {@link PositionTracker}. */\nexport type TrackerStatus = \"idle\" | \"tracking\" | \"error\";\n\n/** Options for {@link createPositionTracker}. */\nexport interface CreatePositionTrackerOptions {\n /**\n * Discard a new sample when it is closer than this (in km) to the last\n * kept point — filters GPS jitter while standing still. Default: `0.005`\n * (5 meters). Pass `0` to keep every sample.\n */\n minDistanceKm?: number;\n /**\n * Cap the retained trajectory to the most recent N points (older points are\n * dropped, but their distance stays counted). Default: `Infinity`.\n */\n maxPoints?: number;\n /** Forwarded to `navigator.geolocation.watchPosition`. */\n positionOptions?: PositionOptions;\n /** Called with the full trajectory each time a point is added. */\n onUpdate?: (points: readonly TrackPoint[]) => void;\n /** Called on a `GeolocationPositionError`. */\n onError?: (error: GeolocationPositionError) => void;\n /** Called whenever the status changes. */\n onStatusChange?: (status: TrackerStatus) => void;\n}\n\n/** Imperative controller returned by {@link createPositionTracker}. */\nexport interface PositionTracker {\n /** Begin watching position. No-op if already tracking. */\n start: () => void;\n /** Stop watching. Retains the recorded trajectory. */\n stop: () => void;\n /** Stop and discard the recorded trajectory. */\n clear: () => void;\n /** Snapshot of the recorded trajectory (newest last). */\n readonly points: readonly TrackPoint[];\n /** Total distance of the recorded trajectory in kilometers. */\n readonly distanceKm: number;\n /** Current tracker status. */\n readonly status: TrackerStatus;\n}\n\n/**\n * Record a live GPS trajectory from `navigator.geolocation.watchPosition`.\n * Framework-free — the {@link usePositionTracker} hook wraps this for React.\n *\n * Jitter while stationary is filtered by `minDistanceKm`; distance is\n * accumulated across the *full* run even when `maxPoints` trims the retained\n * array. 100% browser-side: no network, no external service.\n *\n * @param options - Filtering, retention and callbacks.\n * @returns A controller with `start`/`stop`/`clear` and live getters.\n *\n * @example\n * const tracker = createPositionTracker({\n * minDistanceKm: 0.01,\n * onUpdate: (pts) => console.log(pts.length, \"points\"),\n * });\n * tracker.start();\n * // …later\n * tracker.stop();\n * console.log(tracker.distanceKm);\n */\nexport function createPositionTracker(options: CreatePositionTrackerOptions = {}): PositionTracker {\n const {\n minDistanceKm = 0.005,\n maxPoints = Infinity,\n positionOptions,\n onUpdate,\n onError,\n onStatusChange,\n } = options;\n\n let points: TrackPoint[] = [];\n let distanceKm = 0;\n let lastKept: TrackPoint | null = null;\n let watchId: number | null = null;\n let status: TrackerStatus = \"idle\";\n\n function setStatus(next: TrackerStatus): void {\n if (status === next) return;\n status = next;\n onStatusChange?.(next);\n }\n\n function handlePosition(position: GeolocationPosition): void {\n const point: TrackPoint = {\n latitude: position.coords.latitude,\n longitude: position.coords.longitude,\n timestamp: position.timestamp,\n accuracy: position.coords.accuracy,\n };\n\n if (lastKept) {\n const step = haversineKm(lastKept, point);\n if (step < minDistanceKm) return;\n distanceKm += step;\n }\n\n lastKept = point;\n points.push(point);\n if (points.length > maxPoints) {\n points = points.slice(points.length - maxPoints);\n }\n onUpdate?.(points);\n }\n\n function handleError(error: GeolocationPositionError): void {\n setStatus(\"error\");\n onError?.(error);\n }\n\n function start(): void {\n if (watchId !== null) return;\n if (typeof navigator === \"undefined\" || !navigator.geolocation) {\n setStatus(\"error\");\n return;\n }\n setStatus(\"tracking\");\n watchId = navigator.geolocation.watchPosition(handlePosition, handleError, positionOptions);\n }\n\n function stop(): void {\n if (watchId !== null && typeof navigator !== \"undefined\" && navigator.geolocation) {\n navigator.geolocation.clearWatch(watchId);\n }\n watchId = null;\n setStatus(\"idle\");\n }\n\n function clear(): void {\n stop();\n points = [];\n distanceKm = 0;\n lastKept = null;\n onUpdate?.(points);\n }\n\n return {\n start,\n stop,\n clear,\n get points() {\n return points;\n },\n get distanceKm() {\n return distanceKm;\n },\n get status() {\n return status;\n },\n };\n}\n"],"mappings":"kCAkEA,
|
|
1
|
+
{"version":3,"file":"create-position-tracker.cjs","names":["haversineKm","require_distance","createPositionTracker","options","points","distanceKm","lastKept","watchId","status","setStatus","next","onStatusChange","handlePosition","point","position","step","minDistanceKm","maxPoints","onUpdate","handleError","onError","error","start","positionOptions","stop","clear"],"sources":["../../src/geo/create-position-tracker.ts"],"sourcesContent":["import { haversineKm } from \"./distance\";\nimport type { TrackPoint } from \"./types\";\n\n/** Lifecycle status of a {@link PositionTracker}. */\nexport type TrackerStatus = \"idle\" | \"tracking\" | \"error\";\n\n/** Options for {@link createPositionTracker}. */\nexport interface CreatePositionTrackerOptions {\n /**\n * Discard a new sample when it is closer than this (in km) to the last\n * kept point — filters GPS jitter while standing still. Default: `0.005`\n * (5 meters). Pass `0` to keep every sample.\n */\n minDistanceKm?: number;\n /**\n * Cap the retained trajectory to the most recent N points (older points are\n * dropped, but their distance stays counted). Default: `Infinity`.\n */\n maxPoints?: number;\n /** Forwarded to `navigator.geolocation.watchPosition`. */\n positionOptions?: PositionOptions;\n /** Called with the full trajectory each time a point is added. */\n onUpdate?: (points: readonly TrackPoint[]) => void;\n /** Called on a `GeolocationPositionError`. */\n onError?: (error: GeolocationPositionError) => void;\n /** Called whenever the status changes. */\n onStatusChange?: (status: TrackerStatus) => void;\n}\n\n/** Imperative controller returned by {@link createPositionTracker}. */\nexport interface PositionTracker {\n /** Begin watching position. No-op if already tracking. */\n start: () => void;\n /** Stop watching. Retains the recorded trajectory. */\n stop: () => void;\n /** Stop and discard the recorded trajectory. */\n clear: () => void;\n /** Snapshot of the recorded trajectory (newest last). */\n readonly points: readonly TrackPoint[];\n /** Total distance of the recorded trajectory in kilometers. */\n readonly distanceKm: number;\n /** Current tracker status. */\n readonly status: TrackerStatus;\n}\n\n/**\n * Record a live GPS trajectory from `navigator.geolocation.watchPosition`.\n * Framework-free — the {@link usePositionTracker} hook wraps this for React.\n *\n * Jitter while stationary is filtered by `minDistanceKm`; distance is\n * accumulated across the *full* run even when `maxPoints` trims the retained\n * array. 100% browser-side: no network, no external service.\n *\n * @param options - Filtering, retention and callbacks.\n * @returns A controller with `start`/`stop`/`clear` and live getters.\n *\n * @example\n * const tracker = createPositionTracker({\n * minDistanceKm: 0.01,\n * onUpdate: (pts) => console.log(pts.length, \"points\"),\n * });\n * tracker.start();\n * // …later\n * tracker.stop();\n * console.log(tracker.distanceKm);\n */\nexport function createPositionTracker(options: CreatePositionTrackerOptions = {}): PositionTracker {\n const {\n minDistanceKm = 0.005,\n maxPoints = Infinity,\n positionOptions,\n onUpdate,\n onError,\n onStatusChange,\n } = options;\n\n let points: TrackPoint[] = [];\n let distanceKm = 0;\n let lastKept: TrackPoint | null = null;\n let watchId: number | null = null;\n let status: TrackerStatus = \"idle\";\n\n function setStatus(next: TrackerStatus): void {\n if (status === next) return;\n status = next;\n onStatusChange?.(next);\n }\n\n function handlePosition(position: GeolocationPosition): void {\n const point: TrackPoint = {\n latitude: position.coords.latitude,\n longitude: position.coords.longitude,\n timestamp: position.timestamp,\n accuracy: position.coords.accuracy,\n };\n\n if (lastKept) {\n const step = haversineKm(lastKept, point);\n if (step < minDistanceKm) return;\n distanceKm += step;\n }\n\n lastKept = point;\n points.push(point);\n if (points.length > maxPoints) {\n points = points.slice(points.length - maxPoints);\n }\n onUpdate?.(points);\n }\n\n function handleError(error: GeolocationPositionError): void {\n setStatus(\"error\");\n onError?.(error);\n }\n\n function start(): void {\n if (watchId !== null) return;\n if (typeof navigator === \"undefined\" || !navigator.geolocation) {\n setStatus(\"error\");\n return;\n }\n setStatus(\"tracking\");\n watchId = navigator.geolocation.watchPosition(handlePosition, handleError, positionOptions);\n }\n\n function stop(): void {\n if (watchId !== null && typeof navigator !== \"undefined\" && navigator.geolocation) {\n navigator.geolocation.clearWatch(watchId);\n }\n watchId = null;\n setStatus(\"idle\");\n }\n\n function clear(): void {\n stop();\n points = [];\n distanceKm = 0;\n lastKept = null;\n onUpdate?.(points);\n }\n\n return {\n start,\n stop,\n clear,\n get points() {\n return points;\n },\n get distanceKm() {\n return distanceKm;\n },\n get status() {\n return status;\n },\n };\n}\n"],"mappings":"A,kCAkEA,SAAgBE,EAAsB,EAAwC,CAAC,EAAoB,CAC/F,GAAM,CACF,gBAAgB,KAChB,YAAY,IACZ,kBACA,WACA,UACA,kBACAC,EAEAC,EAAuB,CAAC,EACxBC,EAAa,EACbC,EAA8B,KAC9BC,EAAyB,KACzBC,EAAwB,OAE5B,SAASC,EAAU,EAA2B,CACtCD,IAAWE,IACf,EAASA,EACTC,IAAiBD,CAAI,EACzB,CAEA,SAASE,EAAe,EAAqC,CACzD,IAAMC,EAAoB,CACtB,SAAUC,EAAS,OAAO,SAC1B,UAAWA,EAAS,OAAO,UAC3B,UAAWA,EAAS,UACpB,SAAUA,EAAS,OAAO,QAC9B,EAEA,GAAIR,EAAU,CACV,IAAMS,EAAOf,EAAAA,YAAYM,EAAUO,CAAK,EACxC,GAAIE,EAAOC,EAAe,OAC1B,GAAcD,CAClB,CAEA,EAAWF,EACXT,EAAO,KAAKS,CAAK,EACbT,EAAO,OAASa,IAChB,EAASb,EAAO,MAAMA,EAAO,OAASa,CAAS,GAEnDC,IAAWd,CAAM,CACrB,CAEA,SAASe,EAAY,EAAuC,CACxDV,EAAU,OAAO,EACjBW,IAAUC,CAAK,CACnB,CAEA,SAASC,GAAc,CACff,IAAY,OACZ,OAAO,UAAc,KAAe,CAAC,UAAU,YAC/CE,EAAU,OAAO,GAGrBA,EAAU,UAAU,EACpB,EAAU,UAAU,YAAY,cAAcG,EAAgBO,EAAaI,CAAe,GAC9F,CAEA,SAASC,GAAa,CACdjB,IAAY,MAAQ,OAAO,UAAc,KAAe,UAAU,aAClE,UAAU,YAAY,WAAWA,CAAO,EAE5C,EAAU,KACVE,EAAU,MAAM,CACpB,CAEA,SAASgB,GAAc,CACnBD,EAAK,EACL,EAAS,CAAC,EACV,EAAa,EACb,EAAW,KACXN,IAAWd,CAAM,CACrB,CAEA,MAAO,CACH,QACA,OACA,QACA,IAAI,QAAS,CACT,OAAOA,CACX,EACA,IAAI,YAAa,CACb,OAAOC,CACX,EACA,IAAI,QAAS,CACT,OAAOG,CACX,CACJ,CACJ,C"}
|
|
@@ -23,13 +23,7 @@ function t(t = {}) {
|
|
|
23
23
|
p("error"), o?.(e);
|
|
24
24
|
}
|
|
25
25
|
function g() {
|
|
26
|
-
|
|
27
|
-
if (typeof navigator > "u" || !navigator.geolocation) {
|
|
28
|
-
p("error");
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
p("tracking"), d = navigator.geolocation.watchPosition(m, h, i);
|
|
32
|
-
}
|
|
26
|
+
d === null && (typeof navigator > "u" || !navigator.geolocation ? p("error") : (p("tracking"), d = navigator.geolocation.watchPosition(m, h, i)));
|
|
33
27
|
}
|
|
34
28
|
function _() {
|
|
35
29
|
d !== null && typeof navigator < "u" && navigator.geolocation && navigator.geolocation.clearWatch(d), d = null, p("idle");
|