@marwes-ui/svelte 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/LICENSE +21 -0
- package/README.md +518 -0
- package/dist/components/accordion/Accordion.svelte +56 -0
- package/dist/components/accordion/Accordion.svelte.d.ts +4 -0
- package/dist/components/accordion/AccordionField.svelte +90 -0
- package/dist/components/accordion/AccordionField.svelte.d.ts +4 -0
- package/dist/components/accordion/FAQAccordion.svelte +21 -0
- package/dist/components/accordion/FAQAccordion.svelte.d.ts +20 -0
- package/dist/components/accordion/README.md +19 -0
- package/dist/components/accordion/SectionsAccordion.svelte +22 -0
- package/dist/components/accordion/SectionsAccordion.svelte.d.ts +21 -0
- package/dist/components/accordion/SettingsAccordion.svelte +21 -0
- package/dist/components/accordion/SettingsAccordion.svelte.d.ts +20 -0
- package/dist/components/accordion/index.d.ts +2 -0
- package/dist/components/accordion/index.js +1 -0
- package/dist/components/accordion/types.d.ts +28 -0
- package/dist/components/accordion/types.js +1 -0
- package/dist/components/avatar/Avatar.svelte +45 -0
- package/dist/components/avatar/Avatar.svelte.d.ts +4 -0
- package/dist/components/avatar/AvatarBadge.svelte +47 -0
- package/dist/components/avatar/AvatarBadge.svelte.d.ts +7 -0
- package/dist/components/avatar/AvatarGroup.svelte +50 -0
- package/dist/components/avatar/AvatarGroup.svelte.d.ts +15 -0
- package/dist/components/avatar/PresenceAvatar.svelte +12 -0
- package/dist/components/avatar/PresenceAvatar.svelte.d.ts +7 -0
- package/dist/components/avatar/ProfileAvatar.svelte +7 -0
- package/dist/components/avatar/ProfileAvatar.svelte.d.ts +4 -0
- package/dist/components/avatar/README.md +19 -0
- package/dist/components/avatar/TeamAvatarGroup.svelte +21 -0
- package/dist/components/avatar/TeamAvatarGroup.svelte.d.ts +15 -0
- package/dist/components/avatar/index.d.ts +2 -0
- package/dist/components/avatar/index.js +1 -0
- package/dist/components/avatar/types.d.ts +6 -0
- package/dist/components/avatar/types.js +1 -0
- package/dist/components/badge/Badge.svelte +26 -0
- package/dist/components/badge/Badge.svelte.d.ts +4 -0
- package/dist/components/badge/BadgeGroup.svelte +25 -0
- package/dist/components/badge/BadgeGroup.svelte.d.ts +4 -0
- package/dist/components/badge/NotificationBadge.svelte +7 -0
- package/dist/components/badge/NotificationBadge.svelte.d.ts +4 -0
- package/dist/components/badge/PriorityBadge.svelte +7 -0
- package/dist/components/badge/PriorityBadge.svelte.d.ts +4 -0
- package/dist/components/badge/README.md +16 -0
- package/dist/components/badge/StatusBadge.svelte +7 -0
- package/dist/components/badge/StatusBadge.svelte.d.ts +4 -0
- package/dist/components/badge/index.d.ts +3 -0
- package/dist/components/badge/index.js +2 -0
- package/dist/components/badge/types.d.ts +15 -0
- package/dist/components/badge/types.js +1 -0
- package/dist/components/button/Button.svelte +92 -0
- package/dist/components/button/Button.svelte.d.ts +4 -0
- package/dist/components/button/CancelButton.svelte +8 -0
- package/dist/components/button/CancelButton.svelte.d.ts +5 -0
- package/dist/components/button/CloseButton.svelte +8 -0
- package/dist/components/button/CloseButton.svelte.d.ts +5 -0
- package/dist/components/button/ConfirmButton.svelte +8 -0
- package/dist/components/button/ConfirmButton.svelte.d.ts +5 -0
- package/dist/components/button/CopyButton.svelte +8 -0
- package/dist/components/button/CopyButton.svelte.d.ts +5 -0
- package/dist/components/button/CreateButton.svelte +7 -0
- package/dist/components/button/CreateButton.svelte.d.ts +5 -0
- package/dist/components/button/DestructiveButton.svelte +8 -0
- package/dist/components/button/DestructiveButton.svelte.d.ts +5 -0
- package/dist/components/button/DownloadButton.svelte +8 -0
- package/dist/components/button/DownloadButton.svelte.d.ts +5 -0
- package/dist/components/button/DropdownButton.svelte +8 -0
- package/dist/components/button/DropdownButton.svelte.d.ts +5 -0
- package/dist/components/button/EditButton.svelte +8 -0
- package/dist/components/button/EditButton.svelte.d.ts +5 -0
- package/dist/components/button/FilterButton.svelte +8 -0
- package/dist/components/button/FilterButton.svelte.d.ts +5 -0
- package/dist/components/button/LinkButton.svelte +8 -0
- package/dist/components/button/LinkButton.svelte.d.ts +5 -0
- package/dist/components/button/PrimaryButton.svelte +7 -0
- package/dist/components/button/PrimaryButton.svelte.d.ts +5 -0
- package/dist/components/button/README.md +21 -0
- package/dist/components/button/RefreshButton.svelte +8 -0
- package/dist/components/button/RefreshButton.svelte.d.ts +5 -0
- package/dist/components/button/SaveButton.svelte +8 -0
- package/dist/components/button/SaveButton.svelte.d.ts +5 -0
- package/dist/components/button/SearchButton.svelte +8 -0
- package/dist/components/button/SearchButton.svelte.d.ts +5 -0
- package/dist/components/button/SecondaryButton.svelte +7 -0
- package/dist/components/button/SecondaryButton.svelte.d.ts +5 -0
- package/dist/components/button/SortButton.svelte +8 -0
- package/dist/components/button/SortButton.svelte.d.ts +5 -0
- package/dist/components/button/SubmitButton.svelte +7 -0
- package/dist/components/button/SubmitButton.svelte.d.ts +5 -0
- package/dist/components/button/SuccessButton.svelte +7 -0
- package/dist/components/button/SuccessButton.svelte.d.ts +5 -0
- package/dist/components/button/TextButton.svelte +7 -0
- package/dist/components/button/TextButton.svelte.d.ts +5 -0
- package/dist/components/button/UploadButton.svelte +8 -0
- package/dist/components/button/UploadButton.svelte.d.ts +5 -0
- package/dist/components/button/VerifyButton.svelte +8 -0
- package/dist/components/button/VerifyButton.svelte.d.ts +5 -0
- package/dist/components/button/index.d.ts +2 -0
- package/dist/components/button/index.js +1 -0
- package/dist/components/button/types.d.ts +8 -0
- package/dist/components/button/types.js +1 -0
- package/dist/components/card/Card.svelte +33 -0
- package/dist/components/card/Card.svelte.d.ts +4 -0
- package/dist/components/card/ProductCard.svelte +6 -0
- package/dist/components/card/ProductCard.svelte.d.ts +4 -0
- package/dist/components/card/ProfileCard.svelte +6 -0
- package/dist/components/card/ProfileCard.svelte.d.ts +4 -0
- package/dist/components/card/README.md +15 -0
- package/dist/components/card/StatCard.svelte +6 -0
- package/dist/components/card/StatCard.svelte.d.ts +4 -0
- package/dist/components/card/index.d.ts +2 -0
- package/dist/components/card/index.js +1 -0
- package/dist/components/card/types.d.ts +10 -0
- package/dist/components/card/types.js +1 -0
- package/dist/components/checkbox/Checkbox.svelte +54 -0
- package/dist/components/checkbox/Checkbox.svelte.d.ts +4 -0
- package/dist/components/checkbox/CheckboxField.svelte +74 -0
- package/dist/components/checkbox/CheckboxField.svelte.d.ts +4 -0
- package/dist/components/checkbox/CheckboxGroupField.svelte +50 -0
- package/dist/components/checkbox/CheckboxGroupField.svelte.d.ts +4 -0
- package/dist/components/checkbox/README.md +17 -0
- package/dist/components/checkbox/index.d.ts +3 -0
- package/dist/components/checkbox/index.js +2 -0
- package/dist/components/checkbox/types.d.ts +30 -0
- package/dist/components/checkbox/types.js +1 -0
- package/dist/components/date-picker/DatePicker.svelte +108 -0
- package/dist/components/date-picker/DatePicker.svelte.d.ts +4 -0
- package/dist/components/date-picker/README.md +17 -0
- package/dist/components/date-picker/index.d.ts +2 -0
- package/dist/components/date-picker/index.js +1 -0
- package/dist/components/date-picker/types.d.ts +13 -0
- package/dist/components/date-picker/types.js +1 -0
- package/dist/components/dialog/ConfirmDialog.svelte +28 -0
- package/dist/components/dialog/ConfirmDialog.svelte.d.ts +4 -0
- package/dist/components/dialog/DestructiveDialog.svelte +28 -0
- package/dist/components/dialog/DestructiveDialog.svelte.d.ts +4 -0
- package/dist/components/dialog/Dialog.svelte +114 -0
- package/dist/components/dialog/Dialog.svelte.d.ts +4 -0
- package/dist/components/dialog/DialogModal.svelte +120 -0
- package/dist/components/dialog/DialogModal.svelte.d.ts +4 -0
- package/dist/components/dialog/InfoDialog.svelte +24 -0
- package/dist/components/dialog/InfoDialog.svelte.d.ts +4 -0
- package/dist/components/dialog/README.md +23 -0
- package/dist/components/dialog/index.d.ts +6 -0
- package/dist/components/dialog/index.js +5 -0
- package/dist/components/dialog/types.d.ts +42 -0
- package/dist/components/dialog/types.js +1 -0
- package/dist/components/divider/Divider.svelte +25 -0
- package/dist/components/divider/Divider.svelte.d.ts +4 -0
- package/dist/components/divider/README.md +15 -0
- package/dist/components/divider/index.d.ts +2 -0
- package/dist/components/divider/index.js +1 -0
- package/dist/components/divider/types.d.ts +5 -0
- package/dist/components/divider/types.js +1 -0
- package/dist/components/heading/H1.svelte +23 -0
- package/dist/components/heading/H1.svelte.d.ts +4 -0
- package/dist/components/heading/H2.svelte +23 -0
- package/dist/components/heading/H2.svelte.d.ts +4 -0
- package/dist/components/heading/H3.svelte +23 -0
- package/dist/components/heading/H3.svelte.d.ts +4 -0
- package/dist/components/heading/README.md +13 -0
- package/dist/components/heading/index.d.ts +4 -0
- package/dist/components/heading/index.js +3 -0
- package/dist/components/heading/types.d.ts +26 -0
- package/dist/components/heading/types.js +1 -0
- package/dist/components/icon/Icon.svelte +65 -0
- package/dist/components/icon/Icon.svelte.d.ts +4 -0
- package/dist/components/icon/README.md +18 -0
- package/dist/components/icon/index.d.ts +2 -0
- package/dist/components/icon/index.js +1 -0
- package/dist/components/icon/types.d.ts +12 -0
- package/dist/components/icon/types.js +1 -0
- package/dist/components/input/CurrencyField.svelte +12 -0
- package/dist/components/input/CurrencyField.svelte.d.ts +7 -0
- package/dist/components/input/DateOfBirthField.svelte +21 -0
- package/dist/components/input/DateOfBirthField.svelte.d.ts +14 -0
- package/dist/components/input/DropdownField.svelte +29 -0
- package/dist/components/input/DropdownField.svelte.d.ts +14 -0
- package/dist/components/input/EmailField.svelte +9 -0
- package/dist/components/input/EmailField.svelte.d.ts +7 -0
- package/dist/components/input/Input.svelte +49 -0
- package/dist/components/input/Input.svelte.d.ts +4 -0
- package/dist/components/input/InputField.svelte +139 -0
- package/dist/components/input/InputField.svelte.d.ts +4 -0
- package/dist/components/input/InputOtp.svelte +140 -0
- package/dist/components/input/InputOtp.svelte.d.ts +4 -0
- package/dist/components/input/PasswordField.svelte +9 -0
- package/dist/components/input/PasswordField.svelte.d.ts +7 -0
- package/dist/components/input/PhoneField.svelte +9 -0
- package/dist/components/input/PhoneField.svelte.d.ts +7 -0
- package/dist/components/input/README.md +24 -0
- package/dist/components/input/RichText.svelte +177 -0
- package/dist/components/input/RichText.svelte.d.ts +4 -0
- package/dist/components/input/RichTextField.svelte +84 -0
- package/dist/components/input/RichTextField.svelte.d.ts +4 -0
- package/dist/components/input/SearchField.svelte +9 -0
- package/dist/components/input/SearchField.svelte.d.ts +7 -0
- package/dist/components/input/Select.svelte +88 -0
- package/dist/components/input/Select.svelte.d.ts +4 -0
- package/dist/components/input/SelectField.svelte +395 -0
- package/dist/components/input/SelectField.svelte.d.ts +4 -0
- package/dist/components/input/Textarea.svelte +50 -0
- package/dist/components/input/Textarea.svelte.d.ts +4 -0
- package/dist/components/input/TextareaField.svelte +57 -0
- package/dist/components/input/TextareaField.svelte.d.ts +4 -0
- package/dist/components/input/URLField.svelte +9 -0
- package/dist/components/input/URLField.svelte.d.ts +7 -0
- package/dist/components/input/ZipCodeField.svelte +21 -0
- package/dist/components/input/ZipCodeField.svelte.d.ts +14 -0
- package/dist/components/input/index.d.ts +7 -0
- package/dist/components/input/index.js +6 -0
- package/dist/components/input/types.d.ts +104 -0
- package/dist/components/input/types.js +1 -0
- package/dist/components/paragraph/Paragraph.svelte +23 -0
- package/dist/components/paragraph/Paragraph.svelte.d.ts +4 -0
- package/dist/components/paragraph/README.md +13 -0
- package/dist/components/paragraph/index.d.ts +2 -0
- package/dist/components/paragraph/index.js +1 -0
- package/dist/components/paragraph/types.d.ts +9 -0
- package/dist/components/paragraph/types.js +1 -0
- package/dist/components/radio/OptionRadioGroup.svelte +52 -0
- package/dist/components/radio/OptionRadioGroup.svelte.d.ts +21 -0
- package/dist/components/radio/README.md +16 -0
- package/dist/components/radio/Radio.svelte +38 -0
- package/dist/components/radio/Radio.svelte.d.ts +4 -0
- package/dist/components/radio/RadioGroupField.svelte +75 -0
- package/dist/components/radio/RadioGroupField.svelte.d.ts +4 -0
- package/dist/components/radio/RatingRadioGroup.svelte +51 -0
- package/dist/components/radio/RatingRadioGroup.svelte.d.ts +17 -0
- package/dist/components/radio/YesNoRadioGroup.svelte +48 -0
- package/dist/components/radio/YesNoRadioGroup.svelte.d.ts +16 -0
- package/dist/components/radio/index.d.ts +3 -0
- package/dist/components/radio/index.js +2 -0
- package/dist/components/radio/types.d.ts +22 -0
- package/dist/components/radio/types.js +1 -0
- package/dist/components/skeleton/README.md +16 -0
- package/dist/components/skeleton/Skeleton.svelte +29 -0
- package/dist/components/skeleton/Skeleton.svelte.d.ts +4 -0
- package/dist/components/skeleton/index.d.ts +2 -0
- package/dist/components/skeleton/index.js +1 -0
- package/dist/components/skeleton/types.d.ts +6 -0
- package/dist/components/skeleton/types.js +1 -0
- package/dist/components/slider/BrightnessSlider.svelte +31 -0
- package/dist/components/slider/BrightnessSlider.svelte.d.ts +11 -0
- package/dist/components/slider/README.md +20 -0
- package/dist/components/slider/RadiusSlider.svelte +31 -0
- package/dist/components/slider/RadiusSlider.svelte.d.ts +11 -0
- package/dist/components/slider/Slider.svelte +67 -0
- package/dist/components/slider/Slider.svelte.d.ts +4 -0
- package/dist/components/slider/SliderField.svelte +115 -0
- package/dist/components/slider/SliderField.svelte.d.ts +4 -0
- package/dist/components/slider/VolumeSlider.svelte +31 -0
- package/dist/components/slider/VolumeSlider.svelte.d.ts +11 -0
- package/dist/components/slider/index.d.ts +2 -0
- package/dist/components/slider/index.js +1 -0
- package/dist/components/slider/types.d.ts +28 -0
- package/dist/components/slider/types.js +1 -0
- package/dist/components/spacing/README.md +15 -0
- package/dist/components/spacing/Spacer.svelte +8 -0
- package/dist/components/spacing/Spacer.svelte.d.ts +3 -0
- package/dist/components/spacing/Spacing.svelte +23 -0
- package/dist/components/spacing/Spacing.svelte.d.ts +4 -0
- package/dist/components/spacing/index.d.ts +3 -0
- package/dist/components/spacing/index.js +2 -0
- package/dist/components/spacing/types.d.ts +7 -0
- package/dist/components/spacing/types.js +1 -0
- package/dist/components/spinner/ButtonSpinner.svelte +35 -0
- package/dist/components/spinner/ButtonSpinner.svelte.d.ts +4 -0
- package/dist/components/spinner/EmptyStateSpinner.svelte +20 -0
- package/dist/components/spinner/EmptyStateSpinner.svelte.d.ts +4 -0
- package/dist/components/spinner/README.md +19 -0
- package/dist/components/spinner/Spinner.svelte +60 -0
- package/dist/components/spinner/Spinner.svelte.d.ts +4 -0
- package/dist/components/spinner/index.d.ts +3 -0
- package/dist/components/spinner/index.js +2 -0
- package/dist/components/spinner/types.d.ts +9 -0
- package/dist/components/spinner/types.js +1 -0
- package/dist/components/stat-tile/README.md +15 -0
- package/dist/components/stat-tile/StatTile.svelte +44 -0
- package/dist/components/stat-tile/StatTile.svelte.d.ts +4 -0
- package/dist/components/stat-tile/index.d.ts +2 -0
- package/dist/components/stat-tile/index.js +1 -0
- package/dist/components/stat-tile/types.d.ts +14 -0
- package/dist/components/stat-tile/types.js +1 -0
- package/dist/components/switch/FeatureToggle.svelte +19 -0
- package/dist/components/switch/FeatureToggle.svelte.d.ts +13 -0
- package/dist/components/switch/PermissionSwitch.svelte +19 -0
- package/dist/components/switch/PermissionSwitch.svelte.d.ts +13 -0
- package/dist/components/switch/PreferenceSwitch.svelte +19 -0
- package/dist/components/switch/PreferenceSwitch.svelte.d.ts +13 -0
- package/dist/components/switch/README.md +17 -0
- package/dist/components/switch/Switch.svelte +52 -0
- package/dist/components/switch/Switch.svelte.d.ts +4 -0
- package/dist/components/switch/SwitchField.svelte +71 -0
- package/dist/components/switch/SwitchField.svelte.d.ts +4 -0
- package/dist/components/switch/index.d.ts +3 -0
- package/dist/components/switch/index.js +2 -0
- package/dist/components/switch/types.d.ts +20 -0
- package/dist/components/switch/types.js +1 -0
- package/dist/components/tab/ContentTabs.svelte +11 -0
- package/dist/components/tab/ContentTabs.svelte.d.ts +3 -0
- package/dist/components/tab/NavigationTabs.svelte +11 -0
- package/dist/components/tab/NavigationTabs.svelte.d.ts +3 -0
- package/dist/components/tab/README.md +26 -0
- package/dist/components/tab/SettingsTabs.svelte +11 -0
- package/dist/components/tab/SettingsTabs.svelte.d.ts +3 -0
- package/dist/components/tab/Tab.svelte +32 -0
- package/dist/components/tab/Tab.svelte.d.ts +4 -0
- package/dist/components/tab/TabGroup.svelte +132 -0
- package/dist/components/tab/TabGroup.svelte.d.ts +4 -0
- package/dist/components/tab/TabPanel.svelte +25 -0
- package/dist/components/tab/TabPanel.svelte.d.ts +4 -0
- package/dist/components/tab/index.d.ts +7 -0
- package/dist/components/tab/index.js +6 -0
- package/dist/components/tab/types.d.ts +36 -0
- package/dist/components/tab/types.js +1 -0
- package/dist/components/toast/ErrorToast.svelte +24 -0
- package/dist/components/toast/ErrorToast.svelte.d.ts +4 -0
- package/dist/components/toast/InfoToast.svelte +24 -0
- package/dist/components/toast/InfoToast.svelte.d.ts +4 -0
- package/dist/components/toast/README.md +35 -0
- package/dist/components/toast/SuccessToast.svelte +25 -0
- package/dist/components/toast/SuccessToast.svelte.d.ts +4 -0
- package/dist/components/toast/Toast.svelte +53 -0
- package/dist/components/toast/Toast.svelte.d.ts +4 -0
- package/dist/components/toast/ToastContainer.svelte +212 -0
- package/dist/components/toast/ToastContainer.svelte.d.ts +4 -0
- package/dist/components/toast/ToastProvider.svelte +71 -0
- package/dist/components/toast/ToastProvider.svelte.d.ts +7 -0
- package/dist/components/toast/WarningToast.svelte +24 -0
- package/dist/components/toast/WarningToast.svelte.d.ts +4 -0
- package/dist/components/toast/index.d.ts +9 -0
- package/dist/components/toast/index.js +8 -0
- package/dist/components/toast/types.d.ts +48 -0
- package/dist/components/toast/types.js +1 -0
- package/dist/components/tooltip/README.md +22 -0
- package/dist/components/tooltip/Tooltip.svelte +29 -0
- package/dist/components/tooltip/Tooltip.svelte.d.ts +4 -0
- package/dist/components/tooltip/TooltipGroup.svelte +100 -0
- package/dist/components/tooltip/TooltipGroup.svelte.d.ts +4 -0
- package/dist/components/tooltip/index.d.ts +3 -0
- package/dist/components/tooltip/index.js +2 -0
- package/dist/components/tooltip/types.d.ts +22 -0
- package/dist/components/tooltip/types.js +1 -0
- package/dist/index.d.ts +149 -0
- package/dist/index.js +149 -0
- package/dist/internal/attrs.d.ts +2 -0
- package/dist/internal/attrs.js +5 -0
- package/dist/internal/css-vars.d.ts +5 -0
- package/dist/internal/css-vars.js +20 -0
- package/dist/internal/merge-class.d.ts +1 -0
- package/dist/internal/merge-class.js +4 -0
- package/dist/internal/svg-attrs.d.ts +9 -0
- package/dist/internal/svg-attrs.js +16 -0
- package/dist/provider/MarwesProvider.svelte +186 -0
- package/dist/provider/MarwesProvider.svelte.d.ts +4 -0
- package/dist/provider/context.d.ts +3 -0
- package/dist/provider/context.js +12 -0
- package/dist/provider/runtime-theme.d.ts +5 -0
- package/dist/provider/runtime-theme.js +63 -0
- package/dist/provider/theme-mode-runtime.d.ts +15 -0
- package/dist/provider/theme-mode-runtime.js +84 -0
- package/dist/provider/types.d.ts +32 -0
- package/dist/provider/types.js +1 -0
- package/dist/provider/use-theme-mode.d.ts +24 -0
- package/dist/provider/use-theme-mode.js +38 -0
- package/dist/provider/use-theme.d.ts +15 -0
- package/dist/provider/use-theme.js +19 -0
- package/dist/ssr.d.ts +2 -0
- package/dist/ssr.js +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import {
|
|
3
|
+
createRichTextRecipe,
|
|
4
|
+
isRichTextHtmlEmpty,
|
|
5
|
+
normalizeRichTextHtml,
|
|
6
|
+
resolveRichTextAllowedFormats,
|
|
7
|
+
richTextCommandByFormat,
|
|
8
|
+
} from "@marwes-ui/core";
|
|
9
|
+
import type { RichTextFormat, RichTextOptions } from "@marwes-ui/core";
|
|
10
|
+
import { cssVarsToStyle } from "../../internal/css-vars.js";
|
|
11
|
+
import { mergeClass } from "../../internal/merge-class.js";
|
|
12
|
+
import Icon from "../icon/Icon.svelte";
|
|
13
|
+
import type { RichTextProps } from "./types.js";
|
|
14
|
+
|
|
15
|
+
let {
|
|
16
|
+
value: controlledValue,
|
|
17
|
+
defaultValue,
|
|
18
|
+
onvaluechange,
|
|
19
|
+
class: className,
|
|
20
|
+
...options
|
|
21
|
+
}: RichTextProps = $props();
|
|
22
|
+
|
|
23
|
+
const kit = $derived(createRichTextRecipe({
|
|
24
|
+
...options,
|
|
25
|
+
...(controlledValue !== undefined ? { value: controlledValue } : {}),
|
|
26
|
+
...(defaultValue !== undefined ? { defaultValue } : {}),
|
|
27
|
+
}));
|
|
28
|
+
const allowedFormats = $derived(resolveRichTextAllowedFormats(options.allowedFormats));
|
|
29
|
+
const isControlled = $derived(controlledValue !== undefined);
|
|
30
|
+
const mergedClass = $derived(mergeClass(kit.className, className));
|
|
31
|
+
const mergedStyle = $derived(cssVarsToStyle(kit.vars));
|
|
32
|
+
const showToolbar = $derived(!options.readOnly);
|
|
33
|
+
|
|
34
|
+
let editorElement: HTMLDivElement | undefined = $state(undefined);
|
|
35
|
+
let uncontrolledHtml = $state(normalizeRichTextHtml(defaultValue));
|
|
36
|
+
let isEditorEmpty = $state(isRichTextHtmlEmpty(isControlled ? normalizeRichTextHtml(controlledValue) : uncontrolledHtml));
|
|
37
|
+
let activeFormats = $state<RichTextFormat[]>([]);
|
|
38
|
+
|
|
39
|
+
const editorHtml = $derived(isControlled ? normalizeRichTextHtml(controlledValue) : uncontrolledHtml);
|
|
40
|
+
|
|
41
|
+
const formatLabels: Record<RichTextFormat, string> = {
|
|
42
|
+
bold: "Bold",
|
|
43
|
+
italic: "Italic",
|
|
44
|
+
underline: "Underline",
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
function syncEditorState(nextHtml: string): string {
|
|
48
|
+
const normalized = normalizeRichTextHtml(nextHtml);
|
|
49
|
+
const empty = isRichTextHtmlEmpty(normalized);
|
|
50
|
+
if (!isControlled) uncontrolledHtml = normalized;
|
|
51
|
+
isEditorEmpty = empty;
|
|
52
|
+
onvaluechange?.(normalized);
|
|
53
|
+
return normalized;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function getActiveFormatsFromSelection(): RichTextFormat[] {
|
|
57
|
+
if (!editorElement || typeof window === "undefined" || typeof document === "undefined") return [];
|
|
58
|
+
const doc = document as any;
|
|
59
|
+
const selection = window.getSelection();
|
|
60
|
+
const anchorNode = selection?.anchorNode ?? null;
|
|
61
|
+
if (!anchorNode || !editorElement.contains(anchorNode.nodeType === Node.TEXT_NODE ? anchorNode.parentNode : anchorNode)) return [];
|
|
62
|
+
|
|
63
|
+
const active = new Set<RichTextFormat>();
|
|
64
|
+
if (typeof doc.queryCommandState === "function") {
|
|
65
|
+
for (const format of Object.keys(richTextCommandByFormat) as RichTextFormat[]) {
|
|
66
|
+
try { if (doc.queryCommandState(richTextCommandByFormat[format])) active.add(format); } catch {}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (active.size > 0) return Array.from(active);
|
|
70
|
+
|
|
71
|
+
let node: Node | null = anchorNode.nodeType === Node.TEXT_NODE ? anchorNode.parentNode : anchorNode;
|
|
72
|
+
while (node && node !== editorElement) {
|
|
73
|
+
if (node instanceof HTMLElement) {
|
|
74
|
+
const tag = node.tagName.toLowerCase();
|
|
75
|
+
if (tag === "strong" || tag === "b") active.add("bold");
|
|
76
|
+
if (tag === "em" || tag === "i") active.add("italic");
|
|
77
|
+
if (tag === "u") active.add("underline");
|
|
78
|
+
}
|
|
79
|
+
node = node.parentNode;
|
|
80
|
+
}
|
|
81
|
+
return Array.from(active);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function refreshActiveFormats(): void {
|
|
85
|
+
activeFormats = getActiveFormatsFromSelection();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function toggleFormat(format: RichTextFormat): void {
|
|
89
|
+
if (options.disabled || options.readOnly || typeof document === "undefined" || !editorElement) return;
|
|
90
|
+
const doc = document as any;
|
|
91
|
+
editorElement.focus();
|
|
92
|
+
if (typeof doc.execCommand === "function") doc.execCommand(richTextCommandByFormat[format]);
|
|
93
|
+
syncEditorState(editorElement.innerHTML);
|
|
94
|
+
refreshActiveFormats();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function handleInput(): void {
|
|
98
|
+
if (!editorElement || options.disabled || options.readOnly) return;
|
|
99
|
+
syncEditorState(editorElement.innerHTML);
|
|
100
|
+
refreshActiveFormats();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function handleKeyDown(e: KeyboardEvent): void {
|
|
104
|
+
if (!(e.metaKey || e.ctrlKey) || e.altKey) return;
|
|
105
|
+
const formatByKey: Partial<Record<string, RichTextFormat>> = { b: "bold", i: "italic", u: "underline" };
|
|
106
|
+
const requested = formatByKey[e.key.toLowerCase()];
|
|
107
|
+
if (!requested || !allowedFormats.includes(requested)) return;
|
|
108
|
+
e.preventDefault();
|
|
109
|
+
toggleFormat(requested);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
$effect(() => {
|
|
113
|
+
if (!editorElement) return;
|
|
114
|
+
const normalizedDom = normalizeRichTextHtml(editorElement.innerHTML);
|
|
115
|
+
if (normalizedDom !== editorHtml) editorElement.innerHTML = editorHtml;
|
|
116
|
+
isEditorEmpty = isRichTextHtmlEmpty(editorHtml);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
$effect(() => {
|
|
120
|
+
if (typeof document === "undefined") return;
|
|
121
|
+
const handler = () => refreshActiveFormats();
|
|
122
|
+
document.addEventListener("selectionchange", handler);
|
|
123
|
+
return () => document.removeEventListener("selectionchange", handler);
|
|
124
|
+
});
|
|
125
|
+
</script>
|
|
126
|
+
|
|
127
|
+
<div class={mergedClass} style={mergedStyle} {...kit.dataAttributes}>
|
|
128
|
+
{#if showToolbar}
|
|
129
|
+
<div class="mw-rich-text__toolbar" data-rich-text-toolbar>
|
|
130
|
+
{#each allowedFormats as format (format)}
|
|
131
|
+
{@const isActive = activeFormats.includes(format)}
|
|
132
|
+
{@const iconName = format === "bold" ? "bold" : format === "italic" ? "italic" : "underline"}
|
|
133
|
+
<button
|
|
134
|
+
type="button"
|
|
135
|
+
class="mw-rich-text__toolbar-button"
|
|
136
|
+
data-format={format}
|
|
137
|
+
data-active={isActive ? "true" : undefined}
|
|
138
|
+
aria-label={formatLabels[format]}
|
|
139
|
+
aria-pressed={isActive}
|
|
140
|
+
disabled={options.disabled}
|
|
141
|
+
onmousedown={(e) => e.preventDefault()}
|
|
142
|
+
onclick={() => toggleFormat(format)}
|
|
143
|
+
>
|
|
144
|
+
<Icon name={iconName} size="xs" decorative />
|
|
145
|
+
</button>
|
|
146
|
+
{/each}
|
|
147
|
+
</div>
|
|
148
|
+
{/if}
|
|
149
|
+
|
|
150
|
+
<div
|
|
151
|
+
bind:this={editorElement}
|
|
152
|
+
class="mw-rich-text__editor"
|
|
153
|
+
data-rich-text-editor
|
|
154
|
+
data-empty={isEditorEmpty ? "true" : undefined}
|
|
155
|
+
data-placeholder={options.placeholder}
|
|
156
|
+
id={kit.a11y.id}
|
|
157
|
+
role={kit.a11y.role}
|
|
158
|
+
tabindex={kit.a11y.tabIndex}
|
|
159
|
+
aria-label={kit.a11y.ariaLabel}
|
|
160
|
+
aria-labelledby={kit.a11y.ariaLabelledBy}
|
|
161
|
+
aria-describedby={kit.a11y.ariaDescribedBy}
|
|
162
|
+
aria-invalid={kit.a11y.ariaInvalid}
|
|
163
|
+
aria-disabled={kit.a11y.ariaDisabled}
|
|
164
|
+
aria-readonly={kit.a11y.ariaReadOnly}
|
|
165
|
+
aria-required={kit.a11y.ariaRequired}
|
|
166
|
+
aria-multiline={kit.a11y.ariaMultiline}
|
|
167
|
+
contenteditable={!options.disabled && !options.readOnly}
|
|
168
|
+
oninput={handleInput}
|
|
169
|
+
onkeydown={handleKeyDown}
|
|
170
|
+
onfocus={refreshActiveFormats}
|
|
171
|
+
onblur={() => { syncEditorState(editorElement?.innerHTML ?? ""); activeFormats = []; }}
|
|
172
|
+
></div>
|
|
173
|
+
|
|
174
|
+
{#if options.name}
|
|
175
|
+
<input type="hidden" name={options.name} value={editorHtml} disabled={options.disabled} />
|
|
176
|
+
{/if}
|
|
177
|
+
</div>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { buildRichTextFieldA11yIds } from "@marwes-ui/core";
|
|
3
|
+
import type { RichTextOptions } from "@marwes-ui/core";
|
|
4
|
+
import { mergeClass } from "../../internal/merge-class.js";
|
|
5
|
+
import RichText from "./RichText.svelte";
|
|
6
|
+
import type { RichTextFieldProps } from "./types.js";
|
|
7
|
+
|
|
8
|
+
let {
|
|
9
|
+
id: userProvidedId,
|
|
10
|
+
label,
|
|
11
|
+
helperText,
|
|
12
|
+
error,
|
|
13
|
+
editor,
|
|
14
|
+
ariaDescribedBy,
|
|
15
|
+
}: RichTextFieldProps = $props();
|
|
16
|
+
|
|
17
|
+
const uniqueId = $props.id();
|
|
18
|
+
const fieldId = $derived(userProvidedId ?? `mw-rich-text-${uniqueId}`);
|
|
19
|
+
|
|
20
|
+
function hasTextContent(text: string | undefined): boolean {
|
|
21
|
+
return text !== undefined && text.trim().length > 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const hasHelperText = $derived(hasTextContent(helperText));
|
|
25
|
+
const hasError = $derived(hasTextContent(error));
|
|
26
|
+
const invalid = $derived(hasError || editor.invalid || false);
|
|
27
|
+
const disabled = $derived(editor.disabled || false);
|
|
28
|
+
const readOnly = $derived(editor.readOnly || false);
|
|
29
|
+
|
|
30
|
+
const a11yIds = $derived(
|
|
31
|
+
buildRichTextFieldA11yIds({
|
|
32
|
+
id: fieldId,
|
|
33
|
+
hasHelperText,
|
|
34
|
+
hasError,
|
|
35
|
+
externalDescribedBy: ariaDescribedBy,
|
|
36
|
+
})
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const wrapperClass = $derived(
|
|
40
|
+
mergeClass(
|
|
41
|
+
"mw-input-field",
|
|
42
|
+
"mw-input-field--rich-text",
|
|
43
|
+
disabled && "mw-input-field--disabled",
|
|
44
|
+
invalid && "mw-input-field--invalid",
|
|
45
|
+
readOnly && "mw-input-field--readonly",
|
|
46
|
+
)
|
|
47
|
+
);
|
|
48
|
+
</script>
|
|
49
|
+
|
|
50
|
+
<div class={wrapperClass}>
|
|
51
|
+
<button
|
|
52
|
+
type="button"
|
|
53
|
+
class="mw-input-field__label"
|
|
54
|
+
id={a11yIds.labelId}
|
|
55
|
+
onclick={() => {
|
|
56
|
+
const el = document.getElementById(fieldId);
|
|
57
|
+
el?.focus();
|
|
58
|
+
}}
|
|
59
|
+
>
|
|
60
|
+
<p class="mw-p mw-p--md">{label}</p>
|
|
61
|
+
</button>
|
|
62
|
+
|
|
63
|
+
<div class="mw-input-field__input-wrapper">
|
|
64
|
+
<RichText
|
|
65
|
+
{...editor}
|
|
66
|
+
id={fieldId}
|
|
67
|
+
{invalid}
|
|
68
|
+
labelledBy={a11yIds.labelId}
|
|
69
|
+
{...(a11yIds.describedBy ? { describedBy: a11yIds.describedBy } : {})}
|
|
70
|
+
/>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
{#if hasHelperText && !hasError}
|
|
74
|
+
<div class="mw-input-field__helper" id={a11yIds.helperTextId}>
|
|
75
|
+
<p class="mw-p mw-p--sm">{helperText}</p>
|
|
76
|
+
</div>
|
|
77
|
+
{/if}
|
|
78
|
+
|
|
79
|
+
{#if hasError}
|
|
80
|
+
<div class="mw-input-field__error" id={a11yIds.errorId} aria-live="polite">
|
|
81
|
+
<p class="mw-p mw-p--sm">{error}</p>
|
|
82
|
+
</div>
|
|
83
|
+
{/if}
|
|
84
|
+
</div>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import InputField from "./InputField.svelte";
|
|
3
|
+
import type { InputFieldProps } from "./types.js";
|
|
4
|
+
type Props = Omit<InputFieldProps, "input"> & { input?: Omit<InputFieldProps["input"], "type" | "inputMode"> };
|
|
5
|
+
let { input = {}, ...props }: Props = $props();
|
|
6
|
+
</script>
|
|
7
|
+
<div data-purpose="search">
|
|
8
|
+
<InputField {...props} input={{ ...input, type: "search", inputMode: "search" }} />
|
|
9
|
+
</div>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { InputFieldProps } from "./types.js";
|
|
2
|
+
type Props = Omit<InputFieldProps, "input"> & {
|
|
3
|
+
input?: Omit<InputFieldProps["input"], "type" | "inputMode">;
|
|
4
|
+
};
|
|
5
|
+
declare const SearchField: import("svelte").Component<Props, {}, "">;
|
|
6
|
+
type SearchField = ReturnType<typeof SearchField>;
|
|
7
|
+
export default SearchField;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { createSelectRecipe, resolveSelectMode } from "@marwes-ui/core";
|
|
3
|
+
import { mergeClass } from "../../internal/merge-class.js";
|
|
4
|
+
import type { SelectProps } from "./types.js";
|
|
5
|
+
|
|
6
|
+
let {
|
|
7
|
+
value = $bindable(""),
|
|
8
|
+
onchange,
|
|
9
|
+
onvaluechange,
|
|
10
|
+
class: className,
|
|
11
|
+
style,
|
|
12
|
+
describedBy,
|
|
13
|
+
options,
|
|
14
|
+
placeholder,
|
|
15
|
+
...rest
|
|
16
|
+
}: SelectProps = $props();
|
|
17
|
+
|
|
18
|
+
const kit = $derived(
|
|
19
|
+
createSelectRecipe({
|
|
20
|
+
...rest,
|
|
21
|
+
options,
|
|
22
|
+
...(placeholder ? { placeholder } : {}),
|
|
23
|
+
value,
|
|
24
|
+
...(describedBy ? { describedBy } : {}),
|
|
25
|
+
})
|
|
26
|
+
);
|
|
27
|
+
const mode = $derived(resolveSelectMode(rest));
|
|
28
|
+
const mergedClass = $derived(mergeClass(kit.className, className));
|
|
29
|
+
|
|
30
|
+
const placeholderSelected = $derived(!!placeholder && value === "");
|
|
31
|
+
|
|
32
|
+
function handleChange(e: Event & { currentTarget: HTMLSelectElement }): void {
|
|
33
|
+
value = e.currentTarget.value;
|
|
34
|
+
onchange?.(e);
|
|
35
|
+
onvaluechange?.(value);
|
|
36
|
+
}
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
{#if mode === "native"}
|
|
40
|
+
<select
|
|
41
|
+
class={mergedClass}
|
|
42
|
+
{style}
|
|
43
|
+
id={kit.a11y.id}
|
|
44
|
+
name={kit.a11y.name}
|
|
45
|
+
disabled={kit.a11y.disabled}
|
|
46
|
+
required={kit.a11y.required}
|
|
47
|
+
aria-label={kit.a11y.ariaLabel}
|
|
48
|
+
aria-invalid={kit.a11y.ariaInvalid}
|
|
49
|
+
aria-describedby={kit.a11y.ariaDescribedBy}
|
|
50
|
+
data-placeholder-selected={placeholderSelected ? "true" : undefined}
|
|
51
|
+
{value}
|
|
52
|
+
onchange={handleChange}
|
|
53
|
+
>
|
|
54
|
+
{#if placeholder}
|
|
55
|
+
<option value="" disabled={rest.required ? true : undefined}>{placeholder}</option>
|
|
56
|
+
{/if}
|
|
57
|
+
{#each options as opt}
|
|
58
|
+
<option value={opt.value} disabled={opt.disabled}>{opt.label}</option>
|
|
59
|
+
{/each}
|
|
60
|
+
</select>
|
|
61
|
+
{:else}
|
|
62
|
+
<span class="mw-select__control">
|
|
63
|
+
<select
|
|
64
|
+
class={mergedClass}
|
|
65
|
+
{style}
|
|
66
|
+
id={kit.a11y.id}
|
|
67
|
+
name={kit.a11y.name}
|
|
68
|
+
disabled={kit.a11y.disabled}
|
|
69
|
+
required={kit.a11y.required}
|
|
70
|
+
aria-label={kit.a11y.ariaLabel}
|
|
71
|
+
aria-invalid={kit.a11y.ariaInvalid}
|
|
72
|
+
aria-describedby={kit.a11y.ariaDescribedBy}
|
|
73
|
+
data-placeholder-selected={placeholderSelected ? "true" : undefined}
|
|
74
|
+
{value}
|
|
75
|
+
onchange={handleChange}
|
|
76
|
+
>
|
|
77
|
+
{#if placeholder}
|
|
78
|
+
<option value="" disabled={rest.required ? true : undefined}>{placeholder}</option>
|
|
79
|
+
{/if}
|
|
80
|
+
{#each options as opt}
|
|
81
|
+
<option value={opt.value} disabled={opt.disabled}>{opt.label}</option>
|
|
82
|
+
{/each}
|
|
83
|
+
</select>
|
|
84
|
+
<svg class="mw-select__control-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
85
|
+
<path d="M11.5288 5.52876C11.7891 5.26841 12.2111 5.26841 12.4715 5.52876C12.7318 5.78911 12.7318 6.21114 12.4715 6.47147L8.47148 10.4715C8.21115 10.7318 7.78912 10.7318 7.52877 10.4715L3.52876 6.47147C3.26841 6.21112 3.26841 5.78911 3.52876 5.52876C3.78911 5.26841 4.21112 5.26841 4.47147 5.52876L6.58591 7.6432C7.36696 8.42425 8.63329 8.42425 9.41434 7.6432L11.5288 5.52876Z" fill="currentColor" />
|
|
86
|
+
</svg>
|
|
87
|
+
</span>
|
|
88
|
+
{/if}
|