@design.estate/dees-catalog 3.59.1 → 3.61.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 +275 -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 +21 -0
- package/dist_ts_web/elements/00group-input/dees-input-list/dees-input-list.demo.js +80 -2
- package/dist_ts_web/elements/00group-input/dees-input-list/dees-input-list.js +220 -14
- package/dist_watch/bundle.js +273 -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 +79 -1
- package/ts_web/elements/00group-input/dees-input-list/dees-input-list.ts +208 -10
package/dist_bundle/bundle.js
CHANGED
|
@@ -151016,7 +151016,85 @@ 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. Freeform + Candidates"} .subtitle=${"Allow adding items not in the candidate list (shown with a question mark)"}>
|
|
151080
|
+
<dees-input-list
|
|
151081
|
+
.label=${"Tags"}
|
|
151082
|
+
.placeholder=${"Type a tag... (freeform allowed)"}
|
|
151083
|
+
.allowFreeform=${true}
|
|
151084
|
+
.candidates=${[
|
|
151085
|
+
{ viewKey: "bug", payload: { color: "red" } },
|
|
151086
|
+
{ viewKey: "feature", payload: { color: "blue" } },
|
|
151087
|
+
{ viewKey: "docs", payload: { color: "green" } },
|
|
151088
|
+
{ viewKey: "refactor", payload: { color: "purple" } },
|
|
151089
|
+
{ viewKey: "performance", payload: { color: "orange" } },
|
|
151090
|
+
{ viewKey: "security", payload: { color: "red" } }
|
|
151091
|
+
]}
|
|
151092
|
+
.value=${["bug", "my-custom-tag", "feature"]}
|
|
151093
|
+
.description=${"Known tags get a checkmark, custom tags get a question mark. Tab to complete, Enter to add freeform."}
|
|
151094
|
+
></dees-input-list>
|
|
151095
|
+
</dees-panel>
|
|
151096
|
+
|
|
151097
|
+
<dees-panel .title=${"12. Empty State"} .subtitle=${"How the component looks with no items"}>
|
|
151020
151098
|
<dees-input-list
|
|
151021
151099
|
.label=${"Your Ideas"}
|
|
151022
151100
|
.placeholder=${"Share your ideas..."}
|
|
@@ -151032,9 +151110,9 @@ var demoFunc26 = /* @__PURE__ */ __name(() => b2`
|
|
|
151032
151110
|
init_dist_ts30();
|
|
151033
151111
|
init_dees_icon();
|
|
151034
151112
|
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;
|
|
151113
|
+
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, _allowFreeform_dec, _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, _allowFreeform, _validationText3, _inputValue3, _ghostText, _currentCandidateIndex, _editingIndex, _editingValue, _draggedIndex, _dragOverIndex, _dragStartY, _dragCurrentY, _targetIndex, _itemHeight;
|
|
151036
151114
|
_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) {
|
|
151115
|
+
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 })], _allowFreeform_dec = [n5({ type: Boolean })], _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
151116
|
constructor() {
|
|
151039
151117
|
super(...arguments);
|
|
151040
151118
|
__privateAdd(this, _value12, __runInitializers(_init33, 8, this, [])), __runInitializers(_init33, 11, this);
|
|
@@ -151044,16 +151122,22 @@ var _DeesInputList = class _DeesInputList extends (_a36 = DeesInputBase, _value_
|
|
|
151044
151122
|
__privateAdd(this, _allowDuplicates, __runInitializers(_init33, 24, this, false)), __runInitializers(_init33, 27, this);
|
|
151045
151123
|
__privateAdd(this, _sortable, __runInitializers(_init33, 28, this, false)), __runInitializers(_init33, 31, this);
|
|
151046
151124
|
__privateAdd(this, _confirmDelete, __runInitializers(_init33, 32, this, false)), __runInitializers(_init33, 35, this);
|
|
151047
|
-
__privateAdd(this,
|
|
151048
|
-
__privateAdd(this,
|
|
151049
|
-
__privateAdd(this,
|
|
151050
|
-
|
|
151051
|
-
|
|
151052
|
-
__privateAdd(this,
|
|
151053
|
-
__privateAdd(this,
|
|
151054
|
-
__privateAdd(this,
|
|
151055
|
-
__privateAdd(this,
|
|
151056
|
-
__privateAdd(this,
|
|
151125
|
+
__privateAdd(this, _candidates, __runInitializers(_init33, 36, this, [])), __runInitializers(_init33, 39, this);
|
|
151126
|
+
__privateAdd(this, _allowFreeform, __runInitializers(_init33, 40, this, false)), __runInitializers(_init33, 43, this);
|
|
151127
|
+
__privateAdd(this, _validationText3, __runInitializers(_init33, 44, this, "")), __runInitializers(_init33, 47, this);
|
|
151128
|
+
__publicField(this, "addedCandidatesMap", /* @__PURE__ */ new Map());
|
|
151129
|
+
__publicField(this, "matchingCandidates", []);
|
|
151130
|
+
__privateAdd(this, _inputValue3, __runInitializers(_init33, 48, this, "")), __runInitializers(_init33, 51, this);
|
|
151131
|
+
__privateAdd(this, _ghostText, __runInitializers(_init33, 52, this, "")), __runInitializers(_init33, 55, this);
|
|
151132
|
+
__privateAdd(this, _currentCandidateIndex, __runInitializers(_init33, 56, this, -1)), __runInitializers(_init33, 59, this);
|
|
151133
|
+
__privateAdd(this, _editingIndex, __runInitializers(_init33, 60, this, -1)), __runInitializers(_init33, 63, this);
|
|
151134
|
+
__privateAdd(this, _editingValue, __runInitializers(_init33, 64, this, "")), __runInitializers(_init33, 67, this);
|
|
151135
|
+
__privateAdd(this, _draggedIndex, __runInitializers(_init33, 68, this, -1)), __runInitializers(_init33, 71, this);
|
|
151136
|
+
__privateAdd(this, _dragOverIndex, __runInitializers(_init33, 72, this, -1)), __runInitializers(_init33, 75, this);
|
|
151137
|
+
__privateAdd(this, _dragStartY, __runInitializers(_init33, 76, this, 0)), __runInitializers(_init33, 79, this);
|
|
151138
|
+
__privateAdd(this, _dragCurrentY, __runInitializers(_init33, 80, this, 0)), __runInitializers(_init33, 83, this);
|
|
151139
|
+
__privateAdd(this, _targetIndex, __runInitializers(_init33, 84, this, -1)), __runInitializers(_init33, 87, this);
|
|
151140
|
+
__privateAdd(this, _itemHeight, __runInitializers(_init33, 88, this, 0)), __runInitializers(_init33, 91, this);
|
|
151057
151141
|
// Bound event handlers for cleanup
|
|
151058
151142
|
__publicField(this, "boundHandleGlobalDragOver", null);
|
|
151059
151143
|
__publicField(this, "boundHandleGlobalDragEnd", null);
|
|
@@ -151082,6 +151166,14 @@ var _DeesInputList = class _DeesInputList extends (_a36 = DeesInputBase, _value_
|
|
|
151082
151166
|
</div>
|
|
151083
151167
|
` : ""}
|
|
151084
151168
|
|
|
151169
|
+
${this.candidates.length > 0 ? b2`
|
|
151170
|
+
${this.candidates.some((c11) => c11.viewKey === item) ? b2`
|
|
151171
|
+
<dees-icon class="candidate-check" .icon=${"lucide:check"}></dees-icon>
|
|
151172
|
+
` : b2`
|
|
151173
|
+
<dees-icon class="candidate-unknown" .icon=${"lucide:helpCircle"}></dees-icon>
|
|
151174
|
+
`}
|
|
151175
|
+
` : ""}
|
|
151176
|
+
|
|
151085
151177
|
<div class="item-content">
|
|
151086
151178
|
${this.editingIndex === index3 ? b2`
|
|
151087
151179
|
<input
|
|
@@ -151128,15 +151220,22 @@ var _DeesInputList = class _DeesInputList extends (_a36 = DeesInputBase, _value_
|
|
|
151128
151220
|
|
|
151129
151221
|
${!this.disabled && (!this.maxItems || this.value.length < this.maxItems) ? b2`
|
|
151130
151222
|
<div class="add-item-container">
|
|
151131
|
-
<
|
|
151132
|
-
|
|
151133
|
-
|
|
151134
|
-
|
|
151135
|
-
|
|
151136
|
-
|
|
151137
|
-
|
|
151138
|
-
|
|
151139
|
-
|
|
151223
|
+
<div class="autocomplete-wrapper">
|
|
151224
|
+
${this.ghostText ? b2`
|
|
151225
|
+
<span class="ghost-text">
|
|
151226
|
+
<span class="ghost-typed">${this.inputValue}</span><span class="ghost-completion">${this.ghostText}</span>
|
|
151227
|
+
</span>
|
|
151228
|
+
` : ""}
|
|
151229
|
+
<input
|
|
151230
|
+
type="text"
|
|
151231
|
+
class="add-input"
|
|
151232
|
+
.placeholder=${this.placeholder}
|
|
151233
|
+
.value=${this.inputValue}
|
|
151234
|
+
@input=${this.handleInput}
|
|
151235
|
+
@keydown=${this.handleAddKeyDown}
|
|
151236
|
+
?disabled=${this.disabled}
|
|
151237
|
+
/>
|
|
151238
|
+
</div>
|
|
151140
151239
|
<button
|
|
151141
151240
|
class="add-button"
|
|
151142
151241
|
@click=${this.addItem}
|
|
@@ -151160,10 +151259,67 @@ var _DeesInputList = class _DeesInputList extends (_a36 = DeesInputBase, _value_
|
|
|
151160
151259
|
}
|
|
151161
151260
|
handleInput(e11) {
|
|
151162
151261
|
this.inputValue = e11.target.value;
|
|
151262
|
+
this.updateGhostText();
|
|
151263
|
+
}
|
|
151264
|
+
updateGhostText() {
|
|
151265
|
+
if (this.candidates.length === 0 || !this.inputValue) {
|
|
151266
|
+
this.ghostText = "";
|
|
151267
|
+
this.currentCandidateIndex = -1;
|
|
151268
|
+
this.matchingCandidates = [];
|
|
151269
|
+
return;
|
|
151270
|
+
}
|
|
151271
|
+
const search2 = this.inputValue.toLowerCase();
|
|
151272
|
+
this.matchingCandidates = this.candidates.filter((c11) => {
|
|
151273
|
+
if (this.value.includes(c11.viewKey)) return false;
|
|
151274
|
+
return c11.viewKey.toLowerCase().startsWith(search2);
|
|
151275
|
+
}).sort((a5, b5) => a5.viewKey.length - b5.viewKey.length);
|
|
151276
|
+
if (this.matchingCandidates.length > 0) {
|
|
151277
|
+
this.currentCandidateIndex = 0;
|
|
151278
|
+
this.ghostText = this.matchingCandidates[0].viewKey.slice(this.inputValue.length);
|
|
151279
|
+
} else {
|
|
151280
|
+
this.currentCandidateIndex = -1;
|
|
151281
|
+
this.ghostText = "";
|
|
151282
|
+
}
|
|
151163
151283
|
}
|
|
151164
151284
|
handleAddKeyDown(e11) {
|
|
151285
|
+
if (e11.key === "Tab" && this.candidates.length > 0 && this.inputValue) {
|
|
151286
|
+
e11.preventDefault();
|
|
151287
|
+
if (e11.shiftKey && this.matchingCandidates.length > 0) {
|
|
151288
|
+
this.currentCandidateIndex = (this.currentCandidateIndex + 1) % this.matchingCandidates.length;
|
|
151289
|
+
const candidate = this.matchingCandidates[this.currentCandidateIndex];
|
|
151290
|
+
this.ghostText = candidate.viewKey.slice(this.inputValue.length);
|
|
151291
|
+
} else if (!e11.shiftKey && this.ghostText && this.matchingCandidates.length > 0) {
|
|
151292
|
+
const candidate = this.matchingCandidates[this.currentCandidateIndex];
|
|
151293
|
+
this.inputValue = candidate.viewKey;
|
|
151294
|
+
this.ghostText = "";
|
|
151295
|
+
const input = this.shadowRoot?.querySelector(".add-input");
|
|
151296
|
+
if (input) input.value = candidate.viewKey;
|
|
151297
|
+
}
|
|
151298
|
+
return;
|
|
151299
|
+
}
|
|
151300
|
+
if (e11.key === "Escape" && this.ghostText) {
|
|
151301
|
+
e11.preventDefault();
|
|
151302
|
+
this.ghostText = "";
|
|
151303
|
+
this.currentCandidateIndex = -1;
|
|
151304
|
+
this.matchingCandidates = [];
|
|
151305
|
+
return;
|
|
151306
|
+
}
|
|
151165
151307
|
if (e11.key === "Enter" && this.inputValue.trim()) {
|
|
151166
151308
|
e11.preventDefault();
|
|
151309
|
+
if (this.candidates.length > 0) {
|
|
151310
|
+
const match2 = this.candidates.find(
|
|
151311
|
+
(c11) => c11.viewKey.toLowerCase() === this.inputValue.trim().toLowerCase()
|
|
151312
|
+
);
|
|
151313
|
+
if (match2) {
|
|
151314
|
+
this.selectCandidate(match2);
|
|
151315
|
+
} else if (this.allowFreeform) {
|
|
151316
|
+
this.ghostText = "";
|
|
151317
|
+
this.currentCandidateIndex = -1;
|
|
151318
|
+
this.matchingCandidates = [];
|
|
151319
|
+
this.addItem();
|
|
151320
|
+
}
|
|
151321
|
+
return;
|
|
151322
|
+
}
|
|
151167
151323
|
this.addItem();
|
|
151168
151324
|
}
|
|
151169
151325
|
}
|
|
@@ -151176,6 +151332,44 @@ var _DeesInputList = class _DeesInputList extends (_a36 = DeesInputBase, _value_
|
|
|
151176
151332
|
this.cancelEdit();
|
|
151177
151333
|
}
|
|
151178
151334
|
}
|
|
151335
|
+
selectCandidate(candidate) {
|
|
151336
|
+
if (this.maxItems && this.value.length >= this.maxItems) {
|
|
151337
|
+
this.validationText = `Maximum ${this.maxItems} items allowed`;
|
|
151338
|
+
setTimeout(() => this.validationText = "", 3e3);
|
|
151339
|
+
return;
|
|
151340
|
+
}
|
|
151341
|
+
if (!this.allowDuplicates && this.value.includes(candidate.viewKey)) {
|
|
151342
|
+
this.validationText = "This item already exists in the list";
|
|
151343
|
+
setTimeout(() => this.validationText = "", 3e3);
|
|
151344
|
+
return;
|
|
151345
|
+
}
|
|
151346
|
+
this.addedCandidatesMap.set(candidate.viewKey, candidate);
|
|
151347
|
+
this.value = [...this.value, candidate.viewKey];
|
|
151348
|
+
this.inputValue = "";
|
|
151349
|
+
this.ghostText = "";
|
|
151350
|
+
this.currentCandidateIndex = -1;
|
|
151351
|
+
this.matchingCandidates = [];
|
|
151352
|
+
this.validationText = "";
|
|
151353
|
+
const input = this.shadowRoot?.querySelector(".add-input");
|
|
151354
|
+
if (input) {
|
|
151355
|
+
input.value = "";
|
|
151356
|
+
input.focus();
|
|
151357
|
+
}
|
|
151358
|
+
this.emitChange();
|
|
151359
|
+
}
|
|
151360
|
+
/**
|
|
151361
|
+
* Get the full candidate object for an item by its viewKey.
|
|
151362
|
+
* Returns undefined if the item was added as a plain string.
|
|
151363
|
+
*/
|
|
151364
|
+
getCandidateForItem(viewKey) {
|
|
151365
|
+
return this.addedCandidatesMap.get(viewKey);
|
|
151366
|
+
}
|
|
151367
|
+
/**
|
|
151368
|
+
* Get all added candidates with their payloads.
|
|
151369
|
+
*/
|
|
151370
|
+
getAddedCandidates() {
|
|
151371
|
+
return this.value.map((v5) => this.addedCandidatesMap.get(v5)).filter((c11) => c11 !== void 0);
|
|
151372
|
+
}
|
|
151179
151373
|
addItem() {
|
|
151180
151374
|
const trimmedValue = this.inputValue.trim();
|
|
151181
151375
|
if (!trimmedValue) return;
|
|
@@ -151238,6 +151432,8 @@ var _DeesInputList = class _DeesInputList extends (_a36 = DeesInputBase, _value_
|
|
|
151238
151432
|
const confirmed = await this.showConfirmDialog(`Delete "${this.value[index3]}"?`);
|
|
151239
151433
|
if (!confirmed) return;
|
|
151240
151434
|
}
|
|
151435
|
+
const removedKey = this.value[index3];
|
|
151436
|
+
this.addedCandidatesMap.delete(removedKey);
|
|
151241
151437
|
this.value = this.value.filter((_4, i11) => i11 !== index3);
|
|
151242
151438
|
this.emitChange();
|
|
151243
151439
|
}
|
|
@@ -151488,8 +151684,12 @@ _minItems = new WeakMap();
|
|
|
151488
151684
|
_allowDuplicates = new WeakMap();
|
|
151489
151685
|
_sortable = new WeakMap();
|
|
151490
151686
|
_confirmDelete = new WeakMap();
|
|
151687
|
+
_candidates = new WeakMap();
|
|
151688
|
+
_allowFreeform = new WeakMap();
|
|
151491
151689
|
_validationText3 = new WeakMap();
|
|
151492
151690
|
_inputValue3 = new WeakMap();
|
|
151691
|
+
_ghostText = new WeakMap();
|
|
151692
|
+
_currentCandidateIndex = new WeakMap();
|
|
151493
151693
|
_editingIndex = new WeakMap();
|
|
151494
151694
|
_editingValue = new WeakMap();
|
|
151495
151695
|
_draggedIndex = new WeakMap();
|
|
@@ -151505,8 +151705,12 @@ __decorateElement(_init33, 4, "minItems", _minItems_dec, _DeesInputList, _minIte
|
|
|
151505
151705
|
__decorateElement(_init33, 4, "allowDuplicates", _allowDuplicates_dec, _DeesInputList, _allowDuplicates);
|
|
151506
151706
|
__decorateElement(_init33, 4, "sortable", _sortable_dec, _DeesInputList, _sortable);
|
|
151507
151707
|
__decorateElement(_init33, 4, "confirmDelete", _confirmDelete_dec, _DeesInputList, _confirmDelete);
|
|
151708
|
+
__decorateElement(_init33, 4, "candidates", _candidates_dec, _DeesInputList, _candidates);
|
|
151709
|
+
__decorateElement(_init33, 4, "allowFreeform", _allowFreeform_dec, _DeesInputList, _allowFreeform);
|
|
151508
151710
|
__decorateElement(_init33, 4, "validationText", _validationText_dec3, _DeesInputList, _validationText3);
|
|
151509
151711
|
__decorateElement(_init33, 4, "inputValue", _inputValue_dec3, _DeesInputList, _inputValue3);
|
|
151712
|
+
__decorateElement(_init33, 4, "ghostText", _ghostText_dec, _DeesInputList, _ghostText);
|
|
151713
|
+
__decorateElement(_init33, 4, "currentCandidateIndex", _currentCandidateIndex_dec, _DeesInputList, _currentCandidateIndex);
|
|
151510
151714
|
__decorateElement(_init33, 4, "editingIndex", _editingIndex_dec, _DeesInputList, _editingIndex);
|
|
151511
151715
|
__decorateElement(_init33, 4, "editingValue", _editingValue_dec, _DeesInputList, _editingValue);
|
|
151512
151716
|
__decorateElement(_init33, 4, "draggedIndex", _draggedIndex_dec, _DeesInputList, _draggedIndex);
|
|
@@ -151603,6 +151807,20 @@ __publicField(_DeesInputList, "styles", [
|
|
|
151603
151807
|
}
|
|
151604
151808
|
|
|
151605
151809
|
|
|
151810
|
+
.candidate-check {
|
|
151811
|
+
width: 14px;
|
|
151812
|
+
height: 14px;
|
|
151813
|
+
color: ${cssManager.bdTheme("hsl(142.1 76.2% 36.3%)", "hsl(142.1 70.6% 45.3%)")};
|
|
151814
|
+
flex-shrink: 0;
|
|
151815
|
+
}
|
|
151816
|
+
|
|
151817
|
+
.candidate-unknown {
|
|
151818
|
+
width: 14px;
|
|
151819
|
+
height: 14px;
|
|
151820
|
+
color: ${cssManager.bdTheme("hsl(45 93% 47%)", "hsl(45 93% 58%)")};
|
|
151821
|
+
flex-shrink: 0;
|
|
151822
|
+
}
|
|
151823
|
+
|
|
151606
151824
|
.drag-handle {
|
|
151607
151825
|
display: flex;
|
|
151608
151826
|
align-items: center;
|
|
@@ -151710,7 +151928,7 @@ __publicField(_DeesInputList, "styles", [
|
|
|
151710
151928
|
}
|
|
151711
151929
|
|
|
151712
151930
|
.add-input {
|
|
151713
|
-
|
|
151931
|
+
width: 100%;
|
|
151714
151932
|
padding: 4px 8px;
|
|
151715
151933
|
font-size: 13px;
|
|
151716
151934
|
line-height: 18px;
|
|
@@ -151804,6 +152022,38 @@ __publicField(_DeesInputList, "styles", [
|
|
|
151804
152022
|
.list-items.dropping .list-item {
|
|
151805
152023
|
transition: none !important;
|
|
151806
152024
|
}
|
|
152025
|
+
|
|
152026
|
+
/* ── Terminal-style inline autocomplete ── */
|
|
152027
|
+
.autocomplete-wrapper {
|
|
152028
|
+
position: relative;
|
|
152029
|
+
flex: 1;
|
|
152030
|
+
min-width: 0;
|
|
152031
|
+
overflow: hidden;
|
|
152032
|
+
}
|
|
152033
|
+
|
|
152034
|
+
.ghost-text {
|
|
152035
|
+
position: absolute;
|
|
152036
|
+
top: 0;
|
|
152037
|
+
left: 0;
|
|
152038
|
+
right: 0;
|
|
152039
|
+
bottom: 0;
|
|
152040
|
+
padding: 4px 8px;
|
|
152041
|
+
font-size: 13px;
|
|
152042
|
+
line-height: 18px;
|
|
152043
|
+
font-family: inherit;
|
|
152044
|
+
white-space: nowrap;
|
|
152045
|
+
pointer-events: none;
|
|
152046
|
+
overflow: hidden;
|
|
152047
|
+
}
|
|
152048
|
+
|
|
152049
|
+
.ghost-typed {
|
|
152050
|
+
visibility: hidden;
|
|
152051
|
+
}
|
|
152052
|
+
|
|
152053
|
+
.ghost-completion {
|
|
152054
|
+
color: ${cssManager.bdTheme("hsl(0 0% 63.9%)", "hsl(0 0% 45.1%)")};
|
|
152055
|
+
opacity: 0.5;
|
|
152056
|
+
}
|
|
151807
152057
|
`
|
|
151808
152058
|
]);
|
|
151809
152059
|
__runInitializers(_init33, 1, _DeesInputList);
|
|
@@ -198760,7 +199010,7 @@ init_group_runtime();
|
|
|
198760
199010
|
// ts_web/00_commitinfo_data.ts
|
|
198761
199011
|
var commitinfo = {
|
|
198762
199012
|
name: "@design.estate/dees-catalog",
|
|
198763
|
-
version: "3.
|
|
199013
|
+
version: "3.61.0",
|
|
198764
199014
|
description: "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript."
|
|
198765
199015
|
};
|
|
198766
199016
|
export {
|
|
@@ -200733,4 +200983,4 @@ ibantools/jsnext/ibantools.js:
|
|
|
200733
200983
|
* @preferred
|
|
200734
200984
|
*)
|
|
200735
200985
|
*/
|
|
200736
|
-
//# sourceMappingURL=bundle-
|
|
200986
|
+
//# sourceMappingURL=bundle-1775382650041.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.61.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,14 @@ 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[];
|
|
24
|
+
accessor allowFreeform: boolean;
|
|
19
25
|
accessor validationText: string;
|
|
26
|
+
private addedCandidatesMap;
|
|
27
|
+
private matchingCandidates;
|
|
20
28
|
accessor inputValue: string;
|
|
29
|
+
accessor ghostText: string;
|
|
30
|
+
accessor currentCandidateIndex: number;
|
|
21
31
|
accessor editingIndex: number;
|
|
22
32
|
accessor editingValue: string;
|
|
23
33
|
accessor draggedIndex: number;
|
|
@@ -32,8 +42,19 @@ export declare class DeesInputList extends DeesInputBase<DeesInputList> {
|
|
|
32
42
|
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
33
43
|
render(): TemplateResult;
|
|
34
44
|
private handleInput;
|
|
45
|
+
private updateGhostText;
|
|
35
46
|
private handleAddKeyDown;
|
|
36
47
|
private handleEditKeyDown;
|
|
48
|
+
private selectCandidate;
|
|
49
|
+
/**
|
|
50
|
+
* Get the full candidate object for an item by its viewKey.
|
|
51
|
+
* Returns undefined if the item was added as a plain string.
|
|
52
|
+
*/
|
|
53
|
+
getCandidateForItem(viewKey: string): IListCandidate | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Get all added candidates with their payloads.
|
|
56
|
+
*/
|
|
57
|
+
getAddedCandidates(): IListCandidate[];
|
|
37
58
|
private addItem;
|
|
38
59
|
private startEdit;
|
|
39
60
|
private saveEdit;
|
|
@@ -261,7 +261,85 @@ 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. Freeform + Candidates'} .subtitle=${'Allow adding items not in the candidate list (shown with a question mark)'}>
|
|
325
|
+
<dees-input-list
|
|
326
|
+
.label=${'Tags'}
|
|
327
|
+
.placeholder=${'Type a tag... (freeform allowed)'}
|
|
328
|
+
.allowFreeform=${true}
|
|
329
|
+
.candidates=${[
|
|
330
|
+
{ viewKey: 'bug', payload: { color: 'red' } },
|
|
331
|
+
{ viewKey: 'feature', payload: { color: 'blue' } },
|
|
332
|
+
{ viewKey: 'docs', payload: { color: 'green' } },
|
|
333
|
+
{ viewKey: 'refactor', payload: { color: 'purple' } },
|
|
334
|
+
{ viewKey: 'performance', payload: { color: 'orange' } },
|
|
335
|
+
{ viewKey: 'security', payload: { color: 'red' } },
|
|
336
|
+
]}
|
|
337
|
+
.value=${['bug', 'my-custom-tag', 'feature']}
|
|
338
|
+
.description=${'Known tags get a checkmark, custom tags get a question mark. Tab to complete, Enter to add freeform.'}
|
|
339
|
+
></dees-input-list>
|
|
340
|
+
</dees-panel>
|
|
341
|
+
|
|
342
|
+
<dees-panel .title=${'12. Empty State'} .subtitle=${'How the component looks with no items'}>
|
|
265
343
|
<dees-input-list
|
|
266
344
|
.label=${'Your Ideas'}
|
|
267
345
|
.placeholder=${'Share your ideas...'}
|
|
@@ -272,4 +350,4 @@ export const demoFunc = () => html `
|
|
|
272
350
|
</div>
|
|
273
351
|
</dees-demowrapper>
|
|
274
352
|
`;
|
|
275
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1pbnB1dC1saXN0LmRlbW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWxpc3QvZGVlcy1pbnB1dC1saXN0LmRlbW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sK0NBQStDLENBQUM7QUFDdkQsT0FBTywyQ0FBMkMsQ0FBQztBQUNuRCxPQUFPLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8seURBQXlELENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQTs7O1FBRzFCLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpRUo7Ozs7MkJBSW9CLHFCQUFxQixjQUFjLG1EQUFtRDs7bUJBRTlGLGVBQWU7eUJBQ1QsMEJBQTBCO21CQUNoQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQzt5QkFDN0Isb0RBQW9EOzs7Ozs7OzJCQU9sRCxrQkFBa0IsY0FBYyxnQ0FBZ0M7O21CQUV4RSxlQUFlO3lCQUNULGVBQWU7c0JBQ2xCLElBQUk7bUJBQ1A7SUFDUCxzQkFBc0I7SUFDdEIsa0JBQWtCO0lBQ2xCLHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIsc0JBQXNCO0NBQ3ZCO3lCQUNjLDZDQUE2Qzs7Ozs7OzsyQkFPM0MsNkJBQTZCLGNBQWMsMkRBQTJEOzs7cUJBRzVHLDZCQUE2QjsyQkFDdkIsb0JBQW9CO3dCQUN2QixDQUFDO3dCQUNELENBQUM7cUJBQ0osQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO3dCQUNiLElBQUk7MkJB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
|