tera-system-ui 0.1.76 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/accordion/Accordion.recipe.d.ts +125 -0
- package/dist/components/accordion/Accordion.recipe.js +28 -0
- package/dist/components/accordion/components/Accordion.svelte +4 -1
- package/dist/components/accordion/components/AccordionContent.svelte +4 -6
- package/dist/components/accordion/components/AccordionItem.svelte +3 -2
- package/dist/components/accordion/components/AccordionTrigger.svelte +11 -9
- package/dist/components/accordion/components/AccordionTrigger.svelte.d.ts +3 -0
- package/dist/components/accordion/index.d.ts +2 -1
- package/dist/components/accordion/index.js +1 -0
- package/dist/components/alert/Alert.recipe.d.ts +113 -0
- package/dist/components/alert/Alert.recipe.js +53 -0
- package/dist/components/alert/Alert.svelte +28 -18
- package/dist/components/alert/Alert.svelte.d.ts +2 -13
- package/dist/components/alert/index.d.ts +2 -0
- package/dist/components/alert/index.js +1 -0
- package/dist/components/avatar/Avatar.recipe.d.ts +113 -0
- package/dist/components/avatar/Avatar.recipe.js +37 -0
- package/dist/components/avatar/Avatar.svelte +19 -24
- package/dist/components/avatar/Avatar.svelte.d.ts +1 -1
- package/dist/components/avatar/index.d.ts +2 -1
- package/dist/components/avatar/index.js +1 -0
- package/dist/components/badge/Badge.recipe.d.ts +68 -0
- package/dist/components/badge/Badge.recipe.js +35 -0
- package/dist/components/badge/Badge.svelte +15 -7
- package/dist/components/badge/Badge.svelte.d.ts +1 -1
- package/dist/components/badge/index.d.ts +2 -1
- package/dist/components/badge/index.js +1 -0
- package/dist/components/bottom-sheet/BottomSheet.recipe.d.ts +130 -0
- package/dist/components/bottom-sheet/BottomSheet.recipe.js +47 -0
- package/dist/components/bottom-sheet/BottomSheet.svelte +1123 -0
- package/dist/components/bottom-sheet/BottomSheet.svelte.d.ts +4 -0
- package/dist/components/bottom-sheet/bottomSheetStore.svelte.d.ts +39 -0
- package/dist/components/bottom-sheet/bottomSheetStore.svelte.js +158 -0
- package/dist/components/bottom-sheet/index.d.ts +5 -0
- package/dist/components/bottom-sheet/index.js +3 -0
- package/dist/components/button/Button.recipe.d.ts +131 -0
- package/dist/components/button/Button.recipe.js +120 -0
- package/dist/components/button/Button.svelte +37 -23
- package/dist/components/button/Button.svelte.d.ts +1 -1
- package/dist/components/button/index.d.ts +2 -1
- package/dist/components/button/index.js +1 -0
- package/dist/components/card/{Card.d.ts → Card.recipe.d.ts} +18 -6
- package/dist/components/card/Card.recipe.js +41 -0
- package/dist/components/card/Card.svelte +5 -5
- package/dist/components/card/Card.svelte.d.ts +1 -1
- package/dist/components/card/index.d.ts +2 -1
- package/dist/components/card/index.js +1 -0
- package/dist/components/checkbox/Checkbox.recipe.d.ts +80 -0
- package/dist/components/checkbox/Checkbox.recipe.js +39 -0
- package/dist/components/checkbox/Checkbox.svelte +29 -35
- package/dist/components/checkbox/Checkbox.svelte.d.ts +1 -1
- package/dist/components/checkbox/index.d.ts +2 -1
- package/dist/components/checkbox/index.js +1 -0
- package/dist/components/combobox/Combobox.recipe.d.ts +138 -0
- package/dist/components/combobox/Combobox.recipe.js +50 -0
- package/dist/components/combobox/Combobox.svelte +57 -37
- package/dist/components/combobox/Combobox.svelte.d.ts +1 -1
- package/dist/components/combobox/index.d.ts +2 -1
- package/dist/components/combobox/index.js +1 -0
- package/dist/components/command/Command.recipe.d.ts +92 -0
- package/dist/components/command/Command.recipe.js +31 -0
- package/dist/components/command/components/command-empty.svelte +2 -2
- package/dist/components/command/components/command-group.svelte +4 -3
- package/dist/components/command/components/command-input.svelte +3 -7
- package/dist/components/command/components/command-item.svelte +2 -5
- package/dist/components/command/components/command-link-item.svelte +2 -5
- package/dist/components/command/components/command-list.svelte +2 -2
- package/dist/components/command/components/command-separator.svelte +2 -2
- package/dist/components/command/components/command-shortcut.svelte +2 -2
- package/dist/components/command/components/command-shortcut.svelte.d.ts +1 -1
- package/dist/components/command/components/command.svelte +2 -5
- package/dist/components/command/index.d.ts +2 -0
- package/dist/components/command/index.js +1 -0
- package/dist/components/date-range-picker/DateRangePicker.recipe.d.ts +220 -0
- package/dist/components/date-range-picker/DateRangePicker.recipe.js +113 -0
- package/dist/components/date-range-picker/DateRangePicker.svelte +53 -72
- package/dist/components/date-range-picker/DateRangePicker.svelte.d.ts +1 -1
- package/dist/components/date-range-picker/index.d.ts +2 -1
- package/dist/components/date-range-picker/index.js +1 -0
- package/dist/components/dialog/Dialog.recipe.d.ts +229 -0
- package/dist/components/dialog/Dialog.recipe.js +68 -0
- package/dist/components/dialog/Dialog.svelte +21 -39
- package/dist/components/dialog/Dialog.svelte.d.ts +1 -1
- package/dist/components/dialog/index.d.ts +2 -1
- package/dist/components/dialog/index.js +1 -0
- package/dist/components/drawer/Drawer.recipe.d.ts +140 -0
- package/dist/components/drawer/Drawer.recipe.js +50 -0
- package/dist/components/drawer/Drawer.svelte +16 -24
- package/dist/components/drawer/Drawer.svelte.d.ts +2 -14
- package/dist/components/drawer/index.d.ts +1 -0
- package/dist/components/drawer/index.js +1 -0
- package/dist/components/dropdown-menu/{DropdownMenu.d.ts → DropdownMenu.recipe.d.ts} +63 -4
- package/dist/components/dropdown-menu/DropdownMenu.recipe.js +41 -0
- package/dist/components/dropdown-menu/components/DropdownMenu.svelte +3 -8
- package/dist/components/dropdown-menu/components/DropdownMenu.svelte.d.ts +1 -1
- package/dist/components/dropdown-menu/components/DropdownMenuGroup.svelte +3 -2
- package/dist/components/dropdown-menu/components/DropdownMenuGroup.svelte.d.ts +1 -1
- package/dist/components/dropdown-menu/components/DropdownMenuHeader.svelte +3 -2
- package/dist/components/dropdown-menu/components/DropdownMenuHeader.svelte.d.ts +1 -1
- package/dist/components/dropdown-menu/components/DropdownMenuItem.svelte +3 -9
- package/dist/components/dropdown-menu/components/DropdownMenuItem.svelte.d.ts +1 -1
- package/dist/components/dropdown-menu/components/DropdownMenuSeparator.svelte +3 -2
- package/dist/components/dropdown-menu/components/DropdownMenuSeparator.svelte.d.ts +1 -1
- package/dist/components/dropdown-menu/index.d.ts +2 -1
- package/dist/components/dropdown-menu/index.js +1 -0
- package/dist/components/fonts/TeraFontMono.svelte +1 -1
- package/dist/components/fonts/TeraFontMono.svelte.d.ts +1 -1
- package/dist/components/input/Input.recipe.d.ts +166 -0
- package/dist/components/input/Input.recipe.js +86 -0
- package/dist/components/input/Input.svelte +43 -38
- package/dist/components/input/Input.svelte.d.ts +1 -1
- package/dist/components/input/index.d.ts +2 -1
- package/dist/components/input/index.js +1 -0
- package/dist/components/label/Label.recipe.d.ts +46 -0
- package/dist/components/label/Label.recipe.js +27 -0
- package/dist/components/label/Label.svelte +2 -2
- package/dist/components/label/Label.svelte.d.ts +1 -1
- package/dist/components/label/index.d.ts +2 -1
- package/dist/components/label/index.js +1 -0
- package/dist/components/popover/Popover.recipe.d.ts +80 -0
- package/dist/components/popover/Popover.recipe.js +23 -0
- package/dist/components/popover/Popover.svelte +4 -8
- package/dist/components/popover/Popover.svelte.d.ts +1 -1
- package/dist/components/popover/index.d.ts +2 -1
- package/dist/components/popover/index.js +1 -0
- package/dist/components/popover-responsive/PopoverResponsive.recipe.d.ts +85 -0
- package/dist/components/popover-responsive/PopoverResponsive.recipe.js +27 -0
- package/dist/components/popover-responsive/PopoverResponsive.svelte +38 -5
- package/dist/components/popover-responsive/PopoverResponsive.svelte.d.ts +1 -1
- package/dist/components/popover-responsive/index.d.ts +2 -1
- package/dist/components/popover-responsive/index.js +1 -0
- package/dist/components/select/Select.recipe.d.ts +190 -0
- package/dist/components/select/Select.recipe.js +51 -0
- package/dist/components/select/Select.svelte +18 -24
- package/dist/components/select/Select.svelte.d.ts +1 -1
- package/dist/components/select/index.d.ts +2 -1
- package/dist/components/select/index.js +1 -0
- package/dist/components/skeleton/Skeleton.recipe.d.ts +89 -0
- package/dist/components/skeleton/Skeleton.recipe.js +41 -0
- package/dist/components/skeleton/Skeleton.svelte +7 -6
- package/dist/components/skeleton/Skeleton.svelte.d.ts +2 -10
- package/dist/components/skeleton/index.d.ts +2 -0
- package/dist/components/skeleton/index.js +1 -0
- package/dist/components/slider/Slider.recipe.d.ts +115 -0
- package/dist/components/slider/Slider.recipe.js +50 -0
- package/dist/components/slider/Slider.svelte +6 -12
- package/dist/components/slider/Slider.svelte.d.ts +1 -1
- package/dist/components/slider/index.d.ts +3 -1
- package/dist/components/slider/index.js +1 -0
- package/dist/components/spinner/Spinner.recipe.d.ts +60 -0
- package/dist/components/spinner/Spinner.recipe.js +38 -0
- package/dist/components/spinner/Spinner.svelte +2 -2
- package/dist/components/spinner/Spinner.svelte.d.ts +2 -8
- package/dist/components/spinner/index.d.ts +2 -0
- package/dist/components/spinner/index.js +1 -0
- package/dist/components/star-rating/StarRating.recipe.d.ts +49 -0
- package/dist/components/star-rating/StarRating.recipe.js +29 -0
- package/dist/components/star-rating/StarRating.svelte +39 -35
- package/dist/components/star-rating/StarRating.svelte.d.ts +1 -1
- package/dist/components/star-rating/index.d.ts +2 -1
- package/dist/components/star-rating/index.js +1 -0
- package/dist/components/switch/Switch.recipe.d.ts +81 -0
- package/dist/components/switch/Switch.recipe.js +38 -0
- package/dist/components/switch/Switch.svelte +27 -36
- package/dist/components/switch/Switch.svelte.d.ts +1 -1
- package/dist/components/switch/index.d.ts +2 -1
- package/dist/components/switch/index.js +1 -0
- package/dist/components/table/Table.recipe.d.ts +134 -0
- package/dist/components/table/Table.recipe.js +44 -0
- package/dist/components/table/Table.svelte +10 -10
- package/dist/components/table/Table.svelte.d.ts +2 -17
- package/dist/components/table/index.d.ts +2 -0
- package/dist/components/table/index.js +1 -0
- package/dist/components/tabs/Tabs.recipe.d.ts +161 -0
- package/dist/components/tabs/Tabs.recipe.js +76 -0
- package/dist/components/tabs/Tabs.svelte.d.ts +2 -58
- package/dist/components/tabs/Tabs.svelte.js +3 -0
- package/dist/components/tabs/components/Tabs.svelte +8 -8
- package/dist/components/tabs/components/Tabs.svelte.d.ts +1 -1
- package/dist/components/tabs/components/TabsContent.svelte +3 -2
- package/dist/components/tabs/components/TabsContent.svelte.d.ts +1 -1
- package/dist/components/tabs/components/TabsItem.svelte +11 -36
- package/dist/components/tabs/components/TabsItem.svelte.d.ts +1 -1
- package/dist/components/tabs/components/TabsList.svelte +13 -42
- package/dist/components/tabs/components/TabsList.svelte.d.ts +1 -1
- package/dist/components/tabs/index.d.ts +2 -1
- package/dist/components/tabs/index.js +1 -0
- package/dist/components/text-area/TextArea.recipe.d.ts +181 -0
- package/dist/components/text-area/TextArea.recipe.js +81 -0
- package/dist/components/text-area/TextArea.svelte +68 -63
- package/dist/components/text-area/TextArea.svelte.d.ts +1 -1
- package/dist/components/text-area/index.d.ts +2 -1
- package/dist/components/text-area/index.js +1 -0
- package/dist/components/toast/ToastContainer.svelte +15 -16
- package/dist/components/tooltip/Tooltip.recipe.d.ts +79 -0
- package/dist/components/tooltip/Tooltip.recipe.js +26 -0
- package/dist/components/tooltip/Tooltip.svelte +10 -7
- package/dist/components/tooltip/Tooltip.svelte.d.ts +1 -1
- package/dist/components/tooltip/index.d.ts +2 -1
- package/dist/components/tooltip/index.js +1 -0
- package/dist/index.d.ts +55 -65
- package/dist/index.js +28 -37
- package/dist/{components → internal}/icons/IconCheck.svelte +3 -4
- package/dist/{components → internal}/icons/IconChevronDown.svelte +3 -4
- package/dist/{components → internal}/icons/IconSearch.svelte +3 -4
- package/dist/{components → internal}/icons/IconX.svelte +3 -4
- package/dist/internal/icons/index.d.ts +4 -0
- package/dist/internal/icons/index.js +4 -0
- package/dist/llms/accordion.md +2 -1
- package/dist/llms/alert.md +7 -2
- package/dist/llms/avatar.md +2 -2
- package/dist/llms/badge.md +4 -0
- package/dist/llms/bottom-sheet.md +44 -0
- package/dist/llms/button.md +7 -1
- package/dist/llms/card.md +2 -0
- package/dist/llms/checkbox.md +2 -1
- package/dist/llms/colors.md +20 -20
- package/dist/llms/combobox.md +8 -2
- package/dist/llms/command.md +2 -0
- package/dist/llms/date-range-picker.md +12 -2
- package/dist/llms/dialog.md +9 -4
- package/dist/llms/drawer.md +13 -8
- package/dist/llms/dropdown-menu.md +11 -2
- package/dist/llms/index.md +1 -13
- package/dist/llms/input.md +3 -0
- package/dist/llms/label.md +2 -0
- package/dist/llms/popover-responsive.md +10 -2
- package/dist/llms/popover.md +1 -1
- package/dist/llms/select.md +2 -1
- package/dist/llms/skeleton.md +8 -5
- package/dist/llms/slider.md +5 -3
- package/dist/llms/spinner.md +6 -2
- package/dist/llms/star-rating.md +3 -0
- package/dist/llms/switch.md +2 -1
- package/dist/llms/table.md +14 -7
- package/dist/llms/tabs.md +18 -3
- package/dist/llms/text-area.md +3 -0
- package/dist/llms/tooltip.md +2 -1
- package/dist/recipes/index.d.ts +79 -0
- package/dist/recipes/index.js +52 -0
- package/dist/stories/ComponentOverview.stories.svelte +346 -350
- package/dist/themes/tera-ui-base.css +149 -62
- package/dist/themes/theme-cv-builder.css +146 -0
- package/dist/themes/theme-professional.css +8 -33
- package/dist/tokens/index.d.ts +168 -0
- package/dist/tokens/index.js +122 -0
- package/dist/types/index.d.ts +19 -24
- package/package.json +30 -50
- package/registry/accordion.json +65 -0
- package/registry/alert.json +43 -0
- package/registry/avatar.json +43 -0
- package/registry/badge.json +43 -0
- package/registry/bottom-sheet.json +50 -0
- package/registry/button.json +43 -0
- package/registry/card.json +43 -0
- package/registry/checkbox.json +45 -0
- package/registry/combobox.json +45 -0
- package/registry/command.json +109 -0
- package/registry/date-range-picker.json +48 -0
- package/registry/dialog.json +50 -0
- package/registry/drawer.json +45 -0
- package/registry/dropdown-menu.json +72 -0
- package/registry/fonts.json +41 -0
- package/registry/index.json +193 -0
- package/registry/input.json +43 -0
- package/registry/label.json +44 -0
- package/registry/popover-responsive.json +46 -0
- package/registry/popover.json +44 -0
- package/registry/select.json +51 -0
- package/registry/skeleton.json +43 -0
- package/registry/slider.json +44 -0
- package/registry/spinner.json +43 -0
- package/registry/star-rating.json +43 -0
- package/registry/switch.json +44 -0
- package/registry/table.json +45 -0
- package/registry/tabs.json +71 -0
- package/registry/text-area.json +43 -0
- package/registry/toast.json +41 -0
- package/registry/tooltip.json +44 -0
- package/scripts/generate-ts-index.js +1 -18
- package/scripts/tera-ui.mjs +171 -0
- package/dist/components/accordion/Accordion.d.ts +0 -52
- package/dist/components/accordion/Accordion.js +0 -11
- package/dist/components/ai/ChatBubble.svelte +0 -35
- package/dist/components/ai/ChatBubble.svelte.d.ts +0 -12
- package/dist/components/ai/PromptInput.svelte +0 -58
- package/dist/components/ai/PromptInput.svelte.d.ts +0 -13
- package/dist/components/ai/StreamText.svelte +0 -41
- package/dist/components/ai/StreamText.svelte.d.ts +0 -11
- package/dist/components/ai/SuggestionChips.svelte +0 -34
- package/dist/components/ai/SuggestionChips.svelte.d.ts +0 -10
- package/dist/components/ai/ThinkingLoader.svelte +0 -34
- package/dist/components/ai/ThinkingLoader.svelte.d.ts +0 -11
- package/dist/components/ai/index.d.ts +0 -5
- package/dist/components/ai/index.js +0 -5
- package/dist/components/avatar/Avatar.d.ts +0 -45
- package/dist/components/avatar/Avatar.js +0 -35
- package/dist/components/badge/Badge.d.ts +0 -52
- package/dist/components/badge/Badge.js +0 -22
- package/dist/components/brand-logo/BrandLogo.d.ts +0 -38
- package/dist/components/brand-logo/BrandLogo.js +0 -18
- package/dist/components/brand-logo/BrandLogo.svelte +0 -36
- package/dist/components/brand-logo/BrandLogo.svelte.d.ts +0 -4
- package/dist/components/brand-logo/index.d.ts +0 -2
- package/dist/components/brand-logo/index.js +0 -1
- package/dist/components/button/Button.d.ts +0 -113
- package/dist/components/button/Button.js +0 -135
- package/dist/components/card/Card.js +0 -28
- package/dist/components/checkbox/Checkbox.d.ts +0 -32
- package/dist/components/checkbox/Checkbox.js +0 -11
- package/dist/components/combobox/Combobox.d.ts +0 -47
- package/dist/components/combobox/Combobox.js +0 -5
- package/dist/components/date-range-picker/DateRangePicker.types.d.ts +0 -38
- package/dist/components/date-range-picker/DateRangePicker.types.js +0 -1
- package/dist/components/dialog/Dialog.d.ts +0 -55
- package/dist/components/dialog/Dialog.js +0 -1
- package/dist/components/dropdown-menu/DropdownMenu.js +0 -1
- package/dist/components/header/Header.d.ts +0 -11
- package/dist/components/header/Header.js +0 -7
- package/dist/components/header/Header.svelte +0 -33
- package/dist/components/header/Header.svelte.d.ts +0 -5
- package/dist/components/header/header.scss +0 -20
- package/dist/components/header/index.d.ts +0 -2
- package/dist/components/header/index.js +0 -1
- package/dist/components/header/package.json +0 -14
- package/dist/components/icons/IconArrowBigRightFilled.svelte +0 -7
- package/dist/components/icons/IconArrowBigRightFilled.svelte.d.ts +0 -5
- package/dist/components/icons/IconBook.svelte +0 -7
- package/dist/components/icons/IconBook.svelte.d.ts +0 -5
- package/dist/components/icons/IconBookmarkPlus.svelte +0 -7
- package/dist/components/icons/IconBookmarkPlus.svelte.d.ts +0 -5
- package/dist/components/icons/IconCalculator.svelte +0 -7
- package/dist/components/icons/IconCalculator.svelte.d.ts +0 -5
- package/dist/components/icons/IconCoin.svelte +0 -7
- package/dist/components/icons/IconCoin.svelte.d.ts +0 -5
- package/dist/components/icons/IconCoinConvert.svelte +0 -17
- package/dist/components/icons/IconCoinConvert.svelte.d.ts +0 -4
- package/dist/components/icons/IconCopy.svelte +0 -7
- package/dist/components/icons/IconCopy.svelte.d.ts +0 -5
- package/dist/components/icons/IconCopyCheckFilled.svelte +0 -7
- package/dist/components/icons/IconCopyCheckFilled.svelte.d.ts +0 -5
- package/dist/components/icons/IconHamburger.svelte +0 -7
- package/dist/components/icons/IconHamburger.svelte.d.ts +0 -4
- package/dist/components/icons/IconLanguage.svelte +0 -7
- package/dist/components/icons/IconLanguage.svelte.d.ts +0 -5
- package/dist/components/icons/IconLoader2.svelte +0 -7
- package/dist/components/icons/IconLoader2.svelte.d.ts +0 -5
- package/dist/components/icons/IconLogout.svelte +0 -7
- package/dist/components/icons/IconLogout.svelte.d.ts +0 -5
- package/dist/components/icons/IconMoon.svelte +0 -7
- package/dist/components/icons/IconMoon.svelte.d.ts +0 -4
- package/dist/components/icons/IconPointFilled.svelte +0 -7
- package/dist/components/icons/IconPointFilled.svelte.d.ts +0 -5
- package/dist/components/icons/IconSettings.svelte +0 -7
- package/dist/components/icons/IconSettings.svelte.d.ts +0 -5
- package/dist/components/icons/IconSun.svelte +0 -7
- package/dist/components/icons/IconSun.svelte.d.ts +0 -4
- package/dist/components/icons/IconSwitchHorizontal.svelte +0 -7
- package/dist/components/icons/IconSwitchHorizontal.svelte.d.ts +0 -5
- package/dist/components/icons/IconSwitchVertical.svelte +0 -7
- package/dist/components/icons/IconSwitchVertical.svelte.d.ts +0 -5
- package/dist/components/icons/IconTransform.svelte +0 -7
- package/dist/components/icons/IconTransform.svelte.d.ts +0 -5
- package/dist/components/icons/index.d.ts +0 -23
- package/dist/components/icons/index.js +0 -23
- package/dist/components/input/Input.d.ts +0 -72
- package/dist/components/input/Input.js +0 -45
- package/dist/components/label/Label.d.ts +0 -38
- package/dist/components/label/Label.js +0 -18
- package/dist/components/language-picker-button/LanguagePickerButton.d.ts +0 -15
- package/dist/components/language-picker-button/LanguagePickerButton.js +0 -7
- package/dist/components/language-picker-button/LanguagePickerButton.svelte +0 -78
- package/dist/components/language-picker-button/LanguagePickerButton.svelte.d.ts +0 -7
- package/dist/components/language-picker-button/index.d.ts +0 -2
- package/dist/components/language-picker-button/index.js +0 -1
- package/dist/components/light-dark-toggle/LightDarkToggle.d.ts +0 -11
- package/dist/components/light-dark-toggle/LightDarkToggle.js +0 -7
- package/dist/components/light-dark-toggle/LightDarkToggle.svelte +0 -33
- package/dist/components/light-dark-toggle/LightDarkToggle.svelte.d.ts +0 -4
- package/dist/components/light-dark-toggle/index.d.ts +0 -2
- package/dist/components/light-dark-toggle/index.js +0 -1
- package/dist/components/marketing/FeatureCard.svelte +0 -37
- package/dist/components/marketing/FeatureCard.svelte.d.ts +0 -13
- package/dist/components/marketing/PricingCard.svelte +0 -48
- package/dist/components/marketing/PricingCard.svelte.d.ts +0 -15
- package/dist/components/marketing/StatBlock.svelte +0 -14
- package/dist/components/marketing/StatBlock.svelte.d.ts +0 -10
- package/dist/components/marketing/TestimonialCard.svelte +0 -24
- package/dist/components/marketing/TestimonialCard.svelte.d.ts +0 -12
- package/dist/components/marketing/index.d.ts +0 -4
- package/dist/components/marketing/index.js +0 -4
- package/dist/components/popover/Popover.d.ts +0 -37
- package/dist/components/popover/Popover.js +0 -1
- package/dist/components/popover-responsive/PopoverResponsive.d.ts +0 -22
- package/dist/components/popover-responsive/PopoverResponsive.js +0 -1
- package/dist/components/select/Select.d.ts +0 -106
- package/dist/components/select/Select.js +0 -24
- package/dist/components/side-navigation/SideNavigation.d.ts +0 -72
- package/dist/components/side-navigation/SideNavigation.js +0 -91
- package/dist/components/side-navigation/SideNavigation.svelte +0 -143
- package/dist/components/side-navigation/SideNavigation.svelte.d.ts +0 -4
- package/dist/components/side-navigation/SideNavigationGroup.svelte +0 -40
- package/dist/components/side-navigation/SideNavigationGroup.svelte.d.ts +0 -10
- package/dist/components/side-navigation/SideNavigationItem.svelte +0 -18
- package/dist/components/side-navigation/SideNavigationItem.svelte.d.ts +0 -8
- package/dist/components/side-navigation/SideNavigationLayout.svelte +0 -19
- package/dist/components/side-navigation/SideNavigationLayout.svelte.d.ts +0 -9
- package/dist/components/side-navigation/index.d.ts +0 -5
- package/dist/components/side-navigation/index.js +0 -4
- package/dist/components/side-navigation/sidenav.scss +0 -226
- package/dist/components/slider/Slider.d.ts +0 -28
- package/dist/components/slider/Slider.js +0 -1
- package/dist/components/star-rating/StarRating.d.ts +0 -31
- package/dist/components/star-rating/StarRating.js +0 -15
- package/dist/components/switch/Switch.d.ts +0 -27
- package/dist/components/switch/Switch.js +0 -11
- package/dist/components/tera-ui-context/TeraUiContext.d.ts +0 -11
- package/dist/components/tera-ui-context/TeraUiContext.js +0 -1
- package/dist/components/tera-ui-context/TeraUiContext.svelte +0 -13
- package/dist/components/tera-ui-context/TeraUiContext.svelte.d.ts +0 -4
- package/dist/components/tera-ui-context/global-context-store.d.ts +0 -3
- package/dist/components/tera-ui-context/global-context-store.js +0 -2
- package/dist/components/tera-ui-context/global-context.d.ts +0 -3
- package/dist/components/tera-ui-context/global-context.js +0 -24
- package/dist/components/tera-ui-context/index.d.ts +0 -2
- package/dist/components/tera-ui-context/index.js +0 -1
- package/dist/components/text-area/TextArea.d.ts +0 -87
- package/dist/components/text-area/TextArea.js +0 -48
- package/dist/components/tooltip/Tooltip.d.ts +0 -23
- package/dist/components/tooltip/Tooltip.js +0 -1
- package/dist/components/user-avatar-with-menu/UserAvatarWithMenu.d.ts +0 -14
- package/dist/components/user-avatar-with-menu/UserAvatarWithMenu.js +0 -7
- package/dist/components/user-avatar-with-menu/UserAvatarWithMenu.svelte +0 -48
- package/dist/components/user-avatar-with-menu/UserAvatarWithMenu.svelte.d.ts +0 -4
- package/dist/components/user-avatar-with-menu/index.d.ts +0 -2
- package/dist/components/user-avatar-with-menu/index.js +0 -1
- package/dist/i18n/index.d.ts +0 -1
- package/dist/i18n/index.js +0 -1
- package/dist/i18n/language.d.ts +0 -2
- package/dist/i18n/language.js +0 -45
- package/dist/internal/service/user.service.d.ts +0 -2
- package/dist/internal/service/user.service.js +0 -20
- package/dist/llms/ai.md +0 -110
- package/dist/llms/brand-logo.md +0 -30
- package/dist/llms/header.md +0 -26
- package/dist/llms/icons.md +0 -43
- package/dist/llms/language-picker-button.md +0 -30
- package/dist/llms/light-dark-toggle.md +0 -26
- package/dist/llms/marketing.md +0 -95
- package/dist/llms/side-navigation.md +0 -51
- package/dist/llms/tera-ui-context.md +0 -30
- package/dist/llms/user-avatar-with-menu.md +0 -28
- package/dist/paraglide/.prettierignore +0 -3
- package/dist/paraglide/README.md +0 -162
- package/dist/paraglide/messages/_index.d.ts +0 -106
- package/dist/paraglide/messages/_index.js +0 -439
- package/dist/paraglide/messages/ar.d.ts +0 -23
- package/dist/paraglide/messages/ar.js +0 -38
- package/dist/paraglide/messages/bg.d.ts +0 -23
- package/dist/paraglide/messages/bg.js +0 -38
- package/dist/paraglide/messages/bn.d.ts +0 -23
- package/dist/paraglide/messages/bn.js +0 -38
- package/dist/paraglide/messages/ca.d.ts +0 -23
- package/dist/paraglide/messages/ca.js +0 -38
- package/dist/paraglide/messages/cs.d.ts +0 -23
- package/dist/paraglide/messages/cs.js +0 -38
- package/dist/paraglide/messages/da.d.ts +0 -23
- package/dist/paraglide/messages/da.js +0 -38
- package/dist/paraglide/messages/de.d.ts +0 -23
- package/dist/paraglide/messages/de.js +0 -38
- package/dist/paraglide/messages/el.d.ts +0 -23
- package/dist/paraglide/messages/el.js +0 -38
- package/dist/paraglide/messages/en.d.ts +0 -23
- package/dist/paraglide/messages/en.js +0 -38
- package/dist/paraglide/messages/es.d.ts +0 -23
- package/dist/paraglide/messages/es.js +0 -38
- package/dist/paraglide/messages/fi.d.ts +0 -23
- package/dist/paraglide/messages/fi.js +0 -38
- package/dist/paraglide/messages/fr.d.ts +0 -23
- package/dist/paraglide/messages/fr.js +0 -38
- package/dist/paraglide/messages/he.d.ts +0 -23
- package/dist/paraglide/messages/he.js +0 -38
- package/dist/paraglide/messages/hi.d.ts +0 -23
- package/dist/paraglide/messages/hi.js +0 -38
- package/dist/paraglide/messages/hu.d.ts +0 -23
- package/dist/paraglide/messages/hu.js +0 -38
- package/dist/paraglide/messages/id.d.ts +0 -23
- package/dist/paraglide/messages/id.js +0 -38
- package/dist/paraglide/messages/it.d.ts +0 -23
- package/dist/paraglide/messages/it.js +0 -38
- package/dist/paraglide/messages/ja.d.ts +0 -23
- package/dist/paraglide/messages/ja.js +0 -38
- package/dist/paraglide/messages/ko.d.ts +0 -23
- package/dist/paraglide/messages/ko.js +0 -38
- package/dist/paraglide/messages/lt.d.ts +0 -23
- package/dist/paraglide/messages/lt.js +0 -38
- package/dist/paraglide/messages/lv.d.ts +0 -23
- package/dist/paraglide/messages/lv.js +0 -38
- package/dist/paraglide/messages/ms.d.ts +0 -23
- package/dist/paraglide/messages/ms.js +0 -38
- package/dist/paraglide/messages/nl.d.ts +0 -23
- package/dist/paraglide/messages/nl.js +0 -38
- package/dist/paraglide/messages/no.d.ts +0 -23
- package/dist/paraglide/messages/no.js +0 -38
- package/dist/paraglide/messages/pl.d.ts +0 -23
- package/dist/paraglide/messages/pl.js +0 -38
- package/dist/paraglide/messages/pt.d.ts +0 -23
- package/dist/paraglide/messages/pt.js +0 -38
- package/dist/paraglide/messages/ro.d.ts +0 -23
- package/dist/paraglide/messages/ro.js +0 -38
- package/dist/paraglide/messages/ru.d.ts +0 -23
- package/dist/paraglide/messages/ru.js +0 -38
- package/dist/paraglide/messages/sk.d.ts +0 -23
- package/dist/paraglide/messages/sk.js +0 -38
- package/dist/paraglide/messages/sl.d.ts +0 -23
- package/dist/paraglide/messages/sl.js +0 -38
- package/dist/paraglide/messages/sq.d.ts +0 -23
- package/dist/paraglide/messages/sq.js +0 -38
- package/dist/paraglide/messages/sr.d.ts +0 -23
- package/dist/paraglide/messages/sr.js +0 -38
- package/dist/paraglide/messages/sv.d.ts +0 -23
- package/dist/paraglide/messages/sv.js +0 -38
- package/dist/paraglide/messages/sw.d.ts +0 -23
- package/dist/paraglide/messages/sw.js +0 -38
- package/dist/paraglide/messages/ta.d.ts +0 -23
- package/dist/paraglide/messages/ta.js +0 -38
- package/dist/paraglide/messages/te.d.ts +0 -23
- package/dist/paraglide/messages/te.js +0 -38
- package/dist/paraglide/messages/th.d.ts +0 -23
- package/dist/paraglide/messages/th.js +0 -38
- package/dist/paraglide/messages/tl.d.ts +0 -23
- package/dist/paraglide/messages/tl.js +0 -38
- package/dist/paraglide/messages/tr.d.ts +0 -23
- package/dist/paraglide/messages/tr.js +0 -38
- package/dist/paraglide/messages/uk.d.ts +0 -23
- package/dist/paraglide/messages/uk.js +0 -38
- package/dist/paraglide/messages/vi.d.ts +0 -23
- package/dist/paraglide/messages/vi.js +0 -38
- package/dist/paraglide/messages/zh-CN.d.ts +0 -23
- package/dist/paraglide/messages/zh-CN.js +0 -38
- package/dist/paraglide/messages/zh-TW.d.ts +0 -23
- package/dist/paraglide/messages/zh-TW.js +0 -38
- package/dist/paraglide/messages.d.ts +0 -2
- package/dist/paraglide/messages.js +0 -4
- package/dist/paraglide/registry.d.ts +0 -34
- package/dist/paraglide/registry.js +0 -46
- package/dist/paraglide/runtime.d.ts +0 -758
- package/dist/paraglide/runtime.js +0 -1990
- package/dist/paraglide/server.d.ts +0 -96
- package/dist/paraglide/server.js +0 -277
- package/dist/tera-i18n/README.md +0 -105
- package/dist/tera-i18n/assets/world-flags/Algeria.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/East Timor.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/Rapa Nui.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/abkhazia.svg +0 -23
- package/dist/tera-i18n/assets/world-flags/afghanistan.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/aland islands.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/albania.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/american samoa.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/andorra.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/angola.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/anguilla.svg +0 -19
- package/dist/tera-i18n/assets/world-flags/antigua and barbuda.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/argentina.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/armenia.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/aruba.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/australia.svg +0 -21
- package/dist/tera-i18n/assets/world-flags/austria.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/azerbaijan.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/azores islands.svg +0 -21
- package/dist/tera-i18n/assets/world-flags/bahamas.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/bahrain.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/balearic islands.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/bangladesh.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/barbados.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/basque country.svg +0 -20
- package/dist/tera-i18n/assets/world-flags/belarus.svg +0 -18
- package/dist/tera-i18n/assets/world-flags/belgium.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/belize.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/benin.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/bermuda.svg +0 -20
- package/dist/tera-i18n/assets/world-flags/bhutan.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/bolivia.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/bonaire.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/bosnia and herzegovina.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/botswana.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/brazil.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/british columbia.svg +0 -31
- package/dist/tera-i18n/assets/world-flags/british indian ocean territory.svg +0 -29
- package/dist/tera-i18n/assets/world-flags/british virgin islands.svg +0 -24
- package/dist/tera-i18n/assets/world-flags/brunei.svg +0 -19
- package/dist/tera-i18n/assets/world-flags/bulgaria.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/burkina faso.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/burundi.svg +0 -18
- package/dist/tera-i18n/assets/world-flags/cambodia.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/cameroon.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/canada.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/canary islands.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/cape verde.svg +0 -23
- package/dist/tera-i18n/assets/world-flags/catalonia.svg +0 -7
- package/dist/tera-i18n/assets/world-flags/cayman islands.svg +0 -20
- package/dist/tera-i18n/assets/world-flags/central african republic.svg +0 -20
- package/dist/tera-i18n/assets/world-flags/ceuta.svg +0 -29
- package/dist/tera-i18n/assets/world-flags/chad.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/chile.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/china.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/cocos island.svg +0 -19
- package/dist/tera-i18n/assets/world-flags/colombia.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/comoros.svg +0 -19
- package/dist/tera-i18n/assets/world-flags/cook islands.svg +0 -22
- package/dist/tera-i18n/assets/world-flags/corsica.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/costa rica.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/croatia.svg +0 -31
- package/dist/tera-i18n/assets/world-flags/cuba.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/curacao.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/cyprus.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/czech republic.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/democratic republic of congo.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/denmark.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/djibouti.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/dominica.svg +0 -34
- package/dist/tera-i18n/assets/world-flags/dominican republic.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/ecuador.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/egypt.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/el salvador.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/england.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/equatorial guinea.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/eritrea.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/estonia.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/ethiopia.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/european union.svg +0 -18
- package/dist/tera-i18n/assets/world-flags/falkland islands.svg +0 -18
- package/dist/tera-i18n/assets/world-flags/faroe islands.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/fiji.svg +0 -18
- package/dist/tera-i18n/assets/world-flags/finland.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/france.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/french polynesia.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/gabon.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/galapagos islands.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/gambia.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/georgia.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/germany.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/ghana.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/gibraltar.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/greece.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/greenland.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/grenada.svg +0 -27
- package/dist/tera-i18n/assets/world-flags/guam.svg +0 -18
- package/dist/tera-i18n/assets/world-flags/guatemala.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/guernsey.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/guinea bissau.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/guinea.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/guyana.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/haiti.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/hawaii.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/honduras.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/hong kong.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/hungary.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/iceland.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/india.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/indonesia.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/iran.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/iraq.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/ireland.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/isle of man.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/israel.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/italy.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/ivory coast.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/jamaica.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/japan.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/jersey.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/jordan.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/kazakhstan.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/kenya.svg +0 -19
- package/dist/tera-i18n/assets/world-flags/kiribati.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/kosovo.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/kuwait.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/kyrgyzstan.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/laos.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/latvia.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/lebanon.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/lesotho.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/liberia.svg +0 -23
- package/dist/tera-i18n/assets/world-flags/libya.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/liechtenstein.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/lithuania.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/luxembourg.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/macao.svg +0 -18
- package/dist/tera-i18n/assets/world-flags/madagascar.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/madeira.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/malawi.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/malaysia.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/maldives.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/mali.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/malta.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/marshall island.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/martinique.svg +0 -18
- package/dist/tera-i18n/assets/world-flags/mauritania.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/mauritius.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/melilla.svg +0 -25
- package/dist/tera-i18n/assets/world-flags/mexico.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/micronesia.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/moldova.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/monaco.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/mongolia.svg +0 -19
- package/dist/tera-i18n/assets/world-flags/montenegro.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/montserrat.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/morocco.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/mozambique.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/myanmar.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/namibia.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/nato.svg +0 -19
- package/dist/tera-i18n/assets/world-flags/nauru.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/nepal.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/netherlands.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/new zealand.svg +0 -18
- package/dist/tera-i18n/assets/world-flags/nicaragua.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/niger.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/nigeria.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/niue.svg +0 -20
- package/dist/tera-i18n/assets/world-flags/norfolk island.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/north korea.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/northern cyprus.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/northern marianas islands.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/norway.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/oman.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/orkney islands.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/ossetia.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/pakistan.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/palau.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/palestine.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/panama.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/papua new guinea.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/paraguay.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/peru.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/philippines.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/pitcairn islands.svg +0 -18
- package/dist/tera-i18n/assets/world-flags/poland.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/portugal.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/puerto rico.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/qatar.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/republic of macedonia.svg +0 -20
- package/dist/tera-i18n/assets/world-flags/republic of the congo.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/romania.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/russia.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/rwanda.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/saba island.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/sahrawi arab democratic republic.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/samoa.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/san marino.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/sao tome and prince.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/sardinia.svg +0 -23
- package/dist/tera-i18n/assets/world-flags/saudi arabia.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/scotland.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/senegal.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/serbia.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/seychelles.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/sierra leone.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/singapore.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/sint eustatius.svg +0 -20
- package/dist/tera-i18n/assets/world-flags/sint maarten.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/slovakia.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/slovenia.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/solomon islands.svg +0 -17
- package/dist/tera-i18n/assets/world-flags/somalia.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/somaliland.svg +0 -18
- package/dist/tera-i18n/assets/world-flags/south africa.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/south korea.svg +0 -30
- package/dist/tera-i18n/assets/world-flags/south sudan.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/spain.png +0 -0
- package/dist/tera-i18n/assets/world-flags/spain.svg +0 -676
- package/dist/tera-i18n/assets/world-flags/sri lanka.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/st barts.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/st lucia.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/st vincent and the grenadines.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/sudan.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/suriname.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/swaziland.svg +0 -21
- package/dist/tera-i18n/assets/world-flags/sweden.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/switzerland.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/syria.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/taiwan.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/tajikistan.svg +0 -20
- package/dist/tera-i18n/assets/world-flags/tanzania.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/thailand.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/tibet.svg +0 -22
- package/dist/tera-i18n/assets/world-flags/togo.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/tokelau.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/tonga.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/transnistria.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/trinidad and tobago.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/tunisia.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/turkey.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/turkmenistan.svg +0 -30
- package/dist/tera-i18n/assets/world-flags/turks and caicos.svg +0 -19
- package/dist/tera-i18n/assets/world-flags/tuvalu.svg +0 -25
- package/dist/tera-i18n/assets/world-flags/uganda.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/ukraine.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/united arab emirates.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/united kingdom.svg +0 -23
- package/dist/tera-i18n/assets/world-flags/united nations.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/united states.svg +0 -15
- package/dist/tera-i18n/assets/world-flags/uruguay.svg +0 -16
- package/dist/tera-i18n/assets/world-flags/uzbekista/314/201n.svg +0 -27
- package/dist/tera-i18n/assets/world-flags/uzbekist/303/241n.svg +0 -27
- package/dist/tera-i18n/assets/world-flags/vanuatu.svg +0 -32
- package/dist/tera-i18n/assets/world-flags/vatican city.svg +0 -13
- package/dist/tera-i18n/assets/world-flags/venezuela.svg +0 -20
- package/dist/tera-i18n/assets/world-flags/vietnam.svg +0 -11
- package/dist/tera-i18n/assets/world-flags/virgin islands.svg +0 -18
- package/dist/tera-i18n/assets/world-flags/wales.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/yemen.svg +0 -12
- package/dist/tera-i18n/assets/world-flags/zambia.svg +0 -14
- package/dist/tera-i18n/assets/world-flags/zimbabwe.svg +0 -20
- package/dist/tera-i18n/dev-tools/translator/.env +0 -2
- package/dist/tera-i18n/dev-tools/translator/gpt-translator-calculator-seo.js +0 -79
- package/dist/tera-i18n/dev-tools/translator/gpt-translator-i18n-message.js +0 -274
- package/dist/tera-i18n/dev-tools/translator/gpt-translator.js +0 -128
- package/dist/tera-i18n/dev-tools/translator/index.js +0 -2
- package/dist/tera-i18n/dev-tools/translator/package-lock.json +0 -780
- package/dist/tera-i18n/dev-tools/translator/package.json +0 -20
- package/dist/tera-i18n/dev-tools/translator/prompt/i18n-message-translate-prompt-calculator.md +0 -34
- package/dist/tera-i18n/dev-tools/translator/prompt/i18n-message-translate-prompt-cv-maker.md +0 -149
- package/dist/tera-i18n/dev-tools/translator/prompt/i18n-message-translate-prompt-system.txt +0 -1
- package/dist/tera-i18n/dev-tools/translator/prompt/i18n-message-translate-prompt.txt +0 -14
- package/dist/tera-i18n/dev-tools/translator/tsconfig.json +0 -17
- package/dist/tera-i18n/dev-tools/translator/types/supported-languages.js +0 -90
- package/dist/tera-i18n/projects/common/all-language-data.d.ts +0 -3
- package/dist/tera-i18n/projects/common/all-language-data.js +0 -141
- package/dist/tera-i18n/projects/common/messages/en.json +0 -0
- package/dist/tera-i18n/projects/common/types/language.d.ts +0 -6
- package/dist/tera-i18n/projects/common/types/language.js +0 -1
- package/dist/tera-i18n/projects/cv-maker/messages/ar-AE.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/ar-EG.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/ar-IQ.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/ar-SA.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/ar-SD.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/ar-YE.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/ar.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/bg.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/bn.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/ca.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/cs.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/da.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/de.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/el.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/en-AE.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/en-AU.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/en-CA.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/en-GB.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/en-ID.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/en-IN.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/en-NZ.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/en-PH.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/en-PK.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/en-SA.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/en-US.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/en-ZA.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/en.json +0 -92
- package/dist/tera-i18n/projects/cv-maker/messages/es-419.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/es-AR.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/es-ES.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/es-MX.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/es.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/fi.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/fr-MA.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/fr.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/he.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/hi.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/hr.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/hu.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/id.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/it.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/ja.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/ko.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/lt.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/lv.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/ms-MY.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/ms.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/nl.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/no.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/pl.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/pt-BR.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/pt-PT.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/messages/pt.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/ro.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/ru.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/sk.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/sl.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/sq.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/sr.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/sv.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/sw.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/ta.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/te.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/th.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/tl.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/tr.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/uk.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/vi.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/zh-CN.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/zh-TW.json +0 -95
- package/dist/tera-i18n/projects/cv-maker/messages/zh.json +0 -94
- package/dist/tera-i18n/projects/cv-maker/project.inlang/settings.json +0 -84
- package/dist/tera-i18n/projects/cv-maker/supported-language.d.ts +0 -1
- package/dist/tera-i18n/projects/cv-maker/supported-language.js +0 -81
- package/dist/tera-i18n/projects/mathda/messages/en.json +0 -4
- package/dist/tera-i18n/projects/mathda/messages/vi.json +0 -4
- package/dist/tera-i18n/projects/mathda/project.inlang/settings.json +0 -15
- package/dist/tera-i18n/projects/mathda/supported-language.d.ts +0 -1
- package/dist/tera-i18n/projects/mathda/supported-language.js +0 -4
- package/dist/tera-i18n/projects/tera-calculator/messages/bg.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/bn.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/ca.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/cs.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/da.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/de.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/el.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/en-IN.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/en-PH.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/en-US.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/en.json +0 -189
- package/dist/tera-i18n/projects/tera-calculator/messages/es.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/fi.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/fr.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/hi.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/hu.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/id.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/it.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/ja.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/ko.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/lt.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/lv.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/ms.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/nl.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/no.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/pl.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/pt.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/ro.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/ru.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/sk.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/sl.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/sq.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/sr.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/sv.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/sw.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/ta.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/te.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/th.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/tl.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/tr.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/uk.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/vi.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/zh-CN.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/messages/zh-TW.json +0 -183
- package/dist/tera-i18n/projects/tera-calculator/project.inlang/settings.json +0 -57
- package/dist/tera-i18n/projects/tera-calculator/supported-language.d.ts +0 -1
- package/dist/tera-i18n/projects/tera-calculator/supported-language.js +0 -48
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/de.json +0 -1876
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/en.json +0 -1876
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/es.json +0 -1876
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/fr.json +0 -1876
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/it.json +0 -1876
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/ja.json +0 -1876
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/ko.json +0 -1876
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/pt.json +0 -1876
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/ru.json +0 -1876
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/vi.json +0 -1876
- package/dist/tera-i18n/projects/tera-converter/messages/auto-generated/zh-CN.json +0 -1876
- package/dist/tera-i18n/projects/tera-converter/messages/de.json +0 -41
- package/dist/tera-i18n/projects/tera-converter/messages/en.json +0 -42
- package/dist/tera-i18n/projects/tera-converter/messages/es.json +0 -41
- package/dist/tera-i18n/projects/tera-converter/messages/fr.json +0 -41
- package/dist/tera-i18n/projects/tera-converter/messages/it.json +0 -41
- package/dist/tera-i18n/projects/tera-converter/messages/ja.json +0 -41
- package/dist/tera-i18n/projects/tera-converter/messages/ko.json +0 -41
- package/dist/tera-i18n/projects/tera-converter/messages/pt.json +0 -41
- package/dist/tera-i18n/projects/tera-converter/messages/ru.json +0 -41
- package/dist/tera-i18n/projects/tera-converter/messages/vi.json +0 -41
- package/dist/tera-i18n/projects/tera-converter/messages/zh-CN.json +0 -41
- package/dist/tera-i18n/projects/tera-converter/project.inlang/project_id +0 -1
- package/dist/tera-i18n/projects/tera-converter/project.inlang/settings.json +0 -27
- package/dist/tera-i18n/projects/tera-converter/supported-language.d.ts +0 -1
- package/dist/tera-i18n/projects/tera-converter/supported-language.js +0 -13
- package/dist/tera-i18n/projects/tera-system-ui/messages/ar.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/bg.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/bn.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/ca.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/cs.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/da.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/de.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/el.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/en.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/es.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/fi.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/fr.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/he.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/hi.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/hu.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/id.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/it.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/ja.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/ko.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/lt.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/lv.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/ms.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/nl.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/no.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/pl.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/pt.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/ro.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/ru.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/sk.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/sl.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/sq.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/sr.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/sv.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/sw.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/ta.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/te.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/th.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/tl.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/tr.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/uk.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/vi.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/zh-CN.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/messages/zh-TW.json +0 -10
- package/dist/tera-i18n/projects/tera-system-ui/project.inlang/settings.json +0 -59
- package/dist/tera-i18n/projects/tera-system-ui/supported-language.d.ts +0 -1
- package/dist/tera-i18n/projects/tera-system-ui/supported-language.js +0 -45
- package/dist/tera-i18n/projects/tera-tools/messages/ar.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/bg.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/bn.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/ca.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/cs.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/da.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/de.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/el.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/en.json +0 -96
- package/dist/tera-i18n/projects/tera-tools/messages/es.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/fi.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/fr.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/he.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/hi.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/hu.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/id.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/it.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/ja.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/ko.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/lt.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/lv.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/ms.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/nl.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/no.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/pl.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/pt.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/ro.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/ru.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/sk.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/sl.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/sq.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/sr.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/sv.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/sw.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/ta.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/te.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/th.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/tl.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/tr.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/uk.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/vi.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/zh-CN.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/messages/zh-TW.json +0 -70
- package/dist/tera-i18n/projects/tera-tools/project.inlang/project_id +0 -1
- package/dist/tera-i18n/projects/tera-tools/project.inlang/settings.json +0 -61
- package/dist/tera-i18n/projects/tera-tools/supported-language.d.ts +0 -1
- package/dist/tera-i18n/projects/tera-tools/supported-language.js +0 -45
- package/dist/themes/theme-ai.css +0 -100
- package/dist/themes/theme-marketing.css +0 -91
- /package/dist/{components → internal}/icons/IconCheck.svelte.d.ts +0 -0
- /package/dist/{components → internal}/icons/IconChevronDown.svelte.d.ts +0 -0
- /package/dist/{components → internal}/icons/IconSearch.svelte.d.ts +0 -0
- /package/dist/{components → internal}/icons/IconX.svelte.d.ts +0 -0
- /package/dist/{components → internal}/icons/Icons.d.ts +0 -0
- /package/dist/{components → internal}/icons/Icons.js +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://tera-system-ui/registry-item.schema.json",
|
|
3
|
+
"name": "date-range-picker",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"description": "",
|
|
6
|
+
"recipe": "src/lib/components/date-range-picker/DateRangePicker.recipe.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
{
|
|
9
|
+
"path": "src/lib/components/date-range-picker/DateRangePicker.recipe.ts",
|
|
10
|
+
"target": "DateRangePicker.recipe.ts",
|
|
11
|
+
"type": "recipe",
|
|
12
|
+
"content": "import {tv, type VariantProps} from \"tailwind-variants\";\nimport type {Snippet} from \"svelte\";\nimport type {CalendarDate} from \"@internationalized/date\";\n\n/**\n * DateRangePicker recipe — the canonical styled layer for the base design language.\n *\n * Composite component (built on bits-ui RangeCalendar + Popover + DateRangeField,\n * with the mobile branch wrapped in the Tera Dialog). The recipe is slotted by\n * role so an app can restyle any region independently:\n * trigger / field / segment / iconBtn — the input row;\n * panel — the popover surface;\n * navBtn / monthLabel / weekday / cell / day — the calendar grid;\n * presetSidebar / presetHeading / presetItem / presetPill — quick-select;\n * timeBar / timeLabel / timeArrow / timeInput — the optional time pickers;\n * footer / footerReset / footerApply — the action row;\n * dialogHeader / dialogTitle / pillBar — the mobile sheet chrome.\n *\n * The hardcoded glyphs are exposed as snippet seams on the component\n * (calendarIcon / clearIcon / prevIcon / nextIcon / closeIcon).\n *\n * Primary customization surface: extend with `tv({ extend: dateRangePickerRecipe,\n * ... })` in typed code. Lighter rung: the per-component CSS vars\n * (--tera-date-range-picker-radius on the trigger, --tera-date-range-picker-panel-radius\n * on the panel) let a theme retune corner radius with no code change; they default\n * to global axis tokens via inline fallbacks. See docs/ARCHITECTURE.md for worked\n * examples (kept out of this JSDoc so the llms doc generator doesn't grep its tokens).\n */\nexport const dateRangePickerRecipe = tv({\n slots: {\n // ── Trigger (input row) ───────────────────────────────────────────\n trigger: `inline-flex items-center gap-2 h-[var(--tera-control-height-md)] px-[var(--tera-control-px-md)] rounded-[var(--tera-date-range-picker-radius,var(--tera-radius-base))] text-sm w-full\n border border-border-default bg-surface-control\n focus-within:border-interactive-hover focus-within:shadow-focus\n data-[state=open]:border-interactive-hover data-[state=open]:shadow-focus\n transition-[border-color,box-shadow] ease-ui duration-[var(--tera-duration-fast)]\n cursor-text`,\n field: 'drp-field flex items-center gap-0.5 min-w-0 flex-1',\n segment: `inline-block rounded-sm px-0.5 text-sm tabular-nums caret-transparent select-none outline-none\n text-text-primary\n data-[placeholder]:text-text-tertiary\n focus:bg-interactive-subtle focus:text-interactive-text`,\n iconBtn: `inline-flex items-center justify-center size-6 rounded shrink-0 cursor-pointer\n text-text-tertiary hover:bg-surface-hover hover:text-text-primary\n transition-colors ease-ui duration-[var(--tera-duration-micro)]`,\n\n // ── Panel (popover surface) ───────────────────────────────────────\n panel: `z-50 overflow-hidden bg-surface rounded-[var(--tera-date-range-picker-panel-radius,var(--border-radius-container))] border border-border-default shadow-lg\n animate-in fade-in zoom-in-95 duration-[var(--tera-duration-fast)]\n data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=closed]:zoom-out-95`,\n\n // ── Calendar grid ─────────────────────────────────────────────────\n navBtn: `inline-flex items-center justify-center size-7 rounded-md text-text-tertiary\n hover:bg-surface-hover hover:text-text-primary\n transition-colors ease-ui duration-[var(--tera-duration-micro)]\n disabled:opacity-30 disabled:pointer-events-none`,\n monthLabel: 'text-sm font-medium text-text-primary whitespace-nowrap',\n weekday: 'w-9 h-8 text-xs font-medium text-text-tertiary flex items-center justify-center',\n cell: 'relative size-9 p-0 text-center',\n day: `inline-flex items-center justify-center size-full rounded-md text-sm cursor-pointer select-none\n transition-colors ease-ui duration-[var(--tera-duration-micro)]\n hover:bg-surface-hover text-text-primary\n data-[outside-month]:opacity-0 data-[outside-month]:pointer-events-none\n data-[today]:ring-1 data-[today]:ring-inset data-[today]:ring-border-default\n data-[selected]:bg-primary-600 data-[selected]:text-white data-[selected]:hover:bg-primary-500 data-[selected]:ring-0\n data-[range-middle]:bg-interactive-subtle data-[range-middle]:text-interactive-text data-[range-middle]:rounded-none data-[range-middle]:hover:bg-interactive-border\n data-[range-start]:rounded-r-none\n data-[range-end]:rounded-l-none\n data-[disabled]:opacity-30 data-[disabled]:pointer-events-none\n data-[unavailable]:opacity-30 data-[unavailable]:pointer-events-none`,\n\n // ── Quick-select presets ──────────────────────────────────────────\n presetSidebar: 'border-r border-border-default p-2 flex flex-col gap-0.5 w-36 shrink-0',\n presetHeading: 'px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-text-tertiary',\n presetItem: `w-full text-left px-2 py-1.5 rounded text-sm cursor-pointer\n transition-colors ease-ui duration-[var(--tera-duration-micro)]`,\n presetPill: `shrink-0 px-2.5 py-1 rounded-full text-xs border cursor-pointer whitespace-nowrap\n transition-colors ease-ui duration-[var(--tera-duration-micro)]`,\n\n // ── Time pickers ──────────────────────────────────────────────────\n timeBar: 'border-t border-border-default px-4 py-3 flex items-center gap-2',\n timeLabelStart: 'text-xs font-medium text-text-tertiary w-9 shrink-0',\n timeLabelEnd: 'text-xs font-medium text-text-tertiary w-6 shrink-0',\n timeArrow: 'text-text-tertiary mx-1 shrink-0',\n timeInput: `h-7 px-2 text-sm text-text-primary border border-border-default rounded-md bg-surface-control\n focus:border-interactive-hover focus:shadow-focus outline-none\n transition-[border-color,box-shadow] ease-ui duration-[var(--tera-duration-fast)]`,\n\n // ── Footer (action row) ───────────────────────────────────────────\n footer: 'border-t border-border-default px-4 py-3 flex items-center justify-between gap-3',\n footerReset: `inline-flex items-center h-8 px-3 text-sm rounded-md cursor-pointer shadow-xs\n border border-border-default bg-surface-control text-text-primary\n hover:bg-surface-raised hover:border-border-strong active:bg-surface-sunken\n transition-[background-color,border-color,color] ease-ui duration-[var(--tera-duration-fast)]`,\n footerApply: `inline-flex items-center h-8 px-4 text-sm rounded-md cursor-pointer\n bg-primary-600 text-white border border-primary-600\n hover:bg-primary-500 hover:border-primary-500\n disabled:opacity-40 disabled:cursor-not-allowed disabled:pointer-events-none\n transition-[background-color,border-color,opacity] ease-ui duration-[var(--tera-duration-fast)]`,\n\n // ── Mobile sheet chrome ───────────────────────────────────────────\n dialogHeader: 'flex items-center justify-between px-4 py-3 border-b border-border-default shrink-0',\n dialogTitle: 'text-sm font-semibold text-text-primary',\n pillBar: 'flex gap-1.5 px-3 py-2.5 overflow-x-auto border-b border-border-default shrink-0',\n },\n variants: {\n // Toggles the active highlight on a quick-select sidebar entry.\n presetActive: {\n true: {presetItem: 'bg-interactive/10 text-interactive font-medium'},\n false: {presetItem: 'text-text-primary hover:bg-surface-hover'},\n },\n // Toggles the active highlight on a mobile quick-select pill.\n pillActive: {\n true: {presetPill: 'bg-interactive/10 text-interactive border-interactive font-medium'},\n false: {presetPill: 'border-border-default text-text-secondary hover:border-interactive hover:text-interactive'},\n },\n // Disabled state on the trigger row.\n disabled: {\n true: {trigger: 'opacity-50 pointer-events-none'},\n },\n },\n});\n\nexport type DateRangePickerRecipeProps = VariantProps<typeof dateRangePickerRecipe>;\n\n/**\n * @component DateRangePicker - Date range picker with quick-select presets, optional time support, and popover/drawer UI.\n * Built on BitsUI RangeCalendar and Popover primitives.\n */\nexport interface DateRangePickerProps {\n /** The currently selected date range as a two-element array [start, end]. Bindable. */\n dateRange?: Date[];\n /** Called when the user applies a new date range. */\n onchange?: (date: Date[]) => void;\n /** When true, shows hour and minute pickers alongside the calendar. */\n enableTime?: boolean;\n /** Placeholder text shown in the trigger when no range is selected. */\n placeholder?: string;\n /** Prevents all interaction. */\n disabled?: boolean;\n /** Additional CSS classes for the trigger button. */\n class?: string;\n /**\n * Earliest selectable date.\n * Use `import { CalendarDate } from '@internationalized/date'` to construct values.\n */\n minValue?: CalendarDate;\n /**\n * Latest selectable date.\n * Use `import { CalendarDate } from '@internationalized/date'` to construct values.\n */\n maxValue?: CalendarDate;\n /** Returns true for dates that should be shown as disabled and unselectable. */\n isDateDisabled?: (date: CalendarDate) => boolean;\n /** Number of calendar months shown side-by-side (desktop only). Defaults to 2. */\n numberOfMonths?: 1 | 2;\n /**\n * Day of the week the calendar grid starts on.\n * 0 = Sunday, 1 = Monday, … 6 = Saturday.\n */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /** Replace the calendar (trigger) icon with custom markup (structural seam). */\n calendarIcon?: Snippet;\n /** Replace the clear (×) icon with custom markup (structural seam). */\n clearIcon?: Snippet;\n /** Replace the previous-month chevron with custom markup (structural seam). */\n prevIcon?: Snippet;\n /** Replace the next-month chevron with custom markup (structural seam). */\n nextIcon?: Snippet;\n /** Replace the mobile dialog close (×) icon with custom markup (structural seam). */\n closeIcon?: Snippet;\n}\n"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"path": "src/lib/components/date-range-picker/DateRangePicker.svelte",
|
|
16
|
+
"target": "DateRangePicker.svelte",
|
|
17
|
+
"type": "svelte",
|
|
18
|
+
"content": "<script lang=\"ts\">\n import type {DateRange} from 'bits-ui';\n import {DateRangeField, Popover as PopoverPrimitive, RangeCalendar as CalendarPrimitive} from 'bits-ui';\n import {CalendarDate} from '@internationalized/date';\n import IconCalendar from \"@tabler/icons-svelte/icons/calendar\";\n import IconChevronLeft from \"@tabler/icons-svelte/icons/chevron-left\";\n import IconChevronRight from \"@tabler/icons-svelte/icons/chevron-right\";\n import {IconX} from '$lib/internal/icons';\n import {cn} from '$lib/utils/utils.js';\n import {untrack} from 'svelte';\n import {innerWidth} from 'svelte/reactivity/window';\n import {Dialog} from '$lib/components/dialog/index.js';\n import {dateRangePickerRecipe, type DateRangePickerProps} from './DateRangePicker.recipe.js';\n\n let {\n dateRange = $bindable([]),\n onchange,\n enableTime = false,\n placeholder = 'Select date range',\n disabled = false,\n class: className,\n minValue,\n maxValue,\n isDateDisabled,\n numberOfMonths: numberOfMonthsProp,\n weekStartsOn,\n calendarIcon,\n clearIcon,\n prevIcon,\n nextIcon,\n closeIcon,\n }: DateRangePickerProps = $props();\n\n const styles = dateRangePickerRecipe();\n\n const isDesktop = $derived((innerWidth.current ?? 768) >= 768);\n\n let open = $state(false);\n\n // ── Date-field value: drives DateRangeField segments ──────────────────\n function toCalendarDate(date: Date): CalendarDate {\n return new CalendarDate(date.getFullYear(), date.getMonth() + 1, date.getDate());\n }\n\n function fromCalendarDate(date: CalendarDate, timeStr: string): Date {\n const [h, m] = timeStr.split(':').map(Number);\n return new Date(date.year, date.month - 1, date.day, h, m);\n }\n\n const [initD0, initD1] = dateRange;\n let fieldValue = $state<DateRange>({\n start: initD0 ? toCalendarDate(initD0) : undefined,\n end: initD1 ? toCalendarDate(initD1) : undefined,\n });\n\n // ── Pending: temporary calendar state while picker is open ────────────\n let pendingRange = $state<DateRange>({start: undefined, end: undefined});\n let startTime = $state('00:00');\n let endTime = $state('23:59');\n // Derived: highlight whichever quick-select preset matches the current\n // pendingRange (works for manual picks, quick-select clicks, and pre-set values).\n const activeQuickSelect = $derived.by((): string | null => {\n if (!pendingRange.start || !pendingRange.end) return null;\n const ps = pendingRange.start as CalendarDate;\n const pe = pendingRange.end as CalendarDate;\n for (const {key} of quickRanges) {\n const {start, end} = getQuickRange(key);\n if (ps.compare(toCalendarDate(start)) === 0 &&\n pe.compare(toCalendarDate(end)) === 0) {\n return key;\n }\n }\n return null;\n });\n\n const hasRange = $derived(dateRange.length >= 2);\n const canApply = $derived(!!pendingRange.start && !!pendingRange.end);\n\n // ── Field direct-edit handler ─────────────────────────────────────────\n function handleFieldChange(range: DateRange | undefined) {\n if (!range) return;\n fieldValue = range;\n if (range.start && range.end) {\n const result: Date[] = [\n fromCalendarDate(range.start as CalendarDate, enableTime ? startTime : '00:00'),\n fromCalendarDate(range.end as CalendarDate, enableTime ? endTime : '23:59'),\n ];\n dateRange = result;\n onchange?.(result);\n } else if (!range.start && !range.end && dateRange.length > 0) {\n dateRange = [];\n onchange?.([]);\n }\n }\n\n // ── Picker open: copy fieldValue → pendingRange ───────────────────────\n function initPendingState() {\n pendingRange = {start: fieldValue.start, end: fieldValue.end};\n const [d0, d1] = dateRange;\n if (enableTime && d0 && d1) {\n const sh = d0.getHours(), sm = d0.getMinutes();\n const eh = d1.getHours(), em = d1.getMinutes();\n startTime = `${String(sh).padStart(2, '0')}:${String(sm).padStart(2, '0')}`;\n endTime = `${String(eh).padStart(2, '0')}:${String(em).padStart(2, '0')}`;\n } else {\n startTime = '00:00';\n endTime = '23:59';\n }\n }\n\n $effect(() => {\n if (open) untrack(initPendingState);\n });\n\n // ── Apply / Reset ─────────────────────────────────────────────────────\n function applyRange() {\n if (!pendingRange.start || !pendingRange.end) return;\n const start = pendingRange.start as CalendarDate;\n const end = pendingRange.end as CalendarDate;\n fieldValue = {start, end};\n const result: Date[] = [\n fromCalendarDate(start, enableTime ? startTime : '00:00'),\n fromCalendarDate(end, enableTime ? endTime : '23:59'),\n ];\n dateRange = result;\n onchange?.(result);\n open = false;\n }\n\n function resetRange() {\n fieldValue = {start: undefined, end: undefined};\n dateRange = [];\n onchange?.([]);\n open = false;\n }\n\n // ── Quick select ──────────────────────────────────────────────────────\n function applyQuickSelect(key: string) {\n const {start, end} = getQuickRange(key);\n pendingRange = {start: toCalendarDate(start), end: toCalendarDate(end)};\n }\n\n function getQuickRange(key: string): { start: Date; end: Date } {\n const now = new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n switch (key) {\n case 'today':\n return {start: new Date(today), end: new Date(today)};\n case 'yesterday': {\n const y = new Date(today);\n y.setDate(today.getDate() - 1);\n return {start: y, end: new Date(y)};\n }\n case 'thisWeek': {\n const dow = today.getDay();\n const mon = new Date(today);\n mon.setDate(today.getDate() - (dow === 0 ? 6 : dow - 1));\n return {start: mon, end: new Date(today)};\n }\n case 'last7': {\n const s = new Date(today);\n s.setDate(today.getDate() - 6);\n return {start: s, end: new Date(today)};\n }\n case 'last30': {\n const s = new Date(today);\n s.setDate(today.getDate() - 29);\n return {start: s, end: new Date(today)};\n }\n case 'thisMonth':\n return {\n start: new Date(today.getFullYear(), today.getMonth(), 1),\n end: new Date(today.getFullYear(), today.getMonth() + 1, 0)\n };\n case 'lastMonth':\n return {\n start: new Date(today.getFullYear(), today.getMonth() - 1, 1),\n end: new Date(today.getFullYear(), today.getMonth(), 0)\n };\n case 'thisQuarter': {\n const q = Math.floor(today.getMonth() / 3);\n return {\n start: new Date(today.getFullYear(), q * 3, 1),\n end: new Date(today.getFullYear(), q * 3 + 3, 0)\n };\n }\n case 'last3Months':\n return {\n start: new Date(today.getFullYear(), today.getMonth() - 3, today.getDate()),\n end: new Date(today)\n };\n default:\n return {start: new Date(today), end: new Date(today)};\n }\n }\n\n const quickRanges = [\n {key: 'today', label: 'Today'},\n {key: 'yesterday', label: 'Yesterday'},\n {key: 'thisWeek', label: 'This week'},\n {key: 'last7', label: 'Last 7 days'},\n {key: 'last30', label: 'Last 30 days'},\n {key: 'thisMonth', label: 'This month'},\n {key: 'lastMonth', label: 'Last month'},\n {key: 'thisQuarter', label: 'This quarter'},\n {key: 'last3Months', label: 'Last 3 months'},\n ];\n\n // ── Styles (recipe-driven) ────────────────────────────────────────────\n const triggerStyles = $derived(styles.trigger({disabled}));\n const iconBtnStyles = styles.iconBtn();\n const segmentStyles = styles.segment();\n const dayStyles = styles.day();\n const popoverContentStyles = styles.panel();\n</script>\n\n<!-- ─── Shared snippets ──────────────────────────────────────────────────── -->\n\n{#snippet dateField()}\n <DateRangeField.Root\n bind:value={fieldValue}\n onValueChange={handleFieldChange}\n {disabled}\n class={styles.field()}\n >\n <DateRangeField.Input type=\"start\" class=\"flex items-center gap-0\">\n {#snippet children({segments})}\n {#each segments as {part, value}, si (si)}\n {#if part === 'literal'}\n <span class=\"text-text-tertiary text-sm select-none\">{value}</span>\n {:else}\n <DateRangeField.Segment {part} class={segmentStyles}>{value}</DateRangeField.Segment>\n {/if}\n {/each}\n {/snippet}\n </DateRangeField.Input>\n\n <span class=\"text-text-tertiary text-sm mx-1.5 select-none shrink-0\">–</span>\n\n <DateRangeField.Input type=\"end\" class=\"flex items-center gap-0\">\n {#snippet children({segments})}\n {#each segments as {part, value}, si (si)}\n {#if part === 'literal'}\n <span class=\"text-text-tertiary text-sm select-none\">{value}</span>\n {:else}\n <DateRangeField.Segment {part} class={segmentStyles}>{value}</DateRangeField.Segment>\n {/if}\n {/each}\n {/snippet}\n </DateRangeField.Input>\n </DateRangeField.Root>\n{/snippet}\n\n{#snippet calendarGrid(numberOfMonths: number)}\n <CalendarPrimitive.Root\n bind:value={pendingRange}\n {numberOfMonths}\n weekdayFormat=\"short\"\n fixedWeeks\n {minValue}\n {maxValue}\n isDateDisabled={isDateDisabled ? (d) => isDateDisabled(d as CalendarDate) : undefined}\n weekStartsOn={weekStartsOn}\n >\n {#snippet children({months, weekdays})}\n <div class={cn('flex justify-center', numberOfMonths > 1 && 'gap-6')}>\n {#each months as month, i (month.value.toString())}\n <div class=\"flex flex-col gap-2\">\n <!-- Month heading -->\n <div class=\"flex items-center justify-between gap-2\">\n {#if i === 0}\n <CalendarPrimitive.PrevButton class={styles.navBtn()}>\n {#if prevIcon}{@render prevIcon()}{:else}\n <IconChevronLeft class=\"size-4\"/>\n {/if}\n </CalendarPrimitive.PrevButton>\n {:else}\n <div class=\"size-7 shrink-0\"></div>\n {/if}\n\n <span class={styles.monthLabel()}>\n {new Date(month.value.year, month.value.month - 1)\n .toLocaleDateString('en-US', {month: 'long', year: 'numeric'})}\n </span>\n\n {#if i === months.length - 1}\n <CalendarPrimitive.NextButton class={styles.navBtn()}>\n {#if nextIcon}{@render nextIcon()}{:else}\n <IconChevronRight class=\"size-4\"/>\n {/if}\n </CalendarPrimitive.NextButton>\n {:else}\n <div class=\"size-7 shrink-0\"></div>\n {/if}\n </div>\n\n <!-- Grid -->\n <CalendarPrimitive.Grid class=\"w-full border-collapse\">\n <CalendarPrimitive.GridHead>\n <CalendarPrimitive.GridRow class=\"flex\">\n {#each weekdays as day (day)}\n <CalendarPrimitive.HeadCell class={styles.weekday()}>\n {day}\n </CalendarPrimitive.HeadCell>\n {/each}\n </CalendarPrimitive.GridRow>\n </CalendarPrimitive.GridHead>\n <CalendarPrimitive.GridBody>\n {#each month.weeks as weekDates, wi (wi)}\n <CalendarPrimitive.GridRow class=\"flex mt-0.5\">\n {#each weekDates as date (date.toString())}\n <CalendarPrimitive.Cell\n {date}\n month={month.value}\n class={styles.cell()}\n >\n <CalendarPrimitive.Day class={dayStyles}/>\n </CalendarPrimitive.Cell>\n {/each}\n </CalendarPrimitive.GridRow>\n {/each}\n </CalendarPrimitive.GridBody>\n </CalendarPrimitive.Grid>\n </div>\n {/each}\n </div>\n {/snippet}\n </CalendarPrimitive.Root>\n{/snippet}\n\n{#snippet timePickers()}\n <div class={styles.timeBar()}>\n <span class={styles.timeLabelStart()}>Start</span>\n <input\n type=\"time\"\n bind:value={startTime}\n class={styles.timeInput()}\n />\n <span class={styles.timeArrow()}>→</span>\n <span class={styles.timeLabelEnd()}>End</span>\n <input\n type=\"time\"\n bind:value={endTime}\n class={styles.timeInput()}\n />\n </div>\n{/snippet}\n\n{#snippet pickerFooter()}\n <div class={styles.footer()}>\n <button\n class={styles.footerReset()}\n onclick={resetRange}\n >\n Reset\n </button>\n <button\n disabled={!canApply}\n class={styles.footerApply()}\n onclick={applyRange}\n >\n Apply\n </button>\n </div>\n{/snippet}\n\n<!-- ─── Root ─────────────────────────────────────────────────────────────── -->\n\n<div class={cn('inline-flex w-full', className)}>\n {#if isDesktop}\n <!-- ── DESKTOP: Popover anchored to the whole trigger container ── -->\n <PopoverPrimitive.Root bind:open>\n <PopoverPrimitive.Trigger class={triggerStyles}>\n {#snippet child({props: triggerProps})}\n <!--\n Intercept clicks: only toggle the popover when clicking\n outside the date-field area (calendar icon, empty space).\n -->\n <div\n {...triggerProps}\n onclick={(e) => {\n if (!(e.target as HTMLElement).closest('.drp-field')) {\n (triggerProps.onclick as EventListener | undefined)?.(e);\n }\n }}\n class={triggerStyles}\n >\n {@render dateField()}\n\n <div class=\"flex items-center gap-1 shrink-0 ml-1\">\n {#if calendarIcon}{@render calendarIcon()}{:else}\n <IconCalendar class=\"size-4 text-text-tertiary pointer-events-none\"/>\n {/if}\n {#if hasRange}\n <button\n type=\"button\"\n class={iconBtnStyles}\n aria-label=\"Clear date range\"\n onclick={(e) => { e.stopPropagation(); resetRange(); }}\n >\n {#if clearIcon}{@render clearIcon()}{:else}\n <IconX class=\"size-3\"/>\n {/if}\n </button>\n {/if}\n </div>\n </div>\n {/snippet}\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content sideOffset={4} align=\"start\" class={popoverContentStyles}>\n <div class=\"flex\">\n <!-- Quick-select sidebar -->\n <div class={styles.presetSidebar()}>\n <p class={styles.presetHeading()}>\n Quick Select\n </p>\n {#each quickRanges as range (range.key)}\n <button\n class={styles.presetItem({presetActive: activeQuickSelect === range.key})}\n onclick={() => applyQuickSelect(range.key)}\n >\n {range.label}\n </button>\n {/each}\n </div>\n\n <!-- Calendar + time + footer -->\n <div class=\"flex flex-col min-w-0\">\n <div class=\"p-4\">\n {@render calendarGrid(numberOfMonthsProp ?? 2)}\n </div>\n {#if enableTime}{@render timePickers()}{/if}\n {@render pickerFooter()}\n </div>\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n\n {:else}\n <!-- ── MOBILE: plain trigger → Dialog (bottom-sheet style) ─────── -->\n <div class={triggerStyles}>\n {@render dateField()}\n\n <div class=\"flex items-center gap-1 shrink-0 ml-1\">\n <button\n class={iconBtnStyles}\n aria-label=\"Open date picker\"\n onclick={() => (open = true)}\n >\n {#if calendarIcon}{@render calendarIcon()}{:else}\n <IconCalendar class=\"size-4\"/>\n {/if}\n </button>\n {#if hasRange}\n <button class={iconBtnStyles} aria-label=\"Clear date range\" onclick={resetRange}>\n {#if clearIcon}{@render clearIcon()}{:else}\n <IconX class=\"size-3\"/>\n {/if}\n </button>\n {/if}\n </div>\n </div>\n\n <Dialog bind:open size=\"sm\" closeButton={false} padding=\"none\">\n <div class=\"flex flex-col\">\n <!-- Dialog header -->\n <div class={styles.dialogHeader()}>\n <span class={styles.dialogTitle()}>Select Date Range</span>\n <button class={iconBtnStyles} aria-label=\"Close\" onclick={() => (open = false)}>\n {#if closeIcon}{@render closeIcon()}{:else}\n <IconX class=\"size-4\"/>\n {/if}\n </button>\n </div>\n\n <!-- Horizontal quick-select pills -->\n <div class={styles.pillBar()}\n style=\"scrollbar-width:none;-ms-overflow-style:none;\">\n {#each quickRanges as range (range.key)}\n <button\n class={styles.presetPill({pillActive: activeQuickSelect === range.key})}\n onclick={() => applyQuickSelect(range.key)}\n >\n {range.label}\n </button>\n {/each}\n </div>\n\n <!-- Single-month calendar -->\n <div class=\"p-4 overflow-auto\">\n {@render calendarGrid(1)}\n </div>\n\n {#if enableTime}{@render timePickers()}{/if}\n {@render pickerFooter()}\n </div>\n </Dialog>\n {/if}\n</div>\n"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "src/lib/components/date-range-picker/index.ts",
|
|
22
|
+
"target": "index.ts",
|
|
23
|
+
"type": "ts",
|
|
24
|
+
"content": "export { default as DateRangePicker } from './DateRangePicker.svelte';\nexport { dateRangePickerRecipe } from './DateRangePicker.recipe.js';\nexport type { DateRangePickerProps, DateRangePickerRecipeProps } from './DateRangePicker.recipe.js';\n"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"dependencies": [
|
|
28
|
+
"bits-ui",
|
|
29
|
+
"@tabler/icons-svelte",
|
|
30
|
+
"@internationalized/date",
|
|
31
|
+
"tailwind-variants"
|
|
32
|
+
],
|
|
33
|
+
"peerDependencies": [
|
|
34
|
+
"svelte"
|
|
35
|
+
],
|
|
36
|
+
"registryDependencies": [
|
|
37
|
+
"dialog"
|
|
38
|
+
],
|
|
39
|
+
"sharedModules": {
|
|
40
|
+
"utils": true,
|
|
41
|
+
"icons": true,
|
|
42
|
+
"hooks": false
|
|
43
|
+
},
|
|
44
|
+
"exports": [
|
|
45
|
+
"DateRangePicker",
|
|
46
|
+
"dateRangePickerRecipe"
|
|
47
|
+
]
|
|
48
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://tera-system-ui/registry-item.schema.json",
|
|
3
|
+
"name": "dialog",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"description": "Modal dialog with header/footer slots and size variants.",
|
|
6
|
+
"recipe": "src/lib/components/dialog/Dialog.recipe.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
{
|
|
9
|
+
"path": "src/lib/components/dialog/Dialog.recipe.ts",
|
|
10
|
+
"target": "Dialog.recipe.ts",
|
|
11
|
+
"type": "recipe",
|
|
12
|
+
"content": "import {tv, type VariantProps} from \"tailwind-variants\";\nimport type {Snippet} from \"svelte\";\n\n/**\n * Dialog recipe — the canonical styled layer for the base design language.\n *\n * Multi-part component (built on bits-ui Dialog): the recipe is slotted by role\n * — overlay / content / close / header / body / footer — so an app can restyle\n * any region independently. The `content` slot carries the visual variants\n * (size, position, full-screen layout); `padding` tunes the container/body\n * insets. The hardcoded close glyph is exposed as a `closeIcon` snippet seam.\n *\n * Primary customization surface: extend with `tv({ extend: dialogRecipe, ... })`\n * in typed code. Lighter rung: the per-component CSS var (--tera-dialog-radius)\n * lets a theme retune corner radius with no code change; it defaults to the\n * global container-radius token via an inline fallback. See docs/ARCHITECTURE.md\n * for worked examples (kept out of this JSDoc so the llms doc generator doesn't\n * grep its tokens).\n */\nexport const dialogRecipe = tv({\n slots: {\n overlay: `fixed inset-0 z-50 bg-overlay backdrop-blur-[4px]\n animate-in fade-in duration-[var(--tera-duration-base)]\n data-[state=closed]:animate-out data-[state=closed]:fade-out\n data-[state=closed]:hidden`,\n content: `fixed z-50 w-full bg-surface shadow-lg border-border-default flex flex-col overflow-hidden\n animate-in fade-in zoom-in-95 duration-[var(--tera-duration-base)] ease-spring\n data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=closed]:zoom-out-95 data-[state=closed]:duration-[var(--tera-duration-base)]`,\n close: 'absolute right-2 top-2 z-10 size-8 flex items-center justify-center rounded hover:bg-surface-hover text-text-tertiary hover:text-text-primary transition-colors',\n container: 'grid grid-rows-[auto_1fr_auto] h-full overflow-hidden',\n header: 'font-display font-bold px-4 mb-2',\n body: 'overflow-auto',\n footer: 'mt-3 px-4 flex items-center justify-end gap-2.5',\n },\n variants: {\n size: {\n xs: {content: 'max-w-[min(24rem,calc(100vw-2rem))]'},\n sm: {content: 'max-w-[min(30rem,calc(100vw-2rem))]'},\n md: {content: 'max-w-[min(40rem,calc(100vw-2rem))]'},\n lg: {content: 'max-w-[min(50rem,calc(100vw-2rem))]'},\n full: {content: 'max-w-full w-screen rounded-none'},\n auto: {content: 'w-fit'},\n },\n // Position only applies on the non-full layout branch — see compoundVariants.\n position: {\n top: {},\n center: {},\n },\n full: {\n true: {content: 'inset-0 h-screen border-0'},\n false: {content: 'rounded-[var(--tera-dialog-radius,var(--border-radius-container))] max-h-[min(calc(100svh-2rem),55rem)]'},\n },\n padding: {\n none: {container: 'py-0', body: 'px-0'},\n normal: {container: 'py-4', body: 'px-4'},\n },\n },\n compoundVariants: [\n // The original markup only applies positioning on the non-full path; the\n // full-screen branch relies on `inset-0` instead.\n {full: false, position: 'top', class: {content: 'top-4 left-1/2 -translate-x-1/2'}},\n {full: false, position: 'center', class: {content: 'top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2'}},\n ],\n defaultVariants: {\n size: 'sm',\n position: 'center',\n full: false,\n padding: 'normal',\n },\n});\n\nexport type DialogRecipeProps = VariantProps<typeof dialogRecipe>;\n\n/**\n * @component Dialog - Modal dialog with header/footer snippet slots, size variants, and focus management.\n * Built on BitsUI Dialog primitive.\n */\nexport type DialogProps = {\n children?: Snippet;\n /** Snippet rendered in the dialog header area. */\n header?: Snippet;\n /** Snippet rendered in the dialog footer area. */\n footer?: Snippet;\n\n /** Whether the dialog is open. Bindable. */\n open?: boolean;\n /** Additional CSS classes for the dialog content panel. */\n class?: string;\n\n // Layout\n /** Controls the maximum width of the dialog panel. */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'full' | 'auto';\n /** Vertical alignment of the dialog on screen. */\n position?: 'top' | 'center';\n /** Set to 'none' to remove internal padding. */\n padding?: 'none' | undefined;\n\n // Behaviour\n /** Whether clicking the backdrop closes the dialog. */\n closeOnClickOutside?: boolean;\n /** Whether pressing the browser Back button closes the dialog. Default true. */\n closeOnNavigateBack?: boolean;\n /** Whether to render a close (×) button in the header. */\n closeButton?: boolean;\n /** Replace the default close (×) icon with custom markup (structural seam). */\n closeIcon?: Snippet;\n\n /**\n * When true the dialog DOM is kept alive after close — children preserve\n * internal state between open/close cycles.\n */\n staticRender?: boolean;\n\n /** Prevent the page from scrolling while the dialog is open. */\n preventScroll?: boolean;\n\n /** Called after the open or close animation has fully completed.\n * Note: This callback only fires when the internal component mutates the open state, not when the state is changed by outside)\n */\n onOpenChangeComplete?: (open: boolean) => void;\n\n /** Element to return focus to when the dialog closes. */\n triggerRef?: HTMLElement | null;\n /** Focus triggerRef after close (default true when triggerRef is provided). */\n focusTriggerAfterClose?: boolean;\n\n // Class overrides for sub-regions\n /** Additional classes applied to the outer container div. */\n containerClass?: string;\n /** Additional classes applied to the header region. */\n headerClass?: string;\n /** Additional classes applied to the body/content region. */\n bodyClass?: string;\n /** Additional classes applied to the footer region. */\n footerClass?: string;\n\n /** Bindable reference to the dialog content element. */\n ref?: HTMLElement | null;\n [key: string]: unknown;\n}\n\nexport type DialogPropsAstro = Omit<DialogProps, 'children' | 'open' | 'ref'>\n"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"path": "src/lib/components/dialog/dialog.scss",
|
|
16
|
+
"target": "dialog.scss",
|
|
17
|
+
"type": "style",
|
|
18
|
+
"content": ""
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "src/lib/components/dialog/Dialog.svelte",
|
|
22
|
+
"target": "Dialog.svelte",
|
|
23
|
+
"type": "svelte",
|
|
24
|
+
"content": "<script lang=\"ts\">\n import {Dialog as DialogPrimitive} from 'bits-ui';\n import {type DialogProps, dialogRecipe} from './Dialog.recipe';\n import {IconX} from '$lib/internal/icons';\n import {cn} from '$lib/utils/index.js';\n import {closeOnBackNavigation} from '$lib/hooks';\n\n let {\n children,\n open = $bindable(false),\n ref = $bindable(null),\n closeOnClickOutside = true,\n closeOnNavigateBack = true,\n closeButton = true,\n size = 'sm',\n header,\n footer,\n class: className,\n position = 'center',\n padding,\n staticRender = false,\n preventScroll,\n onOpenChangeComplete,\n triggerRef,\n focusTriggerAfterClose = true,\n containerClass,\n headerClass,\n bodyClass,\n footerClass,\n closeIcon,\n ...props\n }: DialogProps = $props();\n\n const isFull = $derived(size === 'full');\n\n const r = $derived(\n dialogRecipe({\n size,\n position,\n full: isFull,\n padding: padding === 'none' ? 'none' : 'normal',\n })\n );\n\n function handleCloseAutoFocus(e: Event) {\n if (triggerRef && focusTriggerAfterClose) {\n e.preventDefault();\n triggerRef.focus();\n }\n }\n\n closeOnBackNavigation({\n enabled: () => closeOnNavigateBack,\n isOpen: () => open,\n close: () => { open = false; },\n });\n</script>\n\n<DialogPrimitive.Root bind:open onOpenChangeComplete={onOpenChangeComplete}>\n <DialogPrimitive.Portal>\n <!-- Backdrop -->\n <DialogPrimitive.Overlay class={r.overlay()} />\n\n <!--\n We use the `child` snippet (bits-ui \"asChild\" pattern) so that bits-ui gates its\n internal <ScrollLock> on `open.current`. Without this, the `children` branch renders\n <ScrollLock> unconditionally — with forceMount the lock never releases, leaving\n `document.body { pointer-events:none; overflow:hidden }` active even when closed.\n -->\n <DialogPrimitive.Content\n bind:ref\n forceMount={staticRender || undefined}\n interactOutsideBehavior={closeOnClickOutside ? 'close' : 'ignore'}\n preventScroll={preventScroll}\n onCloseAutoFocus={handleCloseAutoFocus}\n {...props}\n >\n {#snippet child({ props: contentProps })}\n <div\n {...contentProps}\n inert={staticRender && !open ? true : undefined}\n class={cn(\n contentProps.class,\n r.content(),\n staticRender && 'data-[state=closed]:hidden',\n className\n )}\n >\n {#if closeButton}\n <DialogPrimitive.Close\n class={r.close()}\n aria-label=\"Close\"\n >\n {#if closeIcon}\n {@render closeIcon()}\n {:else}\n <IconX class=\"size-4\"/>\n {/if}\n </DialogPrimitive.Close>\n {/if}\n\n <div class={r.container({ class: containerClass })}>\n {#if header}\n <header class={r.header({ class: headerClass })}>\n {@render header()}\n </header>\n {/if}\n\n <main class={r.body({ class: bodyClass })}>\n {@render children?.()}\n </main>\n\n {#if footer}\n <footer class={r.footer({ class: footerClass })}>\n {@render footer()}\n </footer>\n {/if}\n </div>\n </div>\n {/snippet}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n</DialogPrimitive.Root>\n"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"path": "src/lib/components/dialog/index.ts",
|
|
28
|
+
"target": "index.ts",
|
|
29
|
+
"type": "ts",
|
|
30
|
+
"content": "export {default as Dialog} from './Dialog.svelte'\r\nexport {dialogRecipe} from './Dialog.recipe'\r\nexport type {DialogProps, DialogPropsAstro, DialogRecipeProps} from './Dialog.recipe'\r\n\r\n\r\n"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"dependencies": [
|
|
34
|
+
"bits-ui",
|
|
35
|
+
"tailwind-variants"
|
|
36
|
+
],
|
|
37
|
+
"peerDependencies": [
|
|
38
|
+
"svelte"
|
|
39
|
+
],
|
|
40
|
+
"registryDependencies": [],
|
|
41
|
+
"sharedModules": {
|
|
42
|
+
"utils": true,
|
|
43
|
+
"icons": true,
|
|
44
|
+
"hooks": true
|
|
45
|
+
},
|
|
46
|
+
"exports": [
|
|
47
|
+
"Dialog",
|
|
48
|
+
"dialogRecipe"
|
|
49
|
+
]
|
|
50
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://tera-system-ui/registry-item.schema.json",
|
|
3
|
+
"name": "drawer",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"description": "Edge-anchored sliding drawer.",
|
|
6
|
+
"recipe": "src/lib/components/drawer/Drawer.recipe.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
{
|
|
9
|
+
"path": "src/lib/components/drawer/Drawer.recipe.ts",
|
|
10
|
+
"target": "Drawer.recipe.ts",
|
|
11
|
+
"type": "recipe",
|
|
12
|
+
"content": "import {tv, type VariantProps} from \"tailwind-variants\";\nimport type {Snippet} from \"svelte\";\n\n/**\n * Drawer recipe — the canonical styled layer for the base design language.\n *\n * Multi-part slide-in panel (vaul-style sheet, custom behavior — not bits-ui):\n * the recipe is slotted by role — overlay / content / header / headerClose /\n * body / footer — so an app can restyle any part independently. The `side`\n * variant carries the edge it slides from (left / right / bottom) and its\n * slide-in animation; the `size` variant carries the panel width for the\n * vertical (left / right) edges.\n *\n * Primary customization surface: extend with `tv({ extend: drawerRecipe, ... })`\n * in typed code. Lighter rung: the per-component CSS var (--tera-drawer-radius)\n * lets a theme retune the bottom-sheet corner radius with no code change; it\n * defaults to the prior literal value inline. See docs/ARCHITECTURE.md for\n * worked examples (kept out of this JSDoc so the llms doc generator doesn't grep\n * its tokens).\n */\nexport const drawerRecipe = tv({\n slots: {\n overlay: 'fixed inset-0 z-40 bg-overlay backdrop-blur-[4px] animate-in fade-in duration-[var(--tera-duration-base)]',\n content: 'z-50 flex flex-col bg-surface shadow-lg border border-border-default animate-in duration-[var(--tera-duration-slow)] ease-spring',\n header: 'flex items-center justify-between px-5 py-4 border-b border-border-default shrink-0',\n headerClose: 'text-text-tertiary hover:text-text-primary transition-colors ml-auto',\n body: 'flex-1 overflow-y-auto p-5',\n footer: 'px-5 py-4 border-t border-border-default shrink-0',\n },\n variants: {\n side: {\n left: {content: 'fixed left-0 top-0 bottom-0 max-w-full slide-in-from-left'},\n right: {content: 'fixed right-0 top-0 bottom-0 max-w-full slide-in-from-right'},\n bottom: {content: 'fixed bottom-0 left-0 right-0 max-h-[85vh] rounded-t-[var(--tera-drawer-radius,20px)] slide-in-from-bottom'},\n },\n size: {\n sm: {content: 'w-[320px]'},\n md: {content: 'w-[480px]'},\n lg: {content: 'w-[640px]'},\n full: {content: 'w-[100%]'},\n },\n },\n compoundVariants: [\n // Width only applies to the vertical (left / right) edges; the bottom\n // sheet spans the full viewport width and ignores `size`.\n {side: 'bottom', class: {content: 'w-auto'}},\n ],\n defaultVariants: {\n side: 'right',\n size: 'md',\n },\n});\n\nexport type DrawerRecipeProps = VariantProps<typeof drawerRecipe>;\n\nexport interface DrawerProps extends DrawerRecipeProps {\n /** Whether the drawer is open. Bindable. */\n open?: boolean;\n /** Edge the panel slides in from. */\n side?: 'left' | 'right' | 'bottom';\n /** Panel width (left / right edges only): sm 320px, md 480px, lg 640px, full 100%. */\n size?: 'sm' | 'md' | 'lg' | 'full';\n /** Close the drawer when the backdrop is clicked or Escape is pressed. */\n closeOnClickOutside?: boolean;\n /** Header content; renders the header bar with a close button when set. */\n header?: Snippet;\n /** Footer content; renders the footer bar when set. */\n footer?: Snippet;\n /** Main body content. */\n children?: Snippet;\n /** Replace the default close (X) icon with custom markup (structural seam). */\n closeIcon?: Snippet;\n /** Called after the drawer closes. */\n onclose?: () => void;\n}\n"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"path": "src/lib/components/drawer/Drawer.svelte",
|
|
16
|
+
"target": "Drawer.svelte",
|
|
17
|
+
"type": "svelte",
|
|
18
|
+
"content": "<script lang=\"ts\">\n import {type DrawerProps, drawerRecipe} from './Drawer.recipe';\n\n let {\n open = $bindable(false),\n side = 'right',\n size = 'md',\n closeOnClickOutside = true,\n header,\n footer,\n children,\n closeIcon,\n onclose,\n }: DrawerProps = $props();\n\n const r = $derived(drawerRecipe({side, size}));\n\n function close() {\n open = false;\n onclose?.();\n }\n</script>\n\n{#if open}\n <!-- Backdrop -->\n <div\n role=\"presentation\"\n class={r.overlay()}\n onclick={() => closeOnClickOutside && close()}\n onkeydown={(e) => e.key === 'Escape' && closeOnClickOutside && close()}\n ></div>\n\n <!-- Drawer panel -->\n <div\n class={r.content()}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n {#if header}\n <header class={r.header()}>\n {@render header()}\n <button\n type=\"button\"\n onclick={close}\n class={r.headerClose()}\n aria-label=\"Close drawer\"\n >\n {#if closeIcon}\n {@render closeIcon()}\n {:else}\n <svg class=\"size-4\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M4 4l8 8M12 4l-8 8\"/>\n </svg>\n {/if}\n </button>\n </header>\n {/if}\n\n <main class={r.body()}>\n {@render children?.()}\n </main>\n\n {#if footer}\n <footer class={r.footer()}>\n {@render footer()}\n </footer>\n {/if}\n </div>\n{/if}\n"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "src/lib/components/drawer/index.ts",
|
|
22
|
+
"target": "index.ts",
|
|
23
|
+
"type": "ts",
|
|
24
|
+
"content": "export {default as Drawer} from './Drawer.svelte'\nexport {drawerRecipe, type DrawerRecipeProps, type DrawerProps} from './Drawer.recipe'\n"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"dependencies": [
|
|
28
|
+
"tailwind-variants"
|
|
29
|
+
],
|
|
30
|
+
"peerDependencies": [
|
|
31
|
+
"svelte"
|
|
32
|
+
],
|
|
33
|
+
"registryDependencies": [],
|
|
34
|
+
"sharedModules": {
|
|
35
|
+
"utils": false,
|
|
36
|
+
"icons": false,
|
|
37
|
+
"hooks": false
|
|
38
|
+
},
|
|
39
|
+
"exports": [
|
|
40
|
+
"Drawer",
|
|
41
|
+
"drawerRecipe",
|
|
42
|
+
"DrawerRecipeProps",
|
|
43
|
+
"DrawerProps"
|
|
44
|
+
]
|
|
45
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://tera-system-ui/registry-item.schema.json",
|
|
3
|
+
"name": "dropdown-menu",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"description": "Contextual dropdown menu.",
|
|
6
|
+
"recipe": "src/lib/components/dropdown-menu/DropdownMenu.recipe.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
{
|
|
9
|
+
"path": "src/lib/components/dropdown-menu/components/DropdownMenu.svelte",
|
|
10
|
+
"target": "components/DropdownMenu.svelte",
|
|
11
|
+
"type": "svelte",
|
|
12
|
+
"content": "<script lang=\"ts\">\n import {DropdownMenu as DropdownMenuPrimitive} from 'bits-ui';\n import {dropdownMenuRecipe, type DropdownMenuProps} from '../DropdownMenu.recipe';\n\n let {\n children,\n trigger,\n class: className,\n open = $bindable(false),\n side = 'bottom',\n sideOffset = 4,\n align = 'start',\n loop,\n preventScroll,\n ...props\n }: DropdownMenuProps = $props();\n\n const r = dropdownMenuRecipe();\n</script>\n\n<DropdownMenuPrimitive.Root bind:open>\n {#if trigger}\n <DropdownMenuPrimitive.Trigger>\n {#snippet child({ props: triggerProps })}\n <span {...triggerProps} class=\"inline-flex\">\n {@render trigger()}\n </span>\n {/snippet}\n </DropdownMenuPrimitive.Trigger>\n {/if}\n\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n {side}\n {sideOffset}\n {align}\n {loop}\n {preventScroll}\n {...props}\n class={r.content({ class: className })}\n >\n {@render children?.()}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n</DropdownMenuPrimitive.Root>\n"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"path": "src/lib/components/dropdown-menu/components/DropdownMenuGroup.svelte",
|
|
16
|
+
"target": "components/DropdownMenuGroup.svelte",
|
|
17
|
+
"type": "svelte",
|
|
18
|
+
"content": "<script lang=\"ts\">\n import {DropdownMenu as DropdownMenuPrimitive} from 'bits-ui';\n import {dropdownMenuRecipe, type DropdownMenuGroupProps} from '../DropdownMenu.recipe';\n\n let {children, class: className, ...props}: DropdownMenuGroupProps = $props();\n\n const r = dropdownMenuRecipe();\n</script>\n\n<DropdownMenuPrimitive.Group class={r.group({ class: className })} {...props}>\n {@render children?.()}\n</DropdownMenuPrimitive.Group>\n"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "src/lib/components/dropdown-menu/components/DropdownMenuHeader.svelte",
|
|
22
|
+
"target": "components/DropdownMenuHeader.svelte",
|
|
23
|
+
"type": "svelte",
|
|
24
|
+
"content": "<script lang=\"ts\">\n import {dropdownMenuRecipe, type DropdownMenuHeaderProps} from '../DropdownMenu.recipe';\n\n let {children, class: className, ...props}: DropdownMenuHeaderProps = $props();\n\n const r = dropdownMenuRecipe();\n</script>\n\n<div\n class={r.header({ class: className })}\n role=\"presentation\"\n {...props}\n>\n {@render children?.()}\n</div>\n"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"path": "src/lib/components/dropdown-menu/components/DropdownMenuItem.svelte",
|
|
28
|
+
"target": "components/DropdownMenuItem.svelte",
|
|
29
|
+
"type": "svelte",
|
|
30
|
+
"content": "<script lang=\"ts\">\n import {DropdownMenu as DropdownMenuPrimitive} from 'bits-ui';\n import {dropdownMenuRecipe, type DropdownMenuItemProps} from '../DropdownMenu.recipe';\n\n let {\n children,\n class: className,\n danger,\n disabled,\n onclick,\n href,\n closeOnSelect,\n textValue,\n ...props\n }: DropdownMenuItemProps = $props();\n\n const r = $derived(dropdownMenuRecipe({ danger }));\n\n function handleSelect() {\n onclick?.(new MouseEvent('click'));\n if (href) window.location.assign(href as string);\n }\n</script>\n\n<DropdownMenuPrimitive.Item\n {disabled}\n {textValue}\n closeOnSelect={closeOnSelect}\n onSelect={handleSelect}\n class={r.item({ class: className })}\n {...props}\n>\n {@render children?.()}\n</DropdownMenuPrimitive.Item>\n"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"path": "src/lib/components/dropdown-menu/components/DropdownMenuSeparator.svelte",
|
|
34
|
+
"target": "components/DropdownMenuSeparator.svelte",
|
|
35
|
+
"type": "svelte",
|
|
36
|
+
"content": "<script lang=\"ts\">\n import {DropdownMenu as DropdownMenuPrimitive} from 'bits-ui';\n import {dropdownMenuRecipe, type DropdownMenuSeparatorProps} from '../DropdownMenu.recipe';\n\n let {class: className, ...props}: DropdownMenuSeparatorProps = $props();\n\n const r = dropdownMenuRecipe();\n</script>\n\n<DropdownMenuPrimitive.Separator\n class={r.separator({ class: className })}\n {...props}\n/>\n"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"path": "src/lib/components/dropdown-menu/DropdownMenu.recipe.ts",
|
|
40
|
+
"target": "DropdownMenu.recipe.ts",
|
|
41
|
+
"type": "recipe",
|
|
42
|
+
"content": "import {tv, type VariantProps} from \"tailwind-variants\";\nimport type {Snippet} from \"svelte\";\n\n/**\n * DropdownMenu recipe — the canonical styled layer for the base design language.\n *\n * Multi-part component (built on bits-ui DropdownMenu): the recipe is slotted by\n * role — content (the popup panel), item (a selectable row), group (a section\n * wrapper), header (a section label), separator (the divider rule). The item\n * slot carries the destructive `danger` look as a variant so an app can restyle\n * it independently.\n *\n * Primary customization surface: extend with `tv({ extend: dropdownMenuRecipe,\n * ... })` in typed code. Lighter rung: the per-component CSS var\n * (--tera-dropdown-radius) lets a theme retune the panel corner radius with no\n * code change; it defaults to the global container radius token. See\n * docs/ARCHITECTURE.md for worked examples (kept out of this JSDoc so the llms\n * doc generator doesn't grep its tokens).\n */\nexport const dropdownMenuRecipe = tv({\n slots: {\n content: `z-50 min-w-[10rem] overflow-hidden p-1\n bg-surface rounded-[var(--tera-dropdown-radius,var(--border-radius-container))] border border-border-default shadow-md\n animate-in fade-in zoom-in-95 duration-[var(--tera-duration-fast)]\n data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=closed]:zoom-out-95`,\n item: `flex w-full cursor-pointer items-center gap-2 px-2 py-2 rounded text-sm outline-none select-none\n transition-colors ease-ui duration-[var(--tera-duration-micro)]\n data-[highlighted]:bg-surface-hover\n data-[disabled]:pointer-events-none data-[disabled]:opacity-50`,\n group: 'py-1',\n header: 'px-2 py-1.5 text-xs font-semibold text-text-tertiary uppercase tracking-wider',\n separator: '-mx-1 my-1 h-px bg-border-default',\n },\n variants: {\n danger: {\n true: {item: 'text-error-text data-[highlighted]:bg-error-subtle'},\n false: {item: 'text-text-primary'},\n },\n },\n defaultVariants: {\n danger: false,\n },\n});\n\nexport type DropdownMenuRecipeProps = VariantProps<typeof dropdownMenuRecipe>;\n\nexport interface DropdownMenuProps {\n children?: Snippet;\n /** Snippet used as the clickable trigger that opens the menu. */\n trigger?: Snippet;\n /** Additional CSS classes for the menu content panel. */\n class?: string;\n /** Whether the menu is open. Bindable. */\n open?: boolean;\n /** Which side of the trigger the menu appears on. */\n side?: 'top' | 'bottom' | 'left' | 'right';\n /** Alignment of the menu relative to the trigger. */\n align?: 'start' | 'center' | 'end';\n /** Distance in pixels between the trigger and menu panel. */\n sideOffset?: number;\n /** Whether keyboard navigation wraps from the last item back to the first. */\n loop?: boolean;\n /** Prevent the page from scrolling while the menu is open. */\n preventScroll?: boolean;\n /** Bindable reference to the menu content element. */\n ref?: HTMLElement | null;\n [key: string]: unknown;\n}\n\nexport interface DropdownMenuItemProps {\n children?: Snippet;\n /** Additional CSS classes for the item. */\n class?: string;\n /** Renders the item in a destructive/danger visual style. */\n danger?: boolean;\n /** Prevents selecting this item. */\n disabled?: boolean;\n /** When set, renders the item as an anchor link instead of a button. */\n href?: string;\n /** Called when the item is clicked. */\n onclick?: (e: MouseEvent) => void;\n /** Whether selecting this item closes the menu. Defaults to true. */\n closeOnSelect?: boolean;\n /** Alternative text value for typeahead matching — defaults to the item's text content. */\n textValue?: string;\n /** Bindable reference to the item element. */\n ref?: HTMLElement | null;\n [key: string]: unknown;\n}\n\nexport interface DropdownMenuGroupProps {\n children?: Snippet;\n /** Additional CSS classes for the group wrapper. */\n class?: string;\n ref?: HTMLElement | null;\n [key: string]: unknown;\n}\n\nexport interface DropdownMenuHeaderProps {\n children?: Snippet;\n /** Additional CSS classes for the header. */\n class?: string;\n ref?: HTMLElement | null;\n [key: string]: unknown;\n}\n\nexport interface DropdownMenuSeparatorProps {\n /** Additional CSS classes for the separator line. */\n class?: string;\n ref?: HTMLElement | null;\n [key: string]: unknown;\n}\n"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"path": "src/lib/components/dropdown-menu/index.ts",
|
|
46
|
+
"target": "index.ts",
|
|
47
|
+
"type": "ts",
|
|
48
|
+
"content": "export {default as DropdownMenu} from './components/DropdownMenu.svelte'\nexport {default as DropdownMenuItem } from './components/DropdownMenuItem.svelte'\nexport {default as DropdownMenuGroup } from './components/DropdownMenuGroup.svelte'\nexport {default as DropdownMenuHeader } from './components/DropdownMenuHeader.svelte'\nexport {default as DropdownMenuSeparator } from './components/DropdownMenuSeparator.svelte'\n\nexport {dropdownMenuRecipe} from './DropdownMenu.recipe'\n\nexport type {\n DropdownMenuProps,\n DropdownMenuItemProps,\n DropdownMenuGroupProps,\n DropdownMenuHeaderProps,\n DropdownMenuSeparatorProps,\n DropdownMenuRecipeProps\n} from './DropdownMenu.recipe'\n"
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"dependencies": [
|
|
52
|
+
"bits-ui",
|
|
53
|
+
"tailwind-variants"
|
|
54
|
+
],
|
|
55
|
+
"peerDependencies": [
|
|
56
|
+
"svelte"
|
|
57
|
+
],
|
|
58
|
+
"registryDependencies": [],
|
|
59
|
+
"sharedModules": {
|
|
60
|
+
"utils": false,
|
|
61
|
+
"icons": false,
|
|
62
|
+
"hooks": false
|
|
63
|
+
},
|
|
64
|
+
"exports": [
|
|
65
|
+
"DropdownMenu",
|
|
66
|
+
"DropdownMenuItem",
|
|
67
|
+
"DropdownMenuGroup",
|
|
68
|
+
"DropdownMenuHeader",
|
|
69
|
+
"DropdownMenuSeparator",
|
|
70
|
+
"dropdownMenuRecipe"
|
|
71
|
+
]
|
|
72
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://tera-system-ui/registry-item.schema.json",
|
|
3
|
+
"name": "fonts",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"description": "",
|
|
6
|
+
"recipe": null,
|
|
7
|
+
"files": [
|
|
8
|
+
{
|
|
9
|
+
"path": "src/lib/components/fonts/index.ts",
|
|
10
|
+
"target": "index.ts",
|
|
11
|
+
"type": "ts",
|
|
12
|
+
"content": "export {default as TeraFontSansSerif} from './TeraFontSansSerif.svelte'\r\nexport {default as TeraFontMono} from './TeraFontMono.svelte'\r\n"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"path": "src/lib/components/fonts/TeraFontMono.svelte",
|
|
16
|
+
"target": "TeraFontMono.svelte",
|
|
17
|
+
"type": "svelte",
|
|
18
|
+
"content": "<script lang=\"ts\">\n // Geist Mono first (modern, preferred), fallback to Roboto Mono Variable\n import '@fontsource-variable/geist-mono';\n import '@fontsource-variable/roboto-mono';\n</script>\n"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "src/lib/components/fonts/TeraFontSansSerif.svelte",
|
|
22
|
+
"target": "TeraFontSansSerif.svelte",
|
|
23
|
+
"type": "svelte",
|
|
24
|
+
"content": "<script lang=\"ts\">\n // Inter Variable — modern, sharp screen rendering, strong numeral rendering\n // Supports weights 100–900\n import '@fontsource-variable/inter';\n</script>\n"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"dependencies": [],
|
|
28
|
+
"peerDependencies": [
|
|
29
|
+
"svelte"
|
|
30
|
+
],
|
|
31
|
+
"registryDependencies": [],
|
|
32
|
+
"sharedModules": {
|
|
33
|
+
"utils": false,
|
|
34
|
+
"icons": false,
|
|
35
|
+
"hooks": false
|
|
36
|
+
},
|
|
37
|
+
"exports": [
|
|
38
|
+
"TeraFontSansSerif",
|
|
39
|
+
"TeraFontMono"
|
|
40
|
+
]
|
|
41
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
{
|
|
2
|
+
"components": [
|
|
3
|
+
{
|
|
4
|
+
"name": "accordion",
|
|
5
|
+
"description": "Collapsible accordion (single/multi-open).",
|
|
6
|
+
"recipe": true,
|
|
7
|
+
"registryDependencies": []
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"name": "alert",
|
|
11
|
+
"description": "Contextual alert banner for status messages.",
|
|
12
|
+
"recipe": true,
|
|
13
|
+
"registryDependencies": []
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "avatar",
|
|
17
|
+
"description": "User avatar with image + initials fallback.",
|
|
18
|
+
"recipe": true,
|
|
19
|
+
"registryDependencies": []
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "badge",
|
|
23
|
+
"description": "Compact label for counts, status, or categories.",
|
|
24
|
+
"recipe": true,
|
|
25
|
+
"registryDependencies": []
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "bottom-sheet",
|
|
29
|
+
"description": "Draggable iOS-style bottom sheet with snap points, container-scale effect, and stacking.",
|
|
30
|
+
"recipe": true,
|
|
31
|
+
"registryDependencies": []
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "button",
|
|
35
|
+
"description": "Interactive button with variants, sizes, loading, danger, link mode.",
|
|
36
|
+
"recipe": true,
|
|
37
|
+
"registryDependencies": []
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "card",
|
|
41
|
+
"description": "Content container with elevation, border, padding variants.",
|
|
42
|
+
"recipe": true,
|
|
43
|
+
"registryDependencies": []
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "checkbox",
|
|
47
|
+
"description": "Checkbox input with indeterminate support.",
|
|
48
|
+
"recipe": true,
|
|
49
|
+
"registryDependencies": []
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"name": "combobox",
|
|
53
|
+
"description": "Searchable combobox with autocomplete.",
|
|
54
|
+
"recipe": true,
|
|
55
|
+
"registryDependencies": []
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"name": "command",
|
|
59
|
+
"description": "Command palette.",
|
|
60
|
+
"recipe": true,
|
|
61
|
+
"registryDependencies": [
|
|
62
|
+
"input"
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"name": "date-range-picker",
|
|
67
|
+
"description": "",
|
|
68
|
+
"recipe": true,
|
|
69
|
+
"registryDependencies": [
|
|
70
|
+
"dialog"
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "dialog",
|
|
75
|
+
"description": "Modal dialog with header/footer slots and size variants.",
|
|
76
|
+
"recipe": true,
|
|
77
|
+
"registryDependencies": []
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "drawer",
|
|
81
|
+
"description": "Edge-anchored sliding drawer.",
|
|
82
|
+
"recipe": true,
|
|
83
|
+
"registryDependencies": []
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "dropdown-menu",
|
|
87
|
+
"description": "Contextual dropdown menu.",
|
|
88
|
+
"recipe": true,
|
|
89
|
+
"registryDependencies": []
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "fonts",
|
|
93
|
+
"description": "",
|
|
94
|
+
"recipe": false,
|
|
95
|
+
"registryDependencies": []
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"name": "input",
|
|
99
|
+
"description": "Text input with prefix/suffix slots, clear button, status variants.",
|
|
100
|
+
"recipe": true,
|
|
101
|
+
"registryDependencies": []
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"name": "label",
|
|
105
|
+
"description": "Accessible form label.",
|
|
106
|
+
"recipe": true,
|
|
107
|
+
"registryDependencies": []
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"name": "popover",
|
|
111
|
+
"description": "Floating popover anchored to a trigger.",
|
|
112
|
+
"recipe": true,
|
|
113
|
+
"registryDependencies": []
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"name": "popover-responsive",
|
|
117
|
+
"description": "",
|
|
118
|
+
"recipe": true,
|
|
119
|
+
"registryDependencies": [
|
|
120
|
+
"dialog",
|
|
121
|
+
"popover"
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"name": "select",
|
|
126
|
+
"description": "Select dropdown with options/groups and keyboard nav.",
|
|
127
|
+
"recipe": true,
|
|
128
|
+
"registryDependencies": []
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"name": "skeleton",
|
|
132
|
+
"description": "",
|
|
133
|
+
"recipe": true,
|
|
134
|
+
"registryDependencies": []
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"name": "slider",
|
|
138
|
+
"description": "Range slider for numeric selection.",
|
|
139
|
+
"recipe": true,
|
|
140
|
+
"registryDependencies": []
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"name": "spinner",
|
|
144
|
+
"description": "",
|
|
145
|
+
"recipe": true,
|
|
146
|
+
"registryDependencies": []
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"name": "star-rating",
|
|
150
|
+
"description": "Interactive 1–5 star rating.",
|
|
151
|
+
"recipe": true,
|
|
152
|
+
"registryDependencies": []
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"name": "switch",
|
|
156
|
+
"description": "Toggle switch for boolean state.",
|
|
157
|
+
"recipe": true,
|
|
158
|
+
"registryDependencies": []
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"name": "table",
|
|
162
|
+
"description": "Data table with striped rows and loading skeleton.",
|
|
163
|
+
"recipe": true,
|
|
164
|
+
"registryDependencies": [
|
|
165
|
+
"skeleton"
|
|
166
|
+
]
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"name": "tabs",
|
|
170
|
+
"description": "Tabbed content panels (line + iOS variants).",
|
|
171
|
+
"recipe": true,
|
|
172
|
+
"registryDependencies": []
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"name": "text-area",
|
|
176
|
+
"description": "Multi-line text input with auto-resize.",
|
|
177
|
+
"recipe": true,
|
|
178
|
+
"registryDependencies": []
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"name": "toast",
|
|
182
|
+
"description": "",
|
|
183
|
+
"recipe": false,
|
|
184
|
+
"registryDependencies": []
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"name": "tooltip",
|
|
188
|
+
"description": "Floating tooltip shown on hover/focus.",
|
|
189
|
+
"recipe": true,
|
|
190
|
+
"registryDependencies": []
|
|
191
|
+
}
|
|
192
|
+
]
|
|
193
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://tera-system-ui/registry-item.schema.json",
|
|
3
|
+
"name": "input",
|
|
4
|
+
"type": "registry:component",
|
|
5
|
+
"description": "Text input with prefix/suffix slots, clear button, status variants.",
|
|
6
|
+
"recipe": "src/lib/components/input/Input.recipe.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
{
|
|
9
|
+
"path": "src/lib/components/input/index.ts",
|
|
10
|
+
"target": "index.ts",
|
|
11
|
+
"type": "ts",
|
|
12
|
+
"content": "export {default as Input} from './Input.svelte'\nexport {inputRecipe} from './Input.recipe'\nexport type {InputProps, InputRecipeProps} from './Input.recipe'\n"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"path": "src/lib/components/input/Input.recipe.ts",
|
|
16
|
+
"target": "Input.recipe.ts",
|
|
17
|
+
"type": "recipe",
|
|
18
|
+
"content": "import {tv, type VariantProps} from \"tailwind-variants\";\nimport type {Snippet} from \"svelte\";\nimport type {HTMLInputAttributes} from \"svelte/elements\";\n\n/**\n * Input recipe — the canonical styled layer for the base design language.\n *\n * Multi-part component, so it is slotted: `root` (the relative wrapper),\n * `field` (the `<input>` itself, where every variant/size/status lives),\n * `prefix` / `suffix` (the affix spans), and `clear` (the allow-clear button).\n * An app owns its look by extending this recipe with\n * `tv({ extend: inputRecipe, ... })` in typed code; base sizing, focus and\n * status states are inherited. See docs/ARCHITECTURE.md for the worked example\n * (kept out of this JSDoc so the llms doc generator doesn't grep its tokens).\n *\n * Restyle-internals (the lighter rung): the per-component CSS vars below\n * (--tera-input-*) let a theme/app retune corner radius with no code change;\n * they default to global axis tokens in tera-ui-base.css.\n */\nexport const inputRecipe = tv({\n slots: {\n root: 'relative inline-flex w-full',\n field: 'w-full inline-flex items-center justify-center rounded-[var(--tera-input-radius,var(--tera-radius-base))] outline-none font-normal text-text-primary placeholder:text-text-tertiary transition-[border-color,box-shadow,background-color] ease-ui duration-[var(--tera-duration-fast)]',\n prefix: 'absolute left-3 top-1/2 -translate-y-1/2 text-text-tertiary pointer-events-none',\n suffix: 'absolute right-3 top-1/2 -translate-y-1/2 text-text-tertiary pointer-events-none',\n clear: 'absolute right-3 top-1/2 -translate-y-1/2 text-text-tertiary hover:text-neutral-token-10 transition-colors',\n },\n variants: {\n variant: {\n outlined: {\n field: 'border border-border-default bg-surface-control hover:border-border-strong focus:border-interactive focus:shadow-focus',\n },\n filled: {\n field: 'bg-surface-sunken border border-transparent shadow-[inset_0_1px_2px_rgba(15,23,42,0.05)] hover:bg-surface-hover focus:bg-surface focus:border-interactive focus:shadow-focus',\n },\n borderless: {\n field: 'bg-transparent border-0 hover:bg-surface-raised focus:bg-surface-raised',\n },\n },\n disabled: {\n true: {\n field: 'cursor-not-allowed bg-surface-sunken text-text-disabled border-border-default',\n },\n false: {\n field: 'cursor-text',\n },\n },\n size: {\n sm: {\n field: 'h-[var(--tera-control-height-sm)] px-[var(--tera-control-px-md)] text-sm',\n },\n md: {\n field: 'h-[var(--tera-control-height-md)] px-[var(--tera-control-px-md)] text-sm',\n },\n lg: {\n field: 'h-[var(--tera-control-height-lg)] px-[var(--tera-control-px-md)] text-base',\n },\n },\n status: {\n error: {\n field: 'border-error-default hover:border-error-hover focus:border-error-default focus:shadow-focus-error',\n },\n warning: {\n field: 'border-warning-default hover:border-warning-hover focus:border-warning-default focus:shadow-focus-warning',\n },\n },\n },\n compoundVariants: [\n {\n variant: 'outlined',\n disabled: true,\n class: {field: 'hover:border-border-default'},\n },\n {\n variant: 'filled',\n disabled: true,\n class: {field: 'hover:bg-surface-sunken'},\n },\n {\n variant: 'borderless',\n disabled: true,\n class: {field: 'hover:bg-transparent'},\n },\n ],\n defaultVariants: {\n variant: 'outlined',\n size: 'md',\n },\n});\n\nexport type InputRecipeProps = VariantProps<typeof inputRecipe>;\n\nexport interface InputProps extends Omit<HTMLInputAttributes, 'disabled' | 'size' | 'value' | 'prefix'>, InputRecipeProps {\n children?: Snippet;\n class?: string;\n value?: string;\n ref?: HTMLInputElement | null;\n prefix?: Snippet;\n suffix?: Snippet;\n allowClear?: boolean;\n /** Replace the default clear (X) icon with custom markup (structural seam). */\n clearIcon?: Snippet;\n}\n"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "src/lib/components/input/Input.svelte",
|
|
22
|
+
"target": "Input.svelte",
|
|
23
|
+
"type": "svelte",
|
|
24
|
+
"content": "<script lang=\"ts\">\n import {type InputProps, inputRecipe} from \"./Input.recipe\";\n import {IconX} from \"$lib/internal/icons\";\n\n let {\n children,\n class: className,\n value = $bindable(),\n ref = $bindable(),\n size = 'md',\n disabled,\n variant = 'outlined',\n prefix,\n suffix,\n allowClear,\n status,\n clearIcon,\n ...props\n }: InputProps = $props();\n\n const r = $derived(inputRecipe({ variant, disabled, size, status }));\n\n function clearInput() {\n value = '';\n ref?.focus();\n }\n</script>\n\n<div class={r.root()}>\n {#if prefix}\n <span class={r.prefix()}>\n {@render prefix()}\n </span>\n {/if}\n\n <input\n type=\"text\"\n bind:this={ref}\n class={r.field({ class: className })}\n class:pl-9={prefix}\n class:pr-9={allowClear && value || suffix}\n {disabled}\n {...props}\n bind:value\n />\n\n {#if allowClear && value && !disabled}\n <button\n type=\"button\"\n onclick={clearInput}\n class={r.clear()}\n tabindex=\"-1\"\n >\n {#if clearIcon}\n {@render clearIcon()}\n {:else}\n <IconX class=\"size-3.5\"/>\n {/if}\n </button>\n {:else if suffix}\n <span class={r.suffix()}>\n {@render suffix()}\n </span>\n {/if}\n</div>\n"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"dependencies": [
|
|
28
|
+
"tailwind-variants"
|
|
29
|
+
],
|
|
30
|
+
"peerDependencies": [
|
|
31
|
+
"svelte"
|
|
32
|
+
],
|
|
33
|
+
"registryDependencies": [],
|
|
34
|
+
"sharedModules": {
|
|
35
|
+
"utils": false,
|
|
36
|
+
"icons": true,
|
|
37
|
+
"hooks": false
|
|
38
|
+
},
|
|
39
|
+
"exports": [
|
|
40
|
+
"Input",
|
|
41
|
+
"inputRecipe"
|
|
42
|
+
]
|
|
43
|
+
}
|