@design.estate/dees-catalog 3.59.1 → 3.60.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/dist_bundle/bundle.js +227 -25
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-input/dees-input-list/dees-input-list.d.ts +20 -0
- package/dist_ts_web/elements/00group-input/dees-input-list/dees-input-list.demo.js +62 -2
- package/dist_ts_web/elements/00group-input/dees-input-list/dees-input-list.js +183 -14
- package/dist_watch/bundle.js +225 -23
- package/dist_watch/bundle.js.map +3 -3
- package/package.json +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-input/dees-input-list/dees-input-list.demo.ts +61 -1
- package/ts_web/elements/00group-input/dees-input-list/dees-input-list.ts +177 -10
package/dist_bundle/bundle.js
CHANGED
|
@@ -151016,7 +151016,67 @@ var demoFunc26 = /* @__PURE__ */ __name(() => b2`
|
|
|
151016
151016
|
></dees-input-list>
|
|
151017
151017
|
</dees-panel>
|
|
151018
151018
|
|
|
151019
|
-
<dees-panel .title=${"9.
|
|
151019
|
+
<dees-panel .title=${"9. Candidates with Tab Completion"} .subtitle=${"Terminal-style autocomplete \u2014 Tab accepts, Shift+Tab cycles"}>
|
|
151020
|
+
<div class="grid-layout">
|
|
151021
|
+
<dees-input-list
|
|
151022
|
+
id="candidate-list"
|
|
151023
|
+
.label=${"Assign Team Members"}
|
|
151024
|
+
.placeholder=${"Type a name... (Tab to complete)"}
|
|
151025
|
+
.candidates=${[
|
|
151026
|
+
{ viewKey: "Alice Smith", payload: { id: 1, role: "Engineer", department: "Frontend" } },
|
|
151027
|
+
{ viewKey: "Bob Johnson", payload: { id: 2, role: "Designer", department: "UX" } },
|
|
151028
|
+
{ viewKey: "Carol Williams", payload: { id: 3, role: "Product Manager", department: "Product" } },
|
|
151029
|
+
{ viewKey: "David Brown", payload: { id: 4, role: "Engineer", department: "Backend" } },
|
|
151030
|
+
{ viewKey: "Eve Davis", payload: { id: 5, role: "QA Engineer", department: "Quality" } },
|
|
151031
|
+
{ viewKey: "Frank Miller", payload: { id: 6, role: "DevOps", department: "Infrastructure" } },
|
|
151032
|
+
{ viewKey: "Grace Wilson", payload: { id: 7, role: "Designer", department: "UX" } },
|
|
151033
|
+
{ viewKey: "Henry Moore", payload: { id: 8, role: "Engineer", department: "Frontend" } }
|
|
151034
|
+
]}
|
|
151035
|
+
.value=${["Alice Smith", "Carol Williams"]}
|
|
151036
|
+
.maxItems=${5}
|
|
151037
|
+
.description=${"Type to see ghost completion. Tab to accept, Shift+Tab to cycle, Enter to add."}
|
|
151038
|
+
@change=${(e11) => {
|
|
151039
|
+
const preview = document.querySelector("#candidate-json");
|
|
151040
|
+
if (preview) {
|
|
151041
|
+
const list5 = e11.target;
|
|
151042
|
+
const candidates = list5.getAddedCandidates();
|
|
151043
|
+
preview.textContent = JSON.stringify(candidates, null, 2);
|
|
151044
|
+
}
|
|
151045
|
+
}}
|
|
151046
|
+
></dees-input-list>
|
|
151047
|
+
|
|
151048
|
+
<div>
|
|
151049
|
+
<div style="font-size: 13px; font-weight: 500; margin-bottom: 8px; color: inherit;">Selected Candidates (with payloads)</div>
|
|
151050
|
+
<div class="output-preview" id="candidate-json">[]</div>
|
|
151051
|
+
<div class="feature-note">
|
|
151052
|
+
Try typing "D" — ghost text shows "avid Brown". Press Shift+Tab to cycle to other D-matches. Tab accepts, Enter adds.
|
|
151053
|
+
</div>
|
|
151054
|
+
</div>
|
|
151055
|
+
</div>
|
|
151056
|
+
</dees-panel>
|
|
151057
|
+
|
|
151058
|
+
<dees-panel .title=${"10. Technology Stack"} .subtitle=${"Larger candidate pool with Shift+Tab cycling"}>
|
|
151059
|
+
<dees-input-list
|
|
151060
|
+
.label=${"Select Technologies"}
|
|
151061
|
+
.placeholder=${"Type to autocomplete..."}
|
|
151062
|
+
.candidates=${[
|
|
151063
|
+
{ viewKey: "TypeScript", payload: { category: "language" } },
|
|
151064
|
+
{ viewKey: "React", payload: { category: "framework" } },
|
|
151065
|
+
{ viewKey: "Vue.js", payload: { category: "framework" } },
|
|
151066
|
+
{ viewKey: "Angular", payload: { category: "framework" } },
|
|
151067
|
+
{ viewKey: "Node.js", payload: { category: "runtime" } },
|
|
151068
|
+
{ viewKey: "Deno", payload: { category: "runtime" } },
|
|
151069
|
+
{ viewKey: "Docker", payload: { category: "devops" } },
|
|
151070
|
+
{ viewKey: "PostgreSQL", payload: { category: "database" } },
|
|
151071
|
+
{ viewKey: "MongoDB", payload: { category: "database" } },
|
|
151072
|
+
{ viewKey: "Redis", payload: { category: "database" } },
|
|
151073
|
+
{ viewKey: "Kubernetes", payload: { category: "devops" } }
|
|
151074
|
+
]}
|
|
151075
|
+
.description=${'Try "D" \u2014 cycles through Deno/Docker. "R" \u2014 cycles through React/Redis.'}
|
|
151076
|
+
></dees-input-list>
|
|
151077
|
+
</dees-panel>
|
|
151078
|
+
|
|
151079
|
+
<dees-panel .title=${"11. Empty State"} .subtitle=${"How the component looks with no items"}>
|
|
151020
151080
|
<dees-input-list
|
|
151021
151081
|
.label=${"Your Ideas"}
|
|
151022
151082
|
.placeholder=${"Share your ideas..."}
|
|
@@ -151032,9 +151092,9 @@ var demoFunc26 = /* @__PURE__ */ __name(() => b2`
|
|
|
151032
151092
|
init_dist_ts30();
|
|
151033
151093
|
init_dees_icon();
|
|
151034
151094
|
init_theme();
|
|
151035
|
-
var _itemHeight_dec, _targetIndex_dec, _dragCurrentY_dec, _dragStartY_dec, _dragOverIndex_dec, _draggedIndex_dec, _editingValue_dec, _editingIndex_dec, _inputValue_dec3, _validationText_dec3, _confirmDelete_dec, _sortable_dec, _allowDuplicates_dec, _minItems_dec, _maxItems_dec, _placeholder_dec4, _value_dec12, _a36, _DeesInputList_decorators, _init33, _value12, _placeholder4, _maxItems, _minItems, _allowDuplicates, _sortable, _confirmDelete, _validationText3, _inputValue3, _editingIndex, _editingValue, _draggedIndex, _dragOverIndex, _dragStartY, _dragCurrentY, _targetIndex, _itemHeight;
|
|
151095
|
+
var _itemHeight_dec, _targetIndex_dec, _dragCurrentY_dec, _dragStartY_dec, _dragOverIndex_dec, _draggedIndex_dec, _editingValue_dec, _editingIndex_dec, _currentCandidateIndex_dec, _ghostText_dec, _inputValue_dec3, _validationText_dec3, _candidates_dec, _confirmDelete_dec, _sortable_dec, _allowDuplicates_dec, _minItems_dec, _maxItems_dec, _placeholder_dec4, _value_dec12, _a36, _DeesInputList_decorators, _init33, _value12, _placeholder4, _maxItems, _minItems, _allowDuplicates, _sortable, _confirmDelete, _candidates, _validationText3, _inputValue3, _ghostText, _currentCandidateIndex, _editingIndex, _editingValue, _draggedIndex, _dragOverIndex, _dragStartY, _dragCurrentY, _targetIndex, _itemHeight;
|
|
151036
151096
|
_DeesInputList_decorators = [customElement("dees-input-list")];
|
|
151037
|
-
var _DeesInputList = class _DeesInputList extends (_a36 = DeesInputBase, _value_dec12 = [n5({ type: Array })], _placeholder_dec4 = [n5({ type: String })], _maxItems_dec = [n5({ type: Number })], _minItems_dec = [n5({ type: Number })], _allowDuplicates_dec = [n5({ type: Boolean })], _sortable_dec = [n5({ type: Boolean })], _confirmDelete_dec = [n5({ type: Boolean })], _validationText_dec3 = [n5({ type: String })], _inputValue_dec3 = [r5()], _editingIndex_dec = [r5()], _editingValue_dec = [r5()], _draggedIndex_dec = [r5()], _dragOverIndex_dec = [r5()], _dragStartY_dec = [r5()], _dragCurrentY_dec = [r5()], _targetIndex_dec = [r5()], _itemHeight_dec = [r5()], _a36) {
|
|
151097
|
+
var _DeesInputList = class _DeesInputList extends (_a36 = DeesInputBase, _value_dec12 = [n5({ type: Array })], _placeholder_dec4 = [n5({ type: String })], _maxItems_dec = [n5({ type: Number })], _minItems_dec = [n5({ type: Number })], _allowDuplicates_dec = [n5({ type: Boolean })], _sortable_dec = [n5({ type: Boolean })], _confirmDelete_dec = [n5({ type: Boolean })], _candidates_dec = [n5({ type: Array })], _validationText_dec3 = [n5({ type: String })], _inputValue_dec3 = [r5()], _ghostText_dec = [r5()], _currentCandidateIndex_dec = [r5()], _editingIndex_dec = [r5()], _editingValue_dec = [r5()], _draggedIndex_dec = [r5()], _dragOverIndex_dec = [r5()], _dragStartY_dec = [r5()], _dragCurrentY_dec = [r5()], _targetIndex_dec = [r5()], _itemHeight_dec = [r5()], _a36) {
|
|
151038
151098
|
constructor() {
|
|
151039
151099
|
super(...arguments);
|
|
151040
151100
|
__privateAdd(this, _value12, __runInitializers(_init33, 8, this, [])), __runInitializers(_init33, 11, this);
|
|
@@ -151044,16 +151104,21 @@ var _DeesInputList = class _DeesInputList extends (_a36 = DeesInputBase, _value_
|
|
|
151044
151104
|
__privateAdd(this, _allowDuplicates, __runInitializers(_init33, 24, this, false)), __runInitializers(_init33, 27, this);
|
|
151045
151105
|
__privateAdd(this, _sortable, __runInitializers(_init33, 28, this, false)), __runInitializers(_init33, 31, this);
|
|
151046
151106
|
__privateAdd(this, _confirmDelete, __runInitializers(_init33, 32, this, false)), __runInitializers(_init33, 35, this);
|
|
151047
|
-
__privateAdd(this,
|
|
151048
|
-
__privateAdd(this,
|
|
151049
|
-
|
|
151050
|
-
|
|
151051
|
-
__privateAdd(this,
|
|
151052
|
-
__privateAdd(this,
|
|
151053
|
-
__privateAdd(this,
|
|
151054
|
-
__privateAdd(this,
|
|
151055
|
-
__privateAdd(this,
|
|
151056
|
-
__privateAdd(this,
|
|
151107
|
+
__privateAdd(this, _candidates, __runInitializers(_init33, 36, this, [])), __runInitializers(_init33, 39, this);
|
|
151108
|
+
__privateAdd(this, _validationText3, __runInitializers(_init33, 40, this, "")), __runInitializers(_init33, 43, this);
|
|
151109
|
+
__publicField(this, "addedCandidatesMap", /* @__PURE__ */ new Map());
|
|
151110
|
+
__publicField(this, "matchingCandidates", []);
|
|
151111
|
+
__privateAdd(this, _inputValue3, __runInitializers(_init33, 44, this, "")), __runInitializers(_init33, 47, this);
|
|
151112
|
+
__privateAdd(this, _ghostText, __runInitializers(_init33, 48, this, "")), __runInitializers(_init33, 51, this);
|
|
151113
|
+
__privateAdd(this, _currentCandidateIndex, __runInitializers(_init33, 52, this, -1)), __runInitializers(_init33, 55, this);
|
|
151114
|
+
__privateAdd(this, _editingIndex, __runInitializers(_init33, 56, this, -1)), __runInitializers(_init33, 59, this);
|
|
151115
|
+
__privateAdd(this, _editingValue, __runInitializers(_init33, 60, this, "")), __runInitializers(_init33, 63, this);
|
|
151116
|
+
__privateAdd(this, _draggedIndex, __runInitializers(_init33, 64, this, -1)), __runInitializers(_init33, 67, this);
|
|
151117
|
+
__privateAdd(this, _dragOverIndex, __runInitializers(_init33, 68, this, -1)), __runInitializers(_init33, 71, this);
|
|
151118
|
+
__privateAdd(this, _dragStartY, __runInitializers(_init33, 72, this, 0)), __runInitializers(_init33, 75, this);
|
|
151119
|
+
__privateAdd(this, _dragCurrentY, __runInitializers(_init33, 76, this, 0)), __runInitializers(_init33, 79, this);
|
|
151120
|
+
__privateAdd(this, _targetIndex, __runInitializers(_init33, 80, this, -1)), __runInitializers(_init33, 83, this);
|
|
151121
|
+
__privateAdd(this, _itemHeight, __runInitializers(_init33, 84, this, 0)), __runInitializers(_init33, 87, this);
|
|
151057
151122
|
// Bound event handlers for cleanup
|
|
151058
151123
|
__publicField(this, "boundHandleGlobalDragOver", null);
|
|
151059
151124
|
__publicField(this, "boundHandleGlobalDragEnd", null);
|
|
@@ -151128,15 +151193,22 @@ var _DeesInputList = class _DeesInputList extends (_a36 = DeesInputBase, _value_
|
|
|
151128
151193
|
|
|
151129
151194
|
${!this.disabled && (!this.maxItems || this.value.length < this.maxItems) ? b2`
|
|
151130
151195
|
<div class="add-item-container">
|
|
151131
|
-
<
|
|
151132
|
-
|
|
151133
|
-
|
|
151134
|
-
|
|
151135
|
-
|
|
151136
|
-
|
|
151137
|
-
|
|
151138
|
-
|
|
151139
|
-
|
|
151196
|
+
<div class="autocomplete-wrapper">
|
|
151197
|
+
${this.ghostText ? b2`
|
|
151198
|
+
<span class="ghost-text">
|
|
151199
|
+
<span class="ghost-typed">${this.inputValue}</span><span class="ghost-completion">${this.ghostText}</span>
|
|
151200
|
+
</span>
|
|
151201
|
+
` : ""}
|
|
151202
|
+
<input
|
|
151203
|
+
type="text"
|
|
151204
|
+
class="add-input"
|
|
151205
|
+
.placeholder=${this.placeholder}
|
|
151206
|
+
.value=${this.inputValue}
|
|
151207
|
+
@input=${this.handleInput}
|
|
151208
|
+
@keydown=${this.handleAddKeyDown}
|
|
151209
|
+
?disabled=${this.disabled}
|
|
151210
|
+
/>
|
|
151211
|
+
</div>
|
|
151140
151212
|
<button
|
|
151141
151213
|
class="add-button"
|
|
151142
151214
|
@click=${this.addItem}
|
|
@@ -151160,10 +151232,62 @@ var _DeesInputList = class _DeesInputList extends (_a36 = DeesInputBase, _value_
|
|
|
151160
151232
|
}
|
|
151161
151233
|
handleInput(e11) {
|
|
151162
151234
|
this.inputValue = e11.target.value;
|
|
151235
|
+
this.updateGhostText();
|
|
151236
|
+
}
|
|
151237
|
+
updateGhostText() {
|
|
151238
|
+
if (this.candidates.length === 0 || !this.inputValue) {
|
|
151239
|
+
this.ghostText = "";
|
|
151240
|
+
this.currentCandidateIndex = -1;
|
|
151241
|
+
this.matchingCandidates = [];
|
|
151242
|
+
return;
|
|
151243
|
+
}
|
|
151244
|
+
const search2 = this.inputValue.toLowerCase();
|
|
151245
|
+
this.matchingCandidates = this.candidates.filter((c11) => {
|
|
151246
|
+
if (this.value.includes(c11.viewKey)) return false;
|
|
151247
|
+
return c11.viewKey.toLowerCase().startsWith(search2);
|
|
151248
|
+
}).sort((a5, b5) => a5.viewKey.length - b5.viewKey.length);
|
|
151249
|
+
if (this.matchingCandidates.length > 0) {
|
|
151250
|
+
this.currentCandidateIndex = 0;
|
|
151251
|
+
this.ghostText = this.matchingCandidates[0].viewKey.slice(this.inputValue.length);
|
|
151252
|
+
} else {
|
|
151253
|
+
this.currentCandidateIndex = -1;
|
|
151254
|
+
this.ghostText = "";
|
|
151255
|
+
}
|
|
151163
151256
|
}
|
|
151164
151257
|
handleAddKeyDown(e11) {
|
|
151258
|
+
if (e11.key === "Tab" && this.candidates.length > 0 && this.inputValue) {
|
|
151259
|
+
e11.preventDefault();
|
|
151260
|
+
if (e11.shiftKey && this.matchingCandidates.length > 0) {
|
|
151261
|
+
this.currentCandidateIndex = (this.currentCandidateIndex + 1) % this.matchingCandidates.length;
|
|
151262
|
+
const candidate = this.matchingCandidates[this.currentCandidateIndex];
|
|
151263
|
+
this.ghostText = candidate.viewKey.slice(this.inputValue.length);
|
|
151264
|
+
} else if (!e11.shiftKey && this.ghostText && this.matchingCandidates.length > 0) {
|
|
151265
|
+
const candidate = this.matchingCandidates[this.currentCandidateIndex];
|
|
151266
|
+
this.inputValue = candidate.viewKey;
|
|
151267
|
+
this.ghostText = "";
|
|
151268
|
+
const input = this.shadowRoot?.querySelector(".add-input");
|
|
151269
|
+
if (input) input.value = candidate.viewKey;
|
|
151270
|
+
}
|
|
151271
|
+
return;
|
|
151272
|
+
}
|
|
151273
|
+
if (e11.key === "Escape" && this.ghostText) {
|
|
151274
|
+
e11.preventDefault();
|
|
151275
|
+
this.ghostText = "";
|
|
151276
|
+
this.currentCandidateIndex = -1;
|
|
151277
|
+
this.matchingCandidates = [];
|
|
151278
|
+
return;
|
|
151279
|
+
}
|
|
151165
151280
|
if (e11.key === "Enter" && this.inputValue.trim()) {
|
|
151166
151281
|
e11.preventDefault();
|
|
151282
|
+
if (this.candidates.length > 0) {
|
|
151283
|
+
const match2 = this.candidates.find(
|
|
151284
|
+
(c11) => c11.viewKey.toLowerCase() === this.inputValue.trim().toLowerCase()
|
|
151285
|
+
);
|
|
151286
|
+
if (match2) {
|
|
151287
|
+
this.selectCandidate(match2);
|
|
151288
|
+
}
|
|
151289
|
+
return;
|
|
151290
|
+
}
|
|
151167
151291
|
this.addItem();
|
|
151168
151292
|
}
|
|
151169
151293
|
}
|
|
@@ -151176,6 +151300,44 @@ var _DeesInputList = class _DeesInputList extends (_a36 = DeesInputBase, _value_
|
|
|
151176
151300
|
this.cancelEdit();
|
|
151177
151301
|
}
|
|
151178
151302
|
}
|
|
151303
|
+
selectCandidate(candidate) {
|
|
151304
|
+
if (this.maxItems && this.value.length >= this.maxItems) {
|
|
151305
|
+
this.validationText = `Maximum ${this.maxItems} items allowed`;
|
|
151306
|
+
setTimeout(() => this.validationText = "", 3e3);
|
|
151307
|
+
return;
|
|
151308
|
+
}
|
|
151309
|
+
if (!this.allowDuplicates && this.value.includes(candidate.viewKey)) {
|
|
151310
|
+
this.validationText = "This item already exists in the list";
|
|
151311
|
+
setTimeout(() => this.validationText = "", 3e3);
|
|
151312
|
+
return;
|
|
151313
|
+
}
|
|
151314
|
+
this.addedCandidatesMap.set(candidate.viewKey, candidate);
|
|
151315
|
+
this.value = [...this.value, candidate.viewKey];
|
|
151316
|
+
this.inputValue = "";
|
|
151317
|
+
this.ghostText = "";
|
|
151318
|
+
this.currentCandidateIndex = -1;
|
|
151319
|
+
this.matchingCandidates = [];
|
|
151320
|
+
this.validationText = "";
|
|
151321
|
+
const input = this.shadowRoot?.querySelector(".add-input");
|
|
151322
|
+
if (input) {
|
|
151323
|
+
input.value = "";
|
|
151324
|
+
input.focus();
|
|
151325
|
+
}
|
|
151326
|
+
this.emitChange();
|
|
151327
|
+
}
|
|
151328
|
+
/**
|
|
151329
|
+
* Get the full candidate object for an item by its viewKey.
|
|
151330
|
+
* Returns undefined if the item was added as a plain string.
|
|
151331
|
+
*/
|
|
151332
|
+
getCandidateForItem(viewKey) {
|
|
151333
|
+
return this.addedCandidatesMap.get(viewKey);
|
|
151334
|
+
}
|
|
151335
|
+
/**
|
|
151336
|
+
* Get all added candidates with their payloads.
|
|
151337
|
+
*/
|
|
151338
|
+
getAddedCandidates() {
|
|
151339
|
+
return this.value.map((v5) => this.addedCandidatesMap.get(v5)).filter((c11) => c11 !== void 0);
|
|
151340
|
+
}
|
|
151179
151341
|
addItem() {
|
|
151180
151342
|
const trimmedValue = this.inputValue.trim();
|
|
151181
151343
|
if (!trimmedValue) return;
|
|
@@ -151238,6 +151400,8 @@ var _DeesInputList = class _DeesInputList extends (_a36 = DeesInputBase, _value_
|
|
|
151238
151400
|
const confirmed = await this.showConfirmDialog(`Delete "${this.value[index3]}"?`);
|
|
151239
151401
|
if (!confirmed) return;
|
|
151240
151402
|
}
|
|
151403
|
+
const removedKey = this.value[index3];
|
|
151404
|
+
this.addedCandidatesMap.delete(removedKey);
|
|
151241
151405
|
this.value = this.value.filter((_4, i11) => i11 !== index3);
|
|
151242
151406
|
this.emitChange();
|
|
151243
151407
|
}
|
|
@@ -151488,8 +151652,11 @@ _minItems = new WeakMap();
|
|
|
151488
151652
|
_allowDuplicates = new WeakMap();
|
|
151489
151653
|
_sortable = new WeakMap();
|
|
151490
151654
|
_confirmDelete = new WeakMap();
|
|
151655
|
+
_candidates = new WeakMap();
|
|
151491
151656
|
_validationText3 = new WeakMap();
|
|
151492
151657
|
_inputValue3 = new WeakMap();
|
|
151658
|
+
_ghostText = new WeakMap();
|
|
151659
|
+
_currentCandidateIndex = new WeakMap();
|
|
151493
151660
|
_editingIndex = new WeakMap();
|
|
151494
151661
|
_editingValue = new WeakMap();
|
|
151495
151662
|
_draggedIndex = new WeakMap();
|
|
@@ -151505,8 +151672,11 @@ __decorateElement(_init33, 4, "minItems", _minItems_dec, _DeesInputList, _minIte
|
|
|
151505
151672
|
__decorateElement(_init33, 4, "allowDuplicates", _allowDuplicates_dec, _DeesInputList, _allowDuplicates);
|
|
151506
151673
|
__decorateElement(_init33, 4, "sortable", _sortable_dec, _DeesInputList, _sortable);
|
|
151507
151674
|
__decorateElement(_init33, 4, "confirmDelete", _confirmDelete_dec, _DeesInputList, _confirmDelete);
|
|
151675
|
+
__decorateElement(_init33, 4, "candidates", _candidates_dec, _DeesInputList, _candidates);
|
|
151508
151676
|
__decorateElement(_init33, 4, "validationText", _validationText_dec3, _DeesInputList, _validationText3);
|
|
151509
151677
|
__decorateElement(_init33, 4, "inputValue", _inputValue_dec3, _DeesInputList, _inputValue3);
|
|
151678
|
+
__decorateElement(_init33, 4, "ghostText", _ghostText_dec, _DeesInputList, _ghostText);
|
|
151679
|
+
__decorateElement(_init33, 4, "currentCandidateIndex", _currentCandidateIndex_dec, _DeesInputList, _currentCandidateIndex);
|
|
151510
151680
|
__decorateElement(_init33, 4, "editingIndex", _editingIndex_dec, _DeesInputList, _editingIndex);
|
|
151511
151681
|
__decorateElement(_init33, 4, "editingValue", _editingValue_dec, _DeesInputList, _editingValue);
|
|
151512
151682
|
__decorateElement(_init33, 4, "draggedIndex", _draggedIndex_dec, _DeesInputList, _draggedIndex);
|
|
@@ -151710,7 +151880,7 @@ __publicField(_DeesInputList, "styles", [
|
|
|
151710
151880
|
}
|
|
151711
151881
|
|
|
151712
151882
|
.add-input {
|
|
151713
|
-
|
|
151883
|
+
width: 100%;
|
|
151714
151884
|
padding: 4px 8px;
|
|
151715
151885
|
font-size: 13px;
|
|
151716
151886
|
line-height: 18px;
|
|
@@ -151804,6 +151974,38 @@ __publicField(_DeesInputList, "styles", [
|
|
|
151804
151974
|
.list-items.dropping .list-item {
|
|
151805
151975
|
transition: none !important;
|
|
151806
151976
|
}
|
|
151977
|
+
|
|
151978
|
+
/* ── Terminal-style inline autocomplete ── */
|
|
151979
|
+
.autocomplete-wrapper {
|
|
151980
|
+
position: relative;
|
|
151981
|
+
flex: 1;
|
|
151982
|
+
min-width: 0;
|
|
151983
|
+
overflow: hidden;
|
|
151984
|
+
}
|
|
151985
|
+
|
|
151986
|
+
.ghost-text {
|
|
151987
|
+
position: absolute;
|
|
151988
|
+
top: 0;
|
|
151989
|
+
left: 0;
|
|
151990
|
+
right: 0;
|
|
151991
|
+
bottom: 0;
|
|
151992
|
+
padding: 4px 8px;
|
|
151993
|
+
font-size: 13px;
|
|
151994
|
+
line-height: 18px;
|
|
151995
|
+
font-family: inherit;
|
|
151996
|
+
white-space: nowrap;
|
|
151997
|
+
pointer-events: none;
|
|
151998
|
+
overflow: hidden;
|
|
151999
|
+
}
|
|
152000
|
+
|
|
152001
|
+
.ghost-typed {
|
|
152002
|
+
visibility: hidden;
|
|
152003
|
+
}
|
|
152004
|
+
|
|
152005
|
+
.ghost-completion {
|
|
152006
|
+
color: ${cssManager.bdTheme("hsl(0 0% 63.9%)", "hsl(0 0% 45.1%)")};
|
|
152007
|
+
opacity: 0.5;
|
|
152008
|
+
}
|
|
151807
152009
|
`
|
|
151808
152010
|
]);
|
|
151809
152011
|
__runInitializers(_init33, 1, _DeesInputList);
|
|
@@ -198760,7 +198962,7 @@ init_group_runtime();
|
|
|
198760
198962
|
// ts_web/00_commitinfo_data.ts
|
|
198761
198963
|
var commitinfo = {
|
|
198762
198964
|
name: "@design.estate/dees-catalog",
|
|
198763
|
-
version: "3.
|
|
198965
|
+
version: "3.60.0",
|
|
198764
198966
|
description: "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript."
|
|
198765
198967
|
};
|
|
198766
198968
|
export {
|
|
@@ -200733,4 +200935,4 @@ ibantools/jsnext/ibantools.js:
|
|
|
200733
200935
|
* @preferred
|
|
200734
200936
|
*)
|
|
200735
200937
|
*/
|
|
200736
|
-
//# sourceMappingURL=bundle-
|
|
200938
|
+
//# sourceMappingURL=bundle-1775381196096.js.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@design.estate/dees-catalog',
|
|
6
|
-
version: '3.
|
|
6
|
+
version: '3.60.0',
|
|
7
7
|
description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSxzSkFBc0o7Q0FDcEssQ0FBQSJ9
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { type TemplateResult } from '@design.estate/dees-element';
|
|
2
2
|
import { DeesInputBase } from '../dees-input-base/dees-input-base.js';
|
|
3
3
|
import '../../00group-utility/dees-icon/dees-icon.js';
|
|
4
|
+
export interface IListCandidate {
|
|
5
|
+
viewKey: string;
|
|
6
|
+
payload?: any;
|
|
7
|
+
}
|
|
4
8
|
declare global {
|
|
5
9
|
interface HTMLElementTagNameMap {
|
|
6
10
|
'dees-input-list': DeesInputList;
|
|
@@ -16,8 +20,13 @@ export declare class DeesInputList extends DeesInputBase<DeesInputList> {
|
|
|
16
20
|
accessor allowDuplicates: boolean;
|
|
17
21
|
accessor sortable: boolean;
|
|
18
22
|
accessor confirmDelete: boolean;
|
|
23
|
+
accessor candidates: IListCandidate[];
|
|
19
24
|
accessor validationText: string;
|
|
25
|
+
private addedCandidatesMap;
|
|
26
|
+
private matchingCandidates;
|
|
20
27
|
accessor inputValue: string;
|
|
28
|
+
accessor ghostText: string;
|
|
29
|
+
accessor currentCandidateIndex: number;
|
|
21
30
|
accessor editingIndex: number;
|
|
22
31
|
accessor editingValue: string;
|
|
23
32
|
accessor draggedIndex: number;
|
|
@@ -32,8 +41,19 @@ export declare class DeesInputList extends DeesInputBase<DeesInputList> {
|
|
|
32
41
|
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
33
42
|
render(): TemplateResult;
|
|
34
43
|
private handleInput;
|
|
44
|
+
private updateGhostText;
|
|
35
45
|
private handleAddKeyDown;
|
|
36
46
|
private handleEditKeyDown;
|
|
47
|
+
private selectCandidate;
|
|
48
|
+
/**
|
|
49
|
+
* Get the full candidate object for an item by its viewKey.
|
|
50
|
+
* Returns undefined if the item was added as a plain string.
|
|
51
|
+
*/
|
|
52
|
+
getCandidateForItem(viewKey: string): IListCandidate | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Get all added candidates with their payloads.
|
|
55
|
+
*/
|
|
56
|
+
getAddedCandidates(): IListCandidate[];
|
|
37
57
|
private addItem;
|
|
38
58
|
private startEdit;
|
|
39
59
|
private saveEdit;
|
|
@@ -261,7 +261,67 @@ export const demoFunc = () => html `
|
|
|
261
261
|
></dees-input-list>
|
|
262
262
|
</dees-panel>
|
|
263
263
|
|
|
264
|
-
<dees-panel .title=${'9.
|
|
264
|
+
<dees-panel .title=${'9. Candidates with Tab Completion'} .subtitle=${'Terminal-style autocomplete — Tab accepts, Shift+Tab cycles'}>
|
|
265
|
+
<div class="grid-layout">
|
|
266
|
+
<dees-input-list
|
|
267
|
+
id="candidate-list"
|
|
268
|
+
.label=${'Assign Team Members'}
|
|
269
|
+
.placeholder=${'Type a name... (Tab to complete)'}
|
|
270
|
+
.candidates=${[
|
|
271
|
+
{ viewKey: 'Alice Smith', payload: { id: 1, role: 'Engineer', department: 'Frontend' } },
|
|
272
|
+
{ viewKey: 'Bob Johnson', payload: { id: 2, role: 'Designer', department: 'UX' } },
|
|
273
|
+
{ viewKey: 'Carol Williams', payload: { id: 3, role: 'Product Manager', department: 'Product' } },
|
|
274
|
+
{ viewKey: 'David Brown', payload: { id: 4, role: 'Engineer', department: 'Backend' } },
|
|
275
|
+
{ viewKey: 'Eve Davis', payload: { id: 5, role: 'QA Engineer', department: 'Quality' } },
|
|
276
|
+
{ viewKey: 'Frank Miller', payload: { id: 6, role: 'DevOps', department: 'Infrastructure' } },
|
|
277
|
+
{ viewKey: 'Grace Wilson', payload: { id: 7, role: 'Designer', department: 'UX' } },
|
|
278
|
+
{ viewKey: 'Henry Moore', payload: { id: 8, role: 'Engineer', department: 'Frontend' } },
|
|
279
|
+
]}
|
|
280
|
+
.value=${['Alice Smith', 'Carol Williams']}
|
|
281
|
+
.maxItems=${5}
|
|
282
|
+
.description=${'Type to see ghost completion. Tab to accept, Shift+Tab to cycle, Enter to add.'}
|
|
283
|
+
@change=${(e) => {
|
|
284
|
+
const preview = document.querySelector('#candidate-json');
|
|
285
|
+
if (preview) {
|
|
286
|
+
const list = e.target;
|
|
287
|
+
const candidates = list.getAddedCandidates();
|
|
288
|
+
preview.textContent = JSON.stringify(candidates, null, 2);
|
|
289
|
+
}
|
|
290
|
+
}}
|
|
291
|
+
></dees-input-list>
|
|
292
|
+
|
|
293
|
+
<div>
|
|
294
|
+
<div style="font-size: 13px; font-weight: 500; margin-bottom: 8px; color: inherit;">Selected Candidates (with payloads)</div>
|
|
295
|
+
<div class="output-preview" id="candidate-json">[]</div>
|
|
296
|
+
<div class="feature-note">
|
|
297
|
+
Try typing "D" — ghost text shows "avid Brown". Press Shift+Tab to cycle to other D-matches. Tab accepts, Enter adds.
|
|
298
|
+
</div>
|
|
299
|
+
</div>
|
|
300
|
+
</div>
|
|
301
|
+
</dees-panel>
|
|
302
|
+
|
|
303
|
+
<dees-panel .title=${'10. Technology Stack'} .subtitle=${'Larger candidate pool with Shift+Tab cycling'}>
|
|
304
|
+
<dees-input-list
|
|
305
|
+
.label=${'Select Technologies'}
|
|
306
|
+
.placeholder=${'Type to autocomplete...'}
|
|
307
|
+
.candidates=${[
|
|
308
|
+
{ viewKey: 'TypeScript', payload: { category: 'language' } },
|
|
309
|
+
{ viewKey: 'React', payload: { category: 'framework' } },
|
|
310
|
+
{ viewKey: 'Vue.js', payload: { category: 'framework' } },
|
|
311
|
+
{ viewKey: 'Angular', payload: { category: 'framework' } },
|
|
312
|
+
{ viewKey: 'Node.js', payload: { category: 'runtime' } },
|
|
313
|
+
{ viewKey: 'Deno', payload: { category: 'runtime' } },
|
|
314
|
+
{ viewKey: 'Docker', payload: { category: 'devops' } },
|
|
315
|
+
{ viewKey: 'PostgreSQL', payload: { category: 'database' } },
|
|
316
|
+
{ viewKey: 'MongoDB', payload: { category: 'database' } },
|
|
317
|
+
{ viewKey: 'Redis', payload: { category: 'database' } },
|
|
318
|
+
{ viewKey: 'Kubernetes', payload: { category: 'devops' } },
|
|
319
|
+
]}
|
|
320
|
+
.description=${'Try "D" — cycles through Deno/Docker. "R" — cycles through React/Redis.'}
|
|
321
|
+
></dees-input-list>
|
|
322
|
+
</dees-panel>
|
|
323
|
+
|
|
324
|
+
<dees-panel .title=${'11. Empty State'} .subtitle=${'How the component looks with no items'}>
|
|
265
325
|
<dees-input-list
|
|
266
326
|
.label=${'Your Ideas'}
|
|
267
327
|
.placeholder=${'Share your ideas...'}
|
|
@@ -272,4 +332,4 @@ export const demoFunc = () => html `
|
|
|
272
332
|
</div>
|
|
273
333
|
</dees-demowrapper>
|
|
274
334
|
`;
|
|
275
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
335
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1pbnB1dC1saXN0LmRlbW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWxpc3QvZGVlcy1pbnB1dC1saXN0LmRlbW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sK0NBQStDLENBQUM7QUFDdkQsT0FBTywyQ0FBMkMsQ0FBQztBQUNuRCxPQUFPLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8seURBQXlELENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQTs7O1FBRzFCLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpRUo7Ozs7MkJBSW9CLHFCQUFxQixjQUFjLG1EQUFtRDs7bUJBRTlGLGVBQWU7eUJBQ1QsMEJBQTBCO21CQUNoQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQzt5QkFDN0Isb0RBQW9EOzs7Ozs7OzJCQU9sRCxrQkFBa0IsY0FBYyxnQ0FBZ0M7O21CQUV4RSxlQUFlO3lCQUNULGVBQWU7c0JBQ2xCLElBQUk7bUJBQ1A7SUFDUCxzQkFBc0I7SUFDdEIsa0JBQWtCO0lBQ2xCLHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIsc0JBQXNCO0NBQ3ZCO3lCQUNjLDZDQUE2Qzs7Ozs7OzsyQkFPM0MsNkJBQTZCLGNBQWMsMkRBQTJEOzs7cUJBRzVHLDZCQUE2QjsyQkFDdkIsb0JBQW9CO3dCQUN2QixDQUFDO3dCQUNELENBQUM7cUJBQ0osQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO3dCQUNiLElBQUk7MkJB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
|