le-kit 0.0.2 → 0.1.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/LICENSE +1 -1
- package/dist/admin/index.d.ts +23 -0
- package/dist/admin/index.js +74 -0
- package/dist/cjs/index-CO4npcak.js +1796 -0
- package/dist/cjs/index-CO4npcak.js.map +1 -0
- package/dist/cjs/index.cjs.js +117 -0
- package/dist/cjs/index.cjs.js.map +1 -0
- package/dist/cjs/le-box.cjs.entry.js +184 -0
- package/dist/cjs/le-box.entry.cjs.js.map +1 -0
- package/dist/cjs/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.cjs.js.map +1 -0
- package/dist/cjs/le-button_6.cjs.entry.js +1199 -0
- package/dist/cjs/le-card.cjs.entry.js +29 -0
- package/dist/cjs/le-card.entry.cjs.js.map +1 -0
- package/dist/cjs/le-kit.cjs.js +25 -0
- package/dist/cjs/le-kit.cjs.js.map +1 -0
- package/dist/cjs/le-number-input.cjs.entry.js +202 -0
- package/dist/cjs/le-number-input.entry.cjs.js.map +1 -0
- package/dist/cjs/le-popup.cjs.entry.js +212 -0
- package/dist/cjs/le-popup.entry.cjs.js.map +1 -0
- package/dist/cjs/le-round-progress.cjs.entry.js +106 -0
- package/dist/cjs/le-round-progress.entry.cjs.js.map +1 -0
- package/dist/cjs/le-stack.cjs.entry.js +135 -0
- package/dist/cjs/le-stack.entry.cjs.js.map +1 -0
- package/dist/cjs/le-text.cjs.entry.js +335 -0
- package/dist/cjs/le-text.entry.cjs.js.map +1 -0
- package/dist/cjs/le-turntable.cjs.entry.js +139 -0
- package/dist/cjs/le-turntable.entry.cjs.js.map +1 -0
- package/dist/cjs/loader.cjs.js +13 -0
- package/dist/cjs/loader.cjs.js.map +1 -0
- package/dist/cjs/utils-BeT0iyCQ.js +152 -0
- package/dist/cjs/utils-BeT0iyCQ.js.map +1 -0
- package/dist/collection/collection-manifest.json +20 -86
- package/dist/collection/components/le-box/le-box.default.css +37 -0
- package/dist/collection/components/le-box/le-box.js +614 -0
- package/dist/collection/components/le-box/le-box.js.map +1 -0
- package/dist/collection/components/le-button/le-button.default.css +263 -0
- package/dist/collection/components/le-button/le-button.js +368 -0
- package/dist/collection/components/le-button/le-button.js.map +1 -0
- package/dist/collection/components/le-card/le-card.default.css +74 -0
- package/dist/collection/components/le-card/le-card.js +102 -0
- package/dist/collection/components/le-card/le-card.js.map +1 -0
- package/dist/collection/components/le-checkbox/le-checkbox.css +93 -0
- package/dist/collection/components/le-checkbox/le-checkbox.js +192 -0
- package/dist/collection/components/le-checkbox/le-checkbox.js.map +1 -0
- package/dist/collection/components/le-component/le-component.css +189 -0
- package/dist/collection/components/le-component/le-component.js +359 -0
- package/dist/collection/components/le-component/le-component.js.map +1 -0
- package/dist/collection/components/le-number-input/le-number-input.css +135 -0
- package/dist/collection/components/le-number-input/le-number-input.js +515 -0
- package/dist/collection/components/le-number-input/le-number-input.js.map +1 -0
- package/dist/collection/components/le-popover/le-popover.css +143 -0
- package/dist/collection/components/le-popover/le-popover.js +693 -0
- package/dist/collection/components/le-popover/le-popover.js.map +1 -0
- package/dist/collection/components/le-popup/le-popup.api.js +101 -0
- package/dist/collection/components/le-popup/le-popup.api.js.map +1 -0
- package/dist/collection/components/le-popup/le-popup.css +222 -0
- package/dist/collection/components/le-popup/le-popup.js +596 -0
- package/dist/collection/components/le-popup/le-popup.js.map +1 -0
- package/dist/collection/components/le-round-progress/le-round-progress.css +2 -14
- package/dist/collection/components/le-round-progress/le-round-progress.js +184 -86
- package/dist/collection/components/le-round-progress/le-round-progress.js.map +1 -0
- package/dist/collection/components/le-slot/le-slot.default.css +222 -0
- package/dist/collection/components/le-slot/le-slot.js +636 -0
- package/dist/collection/components/le-slot/le-slot.js.map +1 -0
- package/dist/collection/components/le-stack/le-stack.default.css +37 -0
- package/dist/collection/components/le-stack/le-stack.js +389 -0
- package/dist/collection/components/le-stack/le-stack.js.map +1 -0
- package/dist/collection/components/le-string-input/le-string-input.css +83 -0
- package/dist/collection/components/le-string-input/le-string-input.js +359 -0
- package/dist/collection/components/le-string-input/le-string-input.js.map +1 -0
- package/dist/collection/components/le-text/le-text.default.css +169 -0
- package/dist/collection/components/le-text/le-text.js +475 -0
- package/dist/collection/components/le-text/le-text.js.map +1 -0
- package/dist/collection/components/le-turntable/le-turntable.js +210 -102
- package/dist/collection/components/le-turntable/le-turntable.js.map +1 -0
- package/dist/collection/global/app.js +130 -0
- package/dist/collection/global/app.js.map +1 -0
- package/dist/collection/index-admin.js +27 -0
- package/dist/collection/index-admin.js.map +1 -0
- package/dist/collection/index-core.js +25 -0
- package/dist/collection/index-core.js.map +1 -0
- package/dist/collection/index.js +15 -0
- package/dist/collection/index.js.map +1 -0
- package/dist/collection/types/blocks.js +115 -0
- package/dist/collection/types/blocks.js.map +1 -0
- package/dist/collection/types/options.js +2 -0
- package/dist/collection/types/options.js.map +1 -0
- package/dist/collection/utils/utils.js +141 -5
- package/dist/collection/utils/utils.js.map +1 -0
- package/dist/components/index.d.ts +64 -0
- package/dist/components/index.js +122 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/le-box.d.ts +11 -0
- package/dist/components/le-box.js +256 -0
- package/dist/components/le-box.js.map +1 -0
- package/dist/components/le-button.d.ts +11 -0
- package/dist/components/le-button.js +9 -0
- package/dist/components/le-button.js.map +1 -0
- package/dist/components/le-card.d.ts +11 -0
- package/dist/components/le-card.js +83 -0
- package/dist/components/le-card.js.map +1 -0
- package/dist/components/le-checkbox.d.ts +11 -0
- package/dist/components/le-checkbox.js +9 -0
- package/dist/components/le-checkbox.js.map +1 -0
- package/dist/components/le-component.d.ts +11 -0
- package/dist/components/le-component.js +9 -0
- package/dist/components/le-component.js.map +1 -0
- package/dist/components/le-number-input.d.ts +11 -0
- package/dist/components/le-number-input.js +271 -0
- package/dist/components/le-number-input.js.map +1 -0
- package/dist/components/le-popover.d.ts +11 -0
- package/dist/components/le-popover.js +9 -0
- package/dist/components/le-popover.js.map +1 -0
- package/dist/components/le-popup.d.ts +11 -0
- package/dist/components/le-popup.js +279 -0
- package/dist/components/le-popup.js.map +1 -0
- package/dist/components/le-round-progress.d.ts +11 -0
- package/dist/components/le-round-progress.js +135 -0
- package/dist/components/le-round-progress.js.map +1 -0
- package/dist/components/le-slot.d.ts +11 -0
- package/dist/components/le-slot.js +9 -0
- package/dist/components/le-slot.js.map +1 -0
- package/dist/components/le-stack.d.ts +11 -0
- package/dist/components/le-stack.js +198 -0
- package/dist/components/le-stack.js.map +1 -0
- package/dist/components/le-string-input.d.ts +11 -0
- package/dist/components/le-string-input.js +9 -0
- package/dist/components/le-string-input.js.map +1 -0
- package/dist/components/le-text.d.ts +11 -0
- package/dist/components/le-text.js +398 -0
- package/dist/components/le-text.js.map +1 -0
- package/dist/components/le-turntable.d.ts +11 -0
- package/dist/components/le-turntable.js +164 -0
- package/dist/components/le-turntable.js.map +1 -0
- package/dist/components/p-CXeWQG7d.js +382 -0
- package/dist/components/p-CXeWQG7d.js.map +1 -0
- package/dist/components/p-DxxFRStS.js +1370 -0
- package/dist/components/p-DxxFRStS.js.map +1 -0
- package/dist/components/p-IPZGv1ea.js +1442 -0
- package/dist/components/p-IPZGv1ea.js.map +1 -0
- package/dist/core/components/index.d.ts +64 -0
- package/dist/core/components/index.js +122 -0
- package/dist/core/components/index.js.map +1 -0
- package/dist/core/components/le-box.d.ts +11 -0
- package/dist/core/components/le-box.js +246 -0
- package/dist/core/components/le-box.js.map +1 -0
- package/dist/core/components/le-button.d.ts +11 -0
- package/dist/core/components/le-button.js +9 -0
- package/dist/core/components/le-button.js.map +1 -0
- package/dist/core/components/le-card.d.ts +11 -0
- package/dist/core/components/le-card.js +73 -0
- package/dist/core/components/le-card.js.map +1 -0
- package/dist/core/components/le-checkbox.d.ts +11 -0
- package/dist/core/components/le-checkbox.js +9 -0
- package/dist/core/components/le-checkbox.js.map +1 -0
- package/dist/core/components/le-component.js.map +1 -0
- package/dist/core/components/le-number-input.d.ts +11 -0
- package/dist/core/components/le-number-input.js +261 -0
- package/dist/core/components/le-number-input.js.map +1 -0
- package/dist/core/components/le-popover.d.ts +11 -0
- package/dist/core/components/le-popover.js +9 -0
- package/dist/core/components/le-popover.js.map +1 -0
- package/dist/core/components/le-popup.d.ts +11 -0
- package/dist/core/components/le-popup.js +269 -0
- package/dist/core/components/le-popup.js.map +1 -0
- package/dist/core/components/le-round-progress.d.ts +11 -0
- package/dist/core/components/le-round-progress.js +135 -0
- package/dist/core/components/le-round-progress.js.map +1 -0
- package/dist/core/components/le-slot.js.map +1 -0
- package/dist/core/components/le-stack.d.ts +11 -0
- package/dist/core/components/le-stack.js +188 -0
- package/dist/core/components/le-stack.js.map +1 -0
- package/dist/core/components/le-string-input.d.ts +11 -0
- package/dist/core/components/le-string-input.js +9 -0
- package/dist/core/components/le-string-input.js.map +1 -0
- package/dist/core/components/le-text.d.ts +11 -0
- package/dist/core/components/le-text.js +388 -0
- package/dist/core/components/le-text.js.map +1 -0
- package/dist/core/components/le-turntable.d.ts +11 -0
- package/dist/core/components/le-turntable.js +164 -0
- package/dist/core/components/le-turntable.js.map +1 -0
- package/dist/core/components/p-CXeWQG7d.js +382 -0
- package/dist/core/components/p-CXeWQG7d.js.map +1 -0
- package/dist/core/components/p-DxxFRStS.js +1370 -0
- package/dist/core/components/p-DxxFRStS.js.map +1 -0
- package/dist/core/components/p-IPZGv1ea.js +1442 -0
- package/dist/core/components/p-IPZGv1ea.js.map +1 -0
- package/dist/core/index.d.ts +21 -0
- package/dist/core/index.js +68 -0
- package/dist/core/stencil-runtime.js +1 -0
- package/dist/docs.d.ts +443 -0
- package/dist/docs.json +5183 -0
- package/dist/esm/index-D71TXvJa.js +1781 -0
- package/dist/esm/index-D71TXvJa.js.map +1 -0
- package/dist/esm/index.js +105 -5
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/le-box.entry.js +182 -0
- package/dist/esm/le-box.entry.js.map +1 -0
- package/dist/esm/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.js.map +1 -0
- package/dist/esm/le-button_6.entry.js +1192 -0
- package/dist/esm/le-card.entry.js +27 -0
- package/dist/esm/le-card.entry.js.map +1 -0
- package/dist/esm/le-kit.js +21 -0
- package/dist/esm/le-kit.js.map +1 -0
- package/dist/esm/le-number-input.entry.js +200 -0
- package/dist/esm/le-number-input.entry.js.map +1 -0
- package/dist/esm/le-popup.entry.js +210 -0
- package/dist/esm/le-popup.entry.js.map +1 -0
- package/dist/esm/le-round-progress.entry.js +104 -0
- package/dist/esm/le-round-progress.entry.js.map +1 -0
- package/dist/esm/le-stack.entry.js +133 -0
- package/dist/esm/le-stack.entry.js.map +1 -0
- package/dist/esm/le-text.entry.js +333 -0
- package/dist/esm/le-text.entry.js.map +1 -0
- package/dist/esm/le-turntable.entry.js +137 -0
- package/dist/esm/le-turntable.entry.js.map +1 -0
- package/dist/esm/loader.js +11 -0
- package/dist/esm/loader.js.map +1 -0
- package/dist/esm/utils-CJLZrrdC.js +146 -0
- package/dist/esm/utils-CJLZrrdC.js.map +1 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -2
- package/dist/le-kit/index-D21JjI31.js.map +1 -0
- package/dist/le-kit/index.esm.js +2 -0
- package/dist/le-kit/index.esm.js.map +1 -0
- package/dist/le-kit/le-box.entry.esm.js.map +1 -0
- package/dist/le-kit/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.esm.js.map +1 -0
- package/dist/le-kit/le-card.entry.esm.js.map +1 -0
- package/dist/le-kit/le-kit.css +1 -0
- package/dist/le-kit/le-kit.esm.js +2 -0
- package/dist/le-kit/le-kit.esm.js.map +1 -0
- package/dist/le-kit/le-number-input.entry.esm.js.map +1 -0
- package/dist/le-kit/le-popup.entry.esm.js.map +1 -0
- package/dist/le-kit/le-round-progress.entry.esm.js.map +1 -0
- package/dist/le-kit/le-stack.entry.esm.js.map +1 -0
- package/dist/le-kit/le-text.entry.esm.js.map +1 -0
- package/dist/le-kit/le-turntable.entry.esm.js.map +1 -0
- package/dist/le-kit/loader.esm.js.map +1 -0
- package/dist/le-kit/p-024a764e.entry.js +2 -0
- package/dist/le-kit/p-024a764e.entry.js.map +1 -0
- package/dist/le-kit/p-073cf0b9.entry.js +2 -0
- package/dist/le-kit/p-073cf0b9.entry.js.map +1 -0
- package/dist/le-kit/p-0955b105.entry.js +2 -0
- package/dist/le-kit/p-0955b105.entry.js.map +1 -0
- package/dist/le-kit/p-18d79ee2.entry.js +2 -0
- package/dist/le-kit/p-18d79ee2.entry.js.map +1 -0
- package/dist/le-kit/p-4b1d3b6d.entry.js +2 -0
- package/dist/le-kit/p-4b1d3b6d.entry.js.map +1 -0
- package/dist/le-kit/p-79d179bd.entry.js +2 -0
- package/dist/le-kit/p-79d179bd.entry.js.map +1 -0
- package/dist/le-kit/p-D71TXvJa.js +3 -0
- package/dist/le-kit/p-D71TXvJa.js.map +1 -0
- package/dist/le-kit/p-c8a9288e.entry.js +2 -0
- package/dist/le-kit/p-c8a9288e.entry.js.map +1 -0
- package/dist/le-kit/p-cfc35bd3.entry.js +2 -0
- package/dist/le-kit/p-cfc35bd3.entry.js.map +1 -0
- package/dist/le-kit/p-d04da1f5.entry.js +2 -0
- package/dist/le-kit/p-d04da1f5.entry.js.map +1 -0
- package/dist/le-kit/p-qIai5-eB.js +2 -0
- package/dist/le-kit/p-qIai5-eB.js.map +1 -0
- package/dist/le-kit/utils-apol-Xc_.js.map +1 -0
- package/dist/themes/base.css +89 -0
- package/dist/themes/dark.css +100 -0
- package/dist/themes/default.css +108 -0
- package/dist/themes/gradient.css +100 -0
- package/dist/themes/index.css +413 -0
- package/dist/themes/minimal.css +100 -0
- package/dist/themes/warm.css +100 -0
- package/dist/types/components/le-box/le-box.d.ts +111 -0
- package/dist/types/components/le-button/le-button.d.ts +78 -0
- package/dist/types/components/le-card/le-card.d.ts +37 -0
- package/dist/types/components/le-checkbox/le-checkbox.d.ts +46 -0
- package/dist/types/components/le-component/le-component.d.ts +115 -0
- package/dist/types/components/le-number-input/le-number-input.d.ts +106 -0
- package/dist/types/components/le-popover/le-popover.d.ts +109 -0
- package/dist/types/components/le-popup/le-popup.api.d.ts +73 -0
- package/dist/types/components/le-popup/le-popup.d.ts +122 -0
- package/dist/types/components/le-round-progress/le-round-progress.d.ts +8 -15
- package/dist/types/components/le-slot/le-slot.d.ts +149 -0
- package/dist/types/components/le-stack/le-stack.d.ts +73 -0
- package/dist/types/components/le-string-input/le-string-input.d.ts +83 -0
- package/dist/types/components/le-text/le-text.d.ts +141 -0
- package/dist/types/components/le-turntable/le-turntable.d.ts +1 -2
- package/dist/types/components.d.ts +2030 -58
- package/dist/types/global/app.d.ts +40 -0
- package/dist/types/index-admin.d.ts +29 -0
- package/dist/types/index-core.d.ts +27 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/stencil-public-runtime.d.ts +1756 -0
- package/dist/types/types/blocks.d.ts +136 -0
- package/dist/types/types/options.d.ts +124 -0
- package/dist/types/utils/utils.d.ts +54 -1
- package/loader/cdn.js +1 -0
- package/loader/index.cjs.js +1 -0
- package/loader/index.d.ts +24 -0
- package/loader/index.es2017.js +1 -0
- package/loader/index.js +2 -0
- package/package.json +64 -13
- package/readme.md +177 -46
- package/dist/cjs/es5/build/novg0vs0.entry.js +0 -9
- package/dist/cjs/es5/build/novg0vs0.sc.entry.js +0 -9
- package/dist/cjs/es5/build/ptx6i6hn.entry.js +0 -11
- package/dist/cjs/es5/build/ptx6i6hn.sc.entry.js +0 -11
- package/dist/cjs/es5/index.js +0 -1
- package/dist/cjs/es5/le-kit.components.js +0 -4
- package/dist/cjs/es5/le-kit.core.js +0 -459
- package/dist/cjs/es5/le-kit.define.js +0 -9
- package/dist/cjs/es5/polyfills/array.js +0 -63
- package/dist/cjs/es5/polyfills/css-shim.js +0 -178
- package/dist/cjs/es5/polyfills/dom.js +0 -125
- package/dist/cjs/es5/polyfills/fetch.js +0 -186
- package/dist/cjs/es5/polyfills/map.js +0 -54
- package/dist/cjs/es5/polyfills/object.js +0 -27
- package/dist/cjs/es5/polyfills/promise.js +0 -80
- package/dist/cjs/es5/polyfills/string.js +0 -15
- package/dist/cjs/es5/polyfills/tslib.js +0 -244
- package/dist/cjs/es5/polyfills/url.js +0 -68
- package/dist/collection/interface.js +0 -0
- package/dist/esm/es2017/build/novg0vs0.entry.js +0 -106
- package/dist/esm/es2017/build/novg0vs0.sc.entry.js +0 -106
- package/dist/esm/es2017/build/ptx6i6hn.entry.js +0 -90
- package/dist/esm/es2017/build/ptx6i6hn.sc.entry.js +0 -90
- package/dist/esm/es2017/index.js +0 -1
- package/dist/esm/es2017/le-kit.components.js +0 -2
- package/dist/esm/es2017/le-kit.core.js +0 -5
- package/dist/esm/es2017/le-kit.define.js +0 -9
- package/dist/esm/es5/build/novg0vs0.entry.js +0 -1
- package/dist/esm/es5/build/novg0vs0.sc.entry.js +0 -1
- package/dist/esm/es5/build/ptx6i6hn.entry.js +0 -1
- package/dist/esm/es5/build/ptx6i6hn.sc.entry.js +0 -1
- package/dist/esm/es5/index.js +0 -1
- package/dist/esm/es5/le-kit.components.js +0 -2
- package/dist/esm/es5/le-kit.core.js +0 -5
- package/dist/esm/es5/le-kit.define.js +0 -9
- package/dist/esm/es5/polyfills/array.js +0 -23
- package/dist/esm/es5/polyfills/css-shim.js +0 -8
- package/dist/esm/es5/polyfills/dom.js +0 -22
- package/dist/esm/es5/polyfills/fetch.js +0 -20
- package/dist/esm/es5/polyfills/map.js +0 -7
- package/dist/esm/es5/polyfills/object.js +0 -20
- package/dist/esm/es5/polyfills/promise.js +0 -8
- package/dist/esm/es5/polyfills/string.js +0 -12
- package/dist/esm/es5/polyfills/tslib.js +0 -160
- package/dist/esm/es5/polyfills/url.js +0 -7
- package/dist/le-kit/le-kit.1ndj7cvv.js +0 -123
- package/dist/le-kit/le-kit.7akpvqqk.js +0 -4
- package/dist/le-kit/novg0vs0.entry.js +0 -1
- package/dist/le-kit/novg0vs0.es5.entry.js +0 -1
- package/dist/le-kit/novg0vs0.sc.entry.js +0 -1
- package/dist/le-kit/novg0vs0.sc.es5.entry.js +0 -1
- package/dist/le-kit/ptx6i6hn.entry.js +0 -1
- package/dist/le-kit/ptx6i6hn.es5.entry.js +0 -1
- package/dist/le-kit/ptx6i6hn.sc.entry.js +0 -1
- package/dist/le-kit/ptx6i6hn.sc.es5.entry.js +0 -1
- package/dist/le-kit.js +0 -1
- package/dist/loader/index.cjs.js +0 -1
- package/dist/loader/index.d.ts +0 -1
- package/dist/loader/index.es2017.js +0 -1
- package/dist/loader/index.js +0 -1
- package/dist/loader/package.json +0 -9
- package/dist/types/stencil.core.d.ts +0 -1203
- package/dist/web-components.json +0 -31
|
@@ -0,0 +1,636 @@
|
|
|
1
|
+
import { h, Host } from "@stencil/core";
|
|
2
|
+
import { classnames, observeModeChanges } from "../../utils/utils";
|
|
3
|
+
/**
|
|
4
|
+
* Slot placeholder component for admin/CMS mode.
|
|
5
|
+
*
|
|
6
|
+
* This component renders a visual placeholder for slots when in admin mode,
|
|
7
|
+
* allowing CMS systems to show available drop zones for content or inline editing.
|
|
8
|
+
*
|
|
9
|
+
* In non-admin mode, this component renders nothing and acts as a passthrough.
|
|
10
|
+
*
|
|
11
|
+
* @slot - Default slot for placeholder content or drop zone UI
|
|
12
|
+
*
|
|
13
|
+
* @cmsInternal true
|
|
14
|
+
* @cmsCategory System
|
|
15
|
+
*/
|
|
16
|
+
export class LeSlot {
|
|
17
|
+
el;
|
|
18
|
+
/**
|
|
19
|
+
* The type of slot content.
|
|
20
|
+
* - `slot`: Default, shows a dropzone for components (default)
|
|
21
|
+
* - `text`: Shows a single-line text input
|
|
22
|
+
* - `textarea`: Shows a multi-line text area
|
|
23
|
+
*/
|
|
24
|
+
type = 'slot';
|
|
25
|
+
/**
|
|
26
|
+
* The name of the slot this placeholder represents.
|
|
27
|
+
* Should match the slot name in the parent component.
|
|
28
|
+
*/
|
|
29
|
+
name = '';
|
|
30
|
+
/**
|
|
31
|
+
* Label to display in admin mode.
|
|
32
|
+
* If not provided, the slot name will be used.
|
|
33
|
+
*/
|
|
34
|
+
label;
|
|
35
|
+
/**
|
|
36
|
+
* Description of what content this slot accepts.
|
|
37
|
+
* Shown in admin mode to guide content editors.
|
|
38
|
+
*/
|
|
39
|
+
description;
|
|
40
|
+
/**
|
|
41
|
+
* Comma-separated list of allowed component tags for this slot.
|
|
42
|
+
* Used by CMS to filter available components.
|
|
43
|
+
*
|
|
44
|
+
* @example "le-card,le-button,le-text"
|
|
45
|
+
*/
|
|
46
|
+
allowedComponents;
|
|
47
|
+
/**
|
|
48
|
+
* Whether multiple components can be dropped in this slot.
|
|
49
|
+
*/
|
|
50
|
+
multiple = true;
|
|
51
|
+
/**
|
|
52
|
+
* Whether this slot is required to have content.
|
|
53
|
+
*/
|
|
54
|
+
required = false;
|
|
55
|
+
/**
|
|
56
|
+
* Placeholder text for text/textarea inputs in admin mode.
|
|
57
|
+
*/
|
|
58
|
+
placeholder;
|
|
59
|
+
/**
|
|
60
|
+
* The HTML tag to create when there's no slotted element.
|
|
61
|
+
* Used with type="text" or type="textarea" to auto-create elements.
|
|
62
|
+
*
|
|
63
|
+
* @example "h3" - creates <h3 slot="header">content</h3>
|
|
64
|
+
* @example "p" - creates <p slot="content">content</p>
|
|
65
|
+
*/
|
|
66
|
+
tag;
|
|
67
|
+
/**
|
|
68
|
+
* CSS styles for the slot dropzone container.
|
|
69
|
+
* Useful for layouts - e.g., "flex-direction: row" for horizontal stacks.
|
|
70
|
+
* Only applies in admin mode for type="slot".
|
|
71
|
+
*/
|
|
72
|
+
slotStyle;
|
|
73
|
+
/**
|
|
74
|
+
* Internal state to track admin mode
|
|
75
|
+
*/
|
|
76
|
+
adminMode = false;
|
|
77
|
+
/**
|
|
78
|
+
* Internal state for text input value (synced from slot content)
|
|
79
|
+
*/
|
|
80
|
+
textValue = '';
|
|
81
|
+
/**
|
|
82
|
+
* Whether the current textValue contains valid HTML
|
|
83
|
+
*/
|
|
84
|
+
isValidHtml = true;
|
|
85
|
+
/**
|
|
86
|
+
* Available components loaded from Custom Elements Manifest
|
|
87
|
+
*/
|
|
88
|
+
availableComponents = [];
|
|
89
|
+
/**
|
|
90
|
+
* Whether the component picker popover is open
|
|
91
|
+
*/
|
|
92
|
+
pickerOpen = false;
|
|
93
|
+
/**
|
|
94
|
+
* Reference to the slot element to access assignedNodes
|
|
95
|
+
*/
|
|
96
|
+
slotRef;
|
|
97
|
+
/**
|
|
98
|
+
* The original slotted element (e.g., <h3 slot="header">)
|
|
99
|
+
*/
|
|
100
|
+
slottedElement;
|
|
101
|
+
/**
|
|
102
|
+
* Emitted when text content changes in admin mode.
|
|
103
|
+
* The event detail contains the new text value and validity.
|
|
104
|
+
*/
|
|
105
|
+
leSlotChange;
|
|
106
|
+
disconnectModeObserver;
|
|
107
|
+
connectedCallback() {
|
|
108
|
+
this.disconnectModeObserver = observeModeChanges(this.el, (mode) => {
|
|
109
|
+
const wasAdmin = this.adminMode;
|
|
110
|
+
this.adminMode = mode === 'admin';
|
|
111
|
+
// When entering admin mode, read content from slotted elements
|
|
112
|
+
if (this.adminMode && !wasAdmin) {
|
|
113
|
+
// Need to wait for render to access slot ref
|
|
114
|
+
requestAnimationFrame(() => this.readSlottedContent());
|
|
115
|
+
// Load available components for the component picker
|
|
116
|
+
if (this.type === 'slot') {
|
|
117
|
+
this.loadAvailableComponents();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
disconnectedCallback() {
|
|
123
|
+
this.disconnectModeObserver?.();
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Flag to prevent re-reading content right after we updated it
|
|
127
|
+
*/
|
|
128
|
+
isUpdating = false;
|
|
129
|
+
/**
|
|
130
|
+
* Read content from slotted elements via assignedNodes()
|
|
131
|
+
*/
|
|
132
|
+
readSlottedContent() {
|
|
133
|
+
if (!this.slotRef)
|
|
134
|
+
return;
|
|
135
|
+
// Skip if we just updated the content ourselves
|
|
136
|
+
if (this.isUpdating) {
|
|
137
|
+
this.isUpdating = false;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const assignedNodes = this.slotRef.assignedNodes({ flatten: true });
|
|
141
|
+
// For text/textarea types, we want to edit the innerHTML of slotted elements
|
|
142
|
+
if (this.type === 'text' || this.type === 'textarea') {
|
|
143
|
+
// Find the first element node (skip text nodes that are just whitespace)
|
|
144
|
+
const elementNode = assignedNodes.find(node => node.nodeType === Node.ELEMENT_NODE);
|
|
145
|
+
if (elementNode) {
|
|
146
|
+
// Only update textValue if slotted element changed or we don't have one yet
|
|
147
|
+
if (this.slottedElement !== elementNode) {
|
|
148
|
+
this.slottedElement = elementNode;
|
|
149
|
+
this.textValue = elementNode.innerHTML?.trim() || '';
|
|
150
|
+
// console.log(`[le-slot "${this.name}"] Read slotted content:`, this.textValue);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// No element, check for direct text content
|
|
155
|
+
const textContent = assignedNodes
|
|
156
|
+
.filter(node => node.nodeType === Node.TEXT_NODE)
|
|
157
|
+
.map(node => node.textContent)
|
|
158
|
+
.join('')
|
|
159
|
+
.trim();
|
|
160
|
+
if (textContent && !this.textValue) {
|
|
161
|
+
this.textValue = textContent;
|
|
162
|
+
// console.log(`[le-slot "${this.name}"] Read text content:`, this.textValue);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Validates if a string contains valid HTML
|
|
169
|
+
*/
|
|
170
|
+
validateHtml(html) {
|
|
171
|
+
// Empty string is valid
|
|
172
|
+
if (!html.trim())
|
|
173
|
+
return true;
|
|
174
|
+
// Create a template element to parse the HTML
|
|
175
|
+
const template = document.createElement('template');
|
|
176
|
+
template.innerHTML = html;
|
|
177
|
+
// Check that we don't have obviously broken HTML
|
|
178
|
+
// Count opening and closing tags for common elements
|
|
179
|
+
const openTags = (html.match(/<[a-z][^>]*(?<!\/)>/gi) || []).length;
|
|
180
|
+
const closeTags = (html.match(/<\/[a-z][^>]*>/gi) || []).length;
|
|
181
|
+
const selfClosing = (html.match(/<[a-z][^>]*\/>/gi) || []).length;
|
|
182
|
+
// Simple validation: opening tags (minus self-closing) should roughly match closing tags
|
|
183
|
+
// Allow some tolerance for void elements like <br>, <img>, etc.
|
|
184
|
+
const voidElements = (html.match(/<(br|hr|img|input|meta|link|area|base|col|embed|param|source|track|wbr)[^>]*>/gi) || []).length;
|
|
185
|
+
const effectiveOpenTags = openTags - selfClosing - voidElements;
|
|
186
|
+
// If difference is too large, HTML is likely broken
|
|
187
|
+
if (Math.abs(effectiveOpenTags - closeTags) > 1) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
handleTextInput = (event) => {
|
|
193
|
+
const target = event.target;
|
|
194
|
+
this.textValue = target.value;
|
|
195
|
+
this.isValidHtml = this.validateHtml(this.textValue);
|
|
196
|
+
if (this.isValidHtml) {
|
|
197
|
+
// Set flag to prevent slotchange from re-reading what we just wrote
|
|
198
|
+
this.isUpdating = true;
|
|
199
|
+
console.log('Updating text value:', this.textValue, 'slottedElement:', this.slottedElement);
|
|
200
|
+
if (this.slottedElement) {
|
|
201
|
+
// Update existing slotted element's innerHTML
|
|
202
|
+
this.slottedElement.innerHTML = this.textValue;
|
|
203
|
+
}
|
|
204
|
+
else if (this.tag && this.textValue) {
|
|
205
|
+
// No slotted element exists
|
|
206
|
+
// If the slot doesn't have a name, then it's the default slot
|
|
207
|
+
// remove the existing non-slotted content (text nodes and elements without slot attribute)
|
|
208
|
+
const rootNode = this.el.getRootNode();
|
|
209
|
+
if (!this.name && rootNode instanceof ShadowRoot) {
|
|
210
|
+
const hostComponent = rootNode.host;
|
|
211
|
+
Array.from(hostComponent.childNodes).forEach(node => {
|
|
212
|
+
if (node.nodeType === Node.TEXT_NODE ||
|
|
213
|
+
(node.nodeType === Node.ELEMENT_NODE && !node.hasAttribute('slot'))) {
|
|
214
|
+
node.remove();
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
// create one using the specified tag
|
|
219
|
+
this.createSlottedElement();
|
|
220
|
+
}
|
|
221
|
+
else if (this.textValue) {
|
|
222
|
+
// no tag specified - just replace everything in the host component
|
|
223
|
+
const rootNode = this.el.getRootNode();
|
|
224
|
+
if (rootNode instanceof ShadowRoot) {
|
|
225
|
+
const hostComponent = rootNode.host;
|
|
226
|
+
hostComponent.innerHTML = this.textValue;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
this.leSlotChange.emit({
|
|
231
|
+
name: this.name,
|
|
232
|
+
value: this.textValue,
|
|
233
|
+
isValid: this.isValidHtml
|
|
234
|
+
});
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* Create a new slotted element when none exists.
|
|
238
|
+
* The element is appended to the host component's light DOM.
|
|
239
|
+
*/
|
|
240
|
+
createSlottedElement() {
|
|
241
|
+
if (!this.tag)
|
|
242
|
+
return;
|
|
243
|
+
// Find the host component (le-card, etc.) by traversing up through shadow DOM
|
|
244
|
+
// le-slot is inside le-card's shadow DOM, so we need to find le-card's host
|
|
245
|
+
const rootNode = this.el.getRootNode();
|
|
246
|
+
if (!(rootNode instanceof ShadowRoot))
|
|
247
|
+
return;
|
|
248
|
+
const hostComponent = rootNode.host;
|
|
249
|
+
if (!hostComponent)
|
|
250
|
+
return;
|
|
251
|
+
// Create the new element
|
|
252
|
+
const newElement = document.createElement(this.tag);
|
|
253
|
+
newElement.innerHTML = this.textValue;
|
|
254
|
+
// Set the slot attribute if this is a named slot
|
|
255
|
+
if (this.name) {
|
|
256
|
+
newElement.setAttribute('slot', this.name);
|
|
257
|
+
}
|
|
258
|
+
// Append to the host component's light DOM
|
|
259
|
+
hostComponent.appendChild(newElement);
|
|
260
|
+
// Store reference to the new element
|
|
261
|
+
this.slottedElement = newElement;
|
|
262
|
+
// console.log(`[le-slot "${this.name}"] Created new <${this.tag}> element`);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Load available components from Custom Elements Manifest
|
|
266
|
+
*/
|
|
267
|
+
async loadAvailableComponents() {
|
|
268
|
+
try {
|
|
269
|
+
const response = await fetch('/custom-elements.json');
|
|
270
|
+
const manifest = await response.json();
|
|
271
|
+
const components = [];
|
|
272
|
+
const allowedList = this.allowedComponents?.split(',').map(s => s.trim()) || [];
|
|
273
|
+
for (const module of manifest.modules) {
|
|
274
|
+
for (const declaration of module.declarations || []) {
|
|
275
|
+
if (declaration.tagName && declaration.customElement) {
|
|
276
|
+
// Skip internal components (le-slot, le-component, le-popover)
|
|
277
|
+
const isInternal = ['le-slot', 'le-component', 'le-popover'].includes(declaration.tagName);
|
|
278
|
+
if (isInternal)
|
|
279
|
+
continue;
|
|
280
|
+
// If allowedComponents is specified, filter by it
|
|
281
|
+
if (allowedList.length > 0 && !allowedList.includes(declaration.tagName)) {
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
components.push({
|
|
285
|
+
tagName: declaration.tagName,
|
|
286
|
+
name: this.formatComponentName(declaration.tagName),
|
|
287
|
+
description: declaration.description || '',
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
this.availableComponents = components;
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
console.warn('[le-slot] Failed to load component manifest:', error);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Format a tag name into a display name
|
|
300
|
+
* e.g., 'le-card' -> 'Card'
|
|
301
|
+
*/
|
|
302
|
+
formatComponentName(tagName) {
|
|
303
|
+
return tagName
|
|
304
|
+
.replace(/^le-/, '')
|
|
305
|
+
.split('-')
|
|
306
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
307
|
+
.join(' ');
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Add a new component to the slot
|
|
311
|
+
*/
|
|
312
|
+
addComponent(tagName) {
|
|
313
|
+
// Find the host component by traversing up through shadow DOM
|
|
314
|
+
const rootNode = this.el.getRootNode();
|
|
315
|
+
if (!(rootNode instanceof ShadowRoot))
|
|
316
|
+
return;
|
|
317
|
+
const hostComponent = rootNode.host;
|
|
318
|
+
if (!hostComponent)
|
|
319
|
+
return;
|
|
320
|
+
// Create the new component element
|
|
321
|
+
const newElement = document.createElement(tagName);
|
|
322
|
+
// Set the slot attribute if this is a named slot
|
|
323
|
+
if (this.name) {
|
|
324
|
+
newElement.setAttribute('slot', this.name);
|
|
325
|
+
}
|
|
326
|
+
// Append to the host component's light DOM
|
|
327
|
+
hostComponent.appendChild(newElement);
|
|
328
|
+
// Emit change event so the page can save
|
|
329
|
+
this.leSlotChange.emit({
|
|
330
|
+
name: this.name,
|
|
331
|
+
value: hostComponent.innerHTML,
|
|
332
|
+
isValid: true,
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Handle slot change event to re-read content when nodes are assigned
|
|
337
|
+
*/
|
|
338
|
+
handleSlotChange = () => {
|
|
339
|
+
this.readSlottedContent();
|
|
340
|
+
};
|
|
341
|
+
render() {
|
|
342
|
+
const displayLabel = this.label || this.name;
|
|
343
|
+
// Always render the same structure, CSS handles visibility via .admin-mode class
|
|
344
|
+
return (h(Host, { key: 'bae03733e0443c10f1abe8b4c846d3eae0723d3d', class: {
|
|
345
|
+
'admin-mode': this.adminMode,
|
|
346
|
+
'invalid-html': !this.isValidHtml
|
|
347
|
+
}, role: this.adminMode ? 'region' : undefined, "aria-label": this.adminMode ? `Slot: ${displayLabel}` : undefined, "data-slot-name": this.name, "data-slot-type": this.type, "data-allowed": this.allowedComponents, "data-multiple": this.multiple, "data-required": this.required }, this.adminMode ? (h("div", { class: "le-slot-container" }, h("div", { class: classnames('le-slot-header', {
|
|
348
|
+
'le-slot-header-no-label': !displayLabel,
|
|
349
|
+
'le-slot-header-text': this.type === 'text',
|
|
350
|
+
'le-slot-header-error': !this.isValidHtml
|
|
351
|
+
}) }, displayLabel && (h("span", { class: "le-slot-label" }, displayLabel, this.required && h("span", { class: "le-slot-required" }, "*"))), !this.isValidHtml && h("span", { class: "le-slot-invalid" }, "\u26A0 Invalid HTML"), this.type === 'slot' && this.adminMode && (h("le-popover", { mode: "default", showClose: true, align: "start", position: "right", popoverTitle: "Add Component", open: this.pickerOpen, onLePopoverOpen: () => this.pickerOpen = true, onLePopoverClose: () => this.pickerOpen = false }, h("le-button", { type: "button", class: "le-slot-button", slot: "trigger", variant: "clear", size: "small", "aria-label": "Add component", "icon-only": true }, h("span", { class: "le-slot-add-btn", slot: "icon-only" }, "+")), h("div", { class: "le-slot-picker" }, this.availableComponents.length > 0 ? (h("ul", { class: "le-slot-picker-list" }, this.availableComponents.map(component => (h("li", { key: component.tagName }, h("button", { class: "le-slot-picker-item", onClick: () => {
|
|
352
|
+
this.addComponent(component.tagName);
|
|
353
|
+
this.pickerOpen = false;
|
|
354
|
+
} }, h("span", { class: "le-slot-picker-name" }, component.name), component.description && (h("span", { class: "le-slot-picker-desc" }, component.description)))))))) : (h("div", { class: "le-slot-picker-empty" }, "No components available")))))), this.renderContent())) : (
|
|
355
|
+
// In default mode, just pass through the slot - slotted content renders naturally
|
|
356
|
+
// Note: We use unnamed slot here because named slots from parent component
|
|
357
|
+
// are passed as le-slot's light DOM children
|
|
358
|
+
h("slot", null))));
|
|
359
|
+
}
|
|
360
|
+
renderContent() {
|
|
361
|
+
// Create the slot element with ref for reading assignedNodes
|
|
362
|
+
// Wrap in a hidden div since slot elements can't have style prop in Stencil
|
|
363
|
+
// Note: We use unnamed slot here because named slots from parent component
|
|
364
|
+
// are passed as le-slot's light DOM children
|
|
365
|
+
const slotElement = (h("div", { class: "hidden-slot" }, h("slot", { ref: (el) => this.slotRef = el, onSlotchange: this.handleSlotChange })));
|
|
366
|
+
switch (this.type) {
|
|
367
|
+
case 'text':
|
|
368
|
+
return (h("div", { class: { 'le-slot-input': true, 'has-error': !this.isValidHtml } }, h("le-string-input", { mode: "default", value: this.textValue, placeholder: this.placeholder || `Enter ${this.label || this.name || 'text'}...`, onChange: this.handleTextInput }), slotElement));
|
|
369
|
+
case 'textarea':
|
|
370
|
+
return (h("div", { class: { 'le-slot-input': true, 'has-error': !this.isValidHtml } }, h("textarea", { value: this.textValue, placeholder: this.placeholder || `Enter ${this.label || this.name || 'text'}...`, onInput: this.handleTextInput, required: this.required, rows: 3 }), slotElement));
|
|
371
|
+
case 'slot':
|
|
372
|
+
default:
|
|
373
|
+
// Parse slotStyle string into style object if provided
|
|
374
|
+
const dropzoneStyle = {};
|
|
375
|
+
if (this.slotStyle) {
|
|
376
|
+
this.slotStyle.split(';').forEach(rule => {
|
|
377
|
+
const [prop, value] = rule.split(':').map(s => s.trim());
|
|
378
|
+
if (prop && value) {
|
|
379
|
+
// Convert kebab-case to camelCase for style object
|
|
380
|
+
const camelProp = prop.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
381
|
+
dropzoneStyle[camelProp] = value;
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
return (h("div", { class: "le-slot-dropzone", style: dropzoneStyle }, h("slot", { ref: (el) => this.slotRef = el, onSlotchange: this.handleSlotChange })));
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
static get is() { return "le-slot"; }
|
|
389
|
+
static get encapsulation() { return "shadow"; }
|
|
390
|
+
static get originalStyleUrls() {
|
|
391
|
+
return {
|
|
392
|
+
"$": ["le-slot.default.css"]
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
static get styleUrls() {
|
|
396
|
+
return {
|
|
397
|
+
"$": ["le-slot.default.css"]
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
static get properties() {
|
|
401
|
+
return {
|
|
402
|
+
"type": {
|
|
403
|
+
"type": "string",
|
|
404
|
+
"mutable": false,
|
|
405
|
+
"complexType": {
|
|
406
|
+
"original": "'slot' | 'text' | 'textarea'",
|
|
407
|
+
"resolved": "\"slot\" | \"text\" | \"textarea\"",
|
|
408
|
+
"references": {}
|
|
409
|
+
},
|
|
410
|
+
"required": false,
|
|
411
|
+
"optional": false,
|
|
412
|
+
"docs": {
|
|
413
|
+
"tags": [],
|
|
414
|
+
"text": "The type of slot content.\n- `slot`: Default, shows a dropzone for components (default)\n- `text`: Shows a single-line text input\n- `textarea`: Shows a multi-line text area"
|
|
415
|
+
},
|
|
416
|
+
"getter": false,
|
|
417
|
+
"setter": false,
|
|
418
|
+
"reflect": false,
|
|
419
|
+
"attribute": "type",
|
|
420
|
+
"defaultValue": "'slot'"
|
|
421
|
+
},
|
|
422
|
+
"name": {
|
|
423
|
+
"type": "string",
|
|
424
|
+
"mutable": false,
|
|
425
|
+
"complexType": {
|
|
426
|
+
"original": "string",
|
|
427
|
+
"resolved": "string",
|
|
428
|
+
"references": {}
|
|
429
|
+
},
|
|
430
|
+
"required": false,
|
|
431
|
+
"optional": false,
|
|
432
|
+
"docs": {
|
|
433
|
+
"tags": [],
|
|
434
|
+
"text": "The name of the slot this placeholder represents.\nShould match the slot name in the parent component."
|
|
435
|
+
},
|
|
436
|
+
"getter": false,
|
|
437
|
+
"setter": false,
|
|
438
|
+
"reflect": false,
|
|
439
|
+
"attribute": "name",
|
|
440
|
+
"defaultValue": "''"
|
|
441
|
+
},
|
|
442
|
+
"label": {
|
|
443
|
+
"type": "string",
|
|
444
|
+
"mutable": false,
|
|
445
|
+
"complexType": {
|
|
446
|
+
"original": "string",
|
|
447
|
+
"resolved": "string",
|
|
448
|
+
"references": {}
|
|
449
|
+
},
|
|
450
|
+
"required": false,
|
|
451
|
+
"optional": true,
|
|
452
|
+
"docs": {
|
|
453
|
+
"tags": [],
|
|
454
|
+
"text": "Label to display in admin mode.\nIf not provided, the slot name will be used."
|
|
455
|
+
},
|
|
456
|
+
"getter": false,
|
|
457
|
+
"setter": false,
|
|
458
|
+
"reflect": false,
|
|
459
|
+
"attribute": "label"
|
|
460
|
+
},
|
|
461
|
+
"description": {
|
|
462
|
+
"type": "string",
|
|
463
|
+
"mutable": false,
|
|
464
|
+
"complexType": {
|
|
465
|
+
"original": "string",
|
|
466
|
+
"resolved": "string",
|
|
467
|
+
"references": {}
|
|
468
|
+
},
|
|
469
|
+
"required": false,
|
|
470
|
+
"optional": true,
|
|
471
|
+
"docs": {
|
|
472
|
+
"tags": [],
|
|
473
|
+
"text": "Description of what content this slot accepts.\nShown in admin mode to guide content editors."
|
|
474
|
+
},
|
|
475
|
+
"getter": false,
|
|
476
|
+
"setter": false,
|
|
477
|
+
"reflect": false,
|
|
478
|
+
"attribute": "description"
|
|
479
|
+
},
|
|
480
|
+
"allowedComponents": {
|
|
481
|
+
"type": "string",
|
|
482
|
+
"mutable": false,
|
|
483
|
+
"complexType": {
|
|
484
|
+
"original": "string",
|
|
485
|
+
"resolved": "string",
|
|
486
|
+
"references": {}
|
|
487
|
+
},
|
|
488
|
+
"required": false,
|
|
489
|
+
"optional": true,
|
|
490
|
+
"docs": {
|
|
491
|
+
"tags": [{
|
|
492
|
+
"name": "example",
|
|
493
|
+
"text": "\"le-card,le-button,le-text\""
|
|
494
|
+
}],
|
|
495
|
+
"text": "Comma-separated list of allowed component tags for this slot.\nUsed by CMS to filter available components."
|
|
496
|
+
},
|
|
497
|
+
"getter": false,
|
|
498
|
+
"setter": false,
|
|
499
|
+
"reflect": false,
|
|
500
|
+
"attribute": "allowed-components"
|
|
501
|
+
},
|
|
502
|
+
"multiple": {
|
|
503
|
+
"type": "boolean",
|
|
504
|
+
"mutable": false,
|
|
505
|
+
"complexType": {
|
|
506
|
+
"original": "boolean",
|
|
507
|
+
"resolved": "boolean",
|
|
508
|
+
"references": {}
|
|
509
|
+
},
|
|
510
|
+
"required": false,
|
|
511
|
+
"optional": false,
|
|
512
|
+
"docs": {
|
|
513
|
+
"tags": [],
|
|
514
|
+
"text": "Whether multiple components can be dropped in this slot."
|
|
515
|
+
},
|
|
516
|
+
"getter": false,
|
|
517
|
+
"setter": false,
|
|
518
|
+
"reflect": false,
|
|
519
|
+
"attribute": "multiple",
|
|
520
|
+
"defaultValue": "true"
|
|
521
|
+
},
|
|
522
|
+
"required": {
|
|
523
|
+
"type": "boolean",
|
|
524
|
+
"mutable": false,
|
|
525
|
+
"complexType": {
|
|
526
|
+
"original": "boolean",
|
|
527
|
+
"resolved": "boolean",
|
|
528
|
+
"references": {}
|
|
529
|
+
},
|
|
530
|
+
"required": false,
|
|
531
|
+
"optional": false,
|
|
532
|
+
"docs": {
|
|
533
|
+
"tags": [],
|
|
534
|
+
"text": "Whether this slot is required to have content."
|
|
535
|
+
},
|
|
536
|
+
"getter": false,
|
|
537
|
+
"setter": false,
|
|
538
|
+
"reflect": false,
|
|
539
|
+
"attribute": "required",
|
|
540
|
+
"defaultValue": "false"
|
|
541
|
+
},
|
|
542
|
+
"placeholder": {
|
|
543
|
+
"type": "string",
|
|
544
|
+
"mutable": false,
|
|
545
|
+
"complexType": {
|
|
546
|
+
"original": "string",
|
|
547
|
+
"resolved": "string",
|
|
548
|
+
"references": {}
|
|
549
|
+
},
|
|
550
|
+
"required": false,
|
|
551
|
+
"optional": true,
|
|
552
|
+
"docs": {
|
|
553
|
+
"tags": [],
|
|
554
|
+
"text": "Placeholder text for text/textarea inputs in admin mode."
|
|
555
|
+
},
|
|
556
|
+
"getter": false,
|
|
557
|
+
"setter": false,
|
|
558
|
+
"reflect": false,
|
|
559
|
+
"attribute": "placeholder"
|
|
560
|
+
},
|
|
561
|
+
"tag": {
|
|
562
|
+
"type": "string",
|
|
563
|
+
"mutable": false,
|
|
564
|
+
"complexType": {
|
|
565
|
+
"original": "string",
|
|
566
|
+
"resolved": "string",
|
|
567
|
+
"references": {}
|
|
568
|
+
},
|
|
569
|
+
"required": false,
|
|
570
|
+
"optional": true,
|
|
571
|
+
"docs": {
|
|
572
|
+
"tags": [{
|
|
573
|
+
"name": "example",
|
|
574
|
+
"text": "\"h3\" - creates <h3 slot=\"header\">content</h3>"
|
|
575
|
+
}, {
|
|
576
|
+
"name": "example",
|
|
577
|
+
"text": "\"p\" - creates <p slot=\"content\">content</p>"
|
|
578
|
+
}],
|
|
579
|
+
"text": "The HTML tag to create when there's no slotted element.\nUsed with type=\"text\" or type=\"textarea\" to auto-create elements."
|
|
580
|
+
},
|
|
581
|
+
"getter": false,
|
|
582
|
+
"setter": false,
|
|
583
|
+
"reflect": false,
|
|
584
|
+
"attribute": "tag"
|
|
585
|
+
},
|
|
586
|
+
"slotStyle": {
|
|
587
|
+
"type": "string",
|
|
588
|
+
"mutable": false,
|
|
589
|
+
"complexType": {
|
|
590
|
+
"original": "string",
|
|
591
|
+
"resolved": "string",
|
|
592
|
+
"references": {}
|
|
593
|
+
},
|
|
594
|
+
"required": false,
|
|
595
|
+
"optional": true,
|
|
596
|
+
"docs": {
|
|
597
|
+
"tags": [],
|
|
598
|
+
"text": "CSS styles for the slot dropzone container.\nUseful for layouts - e.g., \"flex-direction: row\" for horizontal stacks.\nOnly applies in admin mode for type=\"slot\"."
|
|
599
|
+
},
|
|
600
|
+
"getter": false,
|
|
601
|
+
"setter": false,
|
|
602
|
+
"reflect": false,
|
|
603
|
+
"attribute": "slot-style"
|
|
604
|
+
}
|
|
605
|
+
};
|
|
606
|
+
}
|
|
607
|
+
static get states() {
|
|
608
|
+
return {
|
|
609
|
+
"adminMode": {},
|
|
610
|
+
"textValue": {},
|
|
611
|
+
"isValidHtml": {},
|
|
612
|
+
"availableComponents": {},
|
|
613
|
+
"pickerOpen": {}
|
|
614
|
+
};
|
|
615
|
+
}
|
|
616
|
+
static get events() {
|
|
617
|
+
return [{
|
|
618
|
+
"method": "leSlotChange",
|
|
619
|
+
"name": "leSlotChange",
|
|
620
|
+
"bubbles": true,
|
|
621
|
+
"cancelable": true,
|
|
622
|
+
"composed": true,
|
|
623
|
+
"docs": {
|
|
624
|
+
"tags": [],
|
|
625
|
+
"text": "Emitted when text content changes in admin mode.\nThe event detail contains the new text value and validity."
|
|
626
|
+
},
|
|
627
|
+
"complexType": {
|
|
628
|
+
"original": "{ name: string; value: string; isValid: boolean }",
|
|
629
|
+
"resolved": "{ name: string; value: string; isValid: boolean; }",
|
|
630
|
+
"references": {}
|
|
631
|
+
}
|
|
632
|
+
}];
|
|
633
|
+
}
|
|
634
|
+
static get elementRef() { return "el"; }
|
|
635
|
+
}
|
|
636
|
+
//# sourceMappingURL=le-slot.js.map
|