le-kit 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/le-kit/assets/custom-elements.json +4305 -0
- package/dist/le-kit/index-Da-89pOc.js +4522 -0
- package/dist/le-kit/{index-D21JjI31.js.map → index-Da-89pOc.js.map} +1 -1
- package/dist/le-kit/index.esm.js +116 -2
- package/dist/le-kit/index.esm.js.map +1 -1
- package/dist/{esm → le-kit}/le-box.entry.js +3 -3
- package/dist/le-kit/le-button.entry.esm.js.map +1 -0
- package/dist/le-kit/le-button.entry.js +90 -0
- package/dist/{esm → le-kit}/le-card.entry.js +3 -3
- package/dist/le-kit/le-checkbox.entry.esm.js.map +1 -0
- package/dist/le-kit/le-checkbox.entry.js +59 -0
- package/dist/le-kit/le-component.entry.esm.js.map +1 -0
- package/dist/{collection/components/le-component/le-component.js → le-kit/le-component.entry.js} +19 -134
- package/dist/le-kit/le-kit.css +1010 -1
- package/dist/le-kit/le-kit.esm.js +48 -2
- package/dist/le-kit/le-kit.esm.js.map +1 -1
- package/dist/{esm → le-kit}/le-number-input.entry.js +5 -5
- package/dist/le-kit/le-popover.entry.esm.js.map +1 -0
- package/dist/{components/le-popover2.js → le-kit/le-popover.entry.js} +9 -45
- package/dist/{esm → le-kit}/le-popup.entry.js +6 -6
- package/dist/{esm → le-kit}/le-round-progress.entry.js +2 -2
- package/dist/le-kit/le-slot.entry.esm.js.map +1 -0
- package/dist/{collection/components/le-slot/le-slot.js → le-kit/le-slot.entry.js} +30 -279
- package/dist/{esm → le-kit}/le-stack.entry.js +3 -3
- package/dist/le-kit/le-string-input.entry.esm.js.map +1 -0
- package/dist/le-kit/le-string-input.entry.js +93 -0
- package/dist/{esm → le-kit}/le-text.entry.js +3 -3
- package/dist/{esm → le-kit}/le-turntable.entry.js +2 -2
- package/dist/{esm/utils-CJLZrrdC.js → le-kit/utils-FDOApZ53.js} +3 -3
- package/dist/le-kit/{utils-apol-Xc_.js.map → utils-FDOApZ53.js.map} +1 -1
- package/package.json +1 -1
- package/dist/cjs/index-CO4npcak.js +0 -1796
- package/dist/cjs/index-CO4npcak.js.map +0 -1
- package/dist/cjs/index.cjs.js +0 -117
- package/dist/cjs/index.cjs.js.map +0 -1
- package/dist/cjs/le-box.cjs.entry.js +0 -184
- package/dist/cjs/le-box.entry.cjs.js.map +0 -1
- package/dist/cjs/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.cjs.js.map +0 -1
- package/dist/cjs/le-button_6.cjs.entry.js +0 -1199
- package/dist/cjs/le-card.cjs.entry.js +0 -29
- package/dist/cjs/le-card.entry.cjs.js.map +0 -1
- package/dist/cjs/le-kit.cjs.js +0 -25
- package/dist/cjs/le-kit.cjs.js.map +0 -1
- package/dist/cjs/le-number-input.cjs.entry.js +0 -202
- package/dist/cjs/le-number-input.entry.cjs.js.map +0 -1
- package/dist/cjs/le-popup.cjs.entry.js +0 -212
- package/dist/cjs/le-popup.entry.cjs.js.map +0 -1
- package/dist/cjs/le-round-progress.cjs.entry.js +0 -106
- package/dist/cjs/le-round-progress.entry.cjs.js.map +0 -1
- package/dist/cjs/le-stack.cjs.entry.js +0 -135
- package/dist/cjs/le-stack.entry.cjs.js.map +0 -1
- package/dist/cjs/le-text.cjs.entry.js +0 -335
- package/dist/cjs/le-text.entry.cjs.js.map +0 -1
- package/dist/cjs/le-turntable.cjs.entry.js +0 -139
- package/dist/cjs/le-turntable.entry.cjs.js.map +0 -1
- package/dist/cjs/loader.cjs.js +0 -13
- package/dist/cjs/loader.cjs.js.map +0 -1
- package/dist/cjs/utils-BeT0iyCQ.js +0 -152
- package/dist/cjs/utils-BeT0iyCQ.js.map +0 -1
- package/dist/collection/collection-manifest.json +0 -26
- package/dist/collection/components/le-box/le-box.default.css +0 -37
- package/dist/collection/components/le-box/le-box.js +0 -614
- package/dist/collection/components/le-box/le-box.js.map +0 -1
- package/dist/collection/components/le-button/le-button.default.css +0 -263
- package/dist/collection/components/le-button/le-button.js +0 -368
- package/dist/collection/components/le-button/le-button.js.map +0 -1
- package/dist/collection/components/le-card/le-card.default.css +0 -74
- package/dist/collection/components/le-card/le-card.js +0 -102
- package/dist/collection/components/le-card/le-card.js.map +0 -1
- package/dist/collection/components/le-checkbox/le-checkbox.css +0 -93
- package/dist/collection/components/le-checkbox/le-checkbox.js +0 -192
- package/dist/collection/components/le-checkbox/le-checkbox.js.map +0 -1
- package/dist/collection/components/le-component/le-component.css +0 -189
- package/dist/collection/components/le-component/le-component.js.map +0 -1
- package/dist/collection/components/le-number-input/le-number-input.css +0 -135
- package/dist/collection/components/le-number-input/le-number-input.js +0 -515
- package/dist/collection/components/le-number-input/le-number-input.js.map +0 -1
- package/dist/collection/components/le-popover/le-popover.css +0 -143
- package/dist/collection/components/le-popover/le-popover.js +0 -693
- package/dist/collection/components/le-popover/le-popover.js.map +0 -1
- package/dist/collection/components/le-popup/le-popup.api.js +0 -101
- package/dist/collection/components/le-popup/le-popup.api.js.map +0 -1
- package/dist/collection/components/le-popup/le-popup.css +0 -222
- package/dist/collection/components/le-popup/le-popup.js +0 -596
- package/dist/collection/components/le-popup/le-popup.js.map +0 -1
- package/dist/collection/components/le-round-progress/le-round-progress.css +0 -34
- package/dist/collection/components/le-round-progress/le-round-progress.js +0 -184
- package/dist/collection/components/le-round-progress/le-round-progress.js.map +0 -1
- package/dist/collection/components/le-slot/le-slot.default.css +0 -222
- package/dist/collection/components/le-slot/le-slot.js.map +0 -1
- package/dist/collection/components/le-stack/le-stack.default.css +0 -37
- package/dist/collection/components/le-stack/le-stack.js +0 -389
- package/dist/collection/components/le-stack/le-stack.js.map +0 -1
- package/dist/collection/components/le-string-input/le-string-input.css +0 -83
- package/dist/collection/components/le-string-input/le-string-input.js +0 -359
- package/dist/collection/components/le-string-input/le-string-input.js.map +0 -1
- package/dist/collection/components/le-text/le-text.default.css +0 -169
- package/dist/collection/components/le-text/le-text.js +0 -475
- package/dist/collection/components/le-text/le-text.js.map +0 -1
- package/dist/collection/components/le-turntable/le-turntable.css +0 -10
- package/dist/collection/components/le-turntable/le-turntable.js +0 -210
- package/dist/collection/components/le-turntable/le-turntable.js.map +0 -1
- package/dist/collection/global/app.js +0 -130
- package/dist/collection/global/app.js.map +0 -1
- package/dist/collection/index.js +0 -15
- package/dist/collection/index.js.map +0 -1
- package/dist/collection/types/blocks.js +0 -115
- package/dist/collection/types/blocks.js.map +0 -1
- package/dist/collection/types/options.js +0 -2
- package/dist/collection/types/options.js.map +0 -1
- package/dist/collection/utils/utils.js +0 -141
- package/dist/collection/utils/utils.js.map +0 -1
- package/dist/components/index.js +0 -127
- package/dist/components/index.js.map +0 -1
- package/dist/components/le-box.js +0 -256
- package/dist/components/le-box.js.map +0 -1
- package/dist/components/le-button.js +0 -9
- package/dist/components/le-button.js.map +0 -1
- package/dist/components/le-button2.js +0 -1408
- package/dist/components/le-button2.js.map +0 -1
- package/dist/components/le-card.js +0 -83
- package/dist/components/le-card.js.map +0 -1
- package/dist/components/le-checkbox.js +0 -9
- package/dist/components/le-checkbox.js.map +0 -1
- package/dist/components/le-component.js +0 -9
- package/dist/components/le-component.js.map +0 -1
- package/dist/components/le-number-input.js +0 -271
- package/dist/components/le-number-input.js.map +0 -1
- package/dist/components/le-popover.js +0 -9
- package/dist/components/le-popover.js.map +0 -1
- package/dist/components/le-popover2.js.map +0 -1
- package/dist/components/le-popup.js +0 -279
- package/dist/components/le-popup.js.map +0 -1
- package/dist/components/le-round-progress.js +0 -135
- package/dist/components/le-round-progress.js.map +0 -1
- package/dist/components/le-slot.js +0 -9
- package/dist/components/le-slot.js.map +0 -1
- package/dist/components/le-stack.js +0 -198
- package/dist/components/le-stack.js.map +0 -1
- package/dist/components/le-string-input.js +0 -9
- package/dist/components/le-string-input.js.map +0 -1
- package/dist/components/le-text.js +0 -398
- package/dist/components/le-text.js.map +0 -1
- package/dist/components/le-turntable.js +0 -164
- package/dist/components/le-turntable.js.map +0 -1
- package/dist/docs.d.ts +0 -443
- package/dist/docs.json +0 -5185
- package/dist/esm/index-D71TXvJa.js +0 -1781
- package/dist/esm/index-D71TXvJa.js.map +0 -1
- package/dist/esm/index.js +0 -106
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/le-box.entry.js.map +0 -1
- package/dist/esm/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.js.map +0 -1
- package/dist/esm/le-button_6.entry.js +0 -1192
- package/dist/esm/le-card.entry.js.map +0 -1
- package/dist/esm/le-kit.js +0 -21
- package/dist/esm/le-kit.js.map +0 -1
- package/dist/esm/le-number-input.entry.js.map +0 -1
- package/dist/esm/le-popup.entry.js.map +0 -1
- package/dist/esm/le-round-progress.entry.js.map +0 -1
- package/dist/esm/le-stack.entry.js.map +0 -1
- package/dist/esm/le-text.entry.js.map +0 -1
- package/dist/esm/le-turntable.entry.js.map +0 -1
- package/dist/esm/loader.js +0 -11
- package/dist/esm/loader.js.map +0 -1
- package/dist/esm/utils-CJLZrrdC.js.map +0 -1
- package/dist/index.cjs.js +0 -1
- package/dist/index.js +0 -1
- package/dist/le-kit/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.esm.js.map +0 -1
- package/dist/le-kit/p-024a764e.entry.js +0 -2
- package/dist/le-kit/p-024a764e.entry.js.map +0 -1
- package/dist/le-kit/p-073cf0b9.entry.js +0 -2
- package/dist/le-kit/p-073cf0b9.entry.js.map +0 -1
- package/dist/le-kit/p-0955b105.entry.js +0 -2
- package/dist/le-kit/p-0955b105.entry.js.map +0 -1
- package/dist/le-kit/p-18d79ee2.entry.js +0 -2
- package/dist/le-kit/p-18d79ee2.entry.js.map +0 -1
- package/dist/le-kit/p-4b1d3b6d.entry.js +0 -2
- package/dist/le-kit/p-4b1d3b6d.entry.js.map +0 -1
- package/dist/le-kit/p-79d179bd.entry.js +0 -2
- package/dist/le-kit/p-79d179bd.entry.js.map +0 -1
- package/dist/le-kit/p-D71TXvJa.js +0 -3
- package/dist/le-kit/p-D71TXvJa.js.map +0 -1
- package/dist/le-kit/p-c8a9288e.entry.js +0 -2
- package/dist/le-kit/p-c8a9288e.entry.js.map +0 -1
- package/dist/le-kit/p-cfc35bd3.entry.js +0 -2
- package/dist/le-kit/p-cfc35bd3.entry.js.map +0 -1
- package/dist/le-kit/p-d04da1f5.entry.js +0 -2
- package/dist/le-kit/p-d04da1f5.entry.js.map +0 -1
- package/dist/le-kit/p-qIai5-eB.js +0 -2
- package/dist/le-kit/p-qIai5-eB.js.map +0 -1
- package/dist/themes/base.css +0 -89
- package/dist/themes/dark.css +0 -100
- package/dist/themes/default.css +0 -108
- package/dist/themes/gradient.css +0 -100
- package/dist/themes/index.css +0 -413
- package/dist/themes/minimal.css +0 -100
- package/dist/themes/warm.css +0 -100
|
@@ -1,20 +1,14 @@
|
|
|
1
|
-
import { h, Host } from
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
*
|
|
13
|
-
* @cmsInternal true
|
|
14
|
-
* @cmsCategory System
|
|
15
|
-
*/
|
|
16
|
-
export class LeSlot {
|
|
17
|
-
el;
|
|
1
|
+
import { r as registerInstance, k as createEvent, h as getElement, l as getAssetPath, i as h, j as Host } from './index-Da-89pOc.js';
|
|
2
|
+
import { o as observeModeChanges, c as classnames } from './utils-FDOApZ53.js';
|
|
3
|
+
|
|
4
|
+
const leSlotDefaultCss = ":host{display:contents;--le-slot-border-color:#0088ff;--le-slot-bg-color:rgba(0, 136, 255, 0.05);--le-slot-header-bg:rgb(218, 238, 255);--le-slot-label-color:#0066cc;--le-slot-description-color:#666;--le-slot-required-color:#e53935;--le-slot-dropzone-min-height:20px;--le-slot-dropzone-border-color:#ccc}.le-slot-container,.le-slot-header,.le-slot-description,.le-slot-dropzone,.le-slot-input{display:none}.hidden-slot{display:none}:host(.admin-mode){display:block;flex:1}:host(.admin-mode) .le-slot-container{position:relative;display:flex;flex-direction:column;border:2px dashed var(--le-slot-border-color);border-radius:4px;background:var(--le-slot-bg-color);margin:4px 0}:host(.admin-mode) .le-slot-header{display:flex;align-items:center;gap:4px;padding:0 0 0 var(--le-spacing-1, 4px);background:var(--le-slot-header-bg);border-bottom:1px solid var(--le-slot-border-color);font-size:var(--le-font-size-xs, 11px);font-weight:400;text-transform:capitalize}:host(.admin-mode) .le-slot-header-no-label{justify-content:flex-end;height:16px;border:none;background-color:transparent}.le-slot-label{color:var(--le-slot-label-color);text-align:start;overflow:hidden;width:0;flex:1 1 0%}.le-slot-required{color:var(--le-slot-required-color);font-weight:bold}:host(.admin-mode) .le-slot-description{display:block;padding:4px 8px;font-size:12px;color:var(--le-slot-description-color);font-style:italic}:host(.admin-mode) .le-slot-description-icon{display:inline-block;font-size:9px;line-height:1;cursor:pointer;color:var(--le-slot-description-color)}:host(.admin-mode) .le-slot-dropzone{display:block;min-height:var(--le-slot-dropzone-min-height);padding:var(--le-spacing-1, 4px);position:relative}:host(.admin-mode) .le-slot-dropzone:empty::before{content:'Drop content here';display:flex;align-items:center;justify-content:center;position:absolute;inset:8px;border:2px dashed var(--le-slot-dropzone-border-color);border-radius:4px;color:#999;font-size:12px;pointer-events:none}:host(.admin-mode.drag-over) .le-slot-container{border-color:#00cc66;background:rgba(0, 204, 102, 0.1)}:host(.admin-mode.drag-over) .le-slot-dropzone:empty::before{border-color:#00cc66;color:#00cc66;content:'Release to drop'}:host(.admin-mode) .le-slot-input{display:block;padding:var(--le-spacing-1, 4px)}:host(.admin-mode) .le-slot-input input,:host(.admin-mode) .le-slot-input textarea{display:block;width:100%;padding:8px 10px;border:1px solid var(--le-slot-dropzone-border-color);border-radius:4px;font-family:inherit;font-size:14px;line-height:1.4;background:#fff;color:#333;box-sizing:border-box;transition:border-color 0.2s, box-shadow 0.2s}:host(.admin-mode) .le-slot-input input:focus,:host(.admin-mode) .le-slot-input textarea:focus{outline:none;border-color:var(--le-slot-border-color);box-shadow:0 0 0 3px rgba(0, 136, 255, 0.15)}:host(.admin-mode) .le-slot-input input::placeholder,:host(.admin-mode) .le-slot-input textarea::placeholder{color:#999}:host(.admin-mode) .le-slot-input textarea{resize:vertical;min-height:60px}:host(.admin-mode) .le-slot-input slot{display:none}.le-slot-invalid{color:var(--le-slot-required-color);font-size:10px;margin-left:auto;font-weight:normal;text-transform:none}:host(.admin-mode) .le-slot-input.has-error input,:host(.admin-mode) .le-slot-input.has-error textarea{border-color:var(--le-slot-required-color);background:rgba(229, 57, 53, 0.05)}:host(.admin-mode) .le-slot-input.has-error input:focus,:host(.admin-mode) .le-slot-input.has-error textarea:focus{border-color:var(--le-slot-required-color);box-shadow:0 0 0 3px rgba(229, 57, 53, 0.15)}.le-slot-add-btn{font-size:24px;line-height:0px;width:12px;height:12px}.le-slot-header-no-label .le-slot-add-btn{font-size:16px}.le-slot-button{width:20px;height:20px}:host(.admin-mode) .le-slot-header-no-label.le-slot-header-text{height:0}";
|
|
5
|
+
|
|
6
|
+
const LeSlot = class {
|
|
7
|
+
constructor(hostRef) {
|
|
8
|
+
registerInstance(this, hostRef);
|
|
9
|
+
this.leSlotChange = createEvent(this, "leSlotChange", 7);
|
|
10
|
+
}
|
|
11
|
+
get el() { return getElement(this); }
|
|
18
12
|
/**
|
|
19
13
|
* The type of slot content.
|
|
20
14
|
* - `slot`: Default, shows a dropzone for components (default)
|
|
@@ -105,7 +99,7 @@ export class LeSlot {
|
|
|
105
99
|
leSlotChange;
|
|
106
100
|
disconnectModeObserver;
|
|
107
101
|
connectedCallback() {
|
|
108
|
-
this.disconnectModeObserver = observeModeChanges(this.el,
|
|
102
|
+
this.disconnectModeObserver = observeModeChanges(this.el, mode => {
|
|
109
103
|
const wasAdmin = this.adminMode;
|
|
110
104
|
this.adminMode = mode === 'admin';
|
|
111
105
|
// When entering admin mode, read content from slotted elements
|
|
@@ -209,8 +203,7 @@ export class LeSlot {
|
|
|
209
203
|
if (!this.name && rootNode instanceof ShadowRoot) {
|
|
210
204
|
const hostComponent = rootNode.host;
|
|
211
205
|
Array.from(hostComponent.childNodes).forEach(node => {
|
|
212
|
-
if (node.nodeType === Node.TEXT_NODE ||
|
|
213
|
-
(node.nodeType === Node.ELEMENT_NODE && !node.hasAttribute('slot'))) {
|
|
206
|
+
if (node.nodeType === Node.TEXT_NODE || (node.nodeType === Node.ELEMENT_NODE && !node.hasAttribute('slot'))) {
|
|
214
207
|
node.remove();
|
|
215
208
|
}
|
|
216
209
|
});
|
|
@@ -230,7 +223,7 @@ export class LeSlot {
|
|
|
230
223
|
this.leSlotChange.emit({
|
|
231
224
|
name: this.name,
|
|
232
225
|
value: this.textValue,
|
|
233
|
-
isValid: this.isValidHtml
|
|
226
|
+
isValid: this.isValidHtml,
|
|
234
227
|
});
|
|
235
228
|
};
|
|
236
229
|
/**
|
|
@@ -266,7 +259,8 @@ export class LeSlot {
|
|
|
266
259
|
*/
|
|
267
260
|
async loadAvailableComponents() {
|
|
268
261
|
try {
|
|
269
|
-
const
|
|
262
|
+
const manifestPath = getAssetPath('assets/custom-elements.json');
|
|
263
|
+
const response = await fetch(manifestPath);
|
|
270
264
|
const manifest = await response.json();
|
|
271
265
|
const components = [];
|
|
272
266
|
const allowedList = this.allowedComponents?.split(',').map(s => s.trim()) || [];
|
|
@@ -289,7 +283,7 @@ export class LeSlot {
|
|
|
289
283
|
}
|
|
290
284
|
}
|
|
291
285
|
}
|
|
292
|
-
this.availableComponents = components;
|
|
286
|
+
this.availableComponents = components || [];
|
|
293
287
|
}
|
|
294
288
|
catch (error) {
|
|
295
289
|
console.warn('[le-slot] Failed to load component manifest:', error);
|
|
@@ -341,17 +335,17 @@ export class LeSlot {
|
|
|
341
335
|
render() {
|
|
342
336
|
const displayLabel = this.label || this.name;
|
|
343
337
|
// Always render the same structure, CSS handles visibility via .admin-mode class
|
|
344
|
-
return (h(Host, { key: '
|
|
338
|
+
return (h(Host, { key: 'af150a31db62d9c3df9a8c10be34b9bb6756d07f', class: {
|
|
345
339
|
'admin-mode': this.adminMode,
|
|
346
|
-
'invalid-html': !this.isValidHtml
|
|
340
|
+
'invalid-html': !this.isValidHtml,
|
|
347
341
|
}, 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
342
|
'le-slot-header-no-label': !displayLabel,
|
|
349
343
|
'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: () => {
|
|
344
|
+
'le-slot-header-error': !this.isValidHtml,
|
|
345
|
+
}) }, 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
346
|
this.addComponent(component.tagName);
|
|
353
347
|
this.pickerOpen = false;
|
|
354
|
-
} }, h("span", { class: "le-slot-picker-name" }, component.name), component.description &&
|
|
348
|
+
} }, 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
349
|
// In default mode, just pass through the slot - slotted content renders naturally
|
|
356
350
|
// Note: We use unnamed slot here because named slots from parent component
|
|
357
351
|
// are passed as le-slot's light DOM children
|
|
@@ -362,7 +356,7 @@ export class LeSlot {
|
|
|
362
356
|
// Wrap in a hidden div since slot elements can't have style prop in Stencil
|
|
363
357
|
// Note: We use unnamed slot here because named slots from parent component
|
|
364
358
|
// are passed as le-slot's light DOM children
|
|
365
|
-
const slotElement = (h("div", { class: "hidden-slot" }, h("slot", { ref:
|
|
359
|
+
const slotElement = (h("div", { class: "hidden-slot" }, h("slot", { ref: el => (this.slotRef = el), onSlotchange: this.handleSlotChange })));
|
|
366
360
|
switch (this.type) {
|
|
367
361
|
case 'text':
|
|
368
362
|
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));
|
|
@@ -382,255 +376,12 @@ export class LeSlot {
|
|
|
382
376
|
}
|
|
383
377
|
});
|
|
384
378
|
}
|
|
385
|
-
return (h("div", { class: "le-slot-dropzone", style: dropzoneStyle }, h("slot", { ref:
|
|
379
|
+
return (h("div", { class: "le-slot-dropzone", style: dropzoneStyle }, h("slot", { ref: el => (this.slotRef = el), onSlotchange: this.handleSlotChange })));
|
|
386
380
|
}
|
|
387
381
|
}
|
|
388
|
-
static get
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
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
|
|
382
|
+
static get assetsDirs() { return ["../../assets"]; }
|
|
383
|
+
};
|
|
384
|
+
LeSlot.style = leSlotDefaultCss;
|
|
385
|
+
|
|
386
|
+
export { LeSlot as le_slot };
|
|
387
|
+
//# sourceMappingURL=le-slot.entry.esm.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as registerInstance, h as getElement, i as h } from './index-
|
|
2
|
-
import { c as classnames } from './utils-
|
|
1
|
+
import { r as registerInstance, h as getElement, i as h } from './index-Da-89pOc.js';
|
|
2
|
+
import { c as classnames } from './utils-FDOApZ53.js';
|
|
3
3
|
|
|
4
4
|
const leStackDefaultCss = ":host{display:block}:host([hidden]){display:none}.stack{gap:var(--le-stack-gap, var(--le-space-md))}:host(.full-width){width:100%}:host(.full-height){height:100%}:host(.direction-horizontal) .stack{min-height:0}:host(.direction-vertical) .stack{min-width:0}";
|
|
5
5
|
|
|
@@ -130,4 +130,4 @@ const LeStack = class {
|
|
|
130
130
|
LeStack.style = leStackDefaultCss;
|
|
131
131
|
|
|
132
132
|
export { LeStack as le_stack };
|
|
133
|
-
//# sourceMappingURL=le-stack.entry.js.map
|
|
133
|
+
//# sourceMappingURL=le-stack.entry.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"le-string-input.entry.esm.js","sources":["src/components/le-string-input/le-string-input.css?tag=le-string-input&encapsulation=shadow","src/components/le-string-input/le-string-input.tsx"],"sourcesContent":[":host {\n display: block;\n --le-input-bg: var(--le-color-surface, #ffffff);\n --le-input-color: var(--le-color-text-primary, #333333);\n --le-input-border: var(--le-border-width, 2px) solid var(--le-color-border-input, #007bff);\n --le-input-radius: var(--le-radius-sm, 4px);\n --le-input-padding: 2px 6px;\n --le-input-height: 1.5rem;\n --le-input-label-color: var(--le-color-text-primary, #333333);\n --le-input-desc-color: var(--le-color-text-secondary, #666666);\n --le-input-placeholder-color: #999999;\n}\n\n.le-input-wrapper {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.le-input-label {\n display: block;\n font-size: 0.9em;\n font-weight: 500;\n color: var(--le-input-label-color);\n margin-bottom: 2px;\n}\n\n.le-input-container {\n position: relative;\n display: flex;\n align-items: center;\n background: var(--le-input-bg);\n border: var(--le-input-border);\n border-radius: var(--le-input-radius);\n transition: border-color 0.2s;\n}\n\n.le-input-container:focus-within {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n\n:host([disabled]) .le-input-container {\n opacity: 0.6;\n background-color: rgba(0,0,0,0.05);\n cursor: not-allowed;\n}\n\ninput {\n flex: 1;\n min-height: var(--le-input-height);\n padding: var(--le-input-padding);\n border: none;\n background: transparent;\n color: var(--le-input-color);\n font-family: inherit;\n font-size: inherit;\n outline: none;\n width: 100%;\n}\n\ninput::placeholder {\n color: var(--le-input-placeholder-color);\n}\n\n.icon-start, .icon-end {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 8px;\n color: var(--le-input-desc-color);\n}\n\n.le-input-description {\n font-size: 0.85em;\n color: var(--le-input-desc-color);\n margin-top: 2px;\n}\n\n.le-input-description::has(le-slot > slot[name=description]:empty) {\n display: none;\n}\n","import { Component, Prop, Event, EventEmitter, h, Element } from '@stencil/core';\nimport { classnames } from '../../utils/utils';\n\n/**\n * A text input component with support for labels, descriptions, icons, and external IDs.\n *\n * @slot - The label text for the input\n * @slot description - Additional description text displayed below the input\n * @slot icon-start - Icon to display at the start of the input\n * @slot icon-end - Icon to display at the end of the input\n *\n * @cssprop --le-input-bg - Input background color\n * @cssprop --le-input-color - Input text color\n * @cssprop --le-input-border - Input border style\n * @cssprop --le-input-border-focus - Input border style when focused\n * @cssprop --le-input-radius - Input border radius\n * @cssprop --le-input-padding - Input padding\n */\n@Component({\n tag: 'le-string-input',\n styleUrl: 'le-string-input.css',\n shadow: true,\n})\nexport class LeStringInput {\n @Element() el: HTMLElement;\n\n /**\n * Mode of the popover should be 'default' for internal use\n */\n @Prop({ mutable: true, reflect: true }) mode: 'default' | 'admin';\n\n /**\n * The value of the input\n */\n @Prop({ mutable: true, reflect: true }) value: string;\n\n /**\n * The name of the input\n */\n @Prop() name: string;\n\n /**\n * The type of the input (text, email, password, etc.)\n */\n @Prop() type: 'text' | 'email' | 'password' | 'tel' | 'url' = 'text';\n\n /**\n * Label for the input\n */\n @Prop() label: string;\n\n /**\n * Icon for the start icon\n */\n @Prop() iconStart: string;\n\n /**\n * Icon for the end icon\n */\n @Prop() iconEnd: string;\n\n /**\n * Placeholder text\n */\n @Prop() placeholder: string;\n\n /**\n * Whether the input is disabled\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Whether the input is read-only\n */\n @Prop() readonly: boolean = false;\n\n /**\n * External ID for linking with external systems\n */\n @Prop() externalId: string;\n\n /**\n * Emitted when the value changes (on blur or Enter)\n */\n @Event({ eventName: 'change' }) leChange: EventEmitter<{ value: string; name: string; externalId: string }>;\n\n /**\n * Emitted when the input value changes (on keystroke)\n */\n @Event({ eventName: 'input' }) leInput: EventEmitter<{ value: string; name: string; externalId: string }>;\n\n private handleInput = (ev: Event) => {\n const input = ev.target as HTMLInputElement;\n this.value = input.value;\n this.leInput.emit({\n value: this.value,\n name: this.name,\n externalId: this.externalId\n });\n };\n\n private handleChange = (ev: Event) => {\n const input = ev.target as HTMLInputElement;\n this.value = input.value;\n this.leChange.emit({\n value: this.value,\n name: this.name,\n externalId: this.externalId\n });\n };\n\n private handleClick = (ev: Event) => {\n ev.stopPropagation();\n };\n\n render() {\n return (\n <le-component component=\"le-string-input\" hostClass={classnames({ 'disabled': this.disabled })}>\n <div class=\"le-input-wrapper\">\n {this.label && (\n <label class=\"le-input-label\" htmlFor={this.name}>{this.label}</label>\n )}\n \n <div class=\"le-input-container\">\n {this.iconStart && (\n <span class=\"icon-start\">{this.iconStart}</span>\n )}\n <input\n id={this.name}\n type={this.type}\n name={this.name}\n value={this.value}\n placeholder={this.placeholder}\n disabled={this.disabled}\n readOnly={this.readonly}\n onInput={this.handleInput}\n onChange={this.handleChange}\n onClick={this.handleClick}\n />\n {this.iconEnd && (\n <span class=\"icon-end\">{this.iconEnd}</span>\n )}\n </div>\n\n <div class=\"le-input-description\">\n <le-slot name=\"description\" type=\"text\" tag=\"p\" label=\"Description\">\n <slot name=\"description\"></slot>\n </le-slot>\n </div>\n </div>\n </le-component>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { r as registerInstance, k as createEvent, h as getElement, i as h } from './index-Da-89pOc.js';
|
|
2
|
+
import { c as classnames } from './utils-FDOApZ53.js';
|
|
3
|
+
|
|
4
|
+
const leStringInputCss = ":host{display:block;--le-input-bg:var(--le-color-surface, #ffffff);--le-input-color:var(--le-color-text-primary, #333333);--le-input-border:var(--le-border-width, 2px) solid var(--le-color-border-input, #007bff);--le-input-radius:var(--le-radius-sm, 4px);--le-input-padding:2px 6px;--le-input-height:1.5rem;--le-input-label-color:var(--le-color-text-primary, #333333);--le-input-desc-color:var(--le-color-text-secondary, #666666);--le-input-placeholder-color:#999999}.le-input-wrapper{display:flex;flex-direction:column;gap:2px}.le-input-label{display:block;font-size:0.9em;font-weight:500;color:var(--le-input-label-color);margin-bottom:2px}.le-input-container{position:relative;display:flex;align-items:center;background:var(--le-input-bg);border:var(--le-input-border);border-radius:var(--le-input-radius);transition:border-color 0.2s}.le-input-container:focus-within{outline:2px solid var(--le-color-focus);outline-offset:2px}:host([disabled]) .le-input-container{opacity:0.6;background-color:rgba(0,0,0,0.05);cursor:not-allowed}input{flex:1;min-height:var(--le-input-height);padding:var(--le-input-padding);border:none;background:transparent;color:var(--le-input-color);font-family:inherit;font-size:inherit;outline:none;width:100%}input::placeholder{color:var(--le-input-placeholder-color)}.icon-start,.icon-end{display:flex;align-items:center;justify-content:center;padding:0 8px;color:var(--le-input-desc-color)}.le-input-description{font-size:0.85em;color:var(--le-input-desc-color);margin-top:2px}.le-input-description::has(le-slot>slot[name=description]:empty){display:none}";
|
|
5
|
+
|
|
6
|
+
const LeStringInput = class {
|
|
7
|
+
constructor(hostRef) {
|
|
8
|
+
registerInstance(this, hostRef);
|
|
9
|
+
this.leChange = createEvent(this, "change", 7);
|
|
10
|
+
this.leInput = createEvent(this, "input", 7);
|
|
11
|
+
}
|
|
12
|
+
get el() { return getElement(this); }
|
|
13
|
+
/**
|
|
14
|
+
* Mode of the popover should be 'default' for internal use
|
|
15
|
+
*/
|
|
16
|
+
mode;
|
|
17
|
+
/**
|
|
18
|
+
* The value of the input
|
|
19
|
+
*/
|
|
20
|
+
value;
|
|
21
|
+
/**
|
|
22
|
+
* The name of the input
|
|
23
|
+
*/
|
|
24
|
+
name;
|
|
25
|
+
/**
|
|
26
|
+
* The type of the input (text, email, password, etc.)
|
|
27
|
+
*/
|
|
28
|
+
type = 'text';
|
|
29
|
+
/**
|
|
30
|
+
* Label for the input
|
|
31
|
+
*/
|
|
32
|
+
label;
|
|
33
|
+
/**
|
|
34
|
+
* Icon for the start icon
|
|
35
|
+
*/
|
|
36
|
+
iconStart;
|
|
37
|
+
/**
|
|
38
|
+
* Icon for the end icon
|
|
39
|
+
*/
|
|
40
|
+
iconEnd;
|
|
41
|
+
/**
|
|
42
|
+
* Placeholder text
|
|
43
|
+
*/
|
|
44
|
+
placeholder;
|
|
45
|
+
/**
|
|
46
|
+
* Whether the input is disabled
|
|
47
|
+
*/
|
|
48
|
+
disabled = false;
|
|
49
|
+
/**
|
|
50
|
+
* Whether the input is read-only
|
|
51
|
+
*/
|
|
52
|
+
readonly = false;
|
|
53
|
+
/**
|
|
54
|
+
* External ID for linking with external systems
|
|
55
|
+
*/
|
|
56
|
+
externalId;
|
|
57
|
+
/**
|
|
58
|
+
* Emitted when the value changes (on blur or Enter)
|
|
59
|
+
*/
|
|
60
|
+
leChange;
|
|
61
|
+
/**
|
|
62
|
+
* Emitted when the input value changes (on keystroke)
|
|
63
|
+
*/
|
|
64
|
+
leInput;
|
|
65
|
+
handleInput = (ev) => {
|
|
66
|
+
const input = ev.target;
|
|
67
|
+
this.value = input.value;
|
|
68
|
+
this.leInput.emit({
|
|
69
|
+
value: this.value,
|
|
70
|
+
name: this.name,
|
|
71
|
+
externalId: this.externalId
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
handleChange = (ev) => {
|
|
75
|
+
const input = ev.target;
|
|
76
|
+
this.value = input.value;
|
|
77
|
+
this.leChange.emit({
|
|
78
|
+
value: this.value,
|
|
79
|
+
name: this.name,
|
|
80
|
+
externalId: this.externalId
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
handleClick = (ev) => {
|
|
84
|
+
ev.stopPropagation();
|
|
85
|
+
};
|
|
86
|
+
render() {
|
|
87
|
+
return (h("le-component", { key: 'd0c69370dae2d1fee5700954e4823d2a03a51331', component: "le-string-input", hostClass: classnames({ 'disabled': this.disabled }) }, h("div", { key: '4acae8d3c34da2a86970a616c493ff210d561f5f', class: "le-input-wrapper" }, this.label && (h("label", { key: '609191b45187b6b1a65d05cd594b149760ac6882', class: "le-input-label", htmlFor: this.name }, this.label)), h("div", { key: '36b4caff4468ac7421db03f811cb3ef4a622b001', class: "le-input-container" }, this.iconStart && (h("span", { key: '344f88887fe8270bbef7e26ec1ad5da9fae1f8e4', class: "icon-start" }, this.iconStart)), h("input", { key: '4ba7beeddd7fb3cf23d03e029d11a804764cdd6e', id: this.name, type: this.type, name: this.name, value: this.value, placeholder: this.placeholder, disabled: this.disabled, readOnly: this.readonly, onInput: this.handleInput, onChange: this.handleChange, onClick: this.handleClick }), this.iconEnd && (h("span", { key: '7cdd4b52c3e1a1b18b19e697bdb42431941bba01', class: "icon-end" }, this.iconEnd))), h("div", { key: '113a75aa413e4d95300aeaa97d1ce7a75cf68c7a', class: "le-input-description" }, h("le-slot", { key: '0b37fc14e6df68f6c44cf9001d63a70f019e1cc3', name: "description", type: "text", tag: "p", label: "Description" }, h("slot", { key: '2674056dc915fabdb4fcbcaa13294a116b9509a6', name: "description" }))))));
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
LeStringInput.style = leStringInputCss;
|
|
91
|
+
|
|
92
|
+
export { LeStringInput as le_string_input };
|
|
93
|
+
//# sourceMappingURL=le-string-input.entry.esm.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as registerInstance, h as getElement, i as h,
|
|
2
|
-
import { o as observeModeChanges } from './utils-
|
|
1
|
+
import { r as registerInstance, h as getElement, i as h, j as Host } from './index-Da-89pOc.js';
|
|
2
|
+
import { o as observeModeChanges } from './utils-FDOApZ53.js';
|
|
3
3
|
|
|
4
4
|
const leTextDefaultCss = ":host{display:block}:host([hidden]){display:none}.le-text{margin:0;color:var(--le-text-color, var(--le-color-text));font-family:var(--le-font-family);line-height:var(--le-text-line-height, 1.5)}.variant-p{font-size:var(--le-font-size-base, 1rem);font-weight:var(--le-font-weight-normal, 400);color:var(--le-color-text)}.variant-h1{font-size:var(--le-font-size-4xl, 2.5rem);font-weight:var(--le-font-weight-bold, 700);line-height:1.2;color:var(--le-color-text);letter-spacing:-0.02em}.variant-h2{font-size:var(--le-font-size-3xl, 2rem);font-weight:var(--le-font-weight-bold, 700);line-height:1.25;color:var(--le-color-text);letter-spacing:-0.01em}.variant-h3{font-size:var(--le-font-size-2xl, 1.5rem);font-weight:var(--le-font-weight-semibold, 600);line-height:1.3;color:var(--le-color-text)}.variant-h4{font-size:var(--le-font-size-xl, 1.25rem);font-weight:var(--le-font-weight-semibold, 600);line-height:1.35;color:var(--le-color-text)}.variant-h5{font-size:var(--le-font-size-lg, 1.125rem);font-weight:var(--le-font-weight-medium, 500);line-height:1.4;color:var(--le-color-text)}.variant-h6{font-size:var(--le-font-size-base, 1rem);font-weight:var(--le-font-weight-medium, 500);line-height:1.45;color:var(--le-color-text);text-transform:uppercase;letter-spacing:0.05em}.variant-code{font-family:var(--le-font-family-mono, 'SF Mono', 'Fira Code', 'Consolas', monospace);font-size:var(--le-font-size-sm, 0.875rem);background:var(--le-color-surface-alt, #f5f5f5);padding:var(--le-space-md);border-radius:var(--le-radius-md);overflow-x:auto;white-space:pre-wrap;color:var(--le-color-text)}.variant-quote{font-size:var(--le-font-size-lg, 1.125rem);font-style:italic;color:var(--le-color-text-secondary);border-left:4px solid var(--le-color-primary);padding-left:var(--le-space-lg);margin-left:0;margin-right:0}.variant-label{font-size:var(--le-font-size-sm, 0.875rem);font-weight:var(--le-font-weight-medium, 500);color:var(--le-color-text-secondary);text-transform:uppercase;letter-spacing:0.05em}.variant-small{font-size:var(--le-font-size-sm, 0.875rem);color:var(--le-color-text-secondary)}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.truncate.max-lines-2,.truncate.max-lines-3,.truncate.max-lines-4,.truncate.max-lines-5{white-space:normal;display:-webkit-box;-webkit-box-orient:vertical}.truncate.max-lines-2{-webkit-line-clamp:2;line-clamp:2}.truncate.max-lines-3{-webkit-line-clamp:3;line-clamp:3}.truncate.max-lines-4{-webkit-line-clamp:4;line-clamp:4}.truncate.max-lines-5{-webkit-line-clamp:5;line-clamp:5}:host([align=\"center\"]) .le-text{text-align:center}:host([align=\"right\"]) .le-text{text-align:right}:host([align=\"justify\"]) .le-text{text-align:justify}.le-text a{color:var(--le-color-primary);text-decoration:underline}.le-text a:hover{color:var(--le-color-primary-dark)}.le-text strong,.le-text b{font-weight:var(--le-font-weight-bold, 700)}.le-text em,.le-text i{font-style:italic}.le-text u{text-decoration:underline}.le-text s,.le-text strike{text-decoration:line-through}";
|
|
5
5
|
|
|
@@ -330,4 +330,4 @@ const LeText = class {
|
|
|
330
330
|
LeText.style = leTextDefaultCss;
|
|
331
331
|
|
|
332
332
|
export { LeText as le_text };
|
|
333
|
-
//# sourceMappingURL=le-text.entry.js.map
|
|
333
|
+
//# sourceMappingURL=le-text.entry.esm.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as registerInstance, h as getElement, i as h } from './index-
|
|
1
|
+
import { r as registerInstance, h as getElement, i as h } from './index-Da-89pOc.js';
|
|
2
2
|
|
|
3
3
|
const leTurntableCss = ":host{display:block;cursor:grab}div.turntable{width:100%;height:100%;padding:1px}";
|
|
4
4
|
|
|
@@ -134,4 +134,4 @@ const LeTurntable = class {
|
|
|
134
134
|
LeTurntable.style = leTurntableCss;
|
|
135
135
|
|
|
136
136
|
export { LeTurntable as le_turntable };
|
|
137
|
-
//# sourceMappingURL=le-turntable.entry.js.map
|
|
137
|
+
//# sourceMappingURL=le-turntable.entry.esm.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as getMode } from './index-
|
|
1
|
+
import { a as getMode } from './index-Da-89pOc.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Utility functions for le-kit components
|
|
@@ -141,6 +141,6 @@ function classnames(...classes) {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
export { classnames as c, generateId as g, observeModeChanges as o, parseCommaSeparated as p, slotHasContent as s };
|
|
144
|
-
//# sourceMappingURL=utils-
|
|
144
|
+
//# sourceMappingURL=utils-FDOApZ53.js.map
|
|
145
145
|
|
|
146
|
-
//# sourceMappingURL=utils-
|
|
146
|
+
//# sourceMappingURL=utils-FDOApZ53.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils-
|
|
1
|
+
{"version":3,"file":"utils-FDOApZ53.js","sources":["src/utils/utils.ts"],"sourcesContent":["/**\n * Utility functions for le-kit components\n */\n\nimport { getMode } from '../global/app';\n\n/**\n * Generates a unique ID for component instances\n */\nexport function generateId(prefix: string = 'le'): string {\n return `${prefix}-${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Parses a comma-separated string into an array\n */\nexport function parseCommaSeparated(value: string | undefined): string[] {\n if (!value) return [];\n return value\n .split(',')\n .map(s => s.trim())\n .filter(Boolean);\n}\n\n/**\n * Checks if a slot has content\n */\nexport function slotHasContent(el: HTMLElement, slotName: string = ''): boolean {\n const selector = slotName ? `[slot=\"${slotName}\"]` : ':not([slot])';\n return el.querySelector(selector) !== null;\n}\n\n/**\n * Sets up a MutationObserver to track mode changes on ancestor elements.\n * Returns a cleanup function to disconnect the observer.\n * \n * If the element or any ancestor has an explicit `mode` attribute, that creates\n * a \"mode boundary\" - the mode is determined from that point, not from further up.\n * This allows components like le-popover to force default mode for their children.\n * \n * @param el - The component's host element\n * @param callback - Function to call when mode changes, receives the new mode\n * @returns Cleanup function to disconnect the observer\n * \n * @example\n * ```tsx\n * export class MyComponent {\n * @Element() el: HTMLElement;\n * @State() adminMode: boolean = false;\n * private disconnectModeObserver?: () => void;\n * \n * connectedCallback() {\n * this.disconnectModeObserver = observeModeChanges(this.el, (mode) => {\n * this.adminMode = mode === 'admin';\n * });\n * }\n * \n * disconnectedCallback() {\n * this.disconnectModeObserver?.();\n * }\n * }\n * ```\n */\nexport function observeModeChanges(\n el: HTMLElement,\n callback: (mode: string) => void\n): () => void {\n // Call immediately with current mode\n callback(getMode(el));\n\n // Set up observer for mode attribute changes\n const observer = new MutationObserver(() => {\n callback(getMode(el));\n });\n\n // Observe the element itself (for mode boundary changes)\n observer.observe(el, {\n attributes: true,\n attributeFilter: ['mode'],\n });\n\n // Observe document root\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['mode'],\n });\n\n // Traverse up, crossing shadow boundaries, and observe each element\n let current: Node | null = el;\n while (current) {\n if (current instanceof Element && current.parentElement) {\n current = current.parentElement;\n observer.observe(current, {\n attributes: true,\n attributeFilter: ['mode'],\n });\n // If this element has an explicit mode, it's a boundary\n if ((current as Element).hasAttribute('mode')) {\n break;\n }\n } else {\n // Check if we're in a shadow root\n const root = current.getRootNode();\n if (root instanceof ShadowRoot) {\n // Cross the shadow boundary and observe the host\n current = root.host;\n observer.observe(current, {\n attributes: true,\n attributeFilter: ['mode'],\n });\n // If the host has an explicit mode, it's a boundary\n if ((current as Element).hasAttribute('mode')) {\n break;\n }\n } else {\n break;\n }\n }\n }\n\n // Return cleanup function\n return () => observer.disconnect();\n}\n\n/**\n * Combines multiple class names into a single string, filtering out falsy values.\n * \n * @param classes - arguments of class names, undefined, arrays, objects with boolean values and nested combinations of these\n * @returns Combined class names string\n */\nexport function classnames(...classes: any[]): string {\n const result: string[] = [];\n\n classes.forEach(cls => {\n if (!cls) return;\n\n if (typeof cls === 'string') {\n result.push(cls);\n } else if (Array.isArray(cls)) {\n result.push(classnames(...cls));\n } else if (typeof cls === 'object') {\n Object.entries(cls).forEach(([key, value]) => {\n if (value) {\n result.push(key);\n }\n });\n }\n });\n\n return result.join(' ');\n}\n"],"names":[],"mappings":";;AAAA;;AAEG;AAIH;;AAEG;AACa,SAAA,UAAU,CAAC,MAAA,GAAiB,IAAI,EAAA;IAC9C,OAAO,CAAA,EAAG,MAAM,CAAI,CAAA,EAAA,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAClE;AAEA;;AAEG;AACG,SAAU,mBAAmB,CAAC,KAAyB,EAAA;AAC3D,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,EAAE;AACrB,IAAA,OAAO;SACJ,KAAK,CAAC,GAAG;SACT,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;SACjB,MAAM,CAAC,OAAO,CAAC;AACpB;AAEA;;AAEG;SACa,cAAc,CAAC,EAAe,EAAE,WAAmB,EAAE,EAAA;AACnE,IAAA,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAU,OAAA,EAAA,QAAQ,CAAI,EAAA,CAAA,GAAG,cAAc;IACnE,OAAO,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,IAAI;AAC5C;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;AACa,SAAA,kBAAkB,CAChC,EAAe,EACf,QAAgC,EAAA;;AAGhC,IAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;;AAGrB,IAAA,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAK;AACzC,QAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACvB,KAAC,CAAC;;AAGF,IAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE;AACnB,QAAA,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,CAAC,MAAM,CAAC;AAC1B,KAAA,CAAC;;AAGF,IAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE;AACzC,QAAA,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,CAAC,MAAM,CAAC;AAC1B,KAAA,CAAC;;IAGF,IAAI,OAAO,GAAgB,EAAE;IAC7B,OAAO,OAAO,EAAE;QACd,IAAI,OAAO,YAAY,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE;AACvD,YAAA,OAAO,GAAG,OAAO,CAAC,aAAa;AAC/B,YAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE;AACxB,gBAAA,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,CAAC,MAAM,CAAC;AAC1B,aAAA,CAAC;;AAEF,YAAA,IAAK,OAAmB,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;gBAC7C;;;aAEG;;AAEL,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE;AAClC,YAAA,IAAI,IAAI,YAAY,UAAU,EAAE;;AAE9B,gBAAA,OAAO,GAAG,IAAI,CAAC,IAAI;AACnB,gBAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE;AACxB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,CAAC,MAAM,CAAC;AAC1B,iBAAA,CAAC;;AAEF,gBAAA,IAAK,OAAmB,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;oBAC7C;;;iBAEG;gBACL;;;;;AAMN,IAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;AACpC;AAEA;;;;;AAKG;AACa,SAAA,UAAU,CAAC,GAAG,OAAc,EAAA;IAC1C,MAAM,MAAM,GAAa,EAAE;AAE3B,IAAA,OAAO,CAAC,OAAO,CAAC,GAAG,IAAG;AACpB,QAAA,IAAI,CAAC,GAAG;YAAE;AAEV,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;;AACX,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC7B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;;AAC1B,aAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAClC,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;gBAC3C,IAAI,KAAK,EAAE;AACT,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;;AAEpB,aAAC,CAAC;;AAEN,KAAC,CAAC;AAEF,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACzB;;;;"}
|