@widgetic/editor 3.11.3 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +245 -0
- package/dist/assets/fonts.json +331 -0
- package/dist/assets/icons/ic-browser/audio.svg +7 -0
- package/dist/assets/icons/ic-browser/document.svg +11 -0
- package/dist/assets/icons/ic-browser/error.svg +5 -0
- package/dist/assets/icons/ic-browser/folder.svg +28 -0
- package/dist/assets/icons/ic-browser/player-pause.svg +1 -0
- package/dist/assets/icons/ic-browser/player-play.svg +1 -0
- package/dist/assets/icons/ic-browser/trash.svg +1 -0
- package/dist/assets/icons/ic-fixed-position/background-deselected.svg +3 -0
- package/dist/assets/icons/ic-fixed-position/background-selected.svg +3 -0
- package/dist/assets/icons/ic-fixed-position/bottom-left-background-deselected.svg +3 -0
- package/dist/assets/icons/ic-fixed-position/bottom-left-background-selected.svg +3 -0
- package/dist/assets/icons/ic-fixed-position/bottom-left-icon.svg +4 -0
- package/dist/assets/icons/ic-fixed-position/bottom-right-background-deselected.svg +3 -0
- package/dist/assets/icons/ic-fixed-position/bottom-right-background-selected.svg +3 -0
- package/dist/assets/icons/ic-fixed-position/bottom-right-icon.svg +4 -0
- package/dist/assets/icons/ic-fixed-position/center-bottom-icon.svg +5 -0
- package/dist/assets/icons/ic-fixed-position/center-center-icon.svg +3 -0
- package/dist/assets/icons/ic-fixed-position/center-left-icon.svg +5 -0
- package/dist/assets/icons/ic-fixed-position/center-right-icon.svg +5 -0
- package/dist/assets/icons/ic-fixed-position/center-top-icon.svg +5 -0
- package/dist/assets/icons/ic-fixed-position/top-left-background-deselected.svg +3 -0
- package/dist/assets/icons/ic-fixed-position/top-left-background-selected.svg +3 -0
- package/dist/assets/icons/ic-fixed-position/top-left-icon.svg +4 -0
- package/dist/assets/icons/ic-fixed-position/top-right-background-deselected.svg +3 -0
- package/dist/assets/icons/ic-fixed-position/top-right-background-selected.svg +3 -0
- package/dist/assets/icons/ic-fixed-position/top-right-icon.svg +4 -0
- package/dist/assets/icons/trash.svg +1 -0
- package/dist/components/MockWidget.svelte +108 -0
- package/dist/components/MockWidget.svelte.d.ts +22 -0
- package/dist/components/WidgetPreview.svelte +852 -0
- package/dist/components/WidgetPreview.svelte.d.ts +100 -0
- package/dist/components/color-select/ColorSelect.svelte +258 -0
- package/dist/components/color-select/ColorSelect.svelte.d.ts +42 -0
- package/dist/components/color-select/color.d.ts +25 -0
- package/dist/components/color-select/color.js +21 -0
- package/dist/components/color-select/constants.d.ts +5 -0
- package/dist/components/color-select/constants.js +5 -0
- package/dist/components/color-select/render.d.ts +5 -0
- package/dist/components/color-select/render.js +77 -0
- package/dist/components/color-select/shaders.d.ts +3 -0
- package/dist/components/color-select/shaders.js +8 -0
- package/dist/components/editors/EmbedEditor.svelte +700 -0
- package/dist/components/editors/EmbedEditor.svelte.d.ts +50 -0
- package/dist/components/editors/PropsEditor.svelte +3952 -0
- package/dist/components/editors/PropsEditor.svelte.d.ts +62 -0
- package/dist/components/editors/props-editor.css +73 -0
- package/dist/components/ic/AngleInputController.svelte +276 -0
- package/dist/components/ic/AngleInputController.svelte.d.ts +26 -0
- package/dist/components/ic/BrowserInputController.svelte +724 -0
- package/dist/components/ic/BrowserInputController.svelte.d.ts +39 -0
- package/dist/components/ic/CheckboxInputController.svelte +203 -0
- package/dist/components/ic/CheckboxInputController.svelte.d.ts +41 -0
- package/dist/components/ic/ColorPickerInputController.svelte +1584 -0
- package/dist/components/ic/ColorPickerInputController.svelte.d.ts +50 -0
- package/dist/components/ic/DateFieldInputController.svelte +453 -0
- package/dist/components/ic/DateFieldInputController.svelte.d.ts +35 -0
- package/dist/components/ic/DatePickerInputController.svelte +364 -0
- package/dist/components/ic/DatePickerInputController.svelte.d.ts +28 -0
- package/dist/components/ic/DropdownInputController.svelte +226 -0
- package/dist/components/ic/DropdownInputController.svelte.d.ts +43 -0
- package/dist/components/ic/FixedPositionInputController.svelte +353 -0
- package/dist/components/ic/FixedPositionInputController.svelte.d.ts +23 -0
- package/dist/components/ic/FontInputController.svelte +2062 -0
- package/dist/components/ic/FontInputController.svelte.d.ts +47 -0
- package/dist/components/ic/InputControllerHeader.svelte +147 -0
- package/dist/components/ic/InputControllerHeader.svelte.d.ts +23 -0
- package/dist/components/ic/NumberControls.svelte +299 -0
- package/dist/components/ic/NumberControls.svelte.d.ts +30 -0
- package/dist/components/ic/NumberInputController.svelte +397 -0
- package/dist/components/ic/NumberInputController.svelte.d.ts +30 -0
- package/dist/components/ic/PositionInputController.svelte +252 -0
- package/dist/components/ic/PositionInputController.svelte.d.ts +37 -0
- package/dist/components/ic/RadioGroupInputController.svelte +162 -0
- package/dist/components/ic/RadioGroupInputController.svelte.d.ts +38 -0
- package/dist/components/ic/RangeCalendarInputController.svelte +262 -0
- package/dist/components/ic/RangeCalendarInputController.svelte.d.ts +32 -0
- package/dist/components/ic/RoundedCornersInputController.svelte +469 -0
- package/dist/components/ic/RoundedCornersInputController.svelte.d.ts +37 -0
- package/dist/components/ic/SliderInputController.svelte +411 -0
- package/dist/components/ic/SliderInputController.svelte.d.ts +46 -0
- package/dist/components/ic/SliderRangeInputController.svelte +155 -0
- package/dist/components/ic/SliderRangeInputController.svelte.d.ts +33 -0
- package/dist/components/ic/SwitchInputController.svelte +107 -0
- package/dist/components/ic/SwitchInputController.svelte.d.ts +24 -0
- package/dist/components/ic/TagsInputController.svelte +125 -0
- package/dist/components/ic/TagsInputController.svelte.d.ts +27 -0
- package/dist/components/ic/TextAreaInputController.svelte +1804 -0
- package/dist/components/ic/TextAreaInputController.svelte.d.ts +13 -0
- package/dist/components/ic/TextAreaPreviewInputController.svelte +476 -0
- package/dist/components/ic/TextAreaPreviewInputController.svelte.d.ts +28 -0
- package/dist/components/ic/TextInputController.svelte +70 -0
- package/dist/components/ic/TextInputController.svelte.d.ts +30 -0
- package/dist/components/ic/TimeInputController.svelte +434 -0
- package/dist/components/ic/TimeInputController.svelte.d.ts +25 -0
- package/dist/components/ic/VectorInputController.svelte +1826 -0
- package/dist/components/ic/VectorInputController.svelte.d.ts +47 -0
- package/dist/components/ic/index.d.ts +39 -0
- package/dist/components/ic/index.js +24 -0
- package/dist/components/ic/shared/CategoryTabs.svelte +40 -0
- package/dist/components/ic/shared/CategoryTabs.svelte.d.ts +25 -0
- package/dist/components/ic/shared/ItemGrid.svelte +181 -0
- package/dist/components/ic/shared/ItemGrid.svelte.d.ts +35 -0
- package/dist/components/ic/shared/RecentItemsSection.svelte +260 -0
- package/dist/components/ic/shared/RecentItemsSection.svelte.d.ts +35 -0
- package/dist/components/ic/shared/index.d.ts +8 -0
- package/dist/components/ic/shared/index.js +9 -0
- package/dist/components/icons/addnew.svelte +21 -0
- package/dist/components/icons/addnew.svelte.d.ts +20 -0
- package/dist/components/icons/drag.svelte +29 -0
- package/dist/components/icons/drag.svelte.d.ts +20 -0
- package/dist/components/icons/drag.svg +1 -0
- package/dist/components/icons/locked.svelte +4 -0
- package/dist/components/icons/locked.svelte.d.ts +26 -0
- package/dist/components/icons/locked.svg +4 -0
- package/dist/components/icons/ok.svelte +20 -0
- package/dist/components/icons/ok.svelte.d.ts +20 -0
- package/dist/components/icons/ok.svg +11 -0
- package/dist/components/icons/unlocked.svelte +4 -0
- package/dist/components/icons/unlocked.svelte.d.ts +26 -0
- package/dist/components/icons/unlocked.svg +4 -0
- package/dist/components/icons/x.svelte +14 -0
- package/dist/components/icons/x.svelte.d.ts +20 -0
- package/dist/components/icons/x.svg +5 -0
- package/dist/components/ui/arrows/OpacitySliderArrows.svelte +43 -0
- package/dist/components/ui/arrows/OpacitySliderArrows.svelte.d.ts +23 -0
- package/dist/components/ui/checkerboard-background/CheckerboardBackground.svelte +15 -0
- package/dist/components/ui/checkerboard-background/CheckerboardBackground.svelte.d.ts +20 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.js +19 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +8 -0
- package/dist/stores/userSession.d.ts +7 -0
- package/dist/stores/userSession.js +28 -0
- package/dist/utils/FontManager.d.ts +276 -0
- package/dist/utils/FontManager.js +1283 -0
- package/dist/utils/MediaManager.d.ts +35 -0
- package/dist/utils/MediaManager.js +59 -0
- package/dist/utils/VectorManager.d.ts +190 -0
- package/dist/utils/VectorManager.js +754 -0
- package/dist/utils/colorAutocomplete.d.ts +10 -0
- package/dist/utils/colorAutocomplete.js +28 -0
- package/dist/utils/colorNames.d.ts +3 -0
- package/dist/utils/colorNames.js +152 -0
- package/dist/utils/colorTransparency.d.ts +52 -0
- package/dist/utils/colorTransparency.js +114 -0
- package/dist/utils/fontUtils.d.ts +34 -0
- package/dist/utils/fontUtils.js +132 -0
- package/dist/utils/passiveEvents.js +20 -0
- package/dist/utils/recentColors.d.ts +10 -0
- package/dist/utils/recentColors.js +63 -0
- package/dist/utils/skipFonts.d.ts +3 -0
- package/dist/utils/skipFonts.js +49 -0
- package/dist/utils/vectorUtils.d.ts +34 -0
- package/dist/utils/vectorUtils.js +71 -0
- package/dist/utils.d.ts +11 -0
- package/dist/utils.js +38 -0
- package/package.json +134 -74
- package/.babelrc +0 -10
- package/.bowerrc +0 -4
- package/.nvmrc +0 -1
- package/Gruntfile.coffee +0 -69
- package/bower.json +0 -28
- package/css/browser/entries/activateable.styl +0 -29
- package/css/browser/entries/audio.styl +0 -39
- package/css/browser/entries/folder.styl +0 -79
- package/css/browser/entries/image.styl +0 -26
- package/css/browser/entries/index.styl +0 -66
- package/css/browser/entries/rss.styl +0 -11
- package/css/browser/entries/video.styl +0 -11
- package/css/browser/index.styl +0 -86
- package/css/browser/intent/index.styl +0 -61
- package/css/browser/nav/index.styl +0 -73
- package/css/browser/social-browser.styl +0 -23
- package/css/controls/clock.styl +0 -110
- package/css/controls/config.styl +0 -6
- package/css/controls/control-audio-details.styl +0 -63
- package/css/controls/control-audio.styl +0 -28
- package/css/controls/control-browser.styl +0 -48
- package/css/controls/control-color.styl +0 -423
- package/css/controls/control-date_time.styl +0 -191
- package/css/controls/control-dropdown.styl +0 -79
- package/css/controls/control-font.styl +0 -147
- package/css/controls/control-image-details.styl +0 -35
- package/css/controls/control-image.styl +0 -43
- package/css/controls/control-order-picker.styl +0 -29
- package/css/controls/control-position.styl +0 -390
- package/css/controls/control-range.styl +0 -68
- package/css/controls/control-scale.styl +0 -30
- package/css/controls/control-slider.styl +0 -38
- package/css/controls/control-spinner.styl +0 -39
- package/css/controls/control-textarea.styl +0 -52
- package/css/controls/control-toggle.styl +0 -34
- package/css/controls/control-url.styl +0 -32
- package/css/controls/control-video-details.styl +0 -85
- package/css/controls/control-video.styl +0 -43
- package/css/controls/general.styl +0 -98
- package/css/controls/index.styl +0 -25
- package/css/editor/colors.styl +0 -7
- package/css/editor/content/directinput.styl +0 -47
- package/css/editor/content/index.styl +0 -111
- package/css/editor/content/message.styl +0 -53
- package/css/editor/content/tabs.styl +0 -75
- package/css/editor/copied-from-old-style.styl +0 -197
- package/css/editor/details/bulk-editor.styl +0 -104
- package/css/editor/details/index.styl +0 -21
- package/css/editor/details/item.styl +0 -153
- package/css/editor/embed.styl +0 -106
- package/css/editor/footer.styl +0 -180
- package/css/editor/full-editor.styl +0 -16
- package/css/editor/index.styl +0 -124
- package/css/editor/login-popup.styl +0 -13
- package/css/editor/preview.styl +0 -257
- package/css/editor/skin/editor/index.styl +0 -54
- package/css/editor/skin/editor/tabs.styl +0 -111
- package/css/editor/skin/index.styl +0 -138
- package/css/editor/skin/popup.styl +0 -152
- package/css/editor/skin/presets/dropdown.styl +0 -61
- package/css/editor/skin/presets/index.styl +0 -86
- package/css/editor/skin/presets/list.styl +0 -244
- package/css/editor/tooltips.styl +0 -85
- package/css/fonts.styl +0 -47
- package/css/icons/BlogvioEditor.dev.svg +0 -112
- package/css/icons.styl +0 -16
- package/css/img/arrow-right-rounded-v-small.png +0 -0
- package/css/img/browser-folder-separator.png +0 -0
- package/css/img/calendar-input-icons.png +0 -0
- package/css/img/check.png +0 -0
- package/css/img/close.png +0 -0
- package/css/img/composition/edit-icon.png +0 -0
- package/css/img/content/audio-icon.png +0 -0
- package/css/img/content/folder-icon.png +0 -0
- package/css/img/content/messages/error-background.png +0 -0
- package/css/img/content/messages/error-icon.png +0 -0
- package/css/img/content/messages/notification-background.png +0 -0
- package/css/img/content/messages/notification-icon.png +0 -0
- package/css/img/content/no-files-audio.png +0 -0
- package/css/img/content/no-files-image.png +0 -0
- package/css/img/content/no-files-video.png +0 -0
- package/css/img/content/no-files.png +0 -0
- package/css/img/content/rss-icon.png +0 -0
- package/css/img/content/selected.png +0 -0
- package/css/img/content/video-icon.png +0 -0
- package/css/img/content/with-control-text.png +0 -0
- package/css/img/control-dropdown-arrow.png +0 -0
- package/css/img/control-image-valid.png +0 -0
- package/css/img/control-position-icon.png +0 -0
- package/css/img/control-scale-lock-icon.png +0 -0
- package/css/img/control-slider-arrows-hover.png +0 -0
- package/css/img/control-slider-arrows.png +0 -0
- package/css/img/control-spinner-buttons-hover.png +0 -0
- package/css/img/control-spinner-buttons.png +0 -0
- package/css/img/control-textarea-bold-active.png +0 -0
- package/css/img/control-textarea-bold.png +0 -0
- package/css/img/control-textarea-italic-active.png +0 -0
- package/css/img/control-textarea-italic.png +0 -0
- package/css/img/control-textarea-underline-active.png +0 -0
- package/css/img/control-textarea-underline.png +0 -0
- package/css/img/custom-checkbox-sprite.png +0 -0
- package/css/img/details/item-collapse-icon.png +0 -0
- package/css/img/details/item-expand-icon.png +0 -0
- package/css/img/details/item-sort-icon.png +0 -0
- package/css/img/done-arrow.png +0 -0
- package/css/img/fb-logo-icon-w.png +0 -0
- package/css/img/grid-icons.png +0 -0
- package/css/img/icon-reference.png +0 -0
- package/css/img/indicator.png +0 -0
- package/css/img/loader.gif +0 -0
- package/css/img/loaders/audio-white.png +0 -0
- package/css/img/loaders/audio.png +0 -0
- package/css/img/loaders/photo-white.png +0 -0
- package/css/img/loaders/photo.png +0 -0
- package/css/img/loaders/util-white.png +0 -0
- package/css/img/loaders/util.png +0 -0
- package/css/img/loaders/video-white.png +0 -0
- package/css/img/loaders/video.png +0 -0
- package/css/img/maximize.png +0 -0
- package/css/img/minimize.png +0 -0
- package/css/img/next-btn.png +0 -0
- package/css/img/search-icon-sprite.png +0 -0
- package/css/img/services/blogvio.png +0 -0
- package/css/img/services/drive.png +0 -0
- package/css/img/services/dropbox-login.png +0 -0
- package/css/img/services/dropbox.png +0 -0
- package/css/img/services/facebook-login.png +0 -0
- package/css/img/services/facebook.png +0 -0
- package/css/img/services/flickr-login.png +0 -0
- package/css/img/services/flickr.png +0 -0
- package/css/img/services/instagram-login.png +0 -0
- package/css/img/services/instagram.png +0 -0
- package/css/img/services/text.png +0 -0
- package/css/img/services/uploads.png +0 -0
- package/css/img/services/uploads.svg +0 -689
- package/css/img/services/webaddress-bw.png +0 -0
- package/css/img/services/webaddress.png +0 -0
- package/css/img/services/webadress.png +0 -0
- package/css/img/services/websearch.png +0 -0
- package/css/img/services/wix.png +0 -0
- package/css/img/skin/item-active-indicator.png +0 -0
- package/css/img/skin/item-hover-icon.png +0 -0
- package/css/img/skin/overwrite.png +0 -0
- package/css/img/skin/popup-name-icon.png +0 -0
- package/css/img/skin/popup-save.png +0 -0
- package/css/img/skin/preset.png +0 -0
- package/css/img/skin/presets-arrow-purple.png +0 -0
- package/css/img/tw-icon-w.png +0 -0
- package/css/img/warning.png +0 -0
- package/css/img/white-rounded-check.png +0 -0
- package/css/index.styl +0 -9
- package/css/mixins.styl +0 -62
- package/css/scrollable.styl +0 -101
- package/karma.conf.js +0 -73
- package/lib/control.js +0 -1
- package/lib/controls.js +0 -1
- package/lib/core.editor.js +0 -4
- package/lib/core.js +0 -1
- package/lib/core.vendor.js +0 -3
- package/lib/dev/control.js +0 -845
- package/lib/dev/controls.js +0 -7774
- package/lib/dev/core.editor.js +0 -6439
- package/lib/dev/core.js +0 -1486
- package/lib/dev/core.vendor.js +0 -10708
- package/lib/dev/editor.css +0 -166
- package/lib/dev/editor.js +0 -29710
- package/lib/dev/editor.vendor.js +0 -15119
- package/lib/dev/jquery.nanoscroller.js.map +0 -10
- package/lib/editor.css +0 -167
- package/lib/editor.js +0 -49
- package/lib/editor.vendor.js +0 -11
- package/src/api/index.coffee +0 -23
- package/src/api/mixin.coffee +0 -89
- package/src/browser/controller/entry/audio.coffee +0 -38
- package/src/browser/controller/entry/button.coffee +0 -16
- package/src/browser/controller/entry/file.coffee +0 -35
- package/src/browser/controller/entry/folder.coffee +0 -14
- package/src/browser/controller/entry/image.coffee +0 -24
- package/src/browser/controller/entry/index.coffee +0 -18
- package/src/browser/controller/entry/rss.coffee +0 -5
- package/src/browser/controller/entry/video.coffee +0 -4
- package/src/browser/controller/index.coffee +0 -289
- package/src/browser/controller/instagram.coffee +0 -129
- package/src/browser/controller/navbar.coffee +0 -48
- package/src/browser/controller/social.coffee +0 -213
- package/src/browser/model/entry.coffee +0 -18
- package/src/browser/model/index.coffee +0 -34
- package/src/core/controller/font-loader.coffee +0 -65
- package/src/core/controller/lazyload.coffee +0 -14
- package/src/core/controller/overlay.coffee +0 -146
- package/src/core/controller/popup.coffee +0 -36
- package/src/core/controller/scrollable.coffee +0 -68
- package/src/core/controls/audio.coffee +0 -56
- package/src/core/controls/browser.coffee +0 -271
- package/src/core/controls/color.coffee +0 -121
- package/src/core/controls/date-time/calendar/index.coffee +0 -99
- package/src/core/controls/date-time/calendar/months.coffee +0 -52
- package/src/core/controls/date-time/calendar/years.coffee +0 -58
- package/src/core/controls/date-time/clock.coffee +0 -62
- package/src/core/controls/date-time/helper.coffee +0 -31
- package/src/core/controls/date-time/index.coffee +0 -62
- package/src/core/controls/date-time/popup.coffee +0 -56
- package/src/core/controls/details/audio.coffee +0 -33
- package/src/core/controls/details/image.coffee +0 -19
- package/src/core/controls/details/video.coffee +0 -14
- package/src/core/controls/dropdown.coffee +0 -100
- package/src/core/controls/font/font-item.coffee +0 -22
- package/src/core/controls/font/font-list.coffee +0 -108
- package/src/core/controls/font/fonts-popup.coffee +0 -91
- package/src/core/controls/font/index.coffee +0 -66
- package/src/core/controls/image.coffee +0 -37
- package/src/core/controls/index.coffee +0 -88
- package/src/core/controls/orderPicker.coffee +0 -93
- package/src/core/controls/position/grid-panel.coffee +0 -75
- package/src/core/controls/position/index.coffee +0 -98
- package/src/core/controls/position/panel.coffee +0 -68
- package/src/core/controls/position/pixel-panel.coffee +0 -54
- package/src/core/controls/position/popup.coffee +0 -63
- package/src/core/controls/position/reference-panel.coffee +0 -26
- package/src/core/controls/range.coffee +0 -191
- package/src/core/controls/rss.coffee +0 -16
- package/src/core/controls/scale.coffee +0 -78
- package/src/core/controls/slider.coffee +0 -122
- package/src/core/controls/stepper.coffee +0 -97
- package/src/core/controls/text.coffee +0 -54
- package/src/core/controls/textarea.coffee +0 -78
- package/src/core/controls/toggle.coffee +0 -29
- package/src/core/controls/url.coffee +0 -88
- package/src/core/controls/video.coffee +0 -9
- package/src/core/embed/api.js +0 -178
- package/src/core/embed/controller.js +0 -331
- package/src/core/models/composition.coffee +0 -178
- package/src/core/models/content.coffee +0 -79
- package/src/core/models/skin.coffee +0 -91
- package/src/core/models/user.coffee +0 -6
- package/src/core/models/widget.coffee +0 -88
- package/src/core/router/index.coffee +0 -44
- package/src/core/services/container/index.js +0 -18
- package/src/core/services/container/instance.js +0 -3
- package/src/core/services/content.js +0 -80
- package/src/core/services/instagram.coffee +0 -47
- package/src/core/services/mixin/events.js +0 -17
- package/src/core/services/service.js +0 -1
- package/src/core/services/sounds.js +0 -81
- package/src/core/services/uploads.js +0 -299
- package/src/core/utils/popup.coffee +0 -67
- package/src/core/utils/should-show.coffee +0 -12
- package/src/core/views/audio-details.pug +0 -9
- package/src/core/views/audio.pug +0 -7
- package/src/core/views/browser.pug +0 -4
- package/src/core/views/color.pug +0 -8
- package/src/core/views/date-time/calendar.pug +0 -3
- package/src/core/views/date-time/clock.pug +0 -12
- package/src/core/views/date-time/grid.pug +0 -6
- package/src/core/views/date-time/input.pug +0 -4
- package/src/core/views/date-time/table.pug +0 -6
- package/src/core/views/dropdown.pug +0 -9
- package/src/core/views/font/font-item.pug +0 -3
- package/src/core/views/font/fonts-list.pug +0 -7
- package/src/core/views/font/fonts-popup.pug +0 -5
- package/src/core/views/font/index.pug +0 -7
- package/src/core/views/image-details.pug +0 -6
- package/src/core/views/image.pug +0 -5
- package/src/core/views/input-layout.pug +0 -15
- package/src/core/views/order-items.pug +0 -7
- package/src/core/views/order-picker.pug +0 -7
- package/src/core/views/pixelpanel.pug +0 -69
- package/src/core/views/position.pug +0 -10
- package/src/core/views/range.pug +0 -9
- package/src/core/views/scale.pug +0 -7
- package/src/core/views/slider.pug +0 -6
- package/src/core/views/stepper.pug +0 -6
- package/src/core/views/text.pug +0 -4
- package/src/core/views/textarea.pug +0 -8
- package/src/core/views/toggle.pug +0 -5
- package/src/core/views/video-details.pug +0 -7
- package/src/core/views/video.pug +0 -4
- package/src/core/widget/index.coffee +0 -66
- package/src/editor/content/browser/dropzone.html +0 -268
- package/src/editor/content/browser/file.html +0 -124
- package/src/editor/content/browser/scroll-pane.html +0 -32
- package/src/editor/content/browser/service.html +0 -53
- package/src/editor/content/browser/upload.coffee +0 -44
- package/src/editor/content/browser/upload.html +0 -439
- package/src/editor/content/index.coffee +0 -294
- package/src/editor/content/input/field.coffee +0 -45
- package/src/editor/content/input/index.coffee +0 -115
- package/src/editor/content/service/base/photoitem.coffee +0 -49
- package/src/editor/content/service/cache.coffee +0 -20
- package/src/editor/content/service/default.coffee +0 -59
- package/src/editor/content/service/dropbox.coffee +0 -71
- package/src/editor/content/service/facebook.coffee +0 -143
- package/src/editor/content/service/flickr.coffee +0 -85
- package/src/editor/content/service/google-drive-sdk.coffee +0 -18
- package/src/editor/content/service/google-drive.coffee +0 -144
- package/src/editor/content/service/instagram-social.coffee +0 -84
- package/src/editor/content/service/instagram.coffee +0 -168
- package/src/editor/content/service/share-popup.coffee +0 -15
- package/src/editor/content/service/soundcloud.coffee +0 -163
- package/src/editor/content/tab.coffee +0 -27
- package/src/editor/details/bulk-editor/attributes-panel.coffee +0 -11
- package/src/editor/details/bulk-editor/index.coffee +0 -86
- package/src/editor/details/index.coffee +0 -156
- package/src/editor/details/item/attributes.coffee +0 -45
- package/src/editor/details/item/index.coffee +0 -82
- package/src/editor/editor.coffee +0 -274
- package/src/editor/footer/breadcrumb.coffee +0 -17
- package/src/editor/footer/index.coffee +0 -36
- package/src/editor/index.coffee +0 -79
- package/src/editor/listeners/embed-listener.coffee +0 -143
- package/src/editor/login-popup.coffee +0 -29
- package/src/editor/notification-controller.coffee +0 -35
- package/src/editor/popup.coffee +0 -68
- package/src/editor/remote-preview.coffee +0 -68
- package/src/editor/save/index.coffee +0 -62
- package/src/editor/skin/delete.coffee +0 -33
- package/src/editor/skin/editor/index.coffee +0 -188
- package/src/editor/skin/editor/panel.coffee +0 -37
- package/src/editor/skin/index.coffee +0 -126
- package/src/editor/skin/save.coffee +0 -58
- package/src/editor/skin/selector/index.coffee +0 -59
- package/src/editor/skin/selector/item.coffee +0 -123
- package/src/editor/skin/selector/list.coffee +0 -97
- package/src/editor/views/embed.pug +0 -10
- package/src/editor/views/loginbutton.pug +0 -8
- package/src/editor/views/popup.pug +0 -17
- package/src/editor/views/presets.pug +0 -8
- package/src/editor/views/presetslist-header.pug +0 -8
- package/src/editor/views/skinitem.pug +0 -13
- package/src/modules/control.js +0 -3
- package/src/modules/controls.js +0 -29
- package/src/modules/core.js +0 -19
- package/src/modules/editor.js +0 -80
- package/test/config.js +0 -3
- package/test/core/models/skin-spec.js +0 -209
- package/webpack.config.js +0 -46
- package/webpack.config.prod.js +0 -9
- /package/{src/core/views/date-time/popup.pug → dist/utils/passiveEvents.d.ts} +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { InputControllerConfig } from './index';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
class: string;
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
onChange: (newValue: string) => void;
|
|
7
|
+
config?: InputControllerConfig;
|
|
8
|
+
description?: string;
|
|
9
|
+
onFocus?: () => void;
|
|
10
|
+
};
|
|
11
|
+
declare const TextAreaInputController: import("svelte").Component<$$ComponentProps, {}, "value">;
|
|
12
|
+
type TextAreaInputController = ReturnType<typeof TextAreaInputController>;
|
|
13
|
+
export default TextAreaInputController;
|
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// Import Shadcn UI components from Widgetic design-system package
|
|
3
|
+
import { Button, Portal } from '@widgetic/design-system/components';
|
|
4
|
+
import { IconArrowsDiagonal, IconArrowsMaximize, IconX, IconBrush, IconBold, IconItalic, IconUnderline, IconLink } from '@widgetic/design-system/icons';
|
|
5
|
+
import { onMount, onDestroy } from 'svelte';
|
|
6
|
+
|
|
7
|
+
// Local components
|
|
8
|
+
import { InputControllerHeader, TextAreaInputController } from './index';
|
|
9
|
+
import type { InputControllerConfig } from './index';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Component props
|
|
13
|
+
*/
|
|
14
|
+
export let label: string = '';
|
|
15
|
+
export let value: string = '';
|
|
16
|
+
export let onChange: any;
|
|
17
|
+
export let config: InputControllerConfig = {};
|
|
18
|
+
export let description: string | undefined = undefined;
|
|
19
|
+
export let portalTarget: string = '';
|
|
20
|
+
/**
|
|
21
|
+
* Local Variables
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
// Use config values with fallbacks
|
|
25
|
+
const placeholder: string = config.placeholder || '';
|
|
26
|
+
|
|
27
|
+
let isShowingTextArea = false;
|
|
28
|
+
|
|
29
|
+
// Add a computed property to determine if we're showing placeholder
|
|
30
|
+
$: isShowingPlaceholder = !value && placeholder;
|
|
31
|
+
|
|
32
|
+
// Create a preview version of the text that preserves formatting
|
|
33
|
+
$: previewText = value ? createPreviewText(value) : placeholder;
|
|
34
|
+
|
|
35
|
+
// Add this to track the current color
|
|
36
|
+
let currentColor = '#1a1a1a'; // Default color
|
|
37
|
+
|
|
38
|
+
// Add this near the top with other state declarations
|
|
39
|
+
let isPortalHovered = false;
|
|
40
|
+
|
|
41
|
+
// Add this to store the background rect ref
|
|
42
|
+
let backgroundRectRef: HTMLDivElement;
|
|
43
|
+
|
|
44
|
+
// Add these near the top with other state declarations
|
|
45
|
+
let isClosing = false;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Methods
|
|
49
|
+
*/
|
|
50
|
+
function createPreviewText(text: string) {
|
|
51
|
+
if (!text) return '';
|
|
52
|
+
|
|
53
|
+
const parser = new DOMParser();
|
|
54
|
+
const doc = parser.parseFromString(text, 'text/html');
|
|
55
|
+
|
|
56
|
+
function processNode(node: Node): string {
|
|
57
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
58
|
+
return node.textContent || '';
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
62
|
+
const element = node as Element;
|
|
63
|
+
const tag = element.tagName.toLowerCase();
|
|
64
|
+
const attributes: Record<string, string> = {};
|
|
65
|
+
|
|
66
|
+
// Preserve all style attributes
|
|
67
|
+
const style = element.getAttribute('style');
|
|
68
|
+
if (style) {
|
|
69
|
+
// Extract color value from style
|
|
70
|
+
const colorMatch = style.match(/color:\s*([^;]+)/);
|
|
71
|
+
if (colorMatch) {
|
|
72
|
+
const color = colorMatch[1];
|
|
73
|
+
// Set the color as a CSS variable
|
|
74
|
+
attributes.style = `--color: ${color}; ${style}`;
|
|
75
|
+
} else {
|
|
76
|
+
attributes.style = style;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Preserve data-text-style attribute
|
|
81
|
+
const textStyle = element.getAttribute('data-text-style');
|
|
82
|
+
if (textStyle) {
|
|
83
|
+
attributes['data-text-style'] = textStyle;
|
|
84
|
+
// Add preserve-color class
|
|
85
|
+
attributes.class = (attributes.class || '') + ' preserve-color';
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Preserve heading classes
|
|
89
|
+
if (tag.match(/^h[1-4]$/)) {
|
|
90
|
+
attributes.class = (attributes.class || '') + ' tiptap-heading';
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Build start tag with attributes
|
|
94
|
+
let startTag = `<${tag}`;
|
|
95
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
96
|
+
startTag += ` ${key}="${value.trim()}"`;
|
|
97
|
+
}
|
|
98
|
+
startTag += '>';
|
|
99
|
+
|
|
100
|
+
// Process child nodes
|
|
101
|
+
const children = Array.from(node.childNodes)
|
|
102
|
+
.map(child => processNode(child))
|
|
103
|
+
.join('');
|
|
104
|
+
|
|
105
|
+
return `${startTag}${children}</${tag}>`;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return '';
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const processedNodes = Array.from(doc.body.childNodes)
|
|
112
|
+
.map(node => processNode(node))
|
|
113
|
+
.join('');
|
|
114
|
+
|
|
115
|
+
return processedNodes;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function handleClick() {
|
|
119
|
+
console.log('Opening text area in portal');
|
|
120
|
+
isShowingTextArea = !isShowingTextArea;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
$: if (isShowingTextArea) {
|
|
124
|
+
setTimeout(() => {
|
|
125
|
+
const editor = document.querySelector('.ProseMirror');
|
|
126
|
+
if (editor instanceof HTMLElement) {
|
|
127
|
+
editor.focus();
|
|
128
|
+
}
|
|
129
|
+
}, 100); // Give a bit more time for the portal to mount
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Update value reactively to track color changes
|
|
133
|
+
$: {
|
|
134
|
+
if (value) {
|
|
135
|
+
const colorMatch = value.match(/color:\s*(#[0-9A-Fa-f]{6}|rgb\([^)]+\))/);
|
|
136
|
+
if (colorMatch) {
|
|
137
|
+
currentColor = colorMatch[1];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function handlePortalMouseEnter() {
|
|
143
|
+
// console.log('Portal mouse entered');
|
|
144
|
+
isPortalHovered = true;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function handlePortalMouseLeave(event: MouseEvent) {
|
|
148
|
+
// if (!backgroundRectRef) return;
|
|
149
|
+
// console.log('Portal mouse leave: ', event, backgroundRectRef.getBoundingClientRect());
|
|
150
|
+
|
|
151
|
+
// Get mouse position relative to the portal content
|
|
152
|
+
const { offsetX, offsetY } = event;
|
|
153
|
+
const offsetWidth = backgroundRectRef.getBoundingClientRect().width;
|
|
154
|
+
const offsetHeight = backgroundRectRef.getBoundingClientRect().height;
|
|
155
|
+
// console.log('Portal mouse leave mousePosition: ', offsetX, offsetY, offsetWidth, offsetHeight);
|
|
156
|
+
|
|
157
|
+
// Check if cursor is within the background rect boundaries
|
|
158
|
+
if (
|
|
159
|
+
0 < offsetX && offsetX < offsetWidth &&
|
|
160
|
+
0 < offsetY && offsetY < offsetHeight
|
|
161
|
+
) {
|
|
162
|
+
// console.log('Portal mouse leave mousePosition: ', offsetX, offsetY, offsetWidth, offsetHeight);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// console.log('Portal mouse leave mousePosition: ', offsetX, offsetY, offsetWidth, offsetHeight);
|
|
167
|
+
isPortalHovered = false;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Add keyboard event handler for Escape key
|
|
171
|
+
function handleKeydown(event: KeyboardEvent) {
|
|
172
|
+
if (event.key === 'Escape' && isShowingTextArea) {
|
|
173
|
+
handleClose();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
onMount(() => {
|
|
178
|
+
// Add keyboard event listener when component mounts
|
|
179
|
+
window.addEventListener('keydown', handleKeydown);
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
onDestroy(() => {
|
|
183
|
+
// Remove keyboard event listener when component is destroyed
|
|
184
|
+
window.removeEventListener('keydown', handleKeydown);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
// Update the close handler
|
|
188
|
+
function handleClose() {
|
|
189
|
+
if (isClosing) return; // Prevent multiple closes
|
|
190
|
+
isClosing = true;
|
|
191
|
+
|
|
192
|
+
// Add animation end handler
|
|
193
|
+
const content = document.querySelector('.text-area-portal-content') as HTMLDivElement;
|
|
194
|
+
const overlay = content?.previousElementSibling as HTMLDivElement;
|
|
195
|
+
|
|
196
|
+
const handleAnimationEnd = () => {
|
|
197
|
+
if (content) content.dataset.state = 'complete';
|
|
198
|
+
if (overlay) overlay.dataset.state = 'complete';
|
|
199
|
+
|
|
200
|
+
// Remove the elements after a short delay
|
|
201
|
+
setTimeout(() => {
|
|
202
|
+
isShowingTextArea = false;
|
|
203
|
+
isClosing = false;
|
|
204
|
+
if (content) content.dataset.state = '';
|
|
205
|
+
if (overlay) overlay.dataset.state = '';
|
|
206
|
+
}, 50);
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
// Listen for the end of the scale animation
|
|
210
|
+
content?.addEventListener('animationend', handleAnimationEnd, { once: true });
|
|
211
|
+
}
|
|
212
|
+
</script>
|
|
213
|
+
|
|
214
|
+
<div class="text-area-preview-input-controller flex items-center justify-between w-full widgetic-colors">
|
|
215
|
+
<div class="header-container flex-1 min-w-0">
|
|
216
|
+
<InputControllerHeader {label} />
|
|
217
|
+
</div>
|
|
218
|
+
|
|
219
|
+
<div
|
|
220
|
+
class="text-area-preview-main-container w-[185px] flex-shrink-0"
|
|
221
|
+
>
|
|
222
|
+
<div
|
|
223
|
+
class="h-[92px] w-full border border-grey2 flex items-start bg-grey1 transition-colors duration-200 hover:border-forest-green cursor-pointer group overflow-hidden"
|
|
224
|
+
style="border-radius: var(--radius-large);"
|
|
225
|
+
on:click={handleClick}
|
|
226
|
+
on:keydown={(e) => e.key === 'Enter' && handleClick()}
|
|
227
|
+
role="button"
|
|
228
|
+
tabindex="0"
|
|
229
|
+
>
|
|
230
|
+
<div class="relative w-full h-full">
|
|
231
|
+
<div
|
|
232
|
+
class="absolute top-0 left-0 w-full h-full flex flex-col"
|
|
233
|
+
>
|
|
234
|
+
<div class="flex-1" style="padding: 13px 48px 16px 16px;">
|
|
235
|
+
<div
|
|
236
|
+
class="subtext line-clamp-3 break-words text-ellipsis prose-sm w-[129px] text-grey7"
|
|
237
|
+
class:text-grey3={isShowingPlaceholder}
|
|
238
|
+
style="display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden;"
|
|
239
|
+
>
|
|
240
|
+
{@html previewText}
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
<div class="absolute top-[14px] right-[12px]">
|
|
244
|
+
<IconArrowsDiagonal
|
|
245
|
+
class="w-5 h-5 text-grey5 group-hover:text-grey7 transition-colors duration-200"
|
|
246
|
+
/>
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
</div>
|
|
250
|
+
</div>
|
|
251
|
+
</div>
|
|
252
|
+
|
|
253
|
+
<!-- Description -->
|
|
254
|
+
{#if description}
|
|
255
|
+
<p class="subtext text-grey5">{description}</p>
|
|
256
|
+
{/if}
|
|
257
|
+
|
|
258
|
+
<!-- Text Area Input Controller in Portal -->
|
|
259
|
+
{#if isShowingTextArea}
|
|
260
|
+
<Portal
|
|
261
|
+
target={portalTarget}
|
|
262
|
+
class="text-area-portal absolute top-0 left-0 w-full h-full"
|
|
263
|
+
>
|
|
264
|
+
<!-- Blocking overlay -->
|
|
265
|
+
<div
|
|
266
|
+
class="absolute inset-0 bg-white {isClosing ? 'fade-out-animation' : 'fade-in-animation'}"
|
|
267
|
+
style="z-index: 50; transform: translateZ(0); backface-visibility: hidden;"
|
|
268
|
+
></div>
|
|
269
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
270
|
+
<div
|
|
271
|
+
class="text-area-portal-content absolute mt-4 mx-6 mb-6 inset-0 {isClosing ? 'scale-out-animation' : 'scale-in-animation'}"
|
|
272
|
+
style="z-index: 51; transform: translateZ(0); backface-visibility: hidden;"
|
|
273
|
+
on:mouseenter={handlePortalMouseEnter}
|
|
274
|
+
on:mouseleave={handlePortalMouseLeave}
|
|
275
|
+
>
|
|
276
|
+
<!-- Background rect that defines our hover boundaries -->
|
|
277
|
+
<div
|
|
278
|
+
bind:this={backgroundRectRef}
|
|
279
|
+
class="portal-background-rect absolute inset-0 bg-transparent pointer-events-none"
|
|
280
|
+
style="border-radius: var(--radius-large);"
|
|
281
|
+
></div>
|
|
282
|
+
|
|
283
|
+
<Button
|
|
284
|
+
variant="ghost"
|
|
285
|
+
class="absolute z-[999] p-0 hover:bg-transparent h-[32px] w-[32px] top-[10px] right-[10px]"
|
|
286
|
+
onclick={handleClose}
|
|
287
|
+
>
|
|
288
|
+
<IconX
|
|
289
|
+
class="w-[24px] h-[24px] text-grey5 hover:text-grey7 transition-colors duration-200"
|
|
290
|
+
style="min-width: 24px; min-height: 24px;"
|
|
291
|
+
/>
|
|
292
|
+
</Button>
|
|
293
|
+
|
|
294
|
+
<TextAreaInputController
|
|
295
|
+
class="text-area w-full h-full transition-colors duration-200 {isPortalHovered ? 'border-solid !border-forest-green' : ''}"
|
|
296
|
+
label={label}
|
|
297
|
+
value={value}
|
|
298
|
+
onChange={onChange}
|
|
299
|
+
config={config}
|
|
300
|
+
description={description}
|
|
301
|
+
/>
|
|
302
|
+
</div>
|
|
303
|
+
</Portal>
|
|
304
|
+
{/if}
|
|
305
|
+
|
|
306
|
+
</div>
|
|
307
|
+
|
|
308
|
+
<style>
|
|
309
|
+
/* Keep only preview-specific styles */
|
|
310
|
+
:global(.text-area-preview-main-container .group) {
|
|
311
|
+
position: relative;
|
|
312
|
+
isolation: isolate;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
:global(.text-area-preview-main-container .group:hover) {
|
|
316
|
+
border-color: hsl(var(--forest-green)) !important;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
/* Heading styles matching tiptap editor */
|
|
321
|
+
:global(.subtext h1.tiptap-heading) {
|
|
322
|
+
font-size: 2em !important;
|
|
323
|
+
font-weight: 600 !important;
|
|
324
|
+
line-height: 1.2 !important;
|
|
325
|
+
margin-top: 0 !important;
|
|
326
|
+
margin-bottom: 0 !important;
|
|
327
|
+
color: inherit !important;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
:global(.subtext h2.tiptap-heading) {
|
|
331
|
+
font-size: 1.5em !important;
|
|
332
|
+
font-weight: 600 !important;
|
|
333
|
+
line-height: 1.3 !important;
|
|
334
|
+
margin-top: 0.4em !important;
|
|
335
|
+
margin-bottom: 0.2em !important;
|
|
336
|
+
color: inherit !important;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
:global(.subtext h3.tiptap-heading) {
|
|
340
|
+
font-size: 1.17em !important;
|
|
341
|
+
font-weight: 600 !important;
|
|
342
|
+
line-height: 1.3 !important;
|
|
343
|
+
margin-top: 0.3em !important;
|
|
344
|
+
margin-bottom: 0.2em !important;
|
|
345
|
+
color: inherit !important;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
:global(.subtext h4.tiptap-heading) {
|
|
349
|
+
font-size: 1em !important;
|
|
350
|
+
font-weight: 600 !important;
|
|
351
|
+
line-height: 1.4 !important;
|
|
352
|
+
margin-top: 0.2em !important;
|
|
353
|
+
margin-bottom: 0.1em !important;
|
|
354
|
+
color: inherit !important;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/* Color preservation */
|
|
358
|
+
:global(.subtext [style*="color"]) {
|
|
359
|
+
color: var(--color) !important;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/* Text formatting */
|
|
363
|
+
:global(.subtext strong),
|
|
364
|
+
:global(.subtext em),
|
|
365
|
+
:global(.subtext u) {
|
|
366
|
+
color: inherit !important;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
:global(.subtext strong[style*="color"]),
|
|
370
|
+
:global(.subtext em[style*="color"]),
|
|
371
|
+
:global(.subtext u[style*="color"]) {
|
|
372
|
+
color: var(--color) !important;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/* Add specific color inheritance for data-text-style */
|
|
376
|
+
:global(.subtext [data-text-style*="color"]) {
|
|
377
|
+
color: var(--color) !important;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/* Ensure all text elements can inherit colors */
|
|
381
|
+
:global(.subtext *) {
|
|
382
|
+
color: inherit;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/* Ensure paragraphs have no margins */
|
|
386
|
+
:global(.subtext p) {
|
|
387
|
+
margin-top: 0 !important;
|
|
388
|
+
margin-bottom: 0 !important;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/* Ensure line-clamp ellipsis inherits color */
|
|
392
|
+
:global(.line-clamp-3) {
|
|
393
|
+
-webkit-box-orient: vertical;
|
|
394
|
+
-webkit-line-clamp: 3;
|
|
395
|
+
line-clamp: 3;
|
|
396
|
+
display: -webkit-box;
|
|
397
|
+
overflow: hidden;
|
|
398
|
+
color: inherit;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/* Add scale animation */
|
|
402
|
+
@keyframes scaleIn {
|
|
403
|
+
from {
|
|
404
|
+
transform: scale(0.95) translateZ(0);
|
|
405
|
+
opacity: 0;
|
|
406
|
+
}
|
|
407
|
+
to {
|
|
408
|
+
transform: scale(1) translateZ(0);
|
|
409
|
+
opacity: 1;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
@keyframes fadeIn {
|
|
414
|
+
from {
|
|
415
|
+
opacity: 0;
|
|
416
|
+
}
|
|
417
|
+
to {
|
|
418
|
+
opacity: 1;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
:global(.scale-in-animation) {
|
|
423
|
+
animation: scaleIn 0.2s cubic-bezier(0.16, 1, 0.3, 1);
|
|
424
|
+
transform-origin: center center;
|
|
425
|
+
will-change: transform, opacity;
|
|
426
|
+
backface-visibility: hidden;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
:global(.fade-in-animation) {
|
|
430
|
+
animation: fadeIn 0.15s ease-out;
|
|
431
|
+
will-change: opacity;
|
|
432
|
+
backface-visibility: hidden;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/* Add scale out animation */
|
|
436
|
+
@keyframes scaleOut {
|
|
437
|
+
0% {
|
|
438
|
+
transform: scale(1) translateZ(0);
|
|
439
|
+
opacity: 1;
|
|
440
|
+
}
|
|
441
|
+
100% {
|
|
442
|
+
transform: scale(0.95) translateZ(0);
|
|
443
|
+
opacity: 0;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
@keyframes fadeOut {
|
|
448
|
+
0% {
|
|
449
|
+
opacity: 1;
|
|
450
|
+
}
|
|
451
|
+
100% {
|
|
452
|
+
opacity: 0;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
:global(.scale-out-animation) {
|
|
457
|
+
animation: scaleOut 0.2s cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
|
458
|
+
transform-origin: center center;
|
|
459
|
+
will-change: transform, opacity;
|
|
460
|
+
backface-visibility: hidden;
|
|
461
|
+
pointer-events: none;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
:global(.fade-out-animation) {
|
|
465
|
+
animation: fadeOut 0.15s ease-out forwards;
|
|
466
|
+
will-change: opacity;
|
|
467
|
+
backface-visibility: hidden;
|
|
468
|
+
pointer-events: none;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
/* Add a class to handle visibility at animation end */
|
|
472
|
+
:global(.scale-out-animation[data-state="complete"]),
|
|
473
|
+
:global(.fade-out-animation[data-state="complete"]) {
|
|
474
|
+
visibility: hidden;
|
|
475
|
+
}
|
|
476
|
+
</style>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { InputControllerConfig } from './index';
|
|
2
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
3
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
|
+
$$bindings?: Bindings;
|
|
5
|
+
} & Exports;
|
|
6
|
+
(internal: unknown, props: Props & {
|
|
7
|
+
$$events?: Events;
|
|
8
|
+
$$slots?: Slots;
|
|
9
|
+
}): Exports & {
|
|
10
|
+
$set?: any;
|
|
11
|
+
$on?: any;
|
|
12
|
+
};
|
|
13
|
+
z_$$bindings?: Bindings;
|
|
14
|
+
}
|
|
15
|
+
declare const TextAreaPreviewInputController: $$__sveltets_2_IsomorphicComponent<{
|
|
16
|
+
/**
|
|
17
|
+
* Component props
|
|
18
|
+
*/ label?: string;
|
|
19
|
+
value?: string;
|
|
20
|
+
onChange: any;
|
|
21
|
+
config?: InputControllerConfig;
|
|
22
|
+
description?: string | undefined;
|
|
23
|
+
portalTarget?: string;
|
|
24
|
+
}, {
|
|
25
|
+
[evt: string]: CustomEvent<any>;
|
|
26
|
+
}, {}, {}, string>;
|
|
27
|
+
type TextAreaPreviewInputController = InstanceType<typeof TextAreaPreviewInputController>;
|
|
28
|
+
export default TextAreaPreviewInputController;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// Import Shadcn UI components from Widgetic design-system package
|
|
3
|
+
import { Input } from '@widgetic/design-system/components';
|
|
4
|
+
import { InputControllerHeader } from './index';
|
|
5
|
+
|
|
6
|
+
// Component props
|
|
7
|
+
import type { InputControllerConfig } from './index';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Component props
|
|
11
|
+
*/
|
|
12
|
+
export let label: string;
|
|
13
|
+
export let value: string;
|
|
14
|
+
export let onChange: (newValue: string) => void;
|
|
15
|
+
export let config: InputControllerConfig = {};
|
|
16
|
+
|
|
17
|
+
// Use config values with fallbacks
|
|
18
|
+
export let type: 'text' | 'email' | 'url' = 'text';
|
|
19
|
+
export let placeholder: string = config.placeholder || '';
|
|
20
|
+
export let description: string | undefined = undefined;
|
|
21
|
+
export let onFocus: () => void = () => {};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Methods
|
|
25
|
+
*/
|
|
26
|
+
function validate(value: string): boolean {
|
|
27
|
+
switch (type) {
|
|
28
|
+
case 'email':
|
|
29
|
+
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
|
|
30
|
+
case 'url':
|
|
31
|
+
return /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/.test(value);
|
|
32
|
+
default:
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
</script>
|
|
37
|
+
|
|
38
|
+
<div class="flex flex-col gap-2 widgetic-colors">
|
|
39
|
+
<div class="flex items-center w-full relative">
|
|
40
|
+
<div class="flex-1 min-w-0">
|
|
41
|
+
<InputControllerHeader {label} />
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<div class="absolute right-0">
|
|
45
|
+
<div
|
|
46
|
+
class="h-[48px] w-[185px] rounded-large border border-grey2 flex items-center bg-grey1 transition-colors duration-200 hover:border-forest-green"
|
|
47
|
+
on:focusin={onFocus}
|
|
48
|
+
>
|
|
49
|
+
<Input
|
|
50
|
+
id="text-input"
|
|
51
|
+
{type}
|
|
52
|
+
{value}
|
|
53
|
+
{placeholder}
|
|
54
|
+
onfocus={onFocus}
|
|
55
|
+
oninput={(e) => {
|
|
56
|
+
const newValue = e.currentTarget.value;
|
|
57
|
+
if (validate(newValue)) {
|
|
58
|
+
onChange(newValue);
|
|
59
|
+
}
|
|
60
|
+
}}
|
|
61
|
+
class="h-full w-full border-none bg-transparent focus-visible:ring-0 focus-visible:ring-offset-0 subtext text-grey7 placeholder:text-grey3 placeholder:subtext px-4"
|
|
62
|
+
/>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
{#if description}
|
|
68
|
+
<p class="subtext text-grey5">{description}</p>
|
|
69
|
+
{/if}
|
|
70
|
+
</div>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { InputControllerConfig } from './index';
|
|
2
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
3
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
|
+
$$bindings?: Bindings;
|
|
5
|
+
} & Exports;
|
|
6
|
+
(internal: unknown, props: Props & {
|
|
7
|
+
$$events?: Events;
|
|
8
|
+
$$slots?: Slots;
|
|
9
|
+
}): Exports & {
|
|
10
|
+
$set?: any;
|
|
11
|
+
$on?: any;
|
|
12
|
+
};
|
|
13
|
+
z_$$bindings?: Bindings;
|
|
14
|
+
}
|
|
15
|
+
declare const TextInputController: $$__sveltets_2_IsomorphicComponent<{
|
|
16
|
+
/**
|
|
17
|
+
* Component props
|
|
18
|
+
*/ label: string;
|
|
19
|
+
value: string;
|
|
20
|
+
onChange: (newValue: string) => void;
|
|
21
|
+
config?: InputControllerConfig;
|
|
22
|
+
type?: "text" | "email" | "url";
|
|
23
|
+
placeholder?: string;
|
|
24
|
+
description?: string | undefined;
|
|
25
|
+
onFocus?: () => void;
|
|
26
|
+
}, {
|
|
27
|
+
[evt: string]: CustomEvent<any>;
|
|
28
|
+
}, {}, {}, string>;
|
|
29
|
+
type TextInputController = InstanceType<typeof TextInputController>;
|
|
30
|
+
export default TextInputController;
|