@design.estate/dees-catalog 9.8.0 → 11.0.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 +5626 -5343
- package/dist_bundle/bundle.js.map +1 -1
- package/dist_bundle/third-party-notices.md +783 -10
- package/dist_ts_web/00_commitinfo_data.js +2 -2
- package/dist_ts_web/elements/00actionerror.d.ts +32 -0
- package/dist_ts_web/elements/00actionerror.js +45 -0
- package/dist_ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.d.ts +16 -0
- package/dist_ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.js +40 -3
- package/dist_ts_web/elements/00group-dataview/dees-table/dees-table.d.ts +7 -0
- package/dist_ts_web/elements/00group-dataview/dees-table/dees-table.js +17 -17
- package/dist_ts_web/elements/00group-feedback/dees-hint/dees-hint.d.ts +14 -3
- package/dist_ts_web/elements/00group-feedback/dees-hint/dees-hint.demo.js +23 -4
- package/dist_ts_web/elements/00group-feedback/dees-hint/dees-hint.js +77 -5
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.d.ts +62 -48
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.js +89 -51
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js +528 -662
- package/dist_ts_web/elements/00group-harness/dees-terminal-view/dees-terminal-view.d.ts +45 -6
- package/dist_ts_web/elements/00group-harness/dees-terminal-view/dees-terminal-view.js +184 -27
- package/dist_ts_web/elements/00group-harness/interfaces.d.ts +55 -20
- package/dist_ts_web/elements/00group-input/dees-input-text/dees-input-text.d.ts +23 -3
- package/dist_ts_web/elements/00group-input/dees-input-text/dees-input-text.js +71 -11
- package/dist_ts_web/elements/00group-input/index.d.ts +0 -1
- package/dist_ts_web/elements/00group-input/index.js +1 -2
- package/dist_ts_web/elements/00group-overlay/dees-modal/dees-modal.d.ts +7 -0
- package/dist_ts_web/elements/00group-overlay/dees-modal/dees-modal.js +13 -3
- package/dist_ts_web/elements/index.d.ts +1 -2
- package/dist_ts_web/elements/index.js +2 -4
- package/dist_ts_web/services/DeesServiceLibLoader.d.ts +7 -0
- package/dist_ts_web/services/DeesServiceLibLoader.js +45 -22
- package/package.json +3 -4
- package/readme.md +105 -18
- package/scripts/check-third-party-notices.mjs +261 -0
- package/third-party-notices.md +783 -10
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00actionerror.ts +66 -0
- package/ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.ts +38 -2
- package/ts_web/elements/00group-dataview/dees-table/dees-table.ts +18 -16
- package/ts_web/elements/00group-feedback/dees-hint/dees-hint.demo.ts +22 -3
- package/ts_web/elements/00group-feedback/dees-hint/dees-hint.ts +71 -3
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.ts +99 -49
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.ts +607 -752
- package/ts_web/elements/00group-harness/dees-terminal-view/dees-terminal-view.ts +196 -24
- package/ts_web/elements/00group-harness/interfaces.ts +59 -19
- package/ts_web/elements/00group-input/dees-input-text/dees-input-text.ts +73 -13
- package/ts_web/elements/00group-input/index.ts +0 -1
- package/ts_web/elements/00group-overlay/dees-modal/dees-modal.ts +13 -2
- package/ts_web/elements/index.ts +1 -4
- package/ts_web/services/DeesServiceLibLoader.ts +150 -102
- package/.smartconfig.json +0 -86
- package/dist_ts_web/elements/00group-input/dees-input-searchselect/dees-input-searchselect.d.ts +0 -1
- package/dist_ts_web/elements/00group-input/dees-input-searchselect/dees-input-searchselect.js +0 -2
- package/dist_ts_web/elements/00group-input/dees-input-searchselect/index.d.ts +0 -1
- package/dist_ts_web/elements/00group-input/dees-input-searchselect/index.js +0 -2
- package/dist_ts_web/elements/dees-search/dees-search.d.ts +0 -1
- package/dist_ts_web/elements/dees-search/dees-search.js +0 -2
- package/dist_ts_web/elements/dees-search/index.d.ts +0 -1
- package/dist_ts_web/elements/dees-search/index.js +0 -2
- package/dist_ts_web/elements/dees-tooltip/dees-tooltip.d.ts +0 -1
- package/dist_ts_web/elements/dees-tooltip/dees-tooltip.js +0 -2
- package/dist_ts_web/elements/dees-tooltip/index.d.ts +0 -1
- package/dist_ts_web/elements/dees-tooltip/index.js +0 -2
- package/ts_web/elements/00group-input/dees-input-searchselect/dees-input-searchselect.ts +0 -0
- package/ts_web/elements/00group-input/dees-input-searchselect/index.ts +0 -1
- package/ts_web/elements/dees-search/dees-search.ts +0 -0
- package/ts_web/elements/dees-search/index.ts +0 -1
- package/ts_web/elements/dees-tooltip/dees-tooltip.ts +0 -1
- package/ts_web/elements/dees-tooltip/index.ts +0 -1
|
@@ -1,14 +1,25 @@
|
|
|
1
|
-
import { DeesElement, type
|
|
1
|
+
import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
|
|
2
|
+
import '../../00group-utility/dees-icon/dees-icon.js';
|
|
2
3
|
declare global {
|
|
3
4
|
interface HTMLElementTagNameMap {
|
|
4
5
|
'dees-hint': DeesHint;
|
|
5
6
|
}
|
|
6
7
|
}
|
|
8
|
+
export type THintType = 'info' | 'success' | 'warning' | 'error';
|
|
9
|
+
/**
|
|
10
|
+
* An inline advisory note next to the thing it explains. Use `text` for a plain
|
|
11
|
+
* sentence and the default slot for markup; both render when both are set.
|
|
12
|
+
* For a hover-revealed label on a control, use the control's own tooltip.
|
|
13
|
+
*/
|
|
7
14
|
export declare class DeesHint extends DeesElement {
|
|
8
15
|
static demo: () => TemplateResult<1>;
|
|
9
16
|
static demoGroups: string[];
|
|
10
|
-
accessor type:
|
|
17
|
+
accessor type: THintType;
|
|
18
|
+
/** The hint sentence. Rendered before any slotted content. */
|
|
19
|
+
accessor text: string;
|
|
20
|
+
private accessor hasSlottedContent;
|
|
11
21
|
constructor();
|
|
12
|
-
static styles: CSSResult[];
|
|
22
|
+
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
13
23
|
render(): TemplateResult;
|
|
24
|
+
private handleSlotChange;
|
|
14
25
|
}
|
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
import { html } from '@design.estate/dees-element';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import { demoPage, demoSection, demoCode } from '../../../demos/templates.js';
|
|
3
|
+
export const demoFunc = () => demoPage('Hint', 'An inline note next to the thing it explains. Four types carry the catalog status colors; a plain sentence or slotted markup both work.', html `
|
|
4
|
+
${demoSection('Types', 'The type chooses the icon and the accent color. Info is the default.', html `
|
|
5
|
+
<dees-hint text="Workspace names are visible to everyone you invite."></dees-hint>
|
|
6
|
+
<dees-hint type="success" text="Your changes are saved and shared with your team."></dees-hint>
|
|
7
|
+
<dees-hint type="warning" text="This workspace has no owner. Assign one before the trial ends."></dees-hint>
|
|
8
|
+
<dees-hint type="error" text="The deployment could not reach the registry."></dees-hint>
|
|
9
|
+
${demoCode('<dees-hint type="warning" text="Assign an owner before the trial ends."></dees-hint>')}
|
|
10
|
+
`)}
|
|
11
|
+
${demoSection('Slotted content', 'Use the default slot when the note needs markup. Text and slotted content render together.', html `
|
|
12
|
+
<dees-hint type="info">Read the <a href="https://code.foss.global/design.estate/dees-catalog">component index</a> before adding a control.</dees-hint>
|
|
13
|
+
<dees-hint type="warning" text="Rotation is due.">
|
|
14
|
+
<strong> Keys older than 90 days stop working.</strong>
|
|
15
|
+
</dees-hint>
|
|
16
|
+
${demoCode('<dees-hint type="info">Read the <a href="…">component index</a> first.</dees-hint>')}
|
|
17
|
+
`)}
|
|
18
|
+
${demoSection('Empty hints', 'A hint with neither text nor slotted content reserves no space, so a conditional note needs no wrapper.', html `
|
|
19
|
+
<p class="dees-demo-caption">There is an empty hint between these two lines.</p>
|
|
20
|
+
<dees-hint></dees-hint>
|
|
21
|
+
<p class="dees-demo-caption">It renders nothing until it is given text.</p>
|
|
22
|
+
`)}
|
|
23
|
+
`);
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oaW50LmRlbW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLWhpbnQvZGVlcy1oaW50LmRlbW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTlFLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLHlJQUF5SSxFQUFFLElBQUksQ0FBQTtJQUMxTCxXQUFXLENBQUMsT0FBTyxFQUFFLHNFQUFzRSxFQUFFLElBQUksQ0FBQTs7Ozs7TUFLL0YsUUFBUSxDQUFDLHNGQUFzRixDQUFDO0dBQ25HLENBQUM7SUFDQSxXQUFXLENBQUMsaUJBQWlCLEVBQUUsNEZBQTRGLEVBQUUsSUFBSSxDQUFBOzs7OztNQUsvSCxRQUFRLENBQUMsb0ZBQW9GLENBQUM7R0FDakcsQ0FBQztJQUNBLFdBQVcsQ0FBQyxhQUFhLEVBQUUseUdBQXlHLEVBQUUsSUFBSSxDQUFBOzs7O0dBSTNJLENBQUM7Q0FDSCxDQUFDLENBQUMifQ==
|
|
@@ -32,10 +32,22 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
32
32
|
}
|
|
33
33
|
return useValue ? value : void 0;
|
|
34
34
|
};
|
|
35
|
-
import { DeesElement, css, cssManager, customElement, html, property, } from '@design.estate/dees-element';
|
|
35
|
+
import { DeesElement, css, cssManager, customElement, html, property, state, } from '@design.estate/dees-element';
|
|
36
36
|
import * as domtools from '@design.estate/dees-domtools';
|
|
37
37
|
import { demoFunc } from './dees-hint.demo.js';
|
|
38
38
|
import { themeDefaultStyles } from '../../00theme.js';
|
|
39
|
+
import '../../00group-utility/dees-icon/dees-icon.js';
|
|
40
|
+
const hintIcons = {
|
|
41
|
+
info: 'lucide:Info',
|
|
42
|
+
success: 'lucide:CircleCheck',
|
|
43
|
+
warning: 'lucide:TriangleAlert',
|
|
44
|
+
error: 'lucide:CircleAlert',
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* An inline advisory note next to the thing it explains. Use `text` for a plain
|
|
48
|
+
* sentence and the default slot for markup; both render when both are set.
|
|
49
|
+
* For a hover-revealed label on a control, use the control's own tooltip.
|
|
50
|
+
*/
|
|
39
51
|
let DeesHint = (() => {
|
|
40
52
|
let _classDecorators = [customElement('dees-hint')];
|
|
41
53
|
let _classDescriptor;
|
|
@@ -45,12 +57,22 @@ let DeesHint = (() => {
|
|
|
45
57
|
let _type_decorators;
|
|
46
58
|
let _type_initializers = [];
|
|
47
59
|
let _type_extraInitializers = [];
|
|
60
|
+
let _text_decorators;
|
|
61
|
+
let _text_initializers = [];
|
|
62
|
+
let _text_extraInitializers = [];
|
|
63
|
+
let _hasSlottedContent_decorators;
|
|
64
|
+
let _hasSlottedContent_initializers = [];
|
|
65
|
+
let _hasSlottedContent_extraInitializers = [];
|
|
48
66
|
var DeesHint = class extends _classSuper {
|
|
49
67
|
static { _classThis = this; }
|
|
50
68
|
static {
|
|
51
69
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
52
|
-
_type_decorators = [property({ type: String })];
|
|
70
|
+
_type_decorators = [property({ type: String, reflect: true })];
|
|
71
|
+
_text_decorators = [property({ type: String })];
|
|
72
|
+
_hasSlottedContent_decorators = [state()];
|
|
53
73
|
__esDecorate(this, null, _type_decorators, { kind: "accessor", name: "type", static: false, private: false, access: { has: obj => "type" in obj, get: obj => obj.type, set: (obj, value) => { obj.type = value; } }, metadata: _metadata }, _type_initializers, _type_extraInitializers);
|
|
74
|
+
__esDecorate(this, null, _text_decorators, { kind: "accessor", name: "text", static: false, private: false, access: { has: obj => "text" in obj, get: obj => obj.text, set: (obj, value) => { obj.text = value; } }, metadata: _metadata }, _text_initializers, _text_extraInitializers);
|
|
75
|
+
__esDecorate(this, null, _hasSlottedContent_decorators, { kind: "accessor", name: "hasSlottedContent", static: false, private: false, access: { has: obj => "hasSlottedContent" in obj, get: obj => obj.hasSlottedContent, set: (obj, value) => { obj.hasSlottedContent = value; } }, metadata: _metadata }, _hasSlottedContent_initializers, _hasSlottedContent_extraInitializers);
|
|
54
76
|
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
55
77
|
DeesHint = _classThis = _classDescriptor.value;
|
|
56
78
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
@@ -60,9 +82,15 @@ let DeesHint = (() => {
|
|
|
60
82
|
#type_accessor_storage = __runInitializers(this, _type_initializers, 'info');
|
|
61
83
|
get type() { return this.#type_accessor_storage; }
|
|
62
84
|
set type(value) { this.#type_accessor_storage = value; }
|
|
85
|
+
#text_accessor_storage = (__runInitializers(this, _type_extraInitializers), __runInitializers(this, _text_initializers, ''));
|
|
86
|
+
/** The hint sentence. Rendered before any slotted content. */
|
|
87
|
+
get text() { return this.#text_accessor_storage; }
|
|
88
|
+
set text(value) { this.#text_accessor_storage = value; }
|
|
89
|
+
#hasSlottedContent_accessor_storage = (__runInitializers(this, _text_extraInitializers), __runInitializers(this, _hasSlottedContent_initializers, false));
|
|
90
|
+
get hasSlottedContent() { return this.#hasSlottedContent_accessor_storage; }
|
|
91
|
+
set hasSlottedContent(value) { this.#hasSlottedContent_accessor_storage = value; }
|
|
63
92
|
constructor() {
|
|
64
93
|
super();
|
|
65
|
-
__runInitializers(this, _type_extraInitializers);
|
|
66
94
|
domtools.elementBasic.setup();
|
|
67
95
|
}
|
|
68
96
|
static styles = [themeDefaultStyles, cssManager.defaultStyles, css `
|
|
@@ -70,15 +98,59 @@ let DeesHint = (() => {
|
|
|
70
98
|
display: block;
|
|
71
99
|
font-family: var(--dees-font-family);
|
|
72
100
|
color: var(--dees-color-text-primary);
|
|
101
|
+
--dees-hint-accent: var(--dees-color-accent-primary);
|
|
73
102
|
}
|
|
74
103
|
|
|
104
|
+
:host([type='success']) { --dees-hint-accent: var(--dees-color-text-success); }
|
|
105
|
+
:host([type='warning']) { --dees-hint-accent: var(--dees-color-text-warning); }
|
|
106
|
+
:host([type='error']) { --dees-hint-accent: var(--dees-color-text-error); }
|
|
107
|
+
|
|
75
108
|
.mainbox {
|
|
76
109
|
box-sizing: border-box;
|
|
110
|
+
display: flex;
|
|
111
|
+
align-items: flex-start;
|
|
112
|
+
gap: var(--dees-spacing-sm);
|
|
113
|
+
padding: var(--dees-spacing-sm) var(--dees-spacing-md);
|
|
114
|
+
border: 1px solid color-mix(in srgb, var(--dees-hint-accent) 28%, transparent);
|
|
115
|
+
border-radius: var(--dees-radius-lg);
|
|
116
|
+
corner-shape: var(--dees-corner-shape);
|
|
117
|
+
background: color-mix(in srgb, var(--dees-hint-accent) 8%, transparent);
|
|
118
|
+
font-size: var(--dees-font-footnote-size);
|
|
119
|
+
line-height: var(--dees-font-footnote-line);
|
|
120
|
+
overflow-wrap: anywhere;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* An element with neither text nor slotted content reserves no space. */
|
|
124
|
+
.mainbox.empty {
|
|
125
|
+
display: none;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.icon {
|
|
129
|
+
flex-shrink: 0;
|
|
130
|
+
color: var(--dees-hint-accent);
|
|
131
|
+
font-size: 16px;
|
|
132
|
+
/* Optically aligns the glyph with the first line of text. */
|
|
133
|
+
margin-top: 1px;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.content {
|
|
137
|
+
min-width: 0;
|
|
138
|
+
color: var(--dees-color-text-secondary);
|
|
77
139
|
}
|
|
78
140
|
`];
|
|
79
141
|
render() {
|
|
80
|
-
|
|
142
|
+
const isEmpty = !this.text && !this.hasSlottedContent;
|
|
143
|
+
return html `
|
|
144
|
+
<div class="mainbox ${isEmpty ? 'empty' : ''}" role="note">
|
|
145
|
+
<dees-icon class="icon" aria-hidden="true" .icon=${hintIcons[this.type] ?? hintIcons.info}></dees-icon>
|
|
146
|
+
<div class="content">${this.text}<slot @slotchange=${this.handleSlotChange}></slot></div>
|
|
147
|
+
</div>
|
|
148
|
+
`;
|
|
81
149
|
}
|
|
150
|
+
handleSlotChange = (__runInitializers(this, _hasSlottedContent_extraInitializers), (eventArg) => {
|
|
151
|
+
const assigned = eventArg.target.assignedNodes({ flatten: true });
|
|
152
|
+
this.hasSlottedContent = assigned.some((node) => node.nodeType === Node.ELEMENT_NODE || (node.textContent ?? '').trim().length > 0);
|
|
153
|
+
});
|
|
82
154
|
static {
|
|
83
155
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
84
156
|
}
|
|
@@ -86,4 +158,4 @@ let DeesHint = (() => {
|
|
|
86
158
|
return DeesHint = _classThis;
|
|
87
159
|
})();
|
|
88
160
|
export { DeesHint };
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZmVlZGJhY2svZGVlcy1oaW50L2RlZXMtaGludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxHQUFHLEVBQ0gsVUFBVSxFQUNWLGFBQWEsRUFDYixJQUFJLEVBQ0osUUFBUSxFQUNSLEtBQUssR0FFTixNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8sS0FBSyxRQUFRLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sOENBQThDLENBQUM7QUFVdEQsTUFBTSxTQUFTLEdBQThCO0lBQzNDLElBQUksRUFBRSxhQUFhO0lBQ25CLE9BQU8sRUFBRSxvQkFBb0I7SUFDN0IsT0FBTyxFQUFFLHNCQUFzQjtJQUMvQixLQUFLLEVBQUUsb0JBQW9CO0NBQzVCLENBQUM7QUFFRjs7OztHQUlHO0lBRVUsUUFBUTs0QkFEcEIsYUFBYSxDQUFDLFdBQVcsQ0FBQzs7OztzQkFDRyxXQUFXOzs7Ozs7Ozs7O3dCQUFuQixTQUFRLFdBQVc7Ozs7Z0NBSXRDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO2dDQUl6QyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7NkNBRzFCLEtBQUssRUFBRTtZQU5SLGlLQUFTLElBQUksNkJBQUosSUFBSSxtRkFBcUI7WUFJbEMsaUtBQVMsSUFBSSw2QkFBSixJQUFJLG1GQUFjO1lBRzNCLHdNQUFpQixpQkFBaUIsNkJBQWpCLGlCQUFpQiw2R0FBUztZQVo3Qyw2S0FnRkM7Ozs7UUEvRVEsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFDdkIsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBR3hDLHFFQUEyQixNQUFNLEVBQUM7UUFBbEMsSUFBUyxJQUFJLDBDQUFxQjtRQUFsQyxJQUFTLElBQUksZ0RBQXFCO1FBSWxDLHdIQUF3QixFQUFFLEdBQUM7UUFGM0IsOERBQThEO1FBRTlELElBQVMsSUFBSSwwQ0FBYztRQUEzQixJQUFTLElBQUksZ0RBQWM7UUFHM0Isa0pBQXFDLEtBQUssR0FBQztRQUEzQyxJQUFpQixpQkFBaUIsdURBQVM7UUFBM0MsSUFBaUIsaUJBQWlCLDZEQUFTO1FBRTNDO1lBQ0UsS0FBSyxFQUFFLENBQUM7WUFDUixRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFFTSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBNEN0RSxDQUFDLENBQUM7UUFFRSxNQUFNO1lBQ1gsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ3RELE9BQU8sSUFBSSxDQUFBOzRCQUNhLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFOzJEQUNTLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLElBQUk7K0JBQ2xFLElBQUksQ0FBQyxJQUFJLHFCQUFxQixJQUFJLENBQUMsZ0JBQWdCOztLQUU3RSxDQUFDO1FBQ0osQ0FBQztRQUVPLGdCQUFnQixtRUFBRyxDQUFDLFFBQWUsRUFBRSxFQUFFO1lBQzdDLE1BQU0sUUFBUSxHQUFJLFFBQVEsQ0FBQyxNQUEwQixDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDOUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkYsQ0FBQyxFQUFDOztZQS9FUyx1REFBUTs7Ozs7U0FBUixRQUFRIn0=
|
|
@@ -1,31 +1,33 @@
|
|
|
1
1
|
import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
|
|
2
|
-
import type { IHarnessResourceAssociation, IHarnessResourceMeta, IHarnessSessionGroup, IHarnessSessionMeta, THarnessResourceAssociationInteractionSource } from '../interfaces.js';
|
|
2
|
+
import type { IDropSlot, IHarnessResourceAssociation, IHarnessResourceMeta, IHarnessSessionGroup, IHarnessSessionListItemRef, IHarnessSessionMeta, THarnessResourceAssociationInteractionSource } from '../interfaces.js';
|
|
3
3
|
import '../../00group-utility/dees-icon/dees-icon.js';
|
|
4
4
|
declare global {
|
|
5
5
|
interface HTMLElementTagNameMap {
|
|
6
6
|
'dees-harness-session-list': DeesHarnessSessionList;
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
-
interface IDropSlot {
|
|
10
|
-
groupId: string | null;
|
|
11
|
-
index: number;
|
|
12
|
-
}
|
|
13
9
|
/**
|
|
14
10
|
* Searchable conversation list, embeddable in a sidebar or a DeesModal.
|
|
15
11
|
* Emits `harness-session-select` on click, `harness-session-open` on
|
|
16
12
|
* double-click or Enter, and `harness-session-context` with viewport
|
|
17
13
|
* coordinates on right-click, Actions, or ContextMenu/Shift+F10.
|
|
18
14
|
*
|
|
19
|
-
*
|
|
20
|
-
* be dragged
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* `harness-
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
15
|
+
* Sessions and host resources are peers in ONE ordered list: a resource row
|
|
16
|
+
* can be dragged anywhere a session can, including between sessions and into
|
|
17
|
+
* or out of groups. Attaching a resource to a session is a separate explicit
|
|
18
|
+
* host action (`requestResourceAssociation()` /
|
|
19
|
+
* `harness-resource-association-request`) that never moves a row; the
|
|
20
|
+
* association only renders as a marker on the resource row.
|
|
21
|
+
*
|
|
22
|
+
* The component never mutates its inputs: reordering emits `harness-item-move`,
|
|
23
|
+
* the "new group" button emits `harness-group-create-request`, and
|
|
24
|
+
* right-clicking a group header emits `harness-group-context` — the host
|
|
25
|
+
* persists changes and passes fresh `groups` / `ungroupedItemIds` back in.
|
|
26
|
+
* Items in no group render in the trailing ungrouped section with pinned
|
|
27
|
+
* entries first, then explicit order, then new entries by recency. With
|
|
28
|
+
* `enableGrouping` the list additionally renders group chrome. While a search
|
|
29
|
+
* query is active the list is one flat, non-sortable, recency-ordered section
|
|
30
|
+
* in which sessions and resources match as peers.
|
|
29
31
|
*/
|
|
30
32
|
export declare class DeesHarnessSessionList extends DeesElement {
|
|
31
33
|
static demo: () => TemplateResult<1>;
|
|
@@ -36,17 +38,18 @@ export declare class DeesHarnessSessionList extends DeesElement {
|
|
|
36
38
|
accessor emptyText: string;
|
|
37
39
|
accessor groups: IHarnessSessionGroup[];
|
|
38
40
|
accessor enableGrouping: boolean;
|
|
39
|
-
/** Explicit order for sortable
|
|
40
|
-
accessor
|
|
41
|
+
/** Explicit order for sortable items of both kinds outside user-defined groups. */
|
|
42
|
+
accessor ungroupedItemIds: IHarnessSessionListItemRef[];
|
|
41
43
|
accessor resources: IHarnessResourceMeta[];
|
|
42
44
|
accessor resourceAssociations: IHarnessResourceAssociation[];
|
|
43
45
|
accessor selectedResourceId: string;
|
|
44
|
-
/**
|
|
45
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Serializable attach/reassign targets for host menus. A missing entry leaves
|
|
48
|
+
* the resource unrestricted; an empty array means no eligible target.
|
|
49
|
+
*/
|
|
50
|
+
accessor eligibleTargetsByResourceId: Record<string, IHarnessSessionListItemRef[]>;
|
|
46
51
|
accessor search: string;
|
|
47
|
-
accessor
|
|
48
|
-
accessor draggingResourceId: string;
|
|
49
|
-
accessor resourceDropTargetSessionId: string;
|
|
52
|
+
accessor draggingItem: IHarnessSessionListItemRef | undefined;
|
|
50
53
|
accessor dropSlot: IDropSlot | undefined;
|
|
51
54
|
accessor draggedItemHeight: number;
|
|
52
55
|
accessor expandedSessionIds: ReadonlySet<string>;
|
|
@@ -72,32 +75,47 @@ export declare class DeesHarnessSessionList extends DeesElement {
|
|
|
72
75
|
private dragAutoScrollVelocity;
|
|
73
76
|
private dragAutoScrollLastFrame;
|
|
74
77
|
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
75
|
-
private get sessionsById();
|
|
76
78
|
private get resourcesById();
|
|
77
|
-
/**
|
|
79
|
+
/**
|
|
80
|
+
* First valid record wins; unknown records, self-references and duplicates
|
|
81
|
+
* remain untouched but are not projected. Keyed by resource id.
|
|
82
|
+
*/
|
|
78
83
|
private get acceptedResourceAssociations();
|
|
79
84
|
private get acceptedResources();
|
|
85
|
+
/** Sessions and resources as one pool of orderable items, before grouping and search. */
|
|
86
|
+
private get acceptedItems();
|
|
87
|
+
private get itemsByKey();
|
|
88
|
+
/** Groups only organize the list while grouping is enabled. */
|
|
89
|
+
private get effectiveGroups();
|
|
90
|
+
private get groupedItemKeys();
|
|
91
|
+
private itemsForGroup;
|
|
92
|
+
/** Pinned entries first, then explicitly ordered items, then unknown items by recency. */
|
|
93
|
+
private get ungroupedItems();
|
|
80
94
|
private resourceMatchesSearch;
|
|
81
95
|
private sessionMatchesSearch;
|
|
82
|
-
private
|
|
83
|
-
|
|
84
|
-
private get
|
|
85
|
-
|
|
86
|
-
private
|
|
87
|
-
private
|
|
96
|
+
private itemMatchesSearch;
|
|
97
|
+
/** Search flattens the list: sessions and resources match as peers, newest first. */
|
|
98
|
+
private get searchItems();
|
|
99
|
+
private get searchActive();
|
|
100
|
+
private sortableItems;
|
|
101
|
+
private groupIdForItem;
|
|
102
|
+
private rowElementFor;
|
|
88
103
|
focusSearch(): void;
|
|
89
|
-
requestResourceAssociation(resourceIdArg: string,
|
|
104
|
+
requestResourceAssociation(resourceIdArg: string, toTargetArg: IHarnessSessionListItemRef | null, sourceArg?: THarnessResourceAssociationInteractionSource): boolean;
|
|
90
105
|
updated(changedProperties: Map<PropertyKey, unknown>): void;
|
|
91
106
|
connectedCallback(): Promise<void>;
|
|
92
107
|
disconnectedCallback(): Promise<void>;
|
|
93
108
|
render(): TemplateResult;
|
|
94
|
-
private
|
|
95
|
-
private
|
|
109
|
+
private renderEmptyNote;
|
|
110
|
+
private renderSearchList;
|
|
111
|
+
private renderOrderedList;
|
|
112
|
+
private renderGroup;
|
|
96
113
|
private renderSection;
|
|
97
114
|
private renderDropPlaceholder;
|
|
98
|
-
|
|
99
|
-
private
|
|
100
|
-
private
|
|
115
|
+
/** One grip for both kinds; only its size and extra class differ. */
|
|
116
|
+
private renderDragHandle;
|
|
117
|
+
private renderSessionItem;
|
|
118
|
+
private renderResourceItem;
|
|
101
119
|
private invokeSessionContext;
|
|
102
120
|
private handleSessionContextKey;
|
|
103
121
|
private eventTargetsSessionActions;
|
|
@@ -109,10 +127,7 @@ export declare class DeesHarnessSessionList extends DeesElement {
|
|
|
109
127
|
private sessionStateIcon;
|
|
110
128
|
private toggleSessionExpanded;
|
|
111
129
|
private toggleGroupCollapsed;
|
|
112
|
-
private sortableSessions;
|
|
113
|
-
private sessionsForGroup;
|
|
114
130
|
private handlePointerDown;
|
|
115
|
-
private handleResourcePointerDown;
|
|
116
131
|
private readonly handlePointerMove;
|
|
117
132
|
private readonly handlePointerUp;
|
|
118
133
|
private readonly handlePointerCancel;
|
|
@@ -120,10 +135,7 @@ export declare class DeesHarnessSessionList extends DeesElement {
|
|
|
120
135
|
private readonly handleDragKeyDown;
|
|
121
136
|
private readonly handleDragWindowBlur;
|
|
122
137
|
private startPointerDrag;
|
|
123
|
-
private startResourcePointerDrag;
|
|
124
138
|
private moveDragPreview;
|
|
125
|
-
private moveResourceDragPreview;
|
|
126
|
-
private updateResourceDropTargetFromPointer;
|
|
127
139
|
private setDropSlot;
|
|
128
140
|
private clearDropSlot;
|
|
129
141
|
private updateDragAutoScrollVelocity;
|
|
@@ -134,12 +146,16 @@ export declare class DeesHarnessSessionList extends DeesElement {
|
|
|
134
146
|
private readonly syncScrollShadowState;
|
|
135
147
|
private stopDragAutoScroll;
|
|
136
148
|
private createMoveDetail;
|
|
149
|
+
private emitItemMove;
|
|
137
150
|
private handleKeyboardMove;
|
|
138
|
-
private
|
|
151
|
+
private rowKey;
|
|
152
|
+
private captureRowRects;
|
|
139
153
|
private restoreKeyboardMoveFocus;
|
|
140
|
-
|
|
141
|
-
private
|
|
154
|
+
/** Known, de-duplicated targets the host allows; an absent entry means unrestricted. */
|
|
155
|
+
private eligibleTargets;
|
|
142
156
|
private isResourceTargetEligible;
|
|
157
|
+
private itemTitleFor;
|
|
158
|
+
private emitSession;
|
|
143
159
|
private emitResource;
|
|
144
160
|
private handleResourceContextKey;
|
|
145
161
|
private emitResourceContext;
|
|
@@ -147,9 +163,7 @@ export declare class DeesHarnessSessionList extends DeesElement {
|
|
|
147
163
|
private clearResourceContextState;
|
|
148
164
|
private reconcilePendingResourceAssociation;
|
|
149
165
|
private resourceAssociationAnnouncement;
|
|
150
|
-
private
|
|
166
|
+
private animateRowReflow;
|
|
151
167
|
private cancelReflowAnimations;
|
|
152
168
|
private finishPointerDrag;
|
|
153
|
-
private emit;
|
|
154
169
|
}
|
|
155
|
-
export {};
|