From f606ed6bced8695c68eb6c283b2994b56135f8c0 Mon Sep 17 00:00:00 2001 From: osanseviero Date: Thu, 12 Sep 2024 12:50:06 +0200 Subject: [PATCH] Bye bye widgets --- .github/workflows/hub-publish.yml | 4 +- .github/workflows/inference-publish.yml | 2 +- .github/workflows/sync-widgets-demo.yml | 51 - .github/workflows/widgets-publish.yml | 176 -- packages/widgets/.eslintignore | 14 - packages/widgets/.gitignore | 11 - packages/widgets/.prettierignore | 14 - packages/widgets/README.md | 53 - packages/widgets/package.json | 77 - packages/widgets/pnpm-lock.yaml | 2150 ----------------- packages/widgets/postcss.config.js | 6 - .../src/additional-svelte-typings.d.ts | 9 - packages/widgets/src/app.d.ts | 26 - packages/widgets/src/app.html | 12 - packages/widgets/src/hooks.server.ts | 76 - .../DemoThemeSwitcher.svelte | 60 - .../lib/components/Icons/IconAnyToAny.svelte | 1 - .../Icons/IconAudioClassification.svelte | 21 - .../components/Icons/IconAudioToAudio.svelte | 23 - .../IconAutomaticSpeechRecognition.svelte | 23 - .../lib/components/Icons/IconAzureML.svelte | 40 - .../lib/components/Icons/IconCaretDown.svelte | 19 - .../components/Icons/IconCaretDownV2.svelte | 11 - .../src/lib/components/Icons/IconCode.svelte | 21 - .../Icons/IconConversational.svelte | 23 - .../src/lib/components/Icons/IconCross.svelte | 21 - .../Icons/IconDepthEstimation.svelte | 10 - .../IconDocumentQuestionAnswering.svelte | 13 - .../Icons/IconFeatureExtraction.svelte | 21 - .../src/lib/components/Icons/IconFile.svelte | 21 - .../lib/components/Icons/IconFillMask.svelte | 27 - .../lib/components/Icons/IconGraphML.svelte | 23 - .../components/Icons/IconHuggingFace.svelte | 56 - .../Icons/IconImageAndTextToText.svelte | 28 - .../Icons/IconImageClassification.svelte | 23 - .../Icons/IconImageFeatureExtraction.svelte | 22 - .../Icons/IconImageSegmentation.svelte | 24 - .../lib/components/Icons/IconImageTo3D.svelte | 26 - .../components/Icons/IconImageToImage.svelte | 25 - .../components/Icons/IconImageToText.svelte | 28 - .../components/Icons/IconImageToVideo.svelte | 12 - .../src/lib/components/Icons/IconInfo.svelte | 20 - .../Icons/IconKeypointDetection.svelte | 1 - .../lib/components/Icons/IconLightning.svelte | 18 - .../lib/components/Icons/IconMagicWand.svelte | 22 - .../Icons/IconMaskGeneration.svelte | 22 - .../lib/components/Icons/IconMaximize.svelte | 23 - .../components/Icons/IconMicrophone.svelte | 25 - .../Icons/IconObjectDetection.svelte | 25 - .../Icons/IconQuestionAnswering.svelte | 21 - .../lib/components/Icons/IconRefresh.svelte | 19 - .../Icons/IconReinforcementLearning.svelte | 23 - .../lib/components/Icons/IconRobotics.svelte | 22 - .../src/lib/components/Icons/IconRow.svelte | 16 - .../Icons/IconSentenceSimilarity.svelte | 25 - .../src/lib/components/Icons/IconSpin.svelte | 30 - .../components/Icons/IconSummarization.svelte | 22 - .../Icons/IconTableQuestionAnswering.svelte | 21 - .../Icons/IconTabularClassification.svelte | 22 - .../Icons/IconTabularRegression.svelte | 20 - .../Icons/IconText2textGeneration.svelte | 27 - .../Icons/IconTextClassification.svelte | 33 - .../Icons/IconTextGeneration.svelte | 25 - .../lib/components/Icons/IconTextTo3D.svelte | 23 - .../components/Icons/IconTextToImage.svelte | 25 - .../components/Icons/IconTextToSpeech.svelte | 23 - .../components/Icons/IconTextToVideo.svelte | 23 - .../Icons/IconTokenClassification.svelte | 33 - .../components/Icons/IconTranslation.svelte | 24 - .../IconUnconditionalImageGeneration.svelte | 22 - .../Icons/IconVideoClassification.svelte | 24 - .../Icons/IconVideoTextToText.svelte | 1 - .../Icons/IconVoiceActivityDetection.svelte | 23 - .../Icons/IconZeroShotClassification.svelte | 51 - .../Icons/IconZeroShotObjectDetection.svelte | 27 - .../InferenceWidget/InferenceWidget.svelte | 109 - .../WidgetAddSentenceBtn.svelte | 11 - .../WidgetAudioTrack/WidgetAudioTrack.svelte | 17 - .../WidgetBloomDecoding.svelte | 55 - .../WidgetCheckbox/WidgetCheckbox.svelte | 17 - .../WidgetDropzone/WidgetDropzone.svelte | 106 - .../WidgetExamples/WidgetExamples.svelte | 175 -- .../WidgetExamples/WidgetExamplesGroup.svelte | 83 - .../WidgetFileInput/WidgetFileInput.svelte | 75 - .../shared/WidgetFooter/WidgetFooter.svelte | 56 - .../shared/WidgetHeader/WidgetHeader.svelte | 106 - .../shared/WidgetInfo/WidgetInfo.svelte | 111 - .../shared/WidgetLabel/WidgetLabel.svelte | 13 - .../WidgetModelLoading.svelte | 38 - .../WidgetOutputConvoBubble.svelte | 64 - .../WidgetOutputChart.svelte | 67 - .../WidgetOutputConvo.svelte | 39 - .../WidgetOutputTableQA.svelte | 52 - .../WidgetOutputText/WidgetOutputText.svelte | 10 - .../WidgetOutputTokens.svelte | 94 - .../WidgetQuickInput/WidgetQuickInput.svelte | 49 - .../shared/WidgetRadio/WidgetRadio.svelte | 21 - .../shared/WidgetRealtimeRecorder/Recorder.ts | 103 - .../WidgetRealtimeRecorder.svelte | 104 - .../shared/WidgetRecorder/Recorder.ts | 67 - .../WidgetRecorder/WidgetRecorder.svelte | 66 - .../WidgetShortcutRunLabel.svelte | 22 - .../shared/WidgetState/WidgetState.svelte | 17 - .../WidgetSubmitBtn/WidgetSubmitBtn.svelte | 47 - .../WidgetTableInput/WidgetTableInput.svelte | 115 - .../WidgetTextInput/WidgetTextInput.svelte | 39 - .../WidgetTextarea/WidgetTextarea.svelte | 135 -- .../shared/WidgetTimer/WidgetTimer.svelte | 35 - .../shared/WidgetWrapper/WidgetWrapper.svelte | 55 - .../InferenceWidget/shared/consts.ts | 37 - .../InferenceWidget/shared/helpers.ts | 248 -- .../InferenceWidget/shared/inputValidation.ts | 116 - .../shared/outputValidation.ts | 35 - .../InferenceWidget/shared/types.ts | 73 - .../lib/components/InferenceWidget/stores.ts | 44 - .../AudioClassificationWidget.svelte | 187 -- .../AudioToAudioWidget.svelte | 187 -- .../AutomaticSpeechRecognitionWidget.svelte | 210 -- .../ConversationalWidget.svelte | 294 --- .../FeatureExtractionWidget/DataTable.ts | 43 - .../FeatureExtractionWidget.svelte | 192 -- .../FillMaskWidget/FillMaskWidget.svelte | 153 -- .../ImageClassificationWidget.svelte | 163 -- .../ImageSegmentationWidget/Canvas.svelte | 75 - .../ImageSegmentationWidget.svelte | 280 --- .../ImageToImageWidget.svelte | 197 -- .../ImageToTextWidget.svelte | 160 -- .../ObjectDetectionWidget.svelte | 191 -- .../SvgBoundingBoxes.svelte | 93 - .../QuestionAnsweringWidget.svelte | 163 -- .../ReinforcementLearningWidget.svelte | 62 - .../SentenceSimilarityWidget.svelte | 190 -- .../SummarizationWidget.svelte | 128 - .../TableQuestionAnsweringWidget.svelte | 189 -- .../TabularDataWidget.svelte | 211 -- .../TextGenerationWidget.svelte | 256 -- .../TextToImageWidget.svelte | 142 -- .../TextToSpeechWidget.svelte | 129 - .../TokenClassificationWidget.svelte | 251 -- .../VisualQuestionAnsweringWidget.svelte | 204 -- .../ZeroShotClassificationWidget.svelte | 190 -- .../ZeroShotImageClassificationWidget.svelte | 207 -- .../LogInPopover/LogInPopover.svelte | 38 - .../PipelineIcon/PipelineIcon.svelte | 109 - .../components/PipelineTag/PipelineTag.svelte | 16 - .../src/lib/components/Popover/Popover.svelte | 135 -- packages/widgets/src/lib/index.ts | 7 - packages/widgets/src/lib/utils/ViewUtils.ts | 202 -- packages/widgets/src/routes/+layout.server.ts | 11 - packages/widgets/src/routes/+layout.svelte | 13 - packages/widgets/src/routes/+page.svelte | 775 ------ .../src/routes/[...model]/+page.svelte | 28 - .../widgets/src/routes/[...model]/+page.ts | 17 - packages/widgets/src/tailwind.css | 226 -- packages/widgets/static/audioProcessor.js | 39 - packages/widgets/static/cats.jpg | Bin 173131 -> 0 bytes packages/widgets/static/favicon.png | Bin 1571 -> 0 bytes packages/widgets/svelte.config.js | 18 - packages/widgets/tailwind.config.cjs | 46 - packages/widgets/tsconfig.json | 13 - packages/widgets/vite.config.ts | 69 - 161 files changed, 3 insertions(+), 13316 deletions(-) delete mode 100644 .github/workflows/sync-widgets-demo.yml delete mode 100644 .github/workflows/widgets-publish.yml delete mode 100644 packages/widgets/.eslintignore delete mode 100644 packages/widgets/.gitignore delete mode 100644 packages/widgets/.prettierignore delete mode 100644 packages/widgets/README.md delete mode 100644 packages/widgets/package.json delete mode 100644 packages/widgets/pnpm-lock.yaml delete mode 100644 packages/widgets/postcss.config.js delete mode 100644 packages/widgets/src/additional-svelte-typings.d.ts delete mode 100644 packages/widgets/src/app.d.ts delete mode 100644 packages/widgets/src/app.html delete mode 100644 packages/widgets/src/hooks.server.ts delete mode 100644 packages/widgets/src/lib/components/DemoThemeSwitcher/DemoThemeSwitcher.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconAnyToAny.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconAudioClassification.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconAudioToAudio.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconAutomaticSpeechRecognition.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconAzureML.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconCaretDown.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconCaretDownV2.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconCode.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconConversational.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconCross.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconDepthEstimation.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconDocumentQuestionAnswering.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconFeatureExtraction.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconFile.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconFillMask.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconGraphML.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconHuggingFace.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconImageAndTextToText.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconImageClassification.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconImageFeatureExtraction.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconImageSegmentation.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconImageTo3D.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconImageToImage.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconImageToText.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconImageToVideo.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconInfo.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconKeypointDetection.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconLightning.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconMagicWand.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconMaskGeneration.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconMaximize.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconMicrophone.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconObjectDetection.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconQuestionAnswering.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconRefresh.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconReinforcementLearning.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconRobotics.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconRow.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconSentenceSimilarity.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconSpin.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconSummarization.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconTableQuestionAnswering.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconTabularClassification.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconTabularRegression.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconText2textGeneration.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconTextClassification.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconTextGeneration.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconTextTo3D.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconTextToImage.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconTextToSpeech.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconTextToVideo.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconTokenClassification.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconTranslation.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconUnconditionalImageGeneration.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconVideoClassification.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconVideoTextToText.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconVoiceActivityDetection.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconZeroShotClassification.svelte delete mode 100644 packages/widgets/src/lib/components/Icons/IconZeroShotObjectDetection.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/InferenceWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetAddSentenceBtn/WidgetAddSentenceBtn.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetAudioTrack/WidgetAudioTrack.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetBloomDecoding/WidgetBloomDecoding.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetCheckbox/WidgetCheckbox.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetDropzone/WidgetDropzone.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetExamples/WidgetExamples.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetExamples/WidgetExamplesGroup.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetFileInput/WidgetFileInput.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetFooter/WidgetFooter.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetHeader/WidgetHeader.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetInfo/WidgetInfo.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetLabel/WidgetLabel.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetModelLoading/WidgetModelLoading.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOuputConvoBubble/WidgetOutputConvoBubble.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputChart/WidgetOutputChart.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputConvo/WidgetOutputConvo.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputTableQA/WidgetOutputTableQA.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputText/WidgetOutputText.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputTokens/WidgetOutputTokens.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetQuickInput/WidgetQuickInput.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRadio/WidgetRadio.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRealtimeRecorder/Recorder.ts delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRealtimeRecorder/WidgetRealtimeRecorder.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRecorder/Recorder.ts delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRecorder/WidgetRecorder.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetShortcutRunLabel/WidgetShortcutRunLabel.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetState/WidgetState.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetSubmitBtn/WidgetSubmitBtn.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTableInput/WidgetTableInput.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTextInput/WidgetTextInput.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTextarea/WidgetTextarea.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTimer/WidgetTimer.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/WidgetWrapper/WidgetWrapper.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/consts.ts delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/helpers.ts delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/inputValidation.ts delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/outputValidation.ts delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/shared/types.ts delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/stores.ts delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/AudioClassificationWidget/AudioClassificationWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/AudioToAudioWidget/AudioToAudioWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/AutomaticSpeechRecognitionWidget/AutomaticSpeechRecognitionWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/ConversationalWidget/ConversationalWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/FeatureExtractionWidget/DataTable.ts delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/FeatureExtractionWidget/FeatureExtractionWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/FillMaskWidget/FillMaskWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/ImageClassificationWidget/ImageClassificationWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/ImageSegmentationWidget/Canvas.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/ImageSegmentationWidget/ImageSegmentationWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/ImageToImageWidget/ImageToImageWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/ImageToTextWidget/ImageToTextWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/ObjectDetectionWidget/ObjectDetectionWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/ObjectDetectionWidget/SvgBoundingBoxes.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/QuestionAnsweringWidget/QuestionAnsweringWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/ReinforcementLearningWidget/ReinforcementLearningWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/SentenceSimilarityWidget/SentenceSimilarityWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/SummarizationWidget/SummarizationWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/TableQuestionAnsweringWidget/TableQuestionAnsweringWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/TabularDataWidget/TabularDataWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/TextGenerationWidget/TextGenerationWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/TextToImageWidget/TextToImageWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/TextToSpeechWidget/TextToSpeechWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/TokenClassificationWidget/TokenClassificationWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/VisualQuestionAnsweringWidget/VisualQuestionAnsweringWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/ZeroShotClassificationWidget/ZeroShotClassificationWidget.svelte delete mode 100644 packages/widgets/src/lib/components/InferenceWidget/widgets/ZeroShotImageClassificationWidget/ZeroShotImageClassificationWidget.svelte delete mode 100644 packages/widgets/src/lib/components/LogInPopover/LogInPopover.svelte delete mode 100644 packages/widgets/src/lib/components/PipelineIcon/PipelineIcon.svelte delete mode 100644 packages/widgets/src/lib/components/PipelineTag/PipelineTag.svelte delete mode 100644 packages/widgets/src/lib/components/Popover/Popover.svelte delete mode 100644 packages/widgets/src/lib/index.ts delete mode 100644 packages/widgets/src/lib/utils/ViewUtils.ts delete mode 100644 packages/widgets/src/routes/+layout.server.ts delete mode 100644 packages/widgets/src/routes/+layout.svelte delete mode 100644 packages/widgets/src/routes/+page.svelte delete mode 100644 packages/widgets/src/routes/[...model]/+page.svelte delete mode 100644 packages/widgets/src/routes/[...model]/+page.ts delete mode 100644 packages/widgets/src/tailwind.css delete mode 100644 packages/widgets/static/audioProcessor.js delete mode 100644 packages/widgets/static/cats.jpg delete mode 100644 packages/widgets/static/favicon.png delete mode 100644 packages/widgets/svelte.config.js delete mode 100644 packages/widgets/tailwind.config.cjs delete mode 100644 packages/widgets/tsconfig.json delete mode 100644 packages/widgets/vite.config.ts diff --git a/.github/workflows/hub-publish.yml b/.github/workflows/hub-publish.yml index f00c0613e..7848922ea 100644 --- a/.github/workflows/hub-publish.yml +++ b/.github/workflows/hub-publish.yml @@ -87,9 +87,9 @@ jobs: echo "Checksum Verification Failed: The local @huggingface/tasks package differs from the remote version. Release halted. Local Checksum: $LOCAL_CHECKSUM, Remote Checksum: $REMOTE_CHECKSUM" exit 1 fi - echo "Checksum Verification Successful: The local and remote @huggingface/tasks packages are consistent. Proceeding with the @huggingface/widgets package release. Local Checksum: $LOCAL_CHECKSUM, Remote Checksum: $REMOTE_CHECKSUM." + echo "Checksum Verification Successful: The local and remote @huggingface/tasks packages are consistent. Local Checksum: $LOCAL_CHECKSUM, Remote Checksum: $REMOTE_CHECKSUM." working-directory: packages/tasks - +f - run: pnpm publish --no-git-checks . env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/inference-publish.yml b/.github/workflows/inference-publish.yml index ee346c24c..bde76eafa 100644 --- a/.github/workflows/inference-publish.yml +++ b/.github/workflows/inference-publish.yml @@ -87,7 +87,7 @@ jobs: echo "Checksum Verification Failed: The local @huggingface/tasks package differs from the remote version. Release halted. Local Checksum: $LOCAL_CHECKSUM, Remote Checksum: $REMOTE_CHECKSUM" exit 1 fi - echo "Checksum Verification Successful: The local and remote @huggingface/tasks packages are consistent. Proceeding with the @huggingface/widgets package release. Local Checksum: $LOCAL_CHECKSUM, Remote Checksum: $REMOTE_CHECKSUM." + echo "Checksum Verification Successful: The local and remote @huggingface/tasks packages are consistent. Local Checksum: $LOCAL_CHECKSUM, Remote Checksum: $REMOTE_CHECKSUM." working-directory: packages/tasks - run: pnpm publish --no-git-checks . diff --git a/.github/workflows/sync-widgets-demo.yml b/.github/workflows/sync-widgets-demo.yml deleted file mode 100644 index ef3d4336f..000000000 --- a/.github/workflows/sync-widgets-demo.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: Sync Widgets Demo -on: - workflow_dispatch: - # push: - # branches: - # - main - # paths: - # - "packages/widgets/**" - # - "packages/tasks/**" - # - "package.json" - # - "pnpm-lock.yaml" - # - ".github/workflows/sync-widgets-demo.yml" - -jobs: - sync: - runs-on: ubuntu-latest - timeout-minutes: 10 - - steps: - - uses: actions/checkout@v4 - name: "Clone" - with: - path: "local-demo" - - - name: "Clone remote demo" - run: | - git clone https://huggingface.co/spaces/huggingfacejs/inference-widgets - # Set huggingface token in git credentials - git config --global user.name machineuser - git config --global user.email infra+machineuser@huggingface.co - - echo "machine huggingface.co login hf password ${{ secrets.HF_DEMO_TOKEN }}" >> ~/.netrc - - - name: "Copy demo files" - run: | - rm -rf inference-widgets/packages - mkdir -p inference-widgets/packages - cp -r local-demo/packages/shared inference-widgets/packages - cp -r local-demo/packages/widgets inference-widgets/packages - cp -r local-demo/packages/tasks inference-widgets/packages - cp -r local-demo/packages/inference inference-widgets/packages - cp -r local-demo/packages/jinja inference-widgets/packages - cp local-demo/package.json inference-widgets/package.json - cp local-demo/pnpm-lock.yaml inference-widgets/pnpm-lock.yaml - - - name: "Commit and push" - run: | - cd inference-widgets - git add . - git commit -m "Sync widgets demo" - git push diff --git a/.github/workflows/widgets-publish.yml b/.github/workflows/widgets-publish.yml deleted file mode 100644 index 502ffebe5..000000000 --- a/.github/workflows/widgets-publish.yml +++ /dev/null @@ -1,176 +0,0 @@ -name: Widgets - Version and Release - -on: - workflow_dispatch: - inputs: - newversion: - type: choice - description: "Semantic Version Bump Type" - default: patch - options: - - patch - - minor - - major - -defaults: - run: - working-directory: packages/widgets - -concurrency: - group: "push-to-main" - -jobs: - version_and_release: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - # Needed to push the tag and the commit on the main branch, otherwise we get: - # > Run git push --follow-tags - # remote: error: GH006: Protected branch update failed for refs/heads/main. - # remote: error: Changes must be made through a pull request. Required status check "lint" is expected. - token: ${{ secrets.BOT_ACCESS_TOKEN }} - - run: corepack enable - - uses: actions/setup-node@v3 - with: - node-version: "20" - cache: "pnpm" - cache-dependency-path: | - packages/widgets/pnpm-lock.yaml - # setting a registry enables the NODE_AUTH_TOKEN env variable where we can set an npm token. REQUIRED - registry-url: "https://registry.npmjs.org" - - run: pnpm install - - run: git config --global user.name machineuser - - run: git config --global user.email infra+machineuser@huggingface.co - - run: | - PACKAGE_VERSION=$(node -p "require('./package.json').version") - BUMPED_VERSION=$(node -p "require('semver').inc('$PACKAGE_VERSION', '${{ github.event.inputs.newversion }}')") - # Update package.json with the new version - node -e "const fs = require('fs'); const package = JSON.parse(fs.readFileSync('./package.json')); package.version = '$BUMPED_VERSION'; fs.writeFileSync('./package.json', JSON.stringify(package, null, '\t') + '\n');" - git commit . -m "🔖 @huggingface/widgets $BUMPED_VERSION" - git tag "widgets-v$BUMPED_VERSION" - - - name: Make sure that the latest version of @huggingface/tasks is consistent with the local version - run: | - LOCAL_TASKS_VERSION=$(node -p "require('./package.json').version") - REMOTE_TASKS_VERSION=$(npm view @huggingface/tasks version) - - # If the versions are different, error - if [ "$LOCAL_TASKS_VERSION" != "$REMOTE_TASKS_VERSION" ]; then - echo "Error: The local @huggingface/tasks package version ($LOCAL_TASKS_VERSION) differs from the remote version ($REMOTE_TASKS_VERSION). Release halted." - exit 1 - fi - - npm pack @huggingface/tasks - mv huggingface-tasks-$LOCAL_TASKS_VERSION.tgz tasks-local.tgz - - npm pack @huggingface/tasks@$REMOTE_TASKS_VERSION - mv huggingface-tasks-$REMOTE_TASKS_VERSION.tgz tasks-remote.tgz - - # Compute checksum of local tar. We need to extract both tar since the remote compression might be different - tar -xf tasks-local.tgz - LOCAL_CHECKSUM=$(cd package && tar --mtime='1970-01-01' --mode=755 -cf - . | sha256sum | cut -d' ' -f1) - echo "Local package checksum: $LOCAL_CHECKSUM" - - rm -Rf package - - tar -xf tasks-remote.tgz - REMOTE_CHECKSUM=$(cd package && tar --mtime='1970-01-01' --mode=755 -cf - . | sha256sum | cut -d' ' -f1) - echo "Remote package checksum: $REMOTE_CHECKSUM" - - rm -Rf package - - if [ "$LOCAL_CHECKSUM" != "$REMOTE_CHECKSUM" ]; then - echo "Checksum Verification Failed: The local @huggingface/tasks package differs from the remote version. Release halted. Local Checksum: $LOCAL_CHECKSUM, Remote Checksum: $REMOTE_CHECKSUM" - exit 1 - fi - echo "Checksum Verification Successful: The local and remote @huggingface/tasks packages are consistent. Proceeding with the @huggingface/widgets package release. Local Checksum: $LOCAL_CHECKSUM, Remote Checksum: $REMOTE_CHECKSUM." - working-directory: packages/tasks - - - name: Make sure that the latest version of @huggingface/jinja is consistent with the local version - run: | - LOCAL_JINJA_VERSION=$(node -p "require('./package.json').version") - REMOTE_JINJA_VERSION=$(npm view @huggingface/jinja version) - - # If the versions are different, error - if [ "$LOCAL_JINJA_VERSION" != "$REMOTE_JINJA_VERSION" ]; then - echo "Error: The local @huggingface/jinja package version ($LOCAL_JINJA_VERSION) differs from the remote version ($REMOTE_JINJA_VERSION). Release halted." - exit 1 - fi - - npm pack @huggingface/jinja - mv huggingface-jinja-$LOCAL_JINJA_VERSION.tgz jinja-local.tgz - - npm pack @huggingface/jinja@$REMOTE_JINJA_VERSION - mv huggingface-jinja-$REMOTE_JINJA_VERSION.tgz jinja-remote.tgz - - # Compute checksum of local tar. We need to extract both tar since the remote compression might be different - tar -xf jinja-local.tgz - LOCAL_CHECKSUM=$(cd package && tar --mtime='1970-01-01' --mode=755 -cf - . | sha256sum | cut -d' ' -f1) - echo "Local package checksum: $LOCAL_CHECKSUM" - - rm -Rf package - - tar -xf jinja-remote.tgz - REMOTE_CHECKSUM=$(cd package && tar --mtime='1970-01-01' --mode=755 -cf - . | sha256sum | cut -d' ' -f1) - echo "Remote package checksum: $REMOTE_CHECKSUM" - - rm -Rf package - - if [ "$LOCAL_CHECKSUM" != "$REMOTE_CHECKSUM" ]; then - echo "Checksum Verification Failed: The local @huggingface/jinja package differs from the remote version. Release halted. Local Checksum: $LOCAL_CHECKSUM, Remote Checksum: $REMOTE_CHECKSUM" - exit 1 - fi - echo "Checksum Verification Successful: The local and remote @huggingface/jinja packages are consistent. Proceeding with the @huggingface/widgets package release. Local Checksum: $LOCAL_CHECKSUM, Remote Checksum: $REMOTE_CHECKSUM." - working-directory: packages/jinja - - - name: Make sure that the latest version of @huggingface/inference is consistent with the local version - run: | - LOCAL_INFERENCE_VERSION=$(node -p "require('./package.json').version") - REMOTE_INFERENCE_VERSION=$(npm view @huggingface/inference version) - - # If the versions are different, error - if [ "$LOCAL_INFERENCE_VERSION" != "$REMOTE_INFERENCE_VERSION" ]; then - echo "Error: The local @huggingface/inference package version ($LOCAL_INFERENCE_VERSION) differs from the remote version ($REMOTE_INFERENCE_VERSION). Release halted." - exit 1 - fi - - npm pack @huggingface/inference - mv huggingface-inference-$LOCAL_INFERENCE_VERSION.tgz inference-local.tgz - - npm pack @huggingface/inference@$REMOTE_INFERENCE_VERSION - mv huggingface-inference-$REMOTE_INFERENCE_VERSION.tgz inference-remote.tgz - - # Compute checksum of local tar. We need to extract both tar since the remote compression might be different - tar -xf inference-local.tgz - LOCAL_CHECKSUM=$(cd package && tar --mtime='1970-01-01' --mode=755 -cf - . | sha256sum | cut -d' ' -f1) - echo "Local package checksum: $LOCAL_CHECKSUM" - - rm -Rf package - - tar -xf inference-remote.tgz - REMOTE_CHECKSUM=$(cd package && tar --mtime='1970-01-01' --mode=755 -cf - . | sha256sum | cut -d' ' -f1) - echo "Remote package checksum: $REMOTE_CHECKSUM" - - rm -Rf package - - if [ "$LOCAL_CHECKSUM" != "$REMOTE_CHECKSUM" ]; then - echo "Checksum Verification Failed: The local @huggingface/inference package differs from the remote version. Release halted. Local Checksum: $LOCAL_CHECKSUM, Remote Checksum: $REMOTE_CHECKSUM" - exit 1 - fi - echo "Checksum Verification Successful: The local and remote @huggingface/inference packages are consistent. Proceeding with the @huggingface/widgets package release. Local Checksum: $LOCAL_CHECKSUM, Remote Checksum: $REMOTE_CHECKSUM." - working-directory: packages/inference - - - run: pnpm publish --no-git-checks . - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - run: git pull --rebase && git push --follow-tags - # hack - reuse actions/setup-node@v3 just to set a new registry - - uses: actions/setup-node@v3 - with: - node-version: "20" - registry-url: "https://npm.pkg.github.com" - # Disable for now, until github supports PATs for writing github packages (https://github.com/github/roadmap/issues/558) - # - run: pnpm publish --no-git-checks . - # env: - # NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/packages/widgets/.eslintignore b/packages/widgets/.eslintignore deleted file mode 100644 index 03cc13658..000000000 --- a/packages/widgets/.eslintignore +++ /dev/null @@ -1,14 +0,0 @@ -.DS_Store -node_modules -/dist -/build -/.svelte-kit -/package -.env -.env.* -!.env.example - -# Ignore files for PNPM, NPM and YARN -pnpm-lock.yaml -package-lock.json -yarn.lock diff --git a/packages/widgets/.gitignore b/packages/widgets/.gitignore deleted file mode 100644 index ac7211b40..000000000 --- a/packages/widgets/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -.DS_Store -node_modules -/build -/dist -/.svelte-kit -/package -.env -.env.* -!.env.example -vite.config.js.timestamp-* -vite.config.ts.timestamp-* diff --git a/packages/widgets/.prettierignore b/packages/widgets/.prettierignore deleted file mode 100644 index 03cc13658..000000000 --- a/packages/widgets/.prettierignore +++ /dev/null @@ -1,14 +0,0 @@ -.DS_Store -node_modules -/dist -/build -/.svelte-kit -/package -.env -.env.* -!.env.example - -# Ignore files for PNPM, NPM and YARN -pnpm-lock.yaml -package-lock.json -yarn.lock diff --git a/packages/widgets/README.md b/packages/widgets/README.md deleted file mode 100644 index ce8094301..000000000 --- a/packages/widgets/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# Huggingface Widgets - -**Note: this package is no longer maintained.** - -Open-source version of the inference widgets from huggingface.co - -> Built with Svelte and SvelteKit - -**Demo page:** https://huggingface.co/spaces/huggingfacejs/inference-widgets - -## Publishing - -Because `@huggingface/widgets` depends on `@huggingface/tasks`, you need to publish `@huggingface/tasks` first, and then `@huggingface/widgets`. There should be a CI check to prevent publishing `@huggingface/widgets` if `@huggingface/tasks` hasn't been published yet. - -## Demo - -You can run the demo locally: - -```console -pnpm install -pnpm dev --open -``` - -If you are submitting a PR, make sure that you run `format` & `lint` before submitting the PR: - -```console -pnpm format -pnpm lint -``` - -If you want to try the "Sign-in with HF" feature locally, you will need to https://huggingface.co/settings/applications/new an OAuth application with `"openid"`, `"profile"` and `"inference-api"` scopes and `http://localhost:5173/auth/callback/huggingface` as the redirect URL. - -Then you can create a `.env.local` file with the following content: - -```env -OAUTH_CLIENT_ID=... -OAUTH_CLIENT_SECRET=... -``` - -If you want to try the "Sign-in with HF" feature in a Space, you can just duplicate https://huggingface.co/spaces/huggingfacejs/inference-widgets, it should work out of the box thanks to the metadata in the `README.md` file. - -## Testing for moon (for huggingface admins) - -```console -pnpm i -pnpm build -``` - -And then inside moon, run the following command for both `server` & `front`: - -```console -npm i --save @huggingface/widgets@ -``` diff --git a/packages/widgets/package.json b/packages/widgets/package.json deleted file mode 100644 index 0c656e1aa..000000000 --- a/packages/widgets/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "@huggingface/widgets", - "packageManager": "pnpm@8.10.5", - "version": "0.2.12", - "publishConfig": { - "access": "public" - }, - "scripts": { - "dev": "vite dev --mode app", - "build": "vite build --mode app && vite build --mode lib && vite build --mode lib --ssr && npm run package", - "preview": "vite preview --mode app", - "package": "publint", - "prepublishOnly": "npm run build", - "check": "svelte-check --tsconfig ./tsconfig.json src,static", - "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch src,static", - "lint": "eslint --quiet --fix --ext .cjs,.ts .", - "lint:check": "eslint --ext .cjs,.ts .", - "format": "prettier --write .", - "format:check": "prettier --check ." - }, - "type": "module", - "module": "./dist/server/index.js", - "main": "./dist/server/index.cjs", - "types": "./dist/client/index.d.ts", - "source": "src/lib/index.ts", - "exports": { - ".": { - "types": "./dist/client/index.d.ts", - "node": { - "require": "./dist/server/index.cjs", - "import": "./dist/server/index.js" - }, - "browser": { - "import": "./dist/client/index.js", - "require": "./dist/client/index.cjs" - }, - "svelte": "./src/lib/index.ts" - } - }, - "files": [ - "dist", - "src", - "!dist/**/*.test.*", - "!dist/**/*.spec.*", - "static/audioProcessor.js" - ], - "dependencies": { - "@huggingface/inference": "workspace:^", - "@huggingface/tasks": "workspace:^", - "marked": "^12.0.2" - }, - "peerDependencies": { - "svelte": "^3.59.2" - }, - "devDependencies": { - "@auth/core": "^0.18.3", - "@auth/sveltekit": "^0.3.14", - "@fontsource/ibm-plex-mono": "^5.0.8", - "@fontsource/source-sans-pro": "^5.0.8", - "@sveltejs/adapter-node": "^1.3.1", - "@sveltejs/kit": "^1.27.4", - "@sveltejs/package": "^2.0.0", - "@sveltejs/vite-plugin-svelte": "2.5.3", - "@tailwindcss/forms": "^0.5.7", - "@types/node": "20", - "autoprefixer": "^10.4.16", - "postcss": "^8.4.31", - "publint": "^0.1.9", - "svelte": "^3.59.2", - "svelte-check": "^3.6.0", - "svelte-preprocess": "^5.1.1", - "tailwindcss": "^3.4.1", - "tslib": "^2.4.1", - "vite": "^4.5.0", - "vite-plugin-dts": "^3.6.4" - } -} diff --git a/packages/widgets/pnpm-lock.yaml b/packages/widgets/pnpm-lock.yaml deleted file mode 100644 index 21e41edeb..000000000 --- a/packages/widgets/pnpm-lock.yaml +++ /dev/null @@ -1,2150 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@huggingface/inference': - specifier: workspace:^ - version: link:../inference - '@huggingface/tasks': - specifier: workspace:^ - version: link:../tasks - marked: - specifier: ^12.0.2 - version: 12.0.2 - -devDependencies: - '@auth/core': - specifier: ^0.18.3 - version: 0.18.3 - '@auth/sveltekit': - specifier: ^0.3.14 - version: 0.3.14(@sveltejs/kit@1.27.4)(svelte@3.59.2) - '@fontsource/ibm-plex-mono': - specifier: ^5.0.8 - version: 5.0.8 - '@fontsource/source-sans-pro': - specifier: ^5.0.8 - version: 5.0.8 - '@sveltejs/adapter-node': - specifier: ^1.3.1 - version: 1.3.1(@sveltejs/kit@1.27.4) - '@sveltejs/kit': - specifier: ^1.27.4 - version: 1.27.4(svelte@3.59.2)(vite@4.5.0) - '@sveltejs/package': - specifier: ^2.0.0 - version: 2.0.0(svelte@3.59.2)(typescript@5.3.3) - '@sveltejs/vite-plugin-svelte': - specifier: 2.5.3 - version: 2.5.3(svelte@3.59.2)(vite@4.5.0) - '@tailwindcss/forms': - specifier: ^0.5.7 - version: 0.5.7(tailwindcss@3.4.1) - '@types/node': - specifier: '20' - version: 20.10.1 - autoprefixer: - specifier: ^10.4.16 - version: 10.4.16(postcss@8.4.31) - postcss: - specifier: ^8.4.31 - version: 8.4.31 - publint: - specifier: ^0.1.9 - version: 0.1.9 - svelte: - specifier: ^3.59.2 - version: 3.59.2 - svelte-check: - specifier: ^3.6.0 - version: 3.6.0(postcss@8.4.31)(svelte@3.59.2) - svelte-preprocess: - specifier: ^5.1.1 - version: 5.1.1(postcss@8.4.31)(svelte@3.59.2)(typescript@5.3.3) - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 - tslib: - specifier: ^2.4.1 - version: 2.4.1 - vite: - specifier: ^4.5.0 - version: 4.5.0(@types/node@20.10.1) - vite-plugin-dts: - specifier: ^3.6.4 - version: 3.6.4(@types/node@20.10.1)(typescript@5.3.3)(vite@4.5.0) - -packages: - - /@alloc/quick-lru@5.2.0: - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - dev: true - - /@auth/core@0.18.3: - resolution: {integrity: sha512-YXQWxi3pKxngt+2vo3dq8+wDANlUH8nhQgX6EVdd3Enfe3vweBtHqzaWrtWzQnVb8wdGxdhxaoOlYroEBE+/yw==} - peerDependencies: - nodemailer: ^6.8.0 - peerDependenciesMeta: - nodemailer: - optional: true - dependencies: - '@panva/hkdf': 1.1.1 - cookie: 0.5.0 - jose: 5.1.2 - oauth4webapi: 2.4.0 - preact: 10.11.3 - preact-render-to-string: 5.2.3(preact@10.11.3) - dev: true - - /@auth/sveltekit@0.3.14(@sveltejs/kit@1.27.4)(svelte@3.59.2): - resolution: {integrity: sha512-Ealyi4uM4V42tk4UhhRQ+iZKah0OOp12siXwgDsCj1uBOCeZwL97RkvdMDX7pg18zBP/h2qFAuMWjW5q7bSYxA==} - peerDependencies: - '@sveltejs/kit': ^1.0.0 - svelte: ^3.54.0 || ^4.0.0 - dependencies: - '@auth/core': 0.18.3 - '@sveltejs/kit': 1.27.4(svelte@3.59.2)(vite@4.5.0) - svelte: 3.59.2 - transitivePeerDependencies: - - nodemailer - dev: true - - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/parser@7.23.5: - resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.23.5 - dev: true - - /@babel/types@7.23.5: - resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@fastify/busboy@2.1.0: - resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} - engines: {node: '>=14'} - dev: true - - /@fontsource/ibm-plex-mono@5.0.8: - resolution: {integrity: sha512-AoR7K2YtlGKy3LApyLYjqjyz0o8XtkRvbB/juMsGSGNayBBAly140ykZls+VxcXjZSLQpp2RyxKo6lYOuHPmUw==} - dev: true - - /@fontsource/source-sans-pro@5.0.8: - resolution: {integrity: sha512-5U2UvIYRkCMozZ388gCE73PEpa2MFgN/0t9O4a1FF7bGT/MIneQWSL1XpWZ8iMVYdh6ntxRf3iFA6slCIuFgkg==} - dev: true - - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - dev: true - - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true - - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /@microsoft/api-extractor-model@7.28.2(@types/node@20.10.1): - resolution: {integrity: sha512-vkojrM2fo3q4n4oPh4uUZdjJ2DxQ2+RnDQL/xhTWSRUNPF6P4QyrvY357HBxbnltKcYu+nNNolVqc6TIGQ73Ig==} - dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.61.0(@types/node@20.10.1) - transitivePeerDependencies: - - '@types/node' - dev: true - - /@microsoft/api-extractor@7.38.3(@types/node@20.10.1): - resolution: {integrity: sha512-xt9iYyC5f39281j77JTA9C3ISJpW1XWkCcnw+2vM78CPnro6KhPfwQdPDfwS5JCPNuq0grm8cMdPUOPvrchDWw==} - hasBin: true - dependencies: - '@microsoft/api-extractor-model': 7.28.2(@types/node@20.10.1) - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.61.0(@types/node@20.10.1) - '@rushstack/rig-package': 0.5.1 - '@rushstack/ts-command-line': 4.17.1 - colors: 1.2.5 - lodash: 4.17.21 - resolve: 1.22.8 - semver: 7.5.4 - source-map: 0.6.1 - typescript: 5.0.4 - transitivePeerDependencies: - - '@types/node' - dev: true - - /@microsoft/tsdoc-config@0.16.2: - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} - dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 - jju: 1.4.0 - resolve: 1.19.0 - dev: true - - /@microsoft/tsdoc@0.14.2: - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} - dev: true - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - dev: true - - /@panva/hkdf@1.1.1: - resolution: {integrity: sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==} - dev: true - - /@polka/url@1.0.0-next.23: - resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==} - dev: true - - /@rollup/plugin-commonjs@25.0.7(rollup@3.29.4): - resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.68.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 8.1.0 - is-reference: 1.2.1 - magic-string: 0.30.5 - rollup: 3.29.4 - dev: true - - /@rollup/plugin-json@6.0.1(rollup@3.29.4): - resolution: {integrity: sha512-RgVfl5hWMkxN1h/uZj8FVESvPuBJ/uf6ly6GTj0GONnkfoBN5KC0MSz+PN2OLDgYXMhtG0mWpTrkiOjoxAIevw==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) - rollup: 3.29.4 - dev: true - - /@rollup/plugin-node-resolve@15.2.3(rollup@3.29.4): - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-builtin-module: 3.2.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 3.29.4 - dev: true - - /@rollup/pluginutils@5.0.5(rollup@3.29.4): - resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - rollup: 3.29.4 - dev: true - - /@rushstack/node-core-library@3.61.0(@types/node@20.10.1): - resolution: {integrity: sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@types/node': 20.10.1 - colors: 1.2.5 - fs-extra: 7.0.1 - import-lazy: 4.0.0 - jju: 1.4.0 - resolve: 1.22.8 - semver: 7.5.4 - z-schema: 5.0.5 - dev: true - - /@rushstack/rig-package@0.5.1: - resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==} - dependencies: - resolve: 1.22.8 - strip-json-comments: 3.1.1 - dev: true - - /@rushstack/ts-command-line@4.17.1: - resolution: {integrity: sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==} - dependencies: - '@types/argparse': 1.0.38 - argparse: 1.0.10 - colors: 1.2.5 - string-argv: 0.3.2 - dev: true - - /@sveltejs/adapter-node@1.3.1(@sveltejs/kit@1.27.4): - resolution: {integrity: sha512-A0VgRQDCDPzdLNoiAbcOxGw4zT1Mc+n1LwT1OmO350R7WxrEqdMUChPPOd1iMfIDWlP4ie6E2d/WQf5es2d4Zw==} - peerDependencies: - '@sveltejs/kit': ^1.0.0 - dependencies: - '@rollup/plugin-commonjs': 25.0.7(rollup@3.29.4) - '@rollup/plugin-json': 6.0.1(rollup@3.29.4) - '@rollup/plugin-node-resolve': 15.2.3(rollup@3.29.4) - '@sveltejs/kit': 1.27.4(svelte@3.59.2)(vite@4.5.0) - rollup: 3.29.4 - dev: true - - /@sveltejs/kit@1.27.4(svelte@3.59.2)(vite@4.5.0): - resolution: {integrity: sha512-Vxl8Jf0C1+/8i/slsxFOnwJntCBDLueO/O6GJ0390KUnyW3Zs+4ZiIinD+cEcYnJPQQ9CRzVSr9Bn6DbmTn4Dw==} - engines: {node: ^16.14 || >=18} - hasBin: true - requiresBuild: true - peerDependencies: - svelte: ^3.54.0 || ^4.0.0-next.0 || ^5.0.0-next.0 - vite: ^4.0.0 - dependencies: - '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@3.59.2)(vite@4.5.0) - '@types/cookie': 0.5.4 - cookie: 0.5.0 - devalue: 4.3.2 - esm-env: 1.0.0 - kleur: 4.1.5 - magic-string: 0.30.5 - mrmime: 1.0.1 - sade: 1.8.1 - set-cookie-parser: 2.6.0 - sirv: 2.0.3 - svelte: 3.59.2 - tiny-glob: 0.2.9 - undici: 5.26.5 - vite: 4.5.0(@types/node@20.10.1) - transitivePeerDependencies: - - supports-color - dev: true - - /@sveltejs/package@2.0.0(svelte@3.59.2)(typescript@5.3.3): - resolution: {integrity: sha512-sANz/dJibOHOe83hl8pFWUSypqefdYwPp6SUr0SmJxTNQFB5dDECEqwAwoy28DWCQFYl7DU+C1hKkTXyuKOdug==} - engines: {node: ^16.14 || >=18} - hasBin: true - peerDependencies: - svelte: ^3.44.0 - dependencies: - chokidar: 3.5.3 - kleur: 4.1.5 - sade: 1.8.1 - svelte: 3.59.2 - svelte2tsx: 0.6.25(svelte@3.59.2)(typescript@5.3.3) - transitivePeerDependencies: - - typescript - dev: true - - /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@3.59.2)(vite@4.5.0): - resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} - engines: {node: ^14.18.0 || >= 16} - peerDependencies: - '@sveltejs/vite-plugin-svelte': ^2.2.0 - svelte: ^3.54.0 || ^4.0.0 - vite: ^4.0.0 - dependencies: - '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@3.59.2)(vite@4.5.0) - debug: 4.3.4 - svelte: 3.59.2 - vite: 4.5.0(@types/node@20.10.1) - transitivePeerDependencies: - - supports-color - dev: true - - /@sveltejs/vite-plugin-svelte@2.5.3(svelte@3.59.2)(vite@4.5.0): - resolution: {integrity: sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w==} - engines: {node: ^14.18.0 || >= 16} - peerDependencies: - svelte: ^3.54.0 || ^4.0.0 || ^5.0.0-next.0 - vite: ^4.0.0 - dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@3.59.2)(vite@4.5.0) - debug: 4.3.4 - deepmerge: 4.3.1 - kleur: 4.1.5 - magic-string: 0.30.5 - svelte: 3.59.2 - svelte-hmr: 0.15.3(svelte@3.59.2) - vite: 4.5.0(@types/node@20.10.1) - vitefu: 0.2.5(vite@4.5.0) - transitivePeerDependencies: - - supports-color - dev: true - - /@tailwindcss/forms@0.5.7(tailwindcss@3.4.1): - resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==} - peerDependencies: - tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' - dependencies: - mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.1 - dev: true - - /@types/argparse@1.0.38: - resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} - dev: true - - /@types/cookie@0.5.4: - resolution: {integrity: sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==} - dev: true - - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true - - /@types/node@20.10.1: - resolution: {integrity: sha512-T2qwhjWwGH81vUEx4EXmBKsTJRXFXNZTL4v0gi01+zyBmCwzE6TyHszqX01m+QHTEq+EZNo13NeJIdEqf+Myrg==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/pug@2.0.9: - resolution: {integrity: sha512-Yg4LkgFYvn1faISbDNWmcAC1XoDT8IoMUFspp5mnagKk+UvD2N0IWt5A7GRdMubsNWqgCLmrkf8rXkzNqb4szA==} - dev: true - - /@types/resolve@1.20.2: - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - dev: true - - /@volar/language-core@1.11.1: - resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} - dependencies: - '@volar/source-map': 1.11.1 - dev: true - - /@volar/source-map@1.11.1: - resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} - dependencies: - muggle-string: 0.3.1 - dev: true - - /@volar/typescript@1.11.1: - resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} - dependencies: - '@volar/language-core': 1.11.1 - path-browserify: 1.0.1 - dev: true - - /@vue/compiler-core@3.3.9: - resolution: {integrity: sha512-+/Lf68Vr/nFBA6ol4xOtJrW+BQWv3QWKfRwGSm70jtXwfhZNF4R/eRgyVJYoxFRhdCTk/F6g99BP0ffPgZihfQ==} - dependencies: - '@babel/parser': 7.23.5 - '@vue/shared': 3.3.9 - estree-walker: 2.0.2 - source-map-js: 1.0.2 - dev: true - - /@vue/compiler-dom@3.3.9: - resolution: {integrity: sha512-nfWubTtLXuT4iBeDSZ5J3m218MjOy42Vp2pmKVuBKo2/BLcrFUX8nCSr/bKRFiJ32R8qbdnnnBgRn9AdU5v0Sg==} - dependencies: - '@vue/compiler-core': 3.3.9 - '@vue/shared': 3.3.9 - dev: true - - /@vue/language-core@1.8.24(typescript@5.3.3): - resolution: {integrity: sha512-2ClHvij0WlsDWryPzXJCSpPc6rusZFNoVtRZGgGGkKCmKuIREDDKmH8j+1tYyxPYyH0qL6pZ6+IHD8KIm5nWAw==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@volar/language-core': 1.11.1 - '@volar/source-map': 1.11.1 - '@vue/compiler-dom': 3.3.9 - '@vue/shared': 3.3.9 - computeds: 0.0.1 - minimatch: 9.0.3 - muggle-string: 0.3.1 - path-browserify: 1.0.1 - typescript: 5.3.3 - vue-template-compiler: 2.7.15 - dev: true - - /@vue/shared@3.3.9: - resolution: {integrity: sha512-ZE0VTIR0LmYgeyhurPTpy4KzKsuDyQbMSdM49eKkMnT5X4VfFBLysMzjIZhLEFQYjjOVVfbvUDHckwjDFiO2eA==} - dev: true - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true - - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: true - - /autoprefixer@10.4.16(postcss@8.4.31): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.22.1 - caniuse-lite: 1.0.30001563 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - - /browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001563 - electron-to-chromium: 1.4.588 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.1) - dev: true - - /buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - dev: true - - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true - - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: true - - /caniuse-lite@1.0.30001563: - resolution: {integrity: sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==} - dev: true - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /colors@1.2.5: - resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} - engines: {node: '>=0.1.90'} - dev: true - - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true - - /commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - requiresBuild: true - dev: true - optional: true - - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true - - /computeds@0.0.1: - resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: true - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /de-indent@1.0.2: - resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} - dev: true - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /dedent-js@1.0.1: - resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} - dev: true - - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true - - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true - - /devalue@4.3.2: - resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} - dev: true - - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true - - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true - - /electron-to-chromium@1.4.588: - resolution: {integrity: sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==} - dev: true - - /es6-promise@3.3.1: - resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - dev: true - - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /esm-env@1.0.0: - resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} - dev: true - - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: true - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - dependencies: - reusify: 1.0.4 - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: true - - /fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - dev: true - - /globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: true - - /globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: true - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true - - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - dev: true - - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true - - /ignore-walk@5.0.1: - resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - minimatch: 5.1.6 - dev: true - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - - /import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - dependencies: - builtin-modules: 3.3.0 - dev: true - - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.0 - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - dependencies: - '@types/estree': 1.0.5 - dev: true - - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: true - - /jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - dev: true - - /jose@5.1.2: - resolution: {integrity: sha512-X7TOC/d8KPvx4wPUuLHVgTSdoWw0UW5TQOUwhvCvj+ZPfsf9vUPhhksYPjNBWVGPQ/6yd/JrL1gQxBnIDwYdFg==} - dev: true - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true - - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - optionalDependencies: - graceful-fs: 4.2.11 - dev: true - - /kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - dev: true - - /kolorist@1.8.0: - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - dev: true - - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: true - - /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} - dev: true - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true - - /lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - dev: true - - /lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - dev: true - - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true - - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.4.1 - dev: true - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - - /magic-string@0.27.0: - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /magic-string@0.30.5: - resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /marked@12.0.2: - resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} - engines: {node: '>= 18'} - hasBin: true - dev: false - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true - - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: true - - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true - - /mini-svg-data-uri@1.4.4: - resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} - hasBin: true - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - - /mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - dev: true - - /mrmime@1.0.1: - resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} - engines: {node: '>=10'} - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /muggle-string@0.3.1: - resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} - dev: true - - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: true - - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.4.1 - dev: true - - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true - - /npm-bundled@2.0.1: - resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - npm-normalize-package-bin: 2.0.0 - dev: true - - /npm-normalize-package-bin@2.0.0: - resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dev: true - - /npm-packlist@5.1.3: - resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true - dependencies: - glob: 8.1.0 - ignore-walk: 5.0.1 - npm-bundled: 2.0.1 - npm-normalize-package-bin: 2.0.0 - dev: true - - /oauth4webapi@2.4.0: - resolution: {integrity: sha512-ZWl8ov8HeGVyc9Icl1cag76HvIcDAp23eIIT+UVGir+dEu8BMgMlvZeZwqLVd0P8DqaumH4N+QLQXN69G1QjSA==} - dev: true - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: true - - /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - dependencies: - no-case: 3.0.4 - tslib: 2.4.1 - dev: true - - /path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true - - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true - - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true - - /postcss-import@15.1.0(postcss@8.4.31): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - dev: true - - /postcss-js@4.0.1(postcss@8.4.31): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.31 - dev: true - - /postcss-load-config@4.0.2(postcss@8.4.31): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 3.0.0 - postcss: 8.4.31 - yaml: 2.3.4 - dev: true - - /postcss-nested@6.0.1(postcss@8.4.31): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.0.13 - dev: true - - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: true - - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true - - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - - /preact-render-to-string@5.2.3(preact@10.11.3): - resolution: {integrity: sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==} - peerDependencies: - preact: '>=10' - dependencies: - preact: 10.11.3 - pretty-format: 3.8.0 - dev: true - - /preact@10.11.3: - resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==} - dev: true - - /pretty-format@3.8.0: - resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} - dev: true - - /publint@0.1.9: - resolution: {integrity: sha512-O53y7vbePxuGFmEjgcrafMSlDpOJwOkj8YdexOt7yWlv7SB3rXoT3mHknyMJ3lf2UFH5Bmt6tnIkHcOTR6dEoA==} - engines: {node: '>=16'} - hasBin: true - dependencies: - npm-packlist: 5.1.3 - picocolors: 1.0.0 - sade: 1.8.1 - dev: true - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - dev: true - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - - /resolve@1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - dev: true - - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - /rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: true - - /sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - dependencies: - mri: 1.2.0 - dev: true - - /sander@0.5.1: - resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} - dependencies: - es6-promise: 3.3.1 - graceful-fs: 4.2.11 - mkdirp: 0.5.6 - rimraf: 2.7.1 - dev: true - - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /set-cookie-parser@2.6.0: - resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} - dev: true - - /sirv@2.0.3: - resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} - engines: {node: '>= 10'} - dependencies: - '@polka/url': 1.0.0-next.23 - mrmime: 1.0.1 - totalist: 3.0.1 - dev: true - - /sorcery@0.11.0: - resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} - hasBin: true - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - buffer-crc32: 0.2.13 - minimist: 1.2.8 - sander: 0.5.1 - dev: true - - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true - - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true - - /string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - dev: true - - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - dependencies: - min-indent: 1.0.1 - dev: true - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - - /sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - - /svelte-check@3.6.0(postcss@8.4.31)(svelte@3.59.2): - resolution: {integrity: sha512-8VfqhfuRJ1sKW+o8isH2kPi0RhjXH1nNsIbCFGyoUHG+ZxVxHYRKcb+S8eaL/1tyj3VGvWYx3Y5+oCUsJgnzcw==} - hasBin: true - peerDependencies: - svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 - dependencies: - '@jridgewell/trace-mapping': 0.3.20 - chokidar: 3.5.3 - fast-glob: 3.3.2 - import-fresh: 3.3.0 - picocolors: 1.0.0 - sade: 1.8.1 - svelte: 3.59.2 - svelte-preprocess: 5.1.1(postcss@8.4.31)(svelte@3.59.2)(typescript@5.0.4) - typescript: 5.0.4 - transitivePeerDependencies: - - '@babel/core' - - coffeescript - - less - - postcss - - postcss-load-config - - pug - - sass - - stylus - - sugarss - dev: true - - /svelte-hmr@0.15.3(svelte@3.59.2): - resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} - engines: {node: ^12.20 || ^14.13.1 || >= 16} - peerDependencies: - svelte: ^3.19.0 || ^4.0.0 - dependencies: - svelte: 3.59.2 - dev: true - - /svelte-preprocess@5.1.1(postcss@8.4.31)(svelte@3.59.2)(typescript@5.0.4): - resolution: {integrity: sha512-p/Dp4hmrBW5mrCCq29lEMFpIJT2FZsRlouxEc5qpbOmXRbaFs7clLs8oKPwD3xCFyZfv1bIhvOzpQkhMEVQdMw==} - engines: {node: '>= 14.10.0'} - requiresBuild: true - peerDependencies: - '@babel/core': ^7.10.2 - coffeescript: ^2.5.1 - less: ^3.11.3 || ^4.0.0 - postcss: ^7 || ^8 - postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 - pug: ^3.0.0 - sass: ^1.26.8 - stylus: ^0.55.0 - sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 - svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 - typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' - peerDependenciesMeta: - '@babel/core': - optional: true - coffeescript: - optional: true - less: - optional: true - postcss: - optional: true - postcss-load-config: - optional: true - pug: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - typescript: - optional: true - dependencies: - '@types/pug': 2.0.9 - detect-indent: 6.1.0 - magic-string: 0.27.0 - postcss: 8.4.31 - sorcery: 0.11.0 - strip-indent: 3.0.0 - svelte: 3.59.2 - typescript: 5.0.4 - dev: true - - /svelte-preprocess@5.1.1(postcss@8.4.31)(svelte@3.59.2)(typescript@5.3.3): - resolution: {integrity: sha512-p/Dp4hmrBW5mrCCq29lEMFpIJT2FZsRlouxEc5qpbOmXRbaFs7clLs8oKPwD3xCFyZfv1bIhvOzpQkhMEVQdMw==} - engines: {node: '>= 14.10.0'} - requiresBuild: true - peerDependencies: - '@babel/core': ^7.10.2 - coffeescript: ^2.5.1 - less: ^3.11.3 || ^4.0.0 - postcss: ^7 || ^8 - postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 - pug: ^3.0.0 - sass: ^1.26.8 - stylus: ^0.55.0 - sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 - svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 - typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' - peerDependenciesMeta: - '@babel/core': - optional: true - coffeescript: - optional: true - less: - optional: true - postcss: - optional: true - postcss-load-config: - optional: true - pug: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - typescript: - optional: true - dependencies: - '@types/pug': 2.0.9 - detect-indent: 6.1.0 - magic-string: 0.27.0 - postcss: 8.4.31 - sorcery: 0.11.0 - strip-indent: 3.0.0 - svelte: 3.59.2 - typescript: 5.3.3 - dev: true - - /svelte2tsx@0.6.25(svelte@3.59.2)(typescript@5.3.3): - resolution: {integrity: sha512-hhBKL5X9gGvKQAZ9xLoHnbE9Yb00HxEZJlxcj2drxWK+Tpqcs/bnodjSfCGbqEhvNaUXYNbVL7s4dEXT+o0f6w==} - peerDependencies: - svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 - typescript: ^4.9.4 || ^5.0.0 - dependencies: - dedent-js: 1.0.1 - pascal-case: 3.1.2 - svelte: 3.59.2 - typescript: 5.3.3 - dev: true - - /svelte@3.59.2: - resolution: {integrity: sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==} - engines: {node: '>= 8'} - dev: true - - /tailwindcss@3.4.1: - resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} - engines: {node: '>=14.0.0'} - hasBin: true - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.5.3 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.0 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.31 - postcss-import: 15.1.0(postcss@8.4.31) - postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.2(postcss@8.4.31) - postcss-nested: 6.0.1(postcss@8.4.31) - postcss-selector-parser: 6.0.13 - resolve: 1.22.8 - sucrase: 3.34.0 - transitivePeerDependencies: - - ts-node - dev: true - - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - dev: true - - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - dev: true - - /tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - dev: true - - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - dev: true - - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true - - /tslib@2.4.1: - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - dev: true - - /typescript@5.0.4: - resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} - engines: {node: '>=12.20'} - hasBin: true - dev: true - - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true - - /undici@5.26.5: - resolution: {integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==} - engines: {node: '>=14.0'} - dependencies: - '@fastify/busboy': 2.1.0 - dev: true - - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true - - /update-browserslist-db@1.0.13(browserslist@4.22.1): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.22.1 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true - - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - dev: true - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - - /validator@13.11.0: - resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} - engines: {node: '>= 0.10'} - dev: true - - /vite-plugin-dts@3.6.4(@types/node@20.10.1)(typescript@5.3.3)(vite@4.5.0): - resolution: {integrity: sha512-yOVhUI/kQhtS6lCXRYYLv2UUf9bftcwQK9ROxCX2ul17poLQs02ctWX7+vXB8GPRzH8VCK3jebEFtPqqijXx6w==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - typescript: '*' - vite: '*' - peerDependenciesMeta: - vite: - optional: true - dependencies: - '@microsoft/api-extractor': 7.38.3(@types/node@20.10.1) - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) - '@vue/language-core': 1.8.24(typescript@5.3.3) - debug: 4.3.4 - kolorist: 1.8.0 - typescript: 5.3.3 - vite: 4.5.0(@types/node@20.10.1) - vue-tsc: 1.8.24(typescript@5.3.3) - transitivePeerDependencies: - - '@types/node' - - rollup - - supports-color - dev: true - - /vite@4.5.0(@types/node@20.10.1): - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 20.10.1 - esbuild: 0.18.20 - postcss: 8.4.31 - rollup: 3.29.4 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /vitefu@0.2.5(vite@4.5.0): - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - vite: - optional: true - dependencies: - vite: 4.5.0(@types/node@20.10.1) - dev: true - - /vue-template-compiler@2.7.15: - resolution: {integrity: sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og==} - dependencies: - de-indent: 1.0.2 - he: 1.2.0 - dev: true - - /vue-tsc@1.8.24(typescript@5.3.3): - resolution: {integrity: sha512-eH1CSj231OzVEY5Hi7wS6ubzyOEwgr5jCptR0Ddf2SitGcaXIsPVDvrprm3eolCdyhDt3WS1Eb2F4fGX9BsUUw==} - hasBin: true - peerDependencies: - typescript: '*' - dependencies: - '@volar/typescript': 1.11.1 - '@vue/language-core': 1.8.24(typescript@5.3.3) - semver: 7.5.4 - typescript: 5.3.3 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true - - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - dev: true - - /z-schema@5.0.5: - resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} - engines: {node: '>=8.0.0'} - hasBin: true - dependencies: - lodash.get: 4.4.2 - lodash.isequal: 4.5.0 - validator: 13.11.0 - optionalDependencies: - commander: 9.5.0 - dev: true diff --git a/packages/widgets/postcss.config.js b/packages/widgets/postcss.config.js deleted file mode 100644 index 7b75c83af..000000000 --- a/packages/widgets/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/packages/widgets/src/additional-svelte-typings.d.ts b/packages/widgets/src/additional-svelte-typings.d.ts deleted file mode 100644 index 005f3d400..000000000 --- a/packages/widgets/src/additional-svelte-typings.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-namespace, @typescript-eslint/no-unused-vars -declare namespace svelteHTML { - // enhance attributes - // eslint-disable-next-line @typescript-eslint/no-unused-vars - interface HTMLAttributes { - // If you want to use on:beforeinstallprompt - "on:cmdEnter"?: () => void; - } -} diff --git a/packages/widgets/src/app.d.ts b/packages/widgets/src/app.d.ts deleted file mode 100644 index 8b7f8826a..000000000 --- a/packages/widgets/src/app.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -// See https://kit.svelte.dev/docs/types#app -// for information about these interfaces -declare global { - namespace App { - // interface Error {} - // interface Locals {} - // interface PageData {} - // interface Platform {} - } - - export interface Session { - access_token?: string; - } -} - -declare module "@auth/core/types" { - export interface Session { - access_token?: string; - } - - export interface User { - username: string; - } -} - -export {}; diff --git a/packages/widgets/src/app.html b/packages/widgets/src/app.html deleted file mode 100644 index f22aeaad5..000000000 --- a/packages/widgets/src/app.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - %sveltekit.head% - - -
%sveltekit.body%
- - diff --git a/packages/widgets/src/hooks.server.ts b/packages/widgets/src/hooks.server.ts deleted file mode 100644 index 1ff48a19b..000000000 --- a/packages/widgets/src/hooks.server.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { env } from "$env/dynamic/private"; -import { skipCSRFCheck } from "@auth/core"; -import { SvelteKitAuth } from "@auth/sveltekit"; -import type { Handle } from "@sveltejs/kit"; -import { sequence } from "@sveltejs/kit/hooks"; - -const handleSSO = - env.OAUTH_CLIENT_ID && env.OAUTH_CLIENT_SECRET - ? SvelteKitAuth({ - // Should be fine as long as your reverse proxy is configured to only accept traffic with the correct host header - trustHost: true, - /** - * SvelteKit has built-in CSRF protection, so we can skip the check - */ - skipCSRFCheck: skipCSRFCheck, - cookies: { - sessionToken: { - name: "session_token", - options: { - httpOnly: true, - sameSite: "lax", - secure: true, - path: "/", - maxAge: 3600, // The OAuth token's lifetime is 3600 seconds - }, - }, - }, - providers: [ - { - name: "Hugging Face", - id: "huggingface", - type: "oidc", - clientId: env.OAUTH_CLIENT_ID, - clientSecret: env.OAUTH_CLIENT_SECRET, - issuer: "https://huggingface.co", - wellKnown: "https://huggingface.co/.well-known/openid-configuration", - /** Add "inference-api" scope and remove "email" scope */ - authorization: { params: { scope: "openid profile inference-api" } }, - checks: ["state" as never, "pkce" as never], - }, - ], - secret: env.OAUTH_CLIENT_SECRET, - /** - * Get the access_token without an account in DB, to make calls to Inference Endpoints - */ - callbacks: { - jwt({ token, account, profile }) { - return { - ...token, - /** - * account & profile are undefined beyond the first login, in those - * cases `token.access_token` and `token.username` are defined - */ - ...(account && { access_token: account.access_token }), - ...(profile && { username: profile.preferred_username }), - }; - }, - session({ session, token }) { - return { - ...session, - access_token: token.access_token, - user: Object.assign({}, session.user, { - username: token.username, - }), - }; - }, - }, - }) - : null; - -const handleGlobal: Handle = async ({ event, resolve }) => { - const response = await resolve(event); - return response; -}; - -export const handle = handleSSO ? sequence(handleSSO, handleGlobal) : handleGlobal; diff --git a/packages/widgets/src/lib/components/DemoThemeSwitcher/DemoThemeSwitcher.svelte b/packages/widgets/src/lib/components/DemoThemeSwitcher/DemoThemeSwitcher.svelte deleted file mode 100644 index 244e51cc6..000000000 --- a/packages/widgets/src/lib/components/DemoThemeSwitcher/DemoThemeSwitcher.svelte +++ /dev/null @@ -1,60 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconAnyToAny.svelte b/packages/widgets/src/lib/components/Icons/IconAnyToAny.svelte deleted file mode 100644 index 9ebbf1b8c..000000000 --- a/packages/widgets/src/lib/components/Icons/IconAnyToAny.svelte +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/widgets/src/lib/components/Icons/IconAudioClassification.svelte b/packages/widgets/src/lib/components/Icons/IconAudioClassification.svelte deleted file mode 100644 index 963570923..000000000 --- a/packages/widgets/src/lib/components/Icons/IconAudioClassification.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconAudioToAudio.svelte b/packages/widgets/src/lib/components/Icons/IconAudioToAudio.svelte deleted file mode 100644 index ae5c4aeef..000000000 --- a/packages/widgets/src/lib/components/Icons/IconAudioToAudio.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconAutomaticSpeechRecognition.svelte b/packages/widgets/src/lib/components/Icons/IconAutomaticSpeechRecognition.svelte deleted file mode 100644 index 01b18c541..000000000 --- a/packages/widgets/src/lib/components/Icons/IconAutomaticSpeechRecognition.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconAzureML.svelte b/packages/widgets/src/lib/components/Icons/IconAzureML.svelte deleted file mode 100644 index 3fc373b4b..000000000 --- a/packages/widgets/src/lib/components/Icons/IconAzureML.svelte +++ /dev/null @@ -1,40 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconCaretDown.svelte b/packages/widgets/src/lib/components/Icons/IconCaretDown.svelte deleted file mode 100644 index ae3574382..000000000 --- a/packages/widgets/src/lib/components/Icons/IconCaretDown.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconCaretDownV2.svelte b/packages/widgets/src/lib/components/Icons/IconCaretDownV2.svelte deleted file mode 100644 index f8b4baac5..000000000 --- a/packages/widgets/src/lib/components/Icons/IconCaretDownV2.svelte +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconCode.svelte b/packages/widgets/src/lib/components/Icons/IconCode.svelte deleted file mode 100644 index a84e7b970..000000000 --- a/packages/widgets/src/lib/components/Icons/IconCode.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconConversational.svelte b/packages/widgets/src/lib/components/Icons/IconConversational.svelte deleted file mode 100644 index 38e01c10b..000000000 --- a/packages/widgets/src/lib/components/Icons/IconConversational.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconCross.svelte b/packages/widgets/src/lib/components/Icons/IconCross.svelte deleted file mode 100644 index ae6b04ffc..000000000 --- a/packages/widgets/src/lib/components/Icons/IconCross.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconDepthEstimation.svelte b/packages/widgets/src/lib/components/Icons/IconDepthEstimation.svelte deleted file mode 100644 index 83362801b..000000000 --- a/packages/widgets/src/lib/components/Icons/IconDepthEstimation.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconDocumentQuestionAnswering.svelte b/packages/widgets/src/lib/components/Icons/IconDocumentQuestionAnswering.svelte deleted file mode 100644 index 6c1c84297..000000000 --- a/packages/widgets/src/lib/components/Icons/IconDocumentQuestionAnswering.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconFeatureExtraction.svelte b/packages/widgets/src/lib/components/Icons/IconFeatureExtraction.svelte deleted file mode 100644 index c1806a76a..000000000 --- a/packages/widgets/src/lib/components/Icons/IconFeatureExtraction.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconFile.svelte b/packages/widgets/src/lib/components/Icons/IconFile.svelte deleted file mode 100644 index 0d50da5d5..000000000 --- a/packages/widgets/src/lib/components/Icons/IconFile.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconFillMask.svelte b/packages/widgets/src/lib/components/Icons/IconFillMask.svelte deleted file mode 100644 index e096d5a8c..000000000 --- a/packages/widgets/src/lib/components/Icons/IconFillMask.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconGraphML.svelte b/packages/widgets/src/lib/components/Icons/IconGraphML.svelte deleted file mode 100644 index 6000b5ab3..000000000 --- a/packages/widgets/src/lib/components/Icons/IconGraphML.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconHuggingFace.svelte b/packages/widgets/src/lib/components/Icons/IconHuggingFace.svelte deleted file mode 100644 index 325aec971..000000000 --- a/packages/widgets/src/lib/components/Icons/IconHuggingFace.svelte +++ /dev/null @@ -1,56 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconImageAndTextToText.svelte b/packages/widgets/src/lib/components/Icons/IconImageAndTextToText.svelte deleted file mode 100644 index 8263c0801..000000000 --- a/packages/widgets/src/lib/components/Icons/IconImageAndTextToText.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconImageClassification.svelte b/packages/widgets/src/lib/components/Icons/IconImageClassification.svelte deleted file mode 100644 index fa83eb205..000000000 --- a/packages/widgets/src/lib/components/Icons/IconImageClassification.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconImageFeatureExtraction.svelte b/packages/widgets/src/lib/components/Icons/IconImageFeatureExtraction.svelte deleted file mode 100644 index 38c0a271d..000000000 --- a/packages/widgets/src/lib/components/Icons/IconImageFeatureExtraction.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconImageSegmentation.svelte b/packages/widgets/src/lib/components/Icons/IconImageSegmentation.svelte deleted file mode 100644 index d84e55c74..000000000 --- a/packages/widgets/src/lib/components/Icons/IconImageSegmentation.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconImageTo3D.svelte b/packages/widgets/src/lib/components/Icons/IconImageTo3D.svelte deleted file mode 100644 index 83c9d520f..000000000 --- a/packages/widgets/src/lib/components/Icons/IconImageTo3D.svelte +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconImageToImage.svelte b/packages/widgets/src/lib/components/Icons/IconImageToImage.svelte deleted file mode 100644 index 1ea332d30..000000000 --- a/packages/widgets/src/lib/components/Icons/IconImageToImage.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconImageToText.svelte b/packages/widgets/src/lib/components/Icons/IconImageToText.svelte deleted file mode 100644 index 8263c0801..000000000 --- a/packages/widgets/src/lib/components/Icons/IconImageToText.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconImageToVideo.svelte b/packages/widgets/src/lib/components/Icons/IconImageToVideo.svelte deleted file mode 100644 index 36c45469d..000000000 --- a/packages/widgets/src/lib/components/Icons/IconImageToVideo.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconInfo.svelte b/packages/widgets/src/lib/components/Icons/IconInfo.svelte deleted file mode 100644 index 6b5a9b1f9..000000000 --- a/packages/widgets/src/lib/components/Icons/IconInfo.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconKeypointDetection.svelte b/packages/widgets/src/lib/components/Icons/IconKeypointDetection.svelte deleted file mode 100644 index 312d1b11c..000000000 --- a/packages/widgets/src/lib/components/Icons/IconKeypointDetection.svelte +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/widgets/src/lib/components/Icons/IconLightning.svelte b/packages/widgets/src/lib/components/Icons/IconLightning.svelte deleted file mode 100644 index 91d87c2cc..000000000 --- a/packages/widgets/src/lib/components/Icons/IconLightning.svelte +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconMagicWand.svelte b/packages/widgets/src/lib/components/Icons/IconMagicWand.svelte deleted file mode 100644 index 7aa63b2a2..000000000 --- a/packages/widgets/src/lib/components/Icons/IconMagicWand.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconMaskGeneration.svelte b/packages/widgets/src/lib/components/Icons/IconMaskGeneration.svelte deleted file mode 100644 index da592745e..000000000 --- a/packages/widgets/src/lib/components/Icons/IconMaskGeneration.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconMaximize.svelte b/packages/widgets/src/lib/components/Icons/IconMaximize.svelte deleted file mode 100644 index 872037067..000000000 --- a/packages/widgets/src/lib/components/Icons/IconMaximize.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconMicrophone.svelte b/packages/widgets/src/lib/components/Icons/IconMicrophone.svelte deleted file mode 100644 index d46385493..000000000 --- a/packages/widgets/src/lib/components/Icons/IconMicrophone.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconObjectDetection.svelte b/packages/widgets/src/lib/components/Icons/IconObjectDetection.svelte deleted file mode 100644 index ae1e1a7a6..000000000 --- a/packages/widgets/src/lib/components/Icons/IconObjectDetection.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconQuestionAnswering.svelte b/packages/widgets/src/lib/components/Icons/IconQuestionAnswering.svelte deleted file mode 100644 index b57d90ac4..000000000 --- a/packages/widgets/src/lib/components/Icons/IconQuestionAnswering.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - diff --git a/packages/widgets/src/lib/components/Icons/IconRefresh.svelte b/packages/widgets/src/lib/components/Icons/IconRefresh.svelte deleted file mode 100644 index 8d3284c03..000000000 --- a/packages/widgets/src/lib/components/Icons/IconRefresh.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconReinforcementLearning.svelte b/packages/widgets/src/lib/components/Icons/IconReinforcementLearning.svelte deleted file mode 100644 index 802dc2437..000000000 --- a/packages/widgets/src/lib/components/Icons/IconReinforcementLearning.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconRobotics.svelte b/packages/widgets/src/lib/components/Icons/IconRobotics.svelte deleted file mode 100644 index 6f354638e..000000000 --- a/packages/widgets/src/lib/components/Icons/IconRobotics.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconRow.svelte b/packages/widgets/src/lib/components/Icons/IconRow.svelte deleted file mode 100644 index 7710d2b52..000000000 --- a/packages/widgets/src/lib/components/Icons/IconRow.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconSentenceSimilarity.svelte b/packages/widgets/src/lib/components/Icons/IconSentenceSimilarity.svelte deleted file mode 100644 index def158c73..000000000 --- a/packages/widgets/src/lib/components/Icons/IconSentenceSimilarity.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconSpin.svelte b/packages/widgets/src/lib/components/Icons/IconSpin.svelte deleted file mode 100644 index 2afa35d83..000000000 --- a/packages/widgets/src/lib/components/Icons/IconSpin.svelte +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconSummarization.svelte b/packages/widgets/src/lib/components/Icons/IconSummarization.svelte deleted file mode 100644 index 8c0ee2fc5..000000000 --- a/packages/widgets/src/lib/components/Icons/IconSummarization.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconTableQuestionAnswering.svelte b/packages/widgets/src/lib/components/Icons/IconTableQuestionAnswering.svelte deleted file mode 100644 index c11027345..000000000 --- a/packages/widgets/src/lib/components/Icons/IconTableQuestionAnswering.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconTabularClassification.svelte b/packages/widgets/src/lib/components/Icons/IconTabularClassification.svelte deleted file mode 100644 index d4ce233b1..000000000 --- a/packages/widgets/src/lib/components/Icons/IconTabularClassification.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconTabularRegression.svelte b/packages/widgets/src/lib/components/Icons/IconTabularRegression.svelte deleted file mode 100644 index ed4355c5d..000000000 --- a/packages/widgets/src/lib/components/Icons/IconTabularRegression.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconText2textGeneration.svelte b/packages/widgets/src/lib/components/Icons/IconText2textGeneration.svelte deleted file mode 100644 index ed5a2c6c7..000000000 --- a/packages/widgets/src/lib/components/Icons/IconText2textGeneration.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconTextClassification.svelte b/packages/widgets/src/lib/components/Icons/IconTextClassification.svelte deleted file mode 100644 index e747e6d2d..000000000 --- a/packages/widgets/src/lib/components/Icons/IconTextClassification.svelte +++ /dev/null @@ -1,33 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconTextGeneration.svelte b/packages/widgets/src/lib/components/Icons/IconTextGeneration.svelte deleted file mode 100644 index fa0153e0d..000000000 --- a/packages/widgets/src/lib/components/Icons/IconTextGeneration.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconTextTo3D.svelte b/packages/widgets/src/lib/components/Icons/IconTextTo3D.svelte deleted file mode 100644 index 052acf4b3..000000000 --- a/packages/widgets/src/lib/components/Icons/IconTextTo3D.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconTextToImage.svelte b/packages/widgets/src/lib/components/Icons/IconTextToImage.svelte deleted file mode 100644 index a7adab86f..000000000 --- a/packages/widgets/src/lib/components/Icons/IconTextToImage.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconTextToSpeech.svelte b/packages/widgets/src/lib/components/Icons/IconTextToSpeech.svelte deleted file mode 100644 index 7c533cfcb..000000000 --- a/packages/widgets/src/lib/components/Icons/IconTextToSpeech.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconTextToVideo.svelte b/packages/widgets/src/lib/components/Icons/IconTextToVideo.svelte deleted file mode 100644 index 3082ea2e6..000000000 --- a/packages/widgets/src/lib/components/Icons/IconTextToVideo.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconTokenClassification.svelte b/packages/widgets/src/lib/components/Icons/IconTokenClassification.svelte deleted file mode 100644 index 27f3d3625..000000000 --- a/packages/widgets/src/lib/components/Icons/IconTokenClassification.svelte +++ /dev/null @@ -1,33 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconTranslation.svelte b/packages/widgets/src/lib/components/Icons/IconTranslation.svelte deleted file mode 100644 index c0d344420..000000000 --- a/packages/widgets/src/lib/components/Icons/IconTranslation.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconUnconditionalImageGeneration.svelte b/packages/widgets/src/lib/components/Icons/IconUnconditionalImageGeneration.svelte deleted file mode 100644 index 880d6ae9c..000000000 --- a/packages/widgets/src/lib/components/Icons/IconUnconditionalImageGeneration.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconVideoClassification.svelte b/packages/widgets/src/lib/components/Icons/IconVideoClassification.svelte deleted file mode 100644 index 669a372ca..000000000 --- a/packages/widgets/src/lib/components/Icons/IconVideoClassification.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconVideoTextToText.svelte b/packages/widgets/src/lib/components/Icons/IconVideoTextToText.svelte deleted file mode 100644 index 766c97ded..000000000 --- a/packages/widgets/src/lib/components/Icons/IconVideoTextToText.svelte +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/widgets/src/lib/components/Icons/IconVoiceActivityDetection.svelte b/packages/widgets/src/lib/components/Icons/IconVoiceActivityDetection.svelte deleted file mode 100644 index c896fee50..000000000 --- a/packages/widgets/src/lib/components/Icons/IconVoiceActivityDetection.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconZeroShotClassification.svelte b/packages/widgets/src/lib/components/Icons/IconZeroShotClassification.svelte deleted file mode 100644 index ebbe940ef..000000000 --- a/packages/widgets/src/lib/components/Icons/IconZeroShotClassification.svelte +++ /dev/null @@ -1,51 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/Icons/IconZeroShotObjectDetection.svelte b/packages/widgets/src/lib/components/Icons/IconZeroShotObjectDetection.svelte deleted file mode 100644 index a1c7270cd..000000000 --- a/packages/widgets/src/lib/components/Icons/IconZeroShotObjectDetection.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/InferenceWidget/InferenceWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/InferenceWidget.svelte deleted file mode 100644 index 9a49b5911..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/InferenceWidget.svelte +++ /dev/null @@ -1,109 +0,0 @@ - - -{#if widgetComponent} - -{:else} - - -{/if} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetAddSentenceBtn/WidgetAddSentenceBtn.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetAddSentenceBtn/WidgetAddSentenceBtn.svelte deleted file mode 100644 index 3495b0abd..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetAddSentenceBtn/WidgetAddSentenceBtn.svelte +++ /dev/null @@ -1,11 +0,0 @@ - - -{#if !isDisabled} - - -{/if} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetAudioTrack/WidgetAudioTrack.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetAudioTrack/WidgetAudioTrack.svelte deleted file mode 100644 index b17f29a56..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetAudioTrack/WidgetAudioTrack.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - -
- {#if $$slots.default} - - {:else if label.length} -
{label}
- {/if} - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetBloomDecoding/WidgetBloomDecoding.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetBloomDecoding/WidgetBloomDecoding.svelte deleted file mode 100644 index 19d630645..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetBloomDecoding/WidgetBloomDecoding.svelte +++ /dev/null @@ -1,55 +0,0 @@ - - - (isPromptTipOpen = false)} /> - -
-
-
- sampling - -
-
-
-
-
- greedy -
-
- - (isPromptTipOpen = true)} - >ⓘ BLOOM prompting tips - {#if isPromptTipOpen} -
- A good prompt: Do NOT talk to Bloom as an entity, it's not a chatbot but a webpage/blog/article completion - model. For the best behaviours: MIMIC a few words of a webpage similar to the content you want to generate. - Start a sentence as if YOU were writing a blog, webpage, math post, coding article and Bloom will generate a - coherent follow-up. -
- {/if} -
-
-

- {description} -

-
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetCheckbox/WidgetCheckbox.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetCheckbox/WidgetCheckbox.svelte deleted file mode 100644 index e4e975e81..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetCheckbox/WidgetCheckbox.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetDropzone/WidgetDropzone.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetDropzone/WidgetDropzone.svelte deleted file mode 100644 index c936d2240..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetDropzone/WidgetDropzone.svelte +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - -
{ - if (!$isLoggedIn) { - popOverOpen = true; - return; - } - fileInput.click(); - }} - on:dragenter={() => { - isDragging = true; - }} - on:dragleave={() => { - isDragging = false; - }} - on:dragover|preventDefault - on:drop|preventDefault={onDrop} - > - {#if !imgSrc && !isDisabled} - {label} - {:else} -
- -
- {/if} - {#if isLoading} -
- -
- {/if} -
-
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetExamples/WidgetExamples.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetExamples/WidgetExamples.svelte deleted file mode 100644 index 86124db2f..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetExamples/WidgetExamples.svelte +++ /dev/null @@ -1,175 +0,0 @@ - - - - -
- - {#if exampleGroups.length > 1} - group)} - /> - {/if} - - -
- -
-
{title}
- -
- - {#if isOptionsVisible} -
-
- {#each examples as { example_title }, i} - -
_previewInputSample(i)} - on:click={() => _applyWidgetExample(i)} - > - {example_title} -
- {/each} -
-
- {/if} -
-
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetExamples/WidgetExamplesGroup.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetExamples/WidgetExamplesGroup.svelte deleted file mode 100644 index 2c86fb3c7..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetExamples/WidgetExamplesGroup.svelte +++ /dev/null @@ -1,83 +0,0 @@ - - - - -
- -
-
{selectedGroupName ?? "Groups"}
- -
- - {#if isOptionsVisible} -
-
- {#each groupNames as inputGroup, i} - -
chooseInputGroup(i)} - > - {inputGroup} -
- {/each} -
-
- {/if} -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetFileInput/WidgetFileInput.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetFileInput/WidgetFileInput.svelte deleted file mode 100644 index 1fa011127..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetFileInput/WidgetFileInput.svelte +++ /dev/null @@ -1,75 +0,0 @@ - - -{#if !isDisabled} - - - -{/if} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetFooter/WidgetFooter.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetFooter/WidgetFooter.svelte deleted file mode 100644 index d8b3c9baa..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetFooter/WidgetFooter.svelte +++ /dev/null @@ -1,56 +0,0 @@ - - -
- {#if !isDisabled} - - {/if} - - - -
-{#if outputJson && isOutputJsonVisible} -
{outputJson}
-{/if} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetHeader/WidgetHeader.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetHeader/WidgetHeader.svelte deleted file mode 100644 index 9120477c1..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetHeader/WidgetHeader.svelte +++ /dev/null @@ -1,106 +0,0 @@ - - -
- {#if !noTitle} - {#if title} -
- {title} -
- {:else} -
- {#if !isDisabled} - - Inference API - {:else} - Inference Examples - {/if} -
- - - - {/if} - {/if} -
-
- {#if pipeline && task} -
- - - -
- {/if} - -
- {#if showReset && !isDisabled} - - {/if} - {#if validExamples.length && applyWidgetExample} - - {/if} -
-
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetInfo/WidgetInfo.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetInfo/WidgetInfo.svelte deleted file mode 100644 index 214dcbc65..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetInfo/WidgetInfo.svelte +++ /dev/null @@ -1,111 +0,0 @@ - - -
-
- {#if model.id === "bigscience/bloom"} -
-
- Powered by  - AzureML -
-
-
- {@html getStatusReport($modelLoadStates[model.id], azureState)} -
-
- {:else if computeTime} - Computation time on {$modelLoadStates[model.id]?.compute_type ?? ComputeType.CPU}: {computeTime} - {:else if (model.inference === InferenceDisplayability.Yes || model.pipeline_tag === "reinforcement-learning") && !modelTooBig} - {@html getStatusReport($modelLoadStates[model.id], state)} - {:else if model.inference === InferenceDisplayability.ExplicitOptOut} - Inference API (serverless) has been turned off for this model. - {:else if model.inference === InferenceDisplayability.CustomCode} - Inference API (serverless) does not yet support model repos that contain custom code. - {:else if model.inference === InferenceDisplayability.LibraryNotDetected} - - Unable to determine this model's library. Check the - - docs - . - - {:else if model.inference === InferenceDisplayability.PipelineNotDetected} - - Unable to determine this model’s pipeline type. Check the - - docs - . - - {:else if model.inference === InferenceDisplayability.PipelineLibraryPairNotSupported} - - Inference API (serverless) does not yet support {model.library_name} models for this pipeline type. - - {:else if modelTooBig} - - Model is too large to load in Inference API (serverless). To try the model, launch it on Inference Endpoints (dedicated) - instead. - - {:else} - - - Inference API (serverless) is disabled for an unknown reason. Please open a - Discussion in the Community tab. - - {/if} -
- {#if error} -
{error}
- {/if} - {#if modelLoading.isLoading} - - {/if} -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetLabel/WidgetLabel.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetLabel/WidgetLabel.svelte deleted file mode 100644 index 03f1e5c9e..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetLabel/WidgetLabel.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetModelLoading/WidgetModelLoading.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetModelLoading/WidgetModelLoading.svelte deleted file mode 100644 index a8af2c181..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetModelLoading/WidgetModelLoading.svelte +++ /dev/null @@ -1,38 +0,0 @@ - - -
-
-
- - Model is loading -
-
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOuputConvoBubble/WidgetOutputConvoBubble.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOuputConvoBubble/WidgetOutputConvoBubble.svelte deleted file mode 100644 index 289788ba3..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOuputConvoBubble/WidgetOutputConvoBubble.svelte +++ /dev/null @@ -1,64 +0,0 @@ - - -
- {#each tokens as token} - {@html marked.parse(token.raw, options)} - {/each} -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputChart/WidgetOutputChart.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputChart/WidgetOutputChart.svelte deleted file mode 100644 index 8771bd903..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputChart/WidgetOutputChart.svelte +++ /dev/null @@ -1,67 +0,0 @@ - - - -{#if output.length} -
- - {#each output as { score, color }, index} - -
mouseover(index)} - on:mouseout={mouseout} - > -
-
- {text(output[index])} -
- {#if typeof score === "number"} - {score.toFixed(3)} - {/if} -
- {/each} -
-{/if} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputConvo/WidgetOutputConvo.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputConvo/WidgetOutputConvo.svelte deleted file mode 100644 index 7d6ddc2aa..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputConvo/WidgetOutputConvo.svelte +++ /dev/null @@ -1,39 +0,0 @@ - - -
-
- Input a message to start chatting with - {modelId}. -
-
- {#each messages as message} - {#if message.content} - {@const position = message.role === "user" ? "right" : message.role === "assistant" ? "left" : "center"} - - {/if} - {/each} -
-
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputTableQA/WidgetOutputTableQA.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputTableQA/WidgetOutputTableQA.svelte deleted file mode 100644 index 410fc55c3..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputTableQA/WidgetOutputTableQA.svelte +++ /dev/null @@ -1,52 +0,0 @@ - - -
- {#if isAnswerOnlyOutput} - {output.answer} - {:else} - - {#if output.cells.length} - {output.cells.length} - match{output.cells.length > 1 ? "es" : ""} - : - {:else} - No matches - {/if} - - {#if output.cells.length} - {#each output.cells as answer} - {answer} - {/each} - {#if output.aggregator !== "NONE"} - {output.aggregator} - {/if} - {/if} - {/if} -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputText/WidgetOutputText.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputText/WidgetOutputText.svelte deleted file mode 100644 index e1d051506..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputText/WidgetOutputText.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -{#if output.length} -

- {output} -

-{/if} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputTokens/WidgetOutputTokens.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputTokens/WidgetOutputTokens.svelte deleted file mode 100644 index 58343a2cc..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputTokens/WidgetOutputTokens.svelte +++ /dev/null @@ -1,94 +0,0 @@ - - -{#if text && output.length} - -
- {@html render(text, output)} -
-{/if} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetQuickInput/WidgetQuickInput.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetQuickInput/WidgetQuickInput.svelte deleted file mode 100644 index c31d53754..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetQuickInput/WidgetQuickInput.svelte +++ /dev/null @@ -1,49 +0,0 @@ - - - -
- { - if (!$isLoggedIn) { - popOverOpen = true; - return; - } - dispatch("cmdEnter"); - }} - /> - (popOverOpen = true)} - /> -
-
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRadio/WidgetRadio.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRadio/WidgetRadio.svelte deleted file mode 100644 index 7cfb06a49..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRadio/WidgetRadio.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRealtimeRecorder/Recorder.ts b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRealtimeRecorder/Recorder.ts deleted file mode 100644 index be0e295d5..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRealtimeRecorder/Recorder.ts +++ /dev/null @@ -1,103 +0,0 @@ -export default class Recorder { - // see developers.google.com/web/updates/2016/01/mediarecorder - type: "audio" | "video" = "audio"; - private apiToken: string | undefined; - private audioContext: AudioContext | undefined; - private isLoggedIn = false; - private isModelLoaded = false; - private isEmptyBuffer = false; - private modelId: string; - private onError: (err: string) => void; - private updateModelLoading: (isLoading: boolean, estimatedTime?: number) => void; - private renderText: (txt: string) => void; - private renderWarning: (warning: string) => void; - private socket: WebSocket | undefined; - private stream: MediaStream | undefined; - - constructor( - modelId: string, - apiToken: string | undefined, - renderText: (txt: string) => void, - renderWarning: (warning: string) => void, - onError: (err: string) => void, - updateModelLoading: (isLoading: boolean, estimatedTime?: number) => void - ) { - this.modelId = modelId; - this.apiToken = apiToken || ""; - this.renderText = renderText; - this.renderWarning = renderWarning; - this.onError = onError; - this.updateModelLoading = updateModelLoading; - } - - async start(): Promise { - const constraints: MediaStreamConstraints = this.type === "video" ? { audio: true, video: true } : { audio: true }; - this.stream = await navigator.mediaDevices.getUserMedia(constraints); - - this.socket = new WebSocket(`wss://api-inference.huggingface.co/asr/live/cpu/${this.modelId}`); - - this.socket.onerror = () => { - this.onError("Webscoket connection error"); - }; - - this.socket.onopen = () => { - this.socket?.send(`Bearer ${this.apiToken}`); - }; - - this.updateModelLoading(true); - - this.socket.onmessage = (e: MessageEvent) => { - const data = JSON.parse(e.data); - if (data.type === "status" && data.message === "Successful login") { - this.isLoggedIn = true; - } else if (data.type === "status" && !!data.estimated_time && !this.isModelLoaded) { - this.updateModelLoading(true, data.estimated_time); - } else { - // data.type === "results" - this.isModelLoaded = true; - if (data.text) { - this.renderText(data.text); - } else if (!this.isEmptyBuffer) { - this.renderWarning("result was empty"); - } - } - }; - - this.audioContext = new AudioContext(); - await this.audioContext.audioWorklet.addModule("/audioProcessor.js"); - const microphone = this.audioContext.createMediaStreamSource(this.stream); - const dataExtractor = new AudioWorkletNode(this.audioContext, "AudioDataExtractor"); - microphone.connect(dataExtractor).connect(this.audioContext.destination); - - dataExtractor.port.onmessage = (event) => { - const { buffer, sampling_rate: samplingRate } = event.data; - this.isEmptyBuffer = buffer.reduce((sum: number, x: number) => sum + x) === 0; - if (this.isModelLoaded && this.isEmptyBuffer) { - this.renderWarning("🎤 input is empty: try speaking louder 🗣️ & make sure correct mic source is selected"); - } - const base64: string = btoa(String.fromCharCode(...new Uint8Array(buffer.buffer))); - const message = { - raw: base64, - sampling_rate: samplingRate, - }; - if (this.isLoggedIn) { - try { - this.socket?.send(JSON.stringify(message)); - } catch (e) { - this.onError(`Error sending data to websocket: ${e}`); - } - } - }; - } - - stop(): void { - this.isLoggedIn = false; - void this.audioContext?.close(); - this.socket?.close(); - if (this.stream) { - for (const t of this.stream.getTracks()) { - t.stop(); - } - } - } -} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRealtimeRecorder/WidgetRealtimeRecorder.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRealtimeRecorder/WidgetRealtimeRecorder.svelte deleted file mode 100644 index d30136d34..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRealtimeRecorder/WidgetRealtimeRecorder.svelte +++ /dev/null @@ -1,104 +0,0 @@ - - - - -{#if isRecording} -
- {#if warning} -

{warning}

- {:else} -

{txt}

- {/if} -
-{/if} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRecorder/Recorder.ts b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRecorder/Recorder.ts deleted file mode 100644 index c97e6a791..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRecorder/Recorder.ts +++ /dev/null @@ -1,67 +0,0 @@ -export default class Recorder { - // see developers.google.com/web/updates/2016/01/mediarecorder - type: "audio" | "video" = "audio"; - private stream?: MediaStream; - private mediaRecorder?: MediaRecorder; - private recordedBlobs: Blob[] = []; - public outputBlob?: Blob; - - get desiredMimeType(): string { - return this.type === "video" ? "video/webm" : "audio/webm"; - } - get mimeType(): string { - if (!this.mediaRecorder) { - throw new Error("MediaRecorder not initialized"); - } - return this.mediaRecorder.mimeType; - } - async start(): Promise { - this.recordedBlobs = []; - - const constraints: MediaStreamConstraints = this.type === "video" ? { audio: true, video: true } : { audio: true }; - this.stream = await navigator.mediaDevices.getUserMedia(constraints); - this.startRecording(); - } - private startRecording() { - if (!this.stream) { - throw new Error("Stream not initialized"); - } - this.outputBlob = undefined; - this.mediaRecorder = new MediaRecorder(this.stream, { - mimeType: this.desiredMimeType, - }); - this.mediaRecorder.onstop = this.handleStop.bind(this); - this.mediaRecorder.ondataavailable = this.handleDataAvailable.bind(this); - this.mediaRecorder.start(10); // timeslice in ms - } - handleStop(): void {} - handleDataAvailable(evt: BlobEvent): void { - if (evt.data && evt.data.size > 0) { - this.recordedBlobs.push(evt.data); - } - } - async stopRecording(): Promise { - if (this.mediaRecorder) { - this.mediaRecorder.stop(); - } - if (this.stream) { - for (const t of this.stream.getTracks()) { - t.stop(); // Stop stream. - } - } - - // handle stopRecording gets called before this.mediaRecorder is initialized - if (!this.mediaRecorder) { - return new Blob(this.recordedBlobs); - } - - await new Promise((resolve) => setTimeout(resolve, 30)); - // Wait for the last blob in handleDataAvailable. - // Alternative: hook into `onstop` event. - const superBuffer = new Blob(this.recordedBlobs, { - type: this.mimeType, - }); - this.outputBlob = superBuffer; - return superBuffer; - } -} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRecorder/WidgetRecorder.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRecorder/WidgetRecorder.svelte deleted file mode 100644 index 6be598f12..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetRecorder/WidgetRecorder.svelte +++ /dev/null @@ -1,66 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetShortcutRunLabel/WidgetShortcutRunLabel.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetShortcutRunLabel/WidgetShortcutRunLabel.svelte deleted file mode 100644 index 322663467..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetShortcutRunLabel/WidgetShortcutRunLabel.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - -{#if !isDisabled} - -{/if} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetState/WidgetState.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetState/WidgetState.svelte deleted file mode 100644 index e4f9cfef5..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetState/WidgetState.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - -
-
-
- This model is currently loaded and running on Inference API (serverless). -
-
- ⚠️ This model could not be loaded in Inference API (serverless). ⚠️ -
-
- This model can be loaded in Inference API (serverless). -
-
-
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetSubmitBtn/WidgetSubmitBtn.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetSubmitBtn/WidgetSubmitBtn.svelte deleted file mode 100644 index b8ec85b28..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetSubmitBtn/WidgetSubmitBtn.svelte +++ /dev/null @@ -1,47 +0,0 @@ - - -{#if !isDisabled} - - - -{/if} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTableInput/WidgetTableInput.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTableInput/WidgetTableInput.svelte deleted file mode 100644 index b513c4ab7..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTableInput/WidgetTableInput.svelte +++ /dev/null @@ -1,115 +0,0 @@ - - -
- {#if table.length > 1} - - - - {#each table[0] as header, x} - - {/each} - - - - {#each table.slice(1) as row, y} - - {#each row as cell, x} - - {/each} - - {/each} - -
editCell(e, [x, 0])} - > - {header} -
editCell(e, [x, y + 1])}>{cell}
- {/if} -
- -
- {#if canAddRow} - - {/if} - {#if canAddCol} - - {/if} - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTextInput/WidgetTextInput.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTextInput/WidgetTextInput.svelte deleted file mode 100644 index 2670e1ef7..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTextInput/WidgetTextInput.svelte +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - { - if (!$isLoggedIn) { - popOverOpen = true; - return; - } - dispatch("cmdEnter"); - }} - /> - - - diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTextarea/WidgetTextarea.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTextarea/WidgetTextarea.svelte deleted file mode 100644 index cfd3946c8..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTextarea/WidgetTextarea.svelte +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - { - if (!$isLoggedIn) { - popOverOpen = true; - return; - } - dispatch("cmdEnter"); - }} - bind:this={containerSpanEl} - on:paste|preventDefault={handlePaste} - on:input={updateInnerTextValue} - on:focus={onFocus} - on:blur={() => (isOnFocus = false)} - /> - - - - - diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTimer/WidgetTimer.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTimer/WidgetTimer.svelte deleted file mode 100644 index 2d41e1ac5..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetTimer/WidgetTimer.svelte +++ /dev/null @@ -1,35 +0,0 @@ - - -{#if shouldDisplay && !isDisabled} - {counterHuman} -{/if} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetWrapper/WidgetWrapper.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetWrapper/WidgetWrapper.svelte deleted file mode 100644 index ab19581c8..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetWrapper/WidgetWrapper.svelte +++ /dev/null @@ -1,55 +0,0 @@ - - -{#if $widgetStates?.[model.id]?.noInference} - - -{:else if $modelLoadStates[model.id] || model.inference !== InferenceDisplayability.Yes} -
- {#if isMaximized} - - {/if} - - -{/if} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/consts.ts b/packages/widgets/src/lib/components/InferenceWidget/shared/consts.ts deleted file mode 100644 index 1ec7359bf..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/consts.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Color palette for obj-det & img-seg widgets - */ -export const COLORS = [ - { - color: "red", - hex: "#f87171", - }, - { - color: "green", - hex: "#4ade80", - }, - { - color: "yellow", - hex: "#facc15", - }, - { - color: "blue", - hex: "#60a5fa", - }, - { - color: "orange", - hex: "#fb923c", - }, - { - color: "purple", - hex: "#c084fc", - }, - { - color: "cyan", - hex: "#22d3ee", - }, - { - color: "lime", - hex: "#a3e635", - }, -] as const; diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/helpers.ts b/packages/widgets/src/lib/components/InferenceWidget/shared/helpers.ts deleted file mode 100644 index ca60f6b1c..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/helpers.ts +++ /dev/null @@ -1,248 +0,0 @@ -import type { ModelData, WidgetExampleAttribute } from "@huggingface/tasks"; -import { parseJSON } from "../../../utils/ViewUtils.js"; -import { ComputeType, type ModelLoadInfo, type TableData } from "./types.js"; -import { LoadState } from "./types.js"; -import { isLoggedIn } from "../stores.js"; -import { get } from "svelte/store"; - -const KEYS_TEXT: WidgetExampleAttribute[] = ["text", "context", "candidate_labels"]; -const KEYS_TABLE: WidgetExampleAttribute[] = ["table", "structured_data"]; -type QueryParamVal = string | null | boolean | (string | number)[][]; - -export function getQueryParamVal(key: WidgetExampleAttribute): QueryParamVal { - const searchParams = new URL(window.location.href).searchParams; - const value = searchParams.get(key); - if (KEYS_TEXT.includes(key)) { - return value; - } else if (KEYS_TABLE.includes(key)) { - const table = convertDataToTable((parseJSON(value) as TableData) ?? {}); - return table; - } else if (key === "multi_class") { - return value === "true"; - } - return value; -} - -// Update current url search params, keeping existing keys intact. -export function updateUrl(obj: Partial>): void { - if (!window) { - return; - } - - const sp = new URL(window.location.href).searchParams; - for (const [k, v] of Object.entries(obj)) { - if (v === undefined) { - sp.delete(k); - } else { - sp.set(k, v); - } - } - const path = `${window.location.pathname}?${sp.toString()}`; - window.history.replaceState(null, "", path); -} - -// Run through our own proxy to bypass CORS: -function proxify(url: string): string { - return url.startsWith(`http://localhost`) || new URL(url).host === window.location.host - ? url - : `https://widgets.hf.co/proxy?url=${url}`; -} - -// Get BLOB from a given URL after proxifying the URL -export async function getBlobFromUrl(url: string): Promise { - const proxiedUrl = proxify(url); - const res = await fetch(proxiedUrl); - const blob = await res.blob(); - return blob; -} -interface Success { - computeTime: string; - output: T; - outputJson: string; - response: Response; - status: "success"; -} - -interface LoadingModel { - error: string; - estimatedTime: number; - status: "loading-model"; -} - -interface Error { - error: string; - status: "error"; -} - -interface CacheNotFound { - status: "cache not found"; -} - -type Result = Success | LoadingModel | Error | CacheNotFound; - -export async function callInferenceApi( - url: string, - repoId: string, - requestBody: Record, - apiToken = "", - outputParsingFn: (x: unknown) => T, - waitForModel = false, // If true, the server will only respond once the model has been loaded on Inference API (serverless) - includeCredentials = false, - isOnLoadCall = false, // If true, the server will try to answer from cache and not do anything if not - useCache = true -): Promise> { - const contentType = - "file" in requestBody && requestBody["file"] && requestBody["file"] instanceof Blob && requestBody["file"].type - ? requestBody["file"]["type"] - : "application/json"; - - const headers = new Headers(); - headers.set("Content-Type", contentType); - if (apiToken) { - headers.set("Authorization", `Bearer ${apiToken}`); - } - if (waitForModel) { - headers.set("X-Wait-For-Model", "true"); - } - if (useCache === false && get(isLoggedIn)) { - headers.set("X-Use-Cache", "false"); - } - if (isOnLoadCall || !get(isLoggedIn)) { - headers.set("X-Load-Model", "0"); - } - - // `File` is a subtype of `Blob`: therefore, checking for instanceof `Blob` also checks for instanceof `File` - const reqBody: Blob | string = - "file" in requestBody && requestBody["file"] instanceof Blob ? requestBody.file : JSON.stringify(requestBody); - - const response = await fetch(`${url}/models/${repoId}`, { - method: "POST", - body: reqBody, - headers, - credentials: includeCredentials ? "include" : "same-origin", - }); - - if (response.ok) { - // Success - const computeTime = response.headers.has("x-compute-time") - ? `${response.headers.get("x-compute-time")} s` - : `cached`; - const isMediaContent = (response.headers.get("content-type")?.search(/^(?:audio|image)/i) ?? -1) !== -1; - - const body = !isMediaContent ? await response.json() : await response.blob(); - - try { - const output = outputParsingFn(body); - const outputJson = !isMediaContent ? JSON.stringify(body, null, 2) : ""; - return { computeTime, output, outputJson, response, status: "success" }; - } catch (e) { - if (isOnLoadCall && body.error === "not loaded yet") { - return { status: "cache not found" }; - } - // Invalid output - const error = `API Implementation Error: ${String(e).replace(/^Error: /, "")}`; - return { error, status: "error" }; - } - } else { - // Error - const bodyText = await response.text(); - const body = parseJSON>(bodyText) ?? {}; - - if ( - body["error"] && - response.status === 503 && - body["estimated_time"] !== null && - body["estimated_time"] !== undefined - ) { - // Model needs loading - return { error: String(body["error"]), estimatedTime: +body["estimated_time"], status: "loading-model" }; - } else { - // Other errors - const { status, statusText } = response; - return { - error: String(body["error"]) || String(body["traceback"]) || `${status} ${statusText}`, - status: "error", - }; - } - } -} - -export async function getModelLoadInfo( - url: string, - repoId: string, - includeCredentials = false -): Promise { - const response = await fetch(`${url}/status/${repoId}`, { - credentials: includeCredentials ? "include" : "same-origin", - }); - const output: { - state: LoadState; - compute_type: ComputeType | Record; - loaded: boolean; - error: Error; - } = await response.json(); - if (response.ok && typeof output === "object" && output.loaded !== undefined) { - // eslint-disable-next-line @typescript-eslint/naming-convention - const compute_type = - typeof output.compute_type === "string" - ? output.compute_type - : output.compute_type["gpu"] - ? ComputeType.GPU - : ComputeType.CPU; - return { compute_type, state: output.state }; - } else { - console.warn(response.status, output.error); - return { state: LoadState.Error }; - } -} - -// Extend requestBody with user supplied parameters for Inference API (serverless) -export function addInferenceParameters(requestBody: Record, model: ModelData): void { - const inference = model?.cardData?.inference; - if (typeof inference === "object") { - const inferenceParameters = inference?.parameters; - if (inferenceParameters) { - if (requestBody.parameters) { - requestBody.parameters = { ...requestBody.parameters, ...inferenceParameters }; - } else { - requestBody.parameters = inferenceParameters; - } - } - } -} - -/* - * Converts table from [[Header0, Header1, Header2], [Column0Val0, Column1Val0, Column2Val0], ...] - * to {Header0: [ColumnVal0, ...], Header1: [Column1Val0, ...], Header2: [Column2Val0, ...]} - */ -export function convertTableToData(table: (string | number)[][]): TableData { - return Object.fromEntries( - table[0].map((cell, x) => { - return [ - cell, - table - .slice(1) - .flat() - .filter((_, i) => i % table[0].length === x) - .map((v) => String(v)), // some models can only handle strings (no numbers) - ]; - }) - ); -} - -/** - * Converts data from {Header0: [ColumnVal0, ...], Header1: [Column1Val0, ...], Header2: [Column2Val0, ...]} - * to [[Header0, Header1, Header2], [Column0Val0, Column1Val0, Column2Val0], ...] - */ -export function convertDataToTable(data: TableData): (string | number)[][] { - const dataArray = Object.entries(data); // [header, cell[]][] - const nbCols = dataArray.length; - const nbRows = (dataArray[0]?.[1]?.length ?? 0) + 1; - return Array(nbRows) - .fill("") - .map((_, y) => - Array(nbCols) - .fill("") - .map((__, x) => (y === 0 ? dataArray[x][0] : dataArray[x][1][y - 1])) - ); -} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/inputValidation.ts b/packages/widgets/src/lib/components/InferenceWidget/shared/inputValidation.ts deleted file mode 100644 index dc274f418..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/inputValidation.ts +++ /dev/null @@ -1,116 +0,0 @@ -import type { - ChatCompletionInputMessage, - WidgetExampleAssetAndPromptInput, - WidgetExampleAssetAndTextInput, - WidgetExampleAssetAndZeroShotInput, - WidgetExampleAssetInput, - WidgetExampleChatInput, - WidgetExampleSentenceSimilarityInput, - WidgetExampleStructuredDataInput, - WidgetExampleTableDataInput, - WidgetExampleTextAndContextInput, - WidgetExampleTextAndTableInput, - WidgetExampleTextInput, - WidgetExampleZeroShotTextInput, -} from "@huggingface/tasks"; - -export function isObject(arg: unknown): arg is Record { - return !!arg && arg?.constructor === Object; -} -function isStrArray(arg: unknown): arg is string[] { - return Array.isArray(arg) && arg.every((v) => typeof v === "string"); -} - -export function isTextInput(sample: unknown): sample is WidgetExampleTextInput { - return isObject(sample) && "text" in sample && typeof sample.text === "string"; -} - -export function isTextAndContextInput(sample: unknown): sample is WidgetExampleTextAndContextInput { - return isTextInput(sample) && "context" in sample; -} - -export function isAssetInput(sample: unknown): sample is WidgetExampleAssetInput { - return isObject(sample) && "src" in sample && typeof sample.src === "string"; -} - -export function isAssetAndPromptInput(sample: unknown): sample is WidgetExampleAssetAndPromptInput { - return isAssetInput(sample) && "prompt" in sample && typeof sample.prompt === "string"; -} - -export function isAssetAndTextInput(sample: unknown): sample is WidgetExampleAssetAndTextInput { - return isAssetInput(sample) && isTextInput(sample); -} - -export function isStructuredDataInput(sample: unknown): sample is WidgetExampleStructuredDataInput { - /// TODO: check the values' type in sample.structured_data - return ( - isObject(sample) && - "structured_data" in sample && - isObject(sample.structured_data) && - Object.values(sample.structured_data).every((val) => typeof val === "number" || typeof val === "string") - ); -} - -export function isTableDataInput(sample: unknown): sample is WidgetExampleTableDataInput { - return isObject(sample) && "table" in sample; -} - -function _isZeroShotTextInput( - sample: unknown -): sample is Exclude, "text"> { - return ( - isObject(sample) && - "candidate_labels" in sample && - typeof sample.candidate_labels === "string" && - "multi_class" in sample && - typeof sample.multi_class === "boolean" - ); -} - -export function isZeroShotTextInput(sample: unknown): sample is WidgetExampleZeroShotTextInput { - return isTextInput(sample) && _isZeroShotTextInput(sample); -} - -export function isSentenceSimilarityInput( - sample: unknown -): sample is WidgetExampleSentenceSimilarityInput { - return ( - isObject(sample) && - "source_sentence" in sample && - typeof sample.candidate_labels === "string" && - "sentences" in sample && - isStrArray(sample.sentences) - ); -} - -export function isTextAndTableInput(sample: unknown): sample is WidgetExampleTextAndTableInput { - return ( - isTextInput(sample) && - "table" in sample && - Array.isArray(sample.table) && - sample.table.every((r) => Array.isArray(r) && r.every((c) => typeof c === "string" || typeof c === "number")) - ); -} - -export function isAssetAndZeroShotInput( - sample: unknown -): sample is WidgetExampleAssetAndZeroShotInput { - return isAssetInput(sample) && _isZeroShotTextInput(sample); -} - -export function isChatInput(sample: unknown): sample is WidgetExampleChatInput { - return ( - isObject(sample) && - "messages" in sample && - Array.isArray(sample.messages) && - sample.messages.every( - (message): message is ChatCompletionInputMessage => - isObject(message) && - "role" in message && - "content" in message && - typeof message.role === "string" && - ["user", "system", "assistant"].includes(message.role) && - typeof message.content === "string" - ) - ); -} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/outputValidation.ts b/packages/widgets/src/lib/components/InferenceWidget/shared/outputValidation.ts deleted file mode 100644 index 8492f41c0..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/outputValidation.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { - WidgetExampleOutputLabels, - WidgetExampleOutputAnswerScore, - WidgetExampleOutputText, - WidgetExampleOutputUrl, -} from "@huggingface/tasks"; - -export function isValidOutputLabels(arg: unknown): arg is WidgetExampleOutputLabels { - return Array.isArray(arg) && arg.every((x) => typeof x.label === "string" && typeof x.score === "number"); -} - -export function isValidOutputAnswerScore(arg: unknown): arg is WidgetExampleOutputAnswerScore { - return ( - !!arg && - typeof arg === "object" && - "answer" in arg && - typeof arg["answer"] === "string" && - "score" in arg && - typeof arg["score"] === "number" - ); -} - -export function isValidOutputText(arg: unknown): arg is WidgetExampleOutputText { - return !!arg && typeof arg === "object" && "text" in arg && typeof arg["text"] === "string"; -} - -export function isValidOutputUrl(arg: unknown): arg is WidgetExampleOutputUrl { - return ( - !!arg && - typeof arg === "object" && - "url" in arg && - typeof arg["url"] === "string" && - arg["url"].startsWith("https://") - ); -} diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/types.ts b/packages/widgets/src/lib/components/InferenceWidget/shared/types.ts deleted file mode 100644 index d61f025dc..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/types.ts +++ /dev/null @@ -1,73 +0,0 @@ -import type { ModelData, WidgetExampleOutput } from "@huggingface/tasks"; - -export interface WidgetProps { - apiToken?: string; - apiUrl: string; - callApiOnMount: boolean; - model: ModelData; - noTitle: boolean; - shouldUpdateUrl: boolean; - includeCredentials: boolean; - isLoggedIn?: boolean; -} - -export interface InferenceRunOpts { - withModelLoading?: boolean; - isOnLoadCall?: boolean; - useCache?: boolean; - exampleOutput?: TOutput; -} - -export interface ExampleRunOpts { - isPreview?: boolean; - inferenceOpts?: InferenceRunOpts; -} - -export enum LoadState { - Loadable = "Loadable", - Loaded = "Loaded", - TooBig = "TooBig", - Error = "error", -} - -export enum ComputeType { - CPU = "cpu", - GPU = "gpu", -} - -export interface ModelLoadInfo { - state: LoadState; - compute_type?: ComputeType; -} - -export interface WidgetState { - isDisabled?: boolean; - noInference?: boolean; - isMaximized?: boolean; -} - -export type TableData = Record; - -export type HighlightCoordinates = Record; - -interface Box { - xmin: number; - ymin: number; - xmax: number; - ymax: number; -} - -export interface DetectedObject { - box: Box; - label: string; - score: number; - color?: string; -} -export interface ImageSegment { - label: string; - score: number; - mask: string; - color?: string; - imgData?: ImageData; - bitmap?: ImageBitmap; -} diff --git a/packages/widgets/src/lib/components/InferenceWidget/stores.ts b/packages/widgets/src/lib/components/InferenceWidget/stores.ts deleted file mode 100644 index 93a3acb93..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/stores.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { get, writable } from "svelte/store"; -import type { ModelData } from "@huggingface/tasks"; -import type { ModelLoadInfo, WidgetState } from "./shared/types.js"; - -export const modelLoadStates = writable>({}); - -export const widgetNoInference = writable>({}); - -export const isLoggedIn = writable(false); - -export const widgetStates = writable>({}); - -const tgiSupportedModels = writable | undefined>(undefined); - -export async function getTgiSupportedModels(url: string): Promise { - if (!get(tgiSupportedModels)) { - const response = await fetch(`${url}/framework/text-generation-inference`); - const output = await response.json(); - if (response.ok) { - tgiSupportedModels.set( - new Set( - (output as { model_id: string; task: string }[]) - .filter(({ task }) => task === "text-generation") - .map(({ model_id }) => model_id) - ) - ); - } else { - console.warn(response.status, output.error); - } - } - return tgiSupportedModels; -} - -export function updateWidgetState(modelId: ModelData["id"], key: keyof WidgetState, val: boolean): void { - widgetStates.update((states) => { - // Check if the modelId exists, if not initialize it - if (!states[modelId]) { - states[modelId] = {}; - } - // Update the specific property for the given modelId - states[modelId][key] = val; - return states; - }); -} diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/AudioClassificationWidget/AudioClassificationWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/AudioClassificationWidget/AudioClassificationWidget.svelte deleted file mode 100644 index fc9542609..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/AudioClassificationWidget/AudioClassificationWidget.svelte +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - {#if fileUrl} - - {/if} - getOutput()} /> - {#if warning} -
{warning}
- {/if} - - - - - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/AudioToAudioWidget/AudioToAudioWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/AudioToAudioWidget/AudioToAudioWidget.svelte deleted file mode 100644 index 59b8802ff..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/AudioToAudioWidget/AudioToAudioWidget.svelte +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - {#if fileUrl} - - {/if} - getOutput()} /> - - - - {#each output as item} -
- {item.label}: - -
- {/each} - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/AutomaticSpeechRecognitionWidget/AutomaticSpeechRecognitionWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/AutomaticSpeechRecognitionWidget/AutomaticSpeechRecognitionWidget.svelte deleted file mode 100644 index 540a942c0..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/AutomaticSpeechRecognitionWidget/AutomaticSpeechRecognitionWidget.svelte +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - {#if !isRealtimeRecording} - {#if fileUrl} - - {/if} - getOutput()} /> - {#if warning} -
{warning}
- {/if} - {/if} - - - - - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/ConversationalWidget/ConversationalWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/ConversationalWidget/ConversationalWidget.svelte deleted file mode 100644 index 14e70c522..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/ConversationalWidget/ConversationalWidget.svelte +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - - handleNewMessage()} - on:cmdEnter={handleNewMessage} - /> - - - - - diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/FeatureExtractionWidget/DataTable.ts b/packages/widgets/src/lib/components/InferenceWidget/widgets/FeatureExtractionWidget/DataTable.ts deleted file mode 100644 index 551868a38..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/FeatureExtractionWidget/DataTable.ts +++ /dev/null @@ -1,43 +0,0 @@ -export class DataTable { - max: number; - min: number; - std: number; - - constructor(public body: number[] | number[][]) { - const all = this.body.flat(); - this.max = Math.max(...all); - this.min = Math.min(...all); - this.std = this.max - this.min; - } - - get isArrLevel0(): boolean { - return isArrLevel0(this.body); - } - - get oneDim(): number[] { - return this.body as number[]; - } - get twoDim(): number[][] { - return this.body as number[][]; - } - - bg(value: number): string { - if (value > this.min + this.std * 0.7) { - return "bg-green-100 dark:bg-green-800"; - } - if (value > this.min + this.std * 0.6) { - return "bg-green-50 dark:bg-green-900"; - } - if (value < this.min + this.std * 0.3) { - return "bg-red-100 dark:bg-red-800"; - } - if (value < this.min + this.std * 0.4) { - return "bg-red-50 dark:bg-red-900"; - } - return ""; - } -} - -function isArrLevel0(x: number[] | number[][]): x is number[] { - return typeof x[0] === "number"; -} diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/FeatureExtractionWidget/FeatureExtractionWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/FeatureExtractionWidget/FeatureExtractionWidget.svelte deleted file mode 100644 index 2e35b1c1f..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/FeatureExtractionWidget/FeatureExtractionWidget.svelte +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - getOutput()} - on:cmdEnter={() => getOutput()} - /> - - - - {#if output} - {#if output.isArrLevel0} -
- - {#each range(numOfRows(output.oneDim.length)) as i} - - {#each range(SINGLE_DIM_COLS) as j} - {#if j * numOfRows(output.oneDim.length) + i < output.oneDim.length} - - - {/if} - {/each} - - {/each} -
- {j * numOfRows(output.oneDim.length) + i} - - {output.oneDim[j * numOfRows(output.oneDim.length) + i].toFixed(3)} -
-
- {:else} -
- - - - {/each} - - {#each output.twoDim as column, i} - - - {#each column as x} - - {/each} - - {/each} -
- {#each range(output.twoDim[0].length) as j} - {j}
{i} - {x.toFixed(3)} -
-
- {/if} - {/if} - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/FillMaskWidget/FillMaskWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/FillMaskWidget/FillMaskWidget.svelte deleted file mode 100644 index 5fbf29b69..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/FillMaskWidget/FillMaskWidget.svelte +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - {#if model.pipeline_tag === "fill-mask"} -
- Mask token: {model.mask_token} -
- {/if} - getOutput()} /> - getOutput()} /> - - - - - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageClassificationWidget/ImageClassificationWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageClassificationWidget/ImageClassificationWidget.svelte deleted file mode 100644 index 5a5978d1a..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageClassificationWidget/ImageClassificationWidget.svelte +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - onSelectFile(e.detail)} - on:error={(e) => (error = e.detail)} - > - {#if imgSrc} - - {/if} - - - {#if imgSrc} - {#if imgSrc} -
- -
- {/if} - {/if} - onSelectFile(e.detail)} - /> - {#if warning} -
{warning}
- {/if} - - - - - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageSegmentationWidget/Canvas.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageSegmentationWidget/Canvas.svelte deleted file mode 100644 index 3000d5621..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageSegmentationWidget/Canvas.svelte +++ /dev/null @@ -1,75 +0,0 @@ - - - - -
-
- -
- {#if output.length} - - mousemove(e, width, height)} - on:mouseout={mouseout} - /> - {/if} -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageSegmentationWidget/ImageSegmentationWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageSegmentationWidget/ImageSegmentationWidget.svelte deleted file mode 100644 index 116bf38e2..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageSegmentationWidget/ImageSegmentationWidget.svelte +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - onSelectFile(e.detail)} - on:error={(e) => (error = e.detail)} - > - {#if imgSrc} - - {/if} - - - {#if imgSrc} - - {/if} - onSelectFile(e.detail)} - /> - {#if warning} -
{warning}
- {/if} - - - - - - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageToImageWidget/ImageToImageWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageToImageWidget/ImageToImageWidget.svelte deleted file mode 100644 index aa875c4e7..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageToImageWidget/ImageToImageWidget.svelte +++ /dev/null @@ -1,197 +0,0 @@ - - - - -
- onSelectFile(e.detail)} - on:error={(e) => (error = e.detail)} - > - {#if imgSrc} - - {/if} - - - {#if imgSrc} - {#if imgSrc} -
- -
- {/if} - {/if} - onSelectFile(e.detail)} - /> - getOutput()} - /> - getOutput()} /> -
- - - {#if output.length} -
- -
- {/if} - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageToTextWidget/ImageToTextWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageToTextWidget/ImageToTextWidget.svelte deleted file mode 100644 index b4bcb358f..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageToTextWidget/ImageToTextWidget.svelte +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - onSelectFile(e.detail)} - on:error={(e) => (error = e.detail)} - > - {#if imgSrc} - - {/if} - - - {#if imgSrc} - {#if imgSrc} -
- -
- {/if} - {/if} - onSelectFile(e.detail)} - /> - {#if warning} -
{warning}
- {/if} - - - - {#if model?.pipeline_tag !== "text-generation"} - - {/if} - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/ObjectDetectionWidget/ObjectDetectionWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/ObjectDetectionWidget/ObjectDetectionWidget.svelte deleted file mode 100644 index 539518da8..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/ObjectDetectionWidget/ObjectDetectionWidget.svelte +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - onSelectFile(e.detail)} - on:error={(e) => (error = e.detail)} - > - {#if imgSrc} - - {/if} - - - {#if imgSrc} - - {/if} - onSelectFile(e.detail)} - /> - {#if warning} -
{warning}
- {/if} - - - - - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/ObjectDetectionWidget/SvgBoundingBoxes.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/ObjectDetectionWidget/SvgBoundingBoxes.svelte deleted file mode 100644 index a6ca09c5a..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/ObjectDetectionWidget/SvgBoundingBoxes.svelte +++ /dev/null @@ -1,93 +0,0 @@ - - - -
-
- -
- - - {#each boxes as { rect, color, index }} - - mouseover(index)} - on:mouseout={mouseout} - /> - {/each} - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/QuestionAnsweringWidget/QuestionAnsweringWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/QuestionAnsweringWidget/QuestionAnsweringWidget.svelte deleted file mode 100644 index 3d51dc2ab..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/QuestionAnsweringWidget/QuestionAnsweringWidget.svelte +++ /dev/null @@ -1,163 +0,0 @@ - - - - -
- getOutput()} - on:cmdEnter={() => getOutput()} - /> - getOutput()} - /> -
- - - {#if output} -
- {output.answer} - {output.score.toFixed(3)} -
- {/if} - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/ReinforcementLearningWidget/ReinforcementLearningWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/ReinforcementLearningWidget/ReinforcementLearningWidget.svelte deleted file mode 100644 index f98579c52..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/ReinforcementLearningWidget/ReinforcementLearningWidget.svelte +++ /dev/null @@ -1,62 +0,0 @@ - - - -
- -
- {#if replay === Replay.Available} - -
-
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/SentenceSimilarityWidget/SentenceSimilarityWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/SentenceSimilarityWidget/SentenceSimilarityWidget.svelte deleted file mode 100644 index 821088cef..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/SentenceSimilarityWidget/SentenceSimilarityWidget.svelte +++ /dev/null @@ -1,190 +0,0 @@ - - - - -
- getOutput()} - /> - getOutput()} - /> - {#each Array(nComparisonSentences - 1) as _, idx} - getOutput()} - /> - {/each} - { - nComparisonSentences++; - }} - /> - getOutput()} /> -
- - - {#if output.length} - - {/if} - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/SummarizationWidget/SummarizationWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/SummarizationWidget/SummarizationWidget.svelte deleted file mode 100644 index ec611069c..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/SummarizationWidget/SummarizationWidget.svelte +++ /dev/null @@ -1,128 +0,0 @@ - - - - -
- getOutput()} /> - getOutput()} /> -
- - - - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/TableQuestionAnsweringWidget/TableQuestionAnsweringWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/TableQuestionAnsweringWidget/TableQuestionAnsweringWidget.svelte deleted file mode 100644 index 48b1ae703..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/TableQuestionAnsweringWidget/TableQuestionAnsweringWidget.svelte +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - getOutput()} - on:cmdEnter={() => getOutput()} - /> - -
- {#if output} - - {/if} - {#if table.length > 1 || table[0].length > 1} - onChangeTable(e.detail)} {table} {isDisabled} /> - {/if} -
- - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/TabularDataWidget/TabularDataWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/TabularDataWidget/TabularDataWidget.svelte deleted file mode 100644 index 6bbe03432..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/TabularDataWidget/TabularDataWidget.svelte +++ /dev/null @@ -1,211 +0,0 @@ - - - - - -
- {#if table.length > 1 || table[1]?.length > 1} - onChangeTable(e.detail)} - table={tableWithOutput} - canAddCol={false} - bind:scrollTableToRight - /> - {/if} -
- getOutput()} /> - - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/TextGenerationWidget/TextGenerationWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/TextGenerationWidget/TextGenerationWidget.svelte deleted file mode 100644 index 37cc1deed..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/TextGenerationWidget/TextGenerationWidget.svelte +++ /dev/null @@ -1,256 +0,0 @@ - - - - -
- getOutput({ useCache })} - /> - {#if model.id === "bigscience/bloom"} - - {/if} -
- { - getOutput({ useCache }); - }} - /> - -
- -
-
- {#if warning} -
{warning}
- {/if} - {#if isBloomLoginRequired} -
- - Please - login - or - - register to try BLOOM 🌸 -
- {/if} -
- - - {#if model?.pipeline_tag !== "text-generation"} - - - {/if} - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/TextToImageWidget/TextToImageWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/TextToImageWidget/TextToImageWidget.svelte deleted file mode 100644 index a16727cfa..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/TextToImageWidget/TextToImageWidget.svelte +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - getOutput()} - on:cmdEnter={() => getOutput()} - /> - - - - {#if output.length} -
- -
- {/if} - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/TextToSpeechWidget/TextToSpeechWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/TextToSpeechWidget/TextToSpeechWidget.svelte deleted file mode 100644 index c36108eb0..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/TextToSpeechWidget/TextToSpeechWidget.svelte +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - getOutput()} /> - getOutput()} /> - - - - {#if output.length} - - {/if} - - - diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/TokenClassificationWidget/TokenClassificationWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/TokenClassificationWidget/TokenClassificationWidget.svelte deleted file mode 100644 index 54015c2e9..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/TokenClassificationWidget/TokenClassificationWidget.svelte +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - getOutput()} /> - getOutput()} /> - {#if warning} -
{warning}
- {/if} - - - - - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/VisualQuestionAnsweringWidget/VisualQuestionAnsweringWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/VisualQuestionAnsweringWidget/VisualQuestionAnsweringWidget.svelte deleted file mode 100644 index 3915d7ea0..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/VisualQuestionAnsweringWidget/VisualQuestionAnsweringWidget.svelte +++ /dev/null @@ -1,204 +0,0 @@ - - - - -
- onSelectFile(e.detail)} - on:error={(e) => (error = e.detail)} - > - {#if imgSrc} - - {/if} - - - {#if imgSrc} - {#if imgSrc} -
- -
- {/if} - {/if} - onSelectFile(e.detail)} - /> - getOutput()} - on:cmdEnter={() => getOutput()} - /> -
- - - {#if output} - - {/if} - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/ZeroShotClassificationWidget/ZeroShotClassificationWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/ZeroShotClassificationWidget/ZeroShotClassificationWidget.svelte deleted file mode 100644 index 3c7455235..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/ZeroShotClassificationWidget/ZeroShotClassificationWidget.svelte +++ /dev/null @@ -1,190 +0,0 @@ - - - - -
- getOutput()} - /> - getOutput()} - /> - - getOutput()} /> - {#if warning} -
{warning}
- {/if} -
- - - {#if output.length} - - {/if} - - -
diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/ZeroShotImageClassificationWidget/ZeroShotImageClassificationWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/ZeroShotImageClassificationWidget/ZeroShotImageClassificationWidget.svelte deleted file mode 100644 index db13d3071..000000000 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/ZeroShotImageClassificationWidget/ZeroShotImageClassificationWidget.svelte +++ /dev/null @@ -1,207 +0,0 @@ - - - - -
- onSelectFile(e.detail)} - on:error={(e) => (error = e.detail)} - > - {#if imgSrc} - - {/if} - - - {#if imgSrc} - {#if imgSrc} -
- -
- {/if} - {/if} - onSelectFile(e.detail)} - /> - getOutput()} - /> - getOutput()} /> -
- - - {#if output.length} - - {/if} - - -
diff --git a/packages/widgets/src/lib/components/LogInPopover/LogInPopover.svelte b/packages/widgets/src/lib/components/LogInPopover/LogInPopover.svelte deleted file mode 100644 index ccdf26213..000000000 --- a/packages/widgets/src/lib/components/LogInPopover/LogInPopover.svelte +++ /dev/null @@ -1,38 +0,0 @@ - - -
- -
- -{#if open && !$isLoggedIn} - (open = false)}> -
- - Please login with your Hugging Face account to run the widgets. -
- -
-{/if} diff --git a/packages/widgets/src/lib/components/PipelineIcon/PipelineIcon.svelte b/packages/widgets/src/lib/components/PipelineIcon/PipelineIcon.svelte deleted file mode 100644 index 1429e1cb4..000000000 --- a/packages/widgets/src/lib/components/PipelineIcon/PipelineIcon.svelte +++ /dev/null @@ -1,109 +0,0 @@ - - - diff --git a/packages/widgets/src/lib/components/PipelineTag/PipelineTag.svelte b/packages/widgets/src/lib/components/PipelineTag/PipelineTag.svelte deleted file mode 100644 index dc2afad8a..000000000 --- a/packages/widgets/src/lib/components/PipelineTag/PipelineTag.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
- - - {pipelineData ? pipelineData.name : pipeline} - -
diff --git a/packages/widgets/src/lib/components/Popover/Popover.svelte b/packages/widgets/src/lib/components/Popover/Popover.svelte deleted file mode 100644 index 3da577156..000000000 --- a/packages/widgets/src/lib/components/Popover/Popover.svelte +++ /dev/null @@ -1,135 +0,0 @@ - - - - - dispatch("close")} on:scroll={() => dispatch("close")} on:click={handleClickDocument} /> - -
-
-
-
-
- -
-
-
-
diff --git a/packages/widgets/src/lib/index.ts b/packages/widgets/src/lib/index.ts deleted file mode 100644 index b98a57ae2..000000000 --- a/packages/widgets/src/lib/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import InferenceWidget from "./components/InferenceWidget/InferenceWidget.svelte"; -import WidgetOutputChart from "./components/InferenceWidget/shared/WidgetOutputChart/WidgetOutputChart.svelte"; -import WidgetOutputTokens from "./components/InferenceWidget/shared/WidgetOutputTokens/WidgetOutputTokens.svelte"; -import PipelineIcon from "./components/PipelineIcon/PipelineIcon.svelte"; -import { modelLoadStates } from "./components/InferenceWidget/stores.js"; - -export { InferenceWidget, WidgetOutputChart, WidgetOutputTokens, modelLoadStates, PipelineIcon }; diff --git a/packages/widgets/src/lib/utils/ViewUtils.ts b/packages/widgets/src/lib/utils/ViewUtils.ts deleted file mode 100644 index e851e41e4..000000000 --- a/packages/widgets/src/lib/utils/ViewUtils.ts +++ /dev/null @@ -1,202 +0,0 @@ -import type { PipelineType } from "@huggingface/tasks"; -import type { ActionReturn } from "svelte/action"; - -const ESCAPED = { - '"': """, - "'": "'", - "&": "&", - "<": "<", - ">": ">", -}; - -/** - * Returns a function that clamps input value to range [min <= x <= max]. - */ -export function clamp(x: number, min: number, max: number): number { - return Math.max(min, Math.min(x, max)); -} - -/** - * Similar to lodash's uniqBy. In case of multiple items with the same key, - * only the first one is kept. - */ -export function uniqBy(items: T[], itemToKey: (item: T) => K): T[] { - const keys = new Set(items.map((item) => itemToKey(item))); - - return items.filter((item) => { - // Will return true if was in set - e.g. was the first item with its key. - return keys.delete(itemToKey(item)); - }); -} - -export function typedKeys(obj: { [k in K]: V }): K[] { - return Object.keys(obj) as K[]; -} - -/** - * HTML escapes the passed string - */ -export function escape(html: unknown): string { - return String(html).replace(/["'&<>]/g, (match) => ESCAPED[match as keyof typeof ESCAPED]); -} - -/** - * Returns a promise that will resolve after the specified time - * @param ms Number of ms to wait - */ -export function delay(ms: number): Promise { - return new Promise((resolve) => { - setTimeout(() => resolve(), ms); - }); -} - -/** - * "Real" modulo (always >= 0), not remainder. - */ -export function mod(a: number, n: number): number { - return ((a % n) + n) % n; -} - -/** - * Sum of elements in array - */ -export function sum(arr: number[]): number { - return arr.reduce((a, b) => a + b, 0); -} - -/** - * Return a random item from an array - */ -export function randomItem(arr: T[]): T { - return arr[Math.floor(Math.random() * arr.length)]; -} - -/** - * Safely parse JSON - */ -export function parseJSON(x: unknown): T | undefined { - if (!x || typeof x !== "string") { - return undefined; - } - try { - return JSON.parse(x); - } catch (e) { - if (e instanceof SyntaxError) { - console.error(e.name); - } else if (e instanceof Error) { - console.error(e.message); - } else { - console.error(e); - } - return undefined; - } -} - -/** - * Return true if an HTML element is scrolled all the way - */ -export function isFullyScrolled(elt: HTMLElement): boolean { - return elt.scrollHeight - Math.abs(elt.scrollTop) === elt.clientHeight; -} - -/** - * Smoothly scroll an element all the way - */ -export function scrollToMax(elt: HTMLElement, axis: "x" | "y" = "y"): void { - elt.scroll({ - behavior: "smooth", - left: axis === "x" ? elt.scrollWidth : undefined, - top: axis === "y" ? elt.scrollHeight : undefined, - }); -} - -/** - * Converts hex string to rgb array (i.e. [r,g,b]) - * original from https://stackoverflow.com/a/39077686/6558628 - */ -export function hexToRgb(hex: string): number[] { - return ( - hex - .replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, (_, r, g, b) => "#" + r + r + g + g + b + b) - .substring(1) - .match(/.{2}/g) - ?.map((x) => parseInt(x, 16)) || [0, 0, 0] - ); -} - -// Get the Task id corresponding to the modelPipeline (should be === in 99% cases) -export function getPipelineTask(modelPipeline: PipelineType): PipelineType { - return modelPipeline === "text2text-generation" ? "text-generation" : modelPipeline; -} - -/** - * Svelte action that will call inference endpoint when a user hits cmd+Enter on a current html element - */ -export function onCmdEnter(node: HTMLElement, opts: { disabled: boolean }): ActionReturn { - let currentOpts = opts; - - function onKeyDown(e: KeyboardEvent) { - if ((node as HTMLInputElement)?.disabled || currentOpts.disabled) { - return; - } - // run inference on cmd+Enter - if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) { - e.preventDefault(); - node.dispatchEvent(new CustomEvent("cmdEnter")); - } - } - node.addEventListener("keydown", onKeyDown); - return { - update(updatedOps: { disabled: boolean }) { - currentOpts = updatedOps; - }, - destroy() { - node.removeEventListener("keydown", onKeyDown); - }, - }; -} - -/** - * A debounce function that works in both browser and Nodejs. - */ -export function debounce(callback: (...rest: T) => unknown, limit: number): (...rest: T) => void { - let timer: ReturnType; - - return function (...rest) { - clearTimeout(timer); - timer = setTimeout(() => { - callback(...rest); - }, limit); - }; -} - -/** - * Teleports the children of a node to another node.... - */ -export function portal(node: HTMLElement, targetNode: HTMLElement): { destroy: () => void } { - const portalChildren = [...node.children]; - targetNode.append(...portalChildren); - return { - destroy() { - for (const portalChild of portalChildren) { - portalChild.remove(); - } - }, - }; -} - -/** - * Teleports the children of a node under the body element - */ -export function portalToBody(node: HTMLElement): { destroy: () => void } { - return portal(node, document.body); -} - -/** -* For Tailwind: -bg-blue-100 border-blue-100 dark:bg-blue-800 dark:border-blue-800 -bg-green-100 border-green-100 dark:bg-green-800 dark:border-green-800 -bg-yellow-100 border-yellow-100 dark:bg-yellow-800 dark:border-yellow-800 -bg-purple-100 border-purple-100 dark:bg-purple-800 dark:border-purple-800 -bg-red-100 border-red-100 dark:bg-red-800 dark:border-red-800 -*/ diff --git a/packages/widgets/src/routes/+layout.server.ts b/packages/widgets/src/routes/+layout.server.ts deleted file mode 100644 index 758e4e196..000000000 --- a/packages/widgets/src/routes/+layout.server.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { env } from "$env/dynamic/private"; -import type { LayoutServerLoad } from "./$types.js"; - -const supportsOAuth = !!env.OAUTH_CLIENT_ID && !!env.OAUTH_CLIENT_SECRET; - -export const load: LayoutServerLoad = async ({ locals }) => { - return { - session: supportsOAuth ? locals.getSession() : undefined, - supportsOAuth, - }; -}; diff --git a/packages/widgets/src/routes/+layout.svelte b/packages/widgets/src/routes/+layout.svelte deleted file mode 100644 index 8924e9430..000000000 --- a/packages/widgets/src/routes/+layout.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - -
- -
diff --git a/packages/widgets/src/routes/+page.svelte b/packages/widgets/src/routes/+page.svelte deleted file mode 100644 index ba2f818ee..000000000 --- a/packages/widgets/src/routes/+page.svelte +++ /dev/null @@ -1,775 +0,0 @@ - - -
- - - {#if data.supportsOAuth} - {#if !data.session} -
- -
- {:else} -
- logged in as {data.session.user?.username} - -
- -
-
- {/if} - {:else} - - {/if} - - -
-

Showcase of all types of inference widgets running

-
- {#each models as model} - - {/each} -
-
- -
-

Showcase of all types of disabled inference

-
- {#each modelsDisabled as model} - - {/each} -
-
- -
-

Showcase of all types of disabled inference with example outputs

-
- {#each modelsDisabledWithExamples as model} - - {/each} -
-
-
diff --git a/packages/widgets/src/routes/[...model]/+page.svelte b/packages/widgets/src/routes/[...model]/+page.svelte deleted file mode 100644 index c63519c95..000000000 --- a/packages/widgets/src/routes/[...model]/+page.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - -← Back to index - - -
- {#if data.model} - - -
-			{JSON.stringify(data.model, null, 2)}
-		
- {:else} -
Error. Probably non existent model. {data.message}
- {/if} -
diff --git a/packages/widgets/src/routes/[...model]/+page.ts b/packages/widgets/src/routes/[...model]/+page.ts deleted file mode 100644 index ac2edfd7d..000000000 --- a/packages/widgets/src/routes/[...model]/+page.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { WidgetProps } from "$lib/components/InferenceWidget/shared/types.js"; -import type { Load } from "@sveltejs/kit"; - -export const load: Load = async ({ params, fetch }): Promise<{ model?: WidgetProps["model"]; message?: string }> => { - const url = `https://huggingface.co/api/models/${params.model}`; - try { - const model = await (await fetch(url)).json(); - return { - model, - }; - } catch { - // todo: throw error() instead - return { - message: `Model ${params.model} not found (probably)`, - }; - } -}; diff --git a/packages/widgets/src/tailwind.css b/packages/widgets/src/tailwind.css deleted file mode 100644 index 8f335baed..000000000 --- a/packages/widgets/src/tailwind.css +++ /dev/null @@ -1,226 +0,0 @@ -@tailwind base; - -@layer base { - html.dark { - --scrollbarBG: #020011; - --thumbBG: #374151; - } - .dark *::-webkit-scrollbar { - width: 11px; - height: 11px; - } - .dark * { - scrollbar-width: thin; - scrollbar-color: var(--thumbBG) var(--scrollbarBG); - } - - .dark input, - .dark textarea, - .dark [contenteditable] { - caret-color: white !important; - } - - .dark *::-webkit-scrollbar-track { - background: var(--scrollbarBG); - } - .dark *::-webkit-scrollbar-thumb { - background-color: var(--thumbBG); - border-radius: 6px; - border: 3px solid var(--scrollbarBG); - } - /* .dark input:-internal-autofill-selected { - @apply bg-gray-925; - } */ - .dark .bg-white { - @apply bg-gray-950; - } - .dark .text-black { - @apply text-gray-200; - } - .dark .text-gray-900 { - @apply text-gray-200; - } - .dark .text-gray-800 { - @apply text-gray-300; - } - .dark .text-gray-700 { - @apply text-gray-300; - } - .dark .text-gray-600 { - @apply text-gray-350; - } - .dark .text-gray-500 { - @apply text-gray-400; - } - .dark .border-gray-200, - .dark .border-gray-100, - .dark .border, - .dark .border-b { - @apply border-gray-850; - } -} - -@tailwind components; - -@layer components { - .btn, - .btn-widget { - @apply inline-flex cursor-pointer select-none items-center justify-center whitespace-nowrap rounded-lg border bg-gradient-to-b px-3 py-1 focus:outline-none focus:ring; - } - .btn { - @apply border-gray-200 from-white to-gray-100 text-gray-800 hover:shadow-inner dark:border-gray-900 dark:from-gray-800 dark:to-gray-950 dark:text-gray-200 dark:hover:from-gray-700; - } - .btn-widget { - @apply h-8 from-gray-50 to-gray-200 hover:from-gray-100 dark:border-gray-900 dark:from-gray-800 dark:to-gray-950 dark:hover:from-gray-700; - } - .btn:disabled, - .btn-widget:disabled { - @apply cursor-not-allowed opacity-50; - } - .btn.btn-lg { - @apply px-4 py-1.5 font-semibold; - } - .overview-card-wrapper { - @apply from-gray-50-to-white rounded-lg border border-gray-100 bg-gradient-to-r via-white text-base shadow-sm hover:via-gray-50 hover:to-gray-100 dark:border-gray-900 dark:via-gray-950 dark:hover:from-gray-950 dark:hover:via-gray-925 dark:hover:to-gray-925; - } - .overview-card-wrapper.white { - @apply from-white to-white dark:from-gray-925 dark:to-gray-950; - } - .tab { - @apply -mb-px flex cursor-pointer select-none items-center border-r border-gray-200 px-4 text-center; - } - .tab:not(.active) { - @apply hover:text-gray-700; - } - .tab.active { - @apply flex items-center border-r border-gray-200 bg-white px-4 text-center font-semibold; - } - .tab-alternate { - @apply flex h-full items-center whitespace-nowrap border-b-2 border-transparent px-2.5 font-medium text-gray-600 dark:text-gray-400 sm:px-3.5; - } - .tab-alternate:not(.active) { - @apply hover:border-gray-200 dark:hover:border-gray-800; - } - .tab-alternate.active { - @apply border-gray-700 font-semibold text-gray-800 dark:border-gray-400; - } - .tag { - @apply mr-1 mb-1 inline-flex h-7 max-w-full flex-none items-center overflow-hidden truncate rounded-lg border border-transparent bg-gradient-to-b text-sm dark:border-gray-900 md:mr-1.5 md:mb-1.5; - } - .tag > span { - @apply px-2; - } - .tag.inactive { - @apply filter-grayscale opacity-50; - } - .tag-blue { - @apply from-blue-50 to-blue-50 text-blue-800 hover:to-blue-100 dark:from-gray-925 dark:to-gray-925 dark:text-gray-300 dark:hover:to-gray-950; - } - .tag-ghost { - @apply from-transparent to-transparent text-gray-400 hover:from-gray-100 hover:to-gray-100 hover:text-gray-600; - } - .tag-green { - @apply from-green-50 to-green-50 text-green-800 hover:to-green-100 dark:from-gray-925 dark:to-gray-925 dark:text-gray-300 dark:hover:to-gray-950; - } - .tag-indigo { - @apply from-indigo-50 to-indigo-50 text-indigo-800 hover:to-indigo-100 dark:from-gray-925 dark:to-gray-925 dark:text-gray-300 dark:hover:to-gray-950; - } - .tag-orange { - @apply from-orange-50 to-orange-50 text-orange-800 hover:to-orange-100 dark:from-gray-925 dark:to-gray-925 dark:text-gray-300 dark:hover:to-gray-950; - } - .tag-purple { - @apply from-purple-50 to-purple-50 text-purple-800 hover:to-purple-100 dark:from-gray-925 dark:to-gray-925 dark:text-gray-300 dark:hover:to-gray-950; - } - .tag-red { - @apply from-red-50 to-red-50 text-red-800 hover:to-red-100 dark:from-gray-925 dark:to-gray-925 dark:text-gray-300 dark:hover:to-gray-950; - } - .tag-yellow { - @apply from-yellow-50 text-yellow-800 hover:to-yellow-100 dark:from-gray-925 dark:to-gray-925 dark:text-gray-300 dark:hover:to-gray-950; - } - .tag-white { - @apply border-gray-100 from-white to-white text-gray-700 hover:to-gray-100 dark:border-gray-900 dark:from-gray-925 dark:to-gray-925 dark:text-gray-300 dark:hover:to-gray-950; - } - .tag-ico { - @apply flex h-7 w-8 flex-none items-center bg-gradient-to-t to-white pl-2 dark:to-gray-950; - } - .tag-ico-blue { - @apply from-blue-50 text-blue-500 dark:from-gray-925; - } - .tag-ico-green { - @apply from-green-50 text-green-500 dark:from-gray-925; - } - .tag-ico-indigo { - @apply from-indigo-50 text-indigo-500 dark:from-gray-925; - } - .tag-ico-orange { - @apply from-orange-50 text-orange-500 dark:from-gray-925; - } - .tag-ico-purple { - @apply from-purple-50 text-purple-500 dark:from-gray-925; - } - .tag-ico-red { - @apply from-red-50 text-red-500 dark:from-gray-925; - } - .tag-ico-yellow { - @apply from-yellow-50 text-yellow-500 dark:from-gray-925; - } - .form-input:not([type="checkbox"]) { - @apply border-2 border-gray-200 shadow-sm - focus:border-blue-300 focus:ring focus:ring-blue-200 - focus:ring-opacity-50 dark:border-gray-700 dark:bg-gray-950; - } - .form-input:not([type="radio"]):not([type="checkbox"]) { - @apply mt-1 block w-full rounded-md; - } - .form-input[type="radio"] { - @apply mt-2 mr-1.5 h-3.5 w-3.5; - } - .form-input[type="checkbox"] { - @apply rounded border-transparent bg-gray-200 text-blue-500 focus:border-transparent focus:ring-1 focus:ring-gray-200 focus:ring-offset-2; - } - .form-input[type="checkbox"]:checked { - @apply bg-blue-500; - } - .form-input:disabled { - @apply cursor-not-allowed opacity-50; - } - .form-input-alt { - @apply h-10 rounded-lg border border-gray-200 px-3 placeholder-gray-400 shadow-inner outline-none focus:shadow-inner focus:ring-1 focus:ring-inset focus:ring-indigo-200 dark:bg-gray-925 dark:focus:ring-indigo-50; - } -} - -@tailwind utilities; - -@layer utilities { - .filter-none { - filter: none; - } - .filter-grayscale { - filter: grayscale(100%); - } - .from-gray-50-to-white { - @apply from-gray-50 to-white dark:from-gray-925 dark:to-gray-950; - } - - .from-gray-100-to-white { - @apply from-gray-100 to-white dark:from-gray-925 dark:to-gray-925; - } - .min-h-main { - min-height: calc(100vh - theme(spacing.16) - 1px); - } -} -.alert { - @apply rounded-md border border-blue-100 bg-blue-50 py-2 px-3 text-blue-900 dark:border-blue-700 dark:bg-blue-800 dark:text-blue-200; -} -.alert a { - @apply underline; -} -.alert-error { - @apply border-red-100 bg-red-50 text-red-900 dark:border-red-700 dark:bg-red-800 dark:text-red-200; -} -.alert-success { - @apply border-green-100 bg-green-50 text-green-900; -} -.alert-warning { - @apply border-yellow-100 bg-yellow-50 text-yellow-900; -} diff --git a/packages/widgets/static/audioProcessor.js b/packages/widgets/static/audioProcessor.js deleted file mode 100644 index f1cde75a5..000000000 --- a/packages/widgets/static/audioProcessor.js +++ /dev/null @@ -1,39 +0,0 @@ -// for js/src/lib/components/InferenceWidget/shared/WidgetRealtimeRecorder/Recorder.ts -class AudioDataExtractor extends AudioWorkletProcessor { - _updateIntervalInMS; - _sampleInFrames; - _index; - _buffer; - - constructor() { - super(); - this._updateIntervalInMS = 50; - this._sampleInFrames = parseInt((this._updateIntervalInMS / 1000.0) * sampleRate); - this._index = 0; - this._buffer = new Float32Array(this._sampleInFrames); - } - - process(inputs, outputs, parameters) { - // Note that the input will be down-mixed to mono; however, if no inputs are - // connected then zero channels will be passed in. - if (inputs.length > 0 && inputs[0].length > 0) { - const rest = this._buffer.length - this._index; - if (rest < inputs[0][0].length) { - this._buffer.set(inputs[0][0].slice(0, rest), this._index); - this.port.postMessage({ - buffer: this._buffer.slice(0), - sampling_rate: sampleRate, - }); - this._buffer.fill(0); - this._index = inputs[0][0].length - rest; - } else { - this._buffer.set(inputs[0][0], this._index); - this._index += inputs[0][0].length; - } - } - - return true; - } -} - -registerProcessor("AudioDataExtractor", AudioDataExtractor); diff --git a/packages/widgets/static/cats.jpg b/packages/widgets/static/cats.jpg deleted file mode 100644 index e131e8ecdf32c3f751ab0f7b2e5f002683babda2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173131 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 diff --git a/packages/widgets/static/favicon.png b/packages/widgets/static/favicon.png deleted file mode 100644 index 825b9e65af7c104cfb07089bb28659393b4f2097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1571 zcmV+;2Hg3HP)Px)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH { - if (mode === "lib") { - return { - plugins: [ - svelte({ - configFile: false, - extensions: [".svelte"], - - // eslint-disable-next-line - // @ts-ignore see https://github.com/sveltejs/svelte-preprocess/issues/591 - preprocess: sveltePreprocess({ - typescript: { tsconfigFile: `${__dirname}/tsconfig.json` }, - }), - emitCss: false, - compilerOptions: { - hydratable: true, - // @ts-expect-error to check cc @krampstudio - generate: isSSR ? "ssr" : "dom", - }, - }), - dts({ - entryRoot: "src/lib", - }), - ], - build: { - manifest: true, - outDir: `dist/${isSSR ? "server" : "client"}`, - rollupOptions: { - input: { - index: "src/lib/index.ts", - }, - preserveEntrySignatures: "strict", - output: [ - { - preserveModules: true, - format: "cjs", - entryFileNames: "[name].cjs", - }, - { - preserveModules: true, - format: "es", - entryFileNames: "[name].js", - }, - ], - external: ["svelte", /svelte\/(.*)/, "@huggingface/tasks"], - }, - }, - }; - } - - if (mode === "app") { - return { - plugins: [sveltekit()], - }; - } - - return {}; -});