@design.estate/dees-catalog 3.97.0 → 3.98.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 +4701 -3485
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.d.ts +35 -0
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.js +128 -5
- package/dist_ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.js +5 -6
- package/dist_ts_web/elements/00group-dataview/dees-table/dees-table.d.ts +1 -0
- package/dist_ts_web/elements/00group-dataview/dees-table/dees-table.js +21 -11
- package/dist_ts_web/elements/00group-feedback/dees-spinner/dees-spinner.js +12 -3
- package/dist_ts_web/elements/00group-form/dees-form-submit/dees-form-submit.d.ts +9 -0
- package/dist_ts_web/elements/00group-form/dees-form-submit/dees-form-submit.js +25 -2
- package/dist_ts_web/elements/00group-input/dees-input-multitoggle/dees-input-multitoggle.js +20 -4
- package/dist_ts_web/elements/00group-input/dees-input-text/dees-input-text.d.ts +15 -0
- package/dist_ts_web/elements/00group-input/dees-input-text/dees-input-text.js +36 -2
- package/dist_ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.js +2 -1
- package/dist_ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.d.ts +246 -0
- package/dist_ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.demo.js +439 -21
- package/dist_ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.js +857 -23
- package/dist_ts_web/elements/00group-utility/dees-icon/dees-icon.d.ts +2 -1
- package/dist_ts_web/elements/00group-utility/dees-icon/dees-icon.js +52 -80
- package/dist_ts_web/elements/00theme.d.ts +2 -0
- package/dist_ts_web/elements/00theme.js +7 -1
- package/package.json +3 -3
- package/readme.hints.md +35 -0
- package/readme.md +85 -11
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-button/dees-button/dees-button.ts +128 -2
- package/ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.ts +5 -6
- package/ts_web/elements/00group-dataview/dees-table/dees-table.ts +43 -27
- package/ts_web/elements/00group-feedback/dees-spinner/dees-spinner.ts +11 -2
- package/ts_web/elements/00group-form/dees-form-submit/dees-form-submit.ts +18 -0
- package/ts_web/elements/00group-input/dees-input-multitoggle/dees-input-multitoggle.ts +19 -3
- package/ts_web/elements/00group-input/dees-input-text/dees-input-text.ts +29 -0
- package/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.ts +1 -0
- package/ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.demo.ts +418 -19
- package/ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.ts +969 -20
- package/ts_web/elements/00group-utility/dees-icon/dees-icon.ts +55 -91
- package/ts_web/elements/00theme.ts +8 -0
|
@@ -36,7 +36,8 @@ export declare class DeesIcon extends DeesElement {
|
|
|
36
36
|
* @returns Object with type and name properties
|
|
37
37
|
*/
|
|
38
38
|
private parseIconString;
|
|
39
|
-
private
|
|
39
|
+
private createLucideMaskImage;
|
|
40
|
+
private clearIconContainer;
|
|
40
41
|
static styles: CSSResult[];
|
|
41
42
|
render(): import("@design.estate/dees-element").TemplateResult<1>;
|
|
42
43
|
updated(): void;
|
|
@@ -53,15 +53,16 @@ function lucideNameToPascalCase(name) {
|
|
|
53
53
|
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
54
54
|
.join('');
|
|
55
55
|
}
|
|
56
|
-
//
|
|
57
|
-
|
|
56
|
+
// Cache opaque mask sources. Color is applied separately through currentColor,
|
|
57
|
+
// so theme and inherited text-color changes never require rebuilding geometry.
|
|
58
|
+
const iconMaskCache = new Map();
|
|
58
59
|
// Clear cache items occasionally to prevent memory leaks
|
|
59
60
|
const MAX_CACHE_SIZE = 500;
|
|
60
61
|
function limitCacheSize() {
|
|
61
|
-
if (
|
|
62
|
+
if (iconMaskCache.size > MAX_CACHE_SIZE) {
|
|
62
63
|
// Remove oldest entries (first 20% of items)
|
|
63
|
-
const keysToDelete = Array.from(
|
|
64
|
-
keysToDelete.forEach(key =>
|
|
64
|
+
const keysToDelete = Array.from(iconMaskCache.keys()).slice(0, MAX_CACHE_SIZE / 5);
|
|
65
|
+
keysToDelete.forEach(key => iconMaskCache.delete(key));
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
68
|
let DeesIcon = (() => {
|
|
@@ -191,45 +192,38 @@ let DeesIcon = (() => {
|
|
|
191
192
|
};
|
|
192
193
|
}
|
|
193
194
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
const cacheKey = `lucide:${
|
|
197
|
-
|
|
198
|
-
if (
|
|
199
|
-
return
|
|
195
|
+
createLucideMaskImage(iconName) {
|
|
196
|
+
const pascalCaseName = lucideNameToPascalCase(iconName);
|
|
197
|
+
const cacheKey = `lucide:${pascalCaseName}:${this.iconSize}:${this.strokeWidth}`;
|
|
198
|
+
const cachedMask = iconMaskCache.get(cacheKey);
|
|
199
|
+
if (cachedMask)
|
|
200
|
+
return cachedMask;
|
|
201
|
+
if (!lucideIcons[pascalCaseName]) {
|
|
202
|
+
throw new Error(`Lucide icon '${pascalCaseName}' was not found`);
|
|
200
203
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
}
|
|
209
|
-
// Use the exact pattern from Lucide documentation
|
|
210
|
-
const svgElement = createElement(lucideIcons[pascalCaseName], {
|
|
211
|
-
color: this.color,
|
|
212
|
-
size: this.iconSize,
|
|
213
|
-
strokeWidth: this.strokeWidth
|
|
214
|
-
});
|
|
215
|
-
if (!svgElement) {
|
|
216
|
-
console.warn(`createElement returned empty result for ${pascalCaseName}`);
|
|
217
|
-
return '';
|
|
218
|
-
}
|
|
219
|
-
// Get the HTML
|
|
220
|
-
const result = svgElement.outerHTML;
|
|
221
|
-
// Cache the result for future use
|
|
222
|
-
iconCache.set(cacheKey, result);
|
|
223
|
-
limitCacheSize();
|
|
224
|
-
return result;
|
|
225
|
-
}
|
|
226
|
-
catch (error) {
|
|
227
|
-
console.error(`Error rendering Lucide icon ${iconName}:`, error);
|
|
228
|
-
// Create a fallback SVG with the icon name
|
|
229
|
-
return `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" fill="none" stroke="${this.color}" stroke-width="${this.strokeWidth}" stroke-linecap="round" stroke-linejoin="round">
|
|
230
|
-
<text x="50%" y="50%" font-size="6" text-anchor="middle" dominant-baseline="middle" fill="${this.color}">${iconName}</text>
|
|
231
|
-
</svg>`;
|
|
204
|
+
const svgElement = createElement(lucideIcons[pascalCaseName], {
|
|
205
|
+
color: '#fff',
|
|
206
|
+
size: this.iconSize,
|
|
207
|
+
strokeWidth: this.strokeWidth,
|
|
208
|
+
});
|
|
209
|
+
if (!svgElement) {
|
|
210
|
+
throw new Error(`Lucide did not create an element for '${pascalCaseName}'`);
|
|
232
211
|
}
|
|
212
|
+
// The mask must be completely opaque. The consumer's inherited color,
|
|
213
|
+
// including any alpha, is painted exactly once behind this geometry.
|
|
214
|
+
svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
|
|
215
|
+
svgElement.setAttribute('color', '#fff');
|
|
216
|
+
svgElement.setAttribute('stroke', '#fff');
|
|
217
|
+
svgElement.setAttribute('fill', 'none');
|
|
218
|
+
const maskImage = `url("data:image/svg+xml,${encodeURIComponent(svgElement.outerHTML)}")`;
|
|
219
|
+
iconMaskCache.set(cacheKey, maskImage);
|
|
220
|
+
limitCacheSize();
|
|
221
|
+
return maskImage;
|
|
222
|
+
}
|
|
223
|
+
clearIconContainer(container) {
|
|
224
|
+
container.style.backgroundColor = 'transparent';
|
|
225
|
+
container.style.setProperty('mask-image', 'none');
|
|
226
|
+
container.style.setProperty('-webkit-mask-image', 'none');
|
|
233
227
|
}
|
|
234
228
|
static styles = [
|
|
235
229
|
themeDefaultStyles,
|
|
@@ -244,11 +238,14 @@ let DeesIcon = (() => {
|
|
|
244
238
|
pointer-events: none;
|
|
245
239
|
}
|
|
246
240
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
241
|
+
#iconContainer {
|
|
242
|
+
background-color: currentColor;
|
|
243
|
+
mask-position: center;
|
|
244
|
+
mask-repeat: no-repeat;
|
|
245
|
+
mask-size: 100% 100%;
|
|
246
|
+
-webkit-mask-position: center;
|
|
247
|
+
-webkit-mask-repeat: no-repeat;
|
|
248
|
+
-webkit-mask-size: 100% 100%;
|
|
252
249
|
will-change: transform; /* Helps with animations */
|
|
253
250
|
contain: strict; /* Performance optimization */
|
|
254
251
|
}
|
|
@@ -276,7 +273,7 @@ let DeesIcon = (() => {
|
|
|
276
273
|
if (!container)
|
|
277
274
|
return;
|
|
278
275
|
if (!effectiveIcon) {
|
|
279
|
-
container
|
|
276
|
+
this.clearIconContainer(container);
|
|
280
277
|
this.lastIcon = effectiveIcon;
|
|
281
278
|
this.lastIconSize = this.iconSize;
|
|
282
279
|
this.lastColor = this.color;
|
|
@@ -300,43 +297,18 @@ let DeesIcon = (() => {
|
|
|
300
297
|
// Parse the icon string to get type and name
|
|
301
298
|
const { type, name } = this.parseIconString(effectiveIcon);
|
|
302
299
|
if (type === 'lucide') {
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
container.
|
|
306
|
-
|
|
307
|
-
// Convert to PascalCase (handles kebab-case Lucide ids like "file-text")
|
|
308
|
-
const pascalCaseName = lucideNameToPascalCase(name);
|
|
309
|
-
if (lucideIcons[pascalCaseName]) {
|
|
310
|
-
// Use the documented pattern from Lucide docs
|
|
311
|
-
const svgElement = createElement(lucideIcons[pascalCaseName], {
|
|
312
|
-
color: this.color,
|
|
313
|
-
size: this.iconSize,
|
|
314
|
-
strokeWidth: this.strokeWidth
|
|
315
|
-
});
|
|
316
|
-
if (svgElement) {
|
|
317
|
-
// Directly append the element
|
|
318
|
-
container.appendChild(svgElement);
|
|
319
|
-
return; // Exit early since we've added the element
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
// If we reach here, something went wrong
|
|
323
|
-
throw new Error(`Could not create element for ${pascalCaseName}`);
|
|
324
|
-
}
|
|
325
|
-
catch (error) {
|
|
326
|
-
console.error(`Error rendering Lucide icon:`, error);
|
|
327
|
-
// Fall back to the string-based approach
|
|
328
|
-
const iconHtml = this.renderLucideIcon(name);
|
|
329
|
-
if (iconHtml) {
|
|
330
|
-
container.innerHTML = iconHtml;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
300
|
+
const maskImage = this.createLucideMaskImage(name);
|
|
301
|
+
container.style.backgroundColor = this.color === 'currentColor' ? '' : this.color;
|
|
302
|
+
container.style.setProperty('mask-image', maskImage);
|
|
303
|
+
container.style.setProperty('-webkit-mask-image', maskImage);
|
|
333
304
|
}
|
|
334
305
|
else {
|
|
335
|
-
container
|
|
306
|
+
this.clearIconContainer(container);
|
|
336
307
|
console.error(`dees-icon: fa:${name} is no longer supported. Use icon="lucide:${name}" or another Lucide icon.`);
|
|
337
308
|
}
|
|
338
309
|
}
|
|
339
310
|
catch (error) {
|
|
311
|
+
this.clearIconContainer(container);
|
|
340
312
|
console.error(`Error updating icon ${effectiveIcon}:`, error);
|
|
341
313
|
}
|
|
342
314
|
}
|
|
@@ -356,4 +328,4 @@ let DeesIcon = (() => {
|
|
|
356
328
|
return DeesIcon = _classThis;
|
|
357
329
|
})();
|
|
358
330
|
export { DeesIcon };
|
|
359
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
331
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1pY29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtdXRpbGl0eS9kZWVzLWljb24vZGVlcy1pY29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLElBQUksRUFDSixRQUFRLEVBQ1IsYUFBYSxFQUNiLFVBQVUsRUFDVixHQUFHLEdBRUosTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEtBQUssUUFBUSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvQyxxREFBcUQ7QUFDckQsT0FBTyxLQUFLLFdBQVcsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV2Qzs7Ozs7O0dBTUc7QUFDSCxTQUFTLHNCQUFzQixDQUFDLElBQVk7SUFDMUMsT0FBTyxJQUFJO1NBQ1IsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNiLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDZixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZCxDQUFDO0FBT0QsK0VBQStFO0FBQy9FLCtFQUErRTtBQUMvRSxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztBQUVoRCwwREFBMEQ7QUFDMUQsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQzNCLFNBQVMsY0FBYztJ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
|
|
@@ -5,6 +5,8 @@ export interface IThemeColors {
|
|
|
5
5
|
bgTertiary: string;
|
|
6
6
|
/** Recessed shell/window base; content surfaces sit elevated above it (both themes). */
|
|
7
7
|
bgCanvas: string;
|
|
8
|
+
/** Opaque system-label base used when opacity must be composited at element level. */
|
|
9
|
+
labelBase?: string;
|
|
8
10
|
textPrimary: string;
|
|
9
11
|
textSecondary: string;
|
|
10
12
|
textMuted: string;
|
|
@@ -10,6 +10,7 @@ export const themeDefaults = {
|
|
|
10
10
|
bgSecondary: '#f2f2f7', // secondarySystemBackground / grouped
|
|
11
11
|
bgTertiary: '#e9e9eb', // tertiary recess (headers, hovers)
|
|
12
12
|
bgCanvas: '#f2f2f7', // recessed shell base (systemGroupedBackground)
|
|
13
|
+
labelBase: '#3c3c43', // opaque system label base
|
|
13
14
|
textPrimary: '#1d1d1f', // near-black label
|
|
14
15
|
textSecondary: 'rgba(60, 60, 67, 0.60)', // secondaryLabel
|
|
15
16
|
textMuted: 'rgba(60, 60, 67, 0.30)', // tertiaryLabel
|
|
@@ -42,6 +43,7 @@ export const themeDefaults = {
|
|
|
42
43
|
bgSecondary: '#1c1c1e', // secondarySystemBackground / systemGray6 — cards, panels
|
|
43
44
|
bgTertiary: '#2c2c2e', // tertiarySystemBackground / systemGray5 — headers, hovers
|
|
44
45
|
bgCanvas: '#000000', // recessed shell base (true black, matches systemBackground)
|
|
46
|
+
labelBase: '#ebebf5', // opaque system label base
|
|
45
47
|
textPrimary: '#f5f5f7', // near-white label
|
|
46
48
|
textSecondary: 'rgba(235, 235, 245, 0.60)', // secondaryLabel
|
|
47
49
|
textMuted: 'rgba(235, 235, 245, 0.30)', // tertiaryLabel
|
|
@@ -295,6 +297,10 @@ export const themeDefaultStyles = css `
|
|
|
295
297
|
/* ========================================
|
|
296
298
|
* Colors — Text / Label tiers
|
|
297
299
|
* ======================================== */
|
|
300
|
+
--dees-color-label-base: ${cssManager.bdTheme(l.labelBase || '#3c3c43', d.labelBase || '#ebebf5')};
|
|
301
|
+
--dees-label-opacity-secondary: 0.6;
|
|
302
|
+
--dees-label-opacity-muted: 0.3;
|
|
303
|
+
--dees-label-opacity-quaternary: 0.18;
|
|
298
304
|
--dees-color-text-primary: ${cssManager.bdTheme(l.textPrimary, d.textPrimary)};
|
|
299
305
|
--dees-color-text-secondary: ${cssManager.bdTheme(l.textSecondary, d.textSecondary)};
|
|
300
306
|
--dees-color-text-muted: ${cssManager.bdTheme(l.textMuted, d.textMuted)};
|
|
@@ -443,4 +449,4 @@ export const themeDefaultStyles = css `
|
|
|
443
449
|
background-color: var(--dees-color-selection);
|
|
444
450
|
}
|
|
445
451
|
`;
|
|
446
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDB0aGVtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMHRoZW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBa0IsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUF3TnRFLCtDQUErQztBQUMvQywyQ0FBMkM7QUFDM0MsK0NBQStDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBVztJQUNuQyxNQUFNLEVBQUU7UUFDTixLQUFLLEVBQUU7WUFDTCxTQUFTLEVBQUUsU0FBUyxFQUF1QixtQkFBbUI7WUFDOUQsV0FBVyxFQUFFLFNBQVMsRUFBcUIsc0NBQXNDO1lBQ2pGLFVBQVUsRUFBRSxTQUFTLEVBQXNCLG9DQUFvQztZQUMvRSxRQUFRLEVBQUUsU0FBUyxFQUF3QixnREFBZ0Q7WUFDM0YsV0FBVyxFQUFFLFNBQVMsRUFBcUIsbUJBQW1CO1lBQzlELGFBQWEsRUFBRSx3QkFBd0IsRUFBSSxpQkFBaUI7WUFDNUQsU0FBUyxFQUFFLHdCQUF3QixFQUFRLGdCQUFnQjtZQUMzRCxlQUFlLEVBQUUsd0JBQXdCLEVBQUUseUNBQXlDO1lBQ3BGLFFBQVEsRUFBRSxTQUFTLEVBQXdCLGNBQWM7WUFDekQsV0FBVyxFQUFFLFNBQVMsRUFBcUIsb0NBQW9DO1lBQy9FLFdBQVcsRUFBRSxTQUFTLEVBQXFCLHFDQUFxQztZQUNoRixTQUFTLEVBQUUsU0FBUyxFQUF1QixrQ0FBa0M7WUFDN0UsYUFBYSxFQUFFLHdCQUF3QixFQUFJLFlBQVk7WUFDdkQsWUFBWSxFQUFFLHdCQUF3QjtZQUN0QyxZQUFZLEVBQUUsd0JBQXdCLEVBQUssc0JBQXNCO1lBQ2pFLFdBQVcsRUFBRSwyQkFBMkIsRUFBRyxhQUFhO1lBQ3hELGFBQWEsRUFBRSwyQkFBMkI7WUFDMUMs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
|
|
452
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDB0aGVtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMHRoZW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBa0IsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUEwTnRFLCtDQUErQztBQUMvQywyQ0FBMkM7QUFDM0MsK0NBQStDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBVztJQUNuQyxNQUFNLEVBQUU7UUFDTixLQUFLLEVBQUU7WUFDTCxTQUFTLEVBQUUsU0FBUyxFQUF1QixtQkFBbUI7WUFDOUQsV0FBVyxFQUFFLFNBQVMsRUFBcUIsc0NBQXNDO1lBQ2pGLFVBQVUsRUFBRSxTQUFTLEVBQXNCLG9DQUFvQztZQUMvRSxRQUFRLEVBQUUsU0FBUyxFQUF3QixnREFBZ0Q7WUFDM0YsU0FBUyxFQUFFLFNBQVMsRUFBdUIsMkJBQTJCO1lBQ3RFLFdBQVcsRUFBRSxTQUFTLEVBQXFCLG1CQUFtQjtZQUM5RCxhQUFhLEVBQUUsd0JBQXdCLEVBQUksaUJBQWlCO1lBQzVELFNBQVMsRUFBRSx3QkFBd0IsRUFBUSxnQkFBZ0I7WUFDM0QsZUFBZSxFQUFFLHdCQUF3QixFQUFFLHlDQUF5QztZQUNwRixRQUFRLEVBQUUsU0FBUyxFQUF3QixjQUFjO1lBQ3pELFdBQVcsRUFBRSxTQUFTLEVBQXFCLG9DQUFvQztZQUMvRSxXQUFXLEVBQUUsU0FBUyxFQUFxQixxQ0FBcUM7WUFDaEYsU0FBUyxFQUFFLFNBQVMsRUFBdUIsa0NBQWtDO1lBQzdFLGFBQWEsRUFBRSx3QkFBd0IsRUFBSSxZQUFZO1lBQ3ZELFlBQVksRUFBRSx3QkFBd0I7WUFDdEMsWUFBWSxFQUFFLHdCQUF3QixFQUFLLHNCQUFzQjtZQUNqRSxXQUFXLEVBQUUsMkJBQTJCLEVBQUcs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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@design.estate/dees-catalog",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.98.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
|
|
6
6
|
"main": "dist_ts_web/index.js",
|
|
@@ -35,11 +35,11 @@
|
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@design.estate/dees-wcctools": "^3.9.2",
|
|
37
37
|
"@git.zone/tsbuild": "^4.4.2",
|
|
38
|
-
"@git.zone/tsbundle": "^2.11.
|
|
38
|
+
"@git.zone/tsbundle": "^2.11.3",
|
|
39
39
|
"@git.zone/tstest": "^3.6.6",
|
|
40
40
|
"@git.zone/tswatch": "^3.3.5",
|
|
41
41
|
"@push.rocks/projectinfo": "^5.1.0",
|
|
42
|
-
"@types/node": "^26.1.
|
|
42
|
+
"@types/node": "^26.1.1"
|
|
43
43
|
},
|
|
44
44
|
"files": [
|
|
45
45
|
"ts/**/*",
|
package/readme.hints.md
CHANGED
|
@@ -1114,3 +1114,38 @@ Some components appear in multiple groups via `demoGroups = ['Primary', 'Seconda
|
|
|
1114
1114
|
- Tool cards resolve their kind through `DeesHarnessToolRegistry.default` (open set + `kind` override), so consumers register custom tools without forking components; `server__tool` names auto-classify as MCP with annotation badges.
|
|
1115
1115
|
- The syntax palette moved to the shared `ts_web/elements/00syntax.ts` (`syntaxPaletteStyles` + `syntaxScopeStyles`); codebox and harness markdown consume it — don't re-declare `--syntax-*`/hljs scope colors per component.
|
|
1116
1116
|
- `dees-dataview-codebox` diff mode: set `codeBefore` (against `codeToDisplay`) or a pre-computed `unifiedDiff` patch; `diffView` = `'inline' | 'split'`. Engine lives dependency-free in `codebox.diff.ts` (LCS + intraline segments + context folding + `toUnifiedDiff`). Tool cards use it for file-write bodies via the `diffBlock` render helper.
|
|
1117
|
+
|
|
1118
|
+
## dees-simple-login multi-method rework (2026-07)
|
|
1119
|
+
|
|
1120
|
+
- **The catalog owns no WebAuthn protocol.** A passkey ceremony needs server-issued options and server-side verification, so `@simplewebauthn/browser` is deliberately *not* a dependency. Two mutually exclusive plug-in modes: no handler set → the component dispatches `passkey-login` / `passkey-register` / `provider-login` and stops; handler set (`passkeyLoginHandler` etc.) → the component awaits it, owns the busy state, turns a rejection into that method's error, and does **not** dispatch the request event. Suppressing the event in handler mode is what makes a double-started ceremony impossible — two concurrent `navigator.credentials.get()` calls reject each other.
|
|
1121
|
+
- **`login` is the one exception**: it is a notification, not a request, and always fires with dees-form's detail verbatim (`{ data: { username, password } }`) because cloudly, dcrouter and gitops depend on it.
|
|
1122
|
+
- **Configuration decides availability, `methodOrder` only reorders.** `passkey` (false), `providers` ([]), `password` (true) decide *whether* a method renders; `methodOrder` decides the sequence and appends anything it omits, so an incomplete order can never silently hide a configured method. Default therefore resolves to `['password']`, so the zero-configuration card is the same username/password form with the same API surface. It is **not** pixel-identical to the pre-rework component: three deliberate visual changes ship with it — the submit button is now card-width (the pre-existing `dees-tile dees-form-submit { width: 100% }` never worked because the host is `inline-block`), `.subheader` moved from `--dees-color-text-muted` (0.30 alpha, ~2:1) to `--dees-color-text-secondary`, and `.loginContainer` gained `box-sizing`, `padding` and `overflow-y: auto` so a tall multi-method card scrolls instead of clipping.
|
|
1123
|
+
- **Shadow-DOM reach-in is a real contract.** All three consumers do `shadowRoot.querySelector('dees-form')` then `form.setStatus()` / `form.reset()`, and cloudly's `switchToLoginContent()` hand-reverses the inline styles `switchToSlottedContent()` sets. So: `.loginContainer` / `.login` / `.slotContainer` must keep their names and inline-style choreography, the password `dees-form` must stay the first and only form in shadow order, and the `formData` listener is bound declaratively (`@formData`) because the form is now conditionally rendered and a one-shot `firstUpdated` hook-up would silently stop firing.
|
|
1124
|
+
- **Do not bind `.text` on the credentials `dees-form-submit`.** `dees-form.setStatus(state, text)` writes that property imperatively, and `dees-form.reset()` ends with `setStatus('normal', 'Submit')`. A Lit property binding would clobber a consumer's status text on the next render, so the label is slotted instead — which also means `labels.passwordSubmit` is read at first render only.
|
|
1125
|
+
- The credentials form is wrapped in `dees-tile` **only when password is the sole method**. Once the column holds other methods the column is the card, and a nested tile would inset the fields 24px against full-width buttons and read as a stray box.
|
|
1126
|
+
- Additive primitive gaps closed on the way: `dees-button.fullWidth` (`full-width` attribute — the host being `inline-block` meant `width: 100%` never stretched the `inline-flex` face; the opt-in path also adds `min-width: 0` + label ellipsis), the same forwarded on `dees-form-submit`, `dees-input-text.autocomplete` (needed for `username webauthn` conditional mediation), and `--dees-spinner-color` on `dees-spinner` (it hard-coded `--dees-color-text-primary`, painting a near-black arc on an accent button face in bright theme).
|
|
1127
|
+
- **Never mark a pending `dees-button` disabled** — `.button.disabled { opacity: 0.5 }` washes out the spinner. Guard re-entry in the handler instead; only *sibling* buttons get `disabled`.
|
|
1128
|
+
- Known pre-existing gaps this rework did **not** change: `--dees-color-text-secondary` is 3.44:1 in bright theme (sub-AA for 13px copy); `--dees-color-accent-primary` with white text is 3.65–4.02:1; `dees-tile`'s 16px heading padding vs the 24px content padding this component sets leaves an 8px misalignment; `dees-spinner`'s success/error faces still hard-code `--dees-color-text-primary`.
|
|
1129
|
+
|
|
1130
|
+
## dees-button keyboard operability (2026-07)
|
|
1131
|
+
|
|
1132
|
+
`dees-button` renders its face as a `<div class="button">`, so it had no keyboard affordance at all — nothing built on it (including every action in `dees-simple-login`) was reachable by Tab. Fixed in the primitive rather than per consumer.
|
|
1133
|
+
|
|
1134
|
+
- The face carries `role="button"`, `tabindex` (`0`, or `-1` when `disabled`), `aria-disabled`, and `aria-busy` while `status === 'pending'`. A pending button stays focusable on purpose — pulling focus mid-ceremony strands the user.
|
|
1135
|
+
- **Enter activates on keydown, Space on keyup**, matching native buttons. Space keydown is swallowed so the page cannot scroll under a focused button. Verified with real CDP key events: Space activates without moving a scrollable ancestor's `scrollTop`.
|
|
1136
|
+
- **Keyboard activation goes through a real `click()` on the face, not a direct `clicked` dispatch.** `dees-workspace-diff-editor` (5 call sites) and `profilepicture.modal` (2) bind plain `@click` on `dees-button` rather than `@clicked`; only a real click drives both. `pointer-events: none` does not block a programmatic `click()`, so inertness is enforced in `activateFromKeyboard()` — refusing `disabled` *and* any non-`normal` status, because the status faces already set `pointer-events: none` for the mouse.
|
|
1137
|
+
- `DeesButton.focus()` / `.blur()` forward to the face; without that, `host.focus()` is a silent no-op.
|
|
1138
|
+
- **`dees-form-submit.focus()` is NOT a focus method — it submits.** `dees-form.addBehaviours()` calls `getSubmitButton()?.focus()` to implement "Enter in the last field submits the form". An earlier attempt to make it forward focus properly broke that; it must stay as-is. Keyboard focus reaches the submit through the inner `dees-button` face instead. Pinned by a test.
|
|
1139
|
+
- The `:focus-visible` ring uses the **opaque** `--dees-color-accent-primary`, not `--dees-color-focus-ring`. That shared token is a 0.45/0.55 alpha and composites to 1.85:1 (bright) / 2.31:1 (dark) against the surface behind the button — under the 3:1 WCAG 2.2 SC 1.4.11 wants, and a navy hairline on a dark canvas. Raising the alpha on the token itself would fix every other control too and is the wider change.
|
|
1140
|
+
### Focus containment across the login/app crossfade
|
|
1141
|
+
|
|
1142
|
+
Both halves of `dees-simple-login` live in the DOM permanently, stacked and cross-faded with `opacity` + `pointer-events`. That was sufficient only while nothing inside them could hold focus. Once `dees-button` faces became focusable, `pointer-events: none` stopped containing anything — it does not remove a tab stop, and keyboard activation deliberately bypasses it — so the hidden half became reachable in both directions: Tab out of the password form into the invisible app shell, or Tab back into the invisible login card after signing in and start a passkey ceremony there.
|
|
1143
|
+
|
|
1144
|
+
`inert` is the only thing that removes a hidden-but-rendered subtree from focus and the accessibility tree. It is derived from each container's effective `pointer-events` via a `MutationObserver` on the inline styles, **not** from an internal flag, because consumers reverse the transition by hand: cloudly's `switchToLoginContent()` writes `.login` / `.loginContainer` / `.slotContainer` inline styles directly and knows nothing about `inert`. Keying off a flag it cannot reset would leave its login card permanently inert after a session expiry. Observe only `attributeFilter: ['style']` — `inert` reflects to its own attribute and would otherwise re-trigger the observer.
|
|
1145
|
+
|
|
1146
|
+
### Open follow-ups from this change (separate decisions, deliberately not done here)
|
|
1147
|
+
|
|
1148
|
+
- **`--dees-color-focus-ring` is still sub-3:1 for every control other than `dees-button`.** Inputs, dropdowns and the rest still use the shared token at 0.45/0.55 alpha, which composites to 1.85:1 (bright) / 2.31:1 (dark). `dees-button` was fixed locally by switching its ring to the opaque accent, so the catalog is now *inconsistent*: one control has a compliant focus indicator and the others do not. Raising the token's alpha is the wider fix and needs its own review across every control that reads it.
|
|
1149
|
+
- **`dees-button-exit` is unaudited and very likely has the same keyboard defect.** It renders a decorative X glyph (`.maincontainer` + two line divs) with no click handler, no `role` and no `tabindex`; consumers wire clicks on the host. It is not a `dees-button` consumer, so the keyboard fix does not reach it.
|
|
1150
|
+
|
|
1151
|
+
- Consumer audit: 16 non-demo components use `dees-button`. None wrap it in a `role="menu"/"listbox"/"option"/"tab"` container, none attach keyboard handlers to the button or an ancestor of it (`dees-harness-composer` and `dees-harness-question-card` bind keydown on their own `textarea`/`input`), `dees-modal` has no focus trap, `dees-button-group` only slots, and no component binds both `@click` and `@clicked` on the same button — so no double activation and no nested-role reporting change.
|
package/readme.md
CHANGED
|
@@ -90,10 +90,15 @@ button.text = 'Click me';
|
|
|
90
90
|
shape="pill" // Options: squircle (default rounded rect), pill (capsule for standalone actions)
|
|
91
91
|
status="pending" // Options: normal, pending, success, error
|
|
92
92
|
disabled={false} // Optional: disables the button
|
|
93
|
+
full-width // Optional: stretches the button face to the host width
|
|
93
94
|
@click=${handleClick}
|
|
94
95
|
>Click me</dees-button>
|
|
95
96
|
```
|
|
96
97
|
|
|
98
|
+
The button is keyboard operable: its face carries `role="button"` and `tabindex`, Enter and
|
|
99
|
+
Space activate it (dispatching a real `click`, so both `@click` and `@clicked` fire), a
|
|
100
|
+
disabled button leaves the tab order, and keyboard focus draws a `:focus-visible` ring.
|
|
101
|
+
|
|
97
102
|
#### `DeesBadge`
|
|
98
103
|
Display status indicators or counts with customizable styles.
|
|
99
104
|
|
|
@@ -136,6 +141,11 @@ Display Lucide icons. Legacy `fa:` and `iconFA` inputs are unsupported and log a
|
|
|
136
141
|
// <dees-icon iconFA="check"></dees-icon>
|
|
137
142
|
```
|
|
138
143
|
|
|
144
|
+
`dees-icon` follows normal CSS text-color inheritance, including translucent
|
|
145
|
+
`rgba(...)` colors, and composites the complete Lucide shape as one layer.
|
|
146
|
+
Use native CSS `color` and `opacity`; consumers do not need icon-specific
|
|
147
|
+
opacity variables or stroke-color workarounds.
|
|
148
|
+
|
|
139
149
|
#### `DeesLabel`
|
|
140
150
|
Text label component with optional required indicator and info tooltip. Used internally by all input components.
|
|
141
151
|
|
|
@@ -152,12 +162,22 @@ Loading indicator with customizable appearance.
|
|
|
152
162
|
|
|
153
163
|
```typescript
|
|
154
164
|
<dees-spinner
|
|
155
|
-
size
|
|
156
|
-
|
|
157
|
-
|
|
165
|
+
.size=${20} // Optional: diameter in pixels (default 20)
|
|
166
|
+
.status=${'normal'} // Optional: 'normal' | 'pending' | 'success' | 'error'
|
|
167
|
+
.bnw=${true} // Optional: black-and-white treatment
|
|
158
168
|
></dees-spinner>
|
|
159
169
|
```
|
|
160
170
|
|
|
171
|
+
The arc colour follows the `--dees-spinner-color` custom property, falling back to
|
|
172
|
+
`--dees-color-text-primary`. Set it on an ancestor when the spinner sits on a coloured
|
|
173
|
+
surface — an accent button face, for example — so the arc matches that surface's foreground:
|
|
174
|
+
|
|
175
|
+
```css
|
|
176
|
+
dees-button {
|
|
177
|
+
--dees-spinner-color: var(--dees-color-on-accent);
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
161
181
|
#### `DeesToast`
|
|
162
182
|
Notification toast messages with various styles, positions, and auto-dismiss functionality.
|
|
163
183
|
|
|
@@ -320,6 +340,7 @@ Text input field with validation, info tooltips, description text, and context m
|
|
|
320
340
|
value="initial@value.com" // Initial value
|
|
321
341
|
required // Makes the field required
|
|
322
342
|
disabled // Disables the input
|
|
343
|
+
.autocomplete=${'username'} // Autofill hint; unset renders no autocomplete attribute
|
|
323
344
|
.infoText=${'Hover icon tooltip text'} // Shows ⓘ icon on label with hover tooltip
|
|
324
345
|
.description=${'Permanent help text below the input'} // Small text below the input
|
|
325
346
|
.validationFunction=${(value) => { // Auto-validates on every keystroke
|
|
@@ -706,9 +727,14 @@ Submit button component specifically designed for `DeesForm`.
|
|
|
706
727
|
<dees-form-submit
|
|
707
728
|
disabled // Optional: disable submit button
|
|
708
729
|
status="normal" // Options: normal, pending, success, error
|
|
730
|
+
full-width // Optional: stretches the button face to the host width
|
|
709
731
|
>Submit Form</dees-form-submit>
|
|
710
732
|
```
|
|
711
733
|
|
|
734
|
+
Note that `DeesFormSubmit.focus()` submits rather than focuses — `DeesForm` calls it to
|
|
735
|
+
implement "Enter in the last field submits". Keyboard focus reaches the submit through the
|
|
736
|
+
inner `DeesButton` face.
|
|
737
|
+
|
|
712
738
|
---
|
|
713
739
|
|
|
714
740
|
### App Shell (Layout) Components
|
|
@@ -1843,21 +1869,69 @@ Simple application dashboard component for quick prototyping.
|
|
|
1843
1869
|
```
|
|
1844
1870
|
|
|
1845
1871
|
#### `DeesSimpleLogin`
|
|
1846
|
-
|
|
1872
|
+
|
|
1873
|
+
Login surface for an application shell. Offers up to three authentication methods in one
|
|
1874
|
+
card — passkeys, identity providers ("sign in with …") and a username/password form — and
|
|
1875
|
+
renders the authenticated app through its default slot.
|
|
1876
|
+
|
|
1877
|
+
A method is offered only when it is **configured**, so the zero-configuration default is the
|
|
1878
|
+
password form alone:
|
|
1879
|
+
|
|
1880
|
+
```typescript
|
|
1881
|
+
<dees-simple-login name="My Application" @login=${handleLogin}>
|
|
1882
|
+
<!-- authenticated content -->
|
|
1883
|
+
</dees-simple-login>
|
|
1884
|
+
```
|
|
1885
|
+
|
|
1886
|
+
`login` fires with `detail.data.{username,password}`; call `switchToSlottedContent()` once
|
|
1887
|
+
credentials check out.
|
|
1888
|
+
|
|
1889
|
+
Turn on more methods and they render in the canonical order passkey → provider → password:
|
|
1847
1890
|
|
|
1848
1891
|
```typescript
|
|
1849
1892
|
<dees-simple-login
|
|
1850
|
-
.
|
|
1851
|
-
.
|
|
1852
|
-
.
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1893
|
+
name="login.idp.global"
|
|
1894
|
+
.passkey=${true}
|
|
1895
|
+
.providers=${[
|
|
1896
|
+
{ id: 'idp-global', label: 'idp.global', icon: 'lucide:shieldCheck' },
|
|
1897
|
+
{ id: 'workspace', label: 'Workspace SSO', icon: 'lucide:building2' },
|
|
1898
|
+
]}
|
|
1899
|
+
.passkeyLoginHandler=${async (context) => runWebAuthnCeremony(context)}
|
|
1900
|
+
.providerLoginHandler=${async (context) => redirectTo(context.providerId)}
|
|
1856
1901
|
@login=${handleLogin}
|
|
1857
|
-
@forgot-password=${handleForgotPassword}
|
|
1858
1902
|
></dees-simple-login>
|
|
1859
1903
|
```
|
|
1860
1904
|
|
|
1905
|
+
**Configuration** — `passkey` (default `false`), `providers` (default `[]`), `password`
|
|
1906
|
+
(default `true`), `passkeyIntents` (`['authenticate']`, add `'register'` to offer
|
|
1907
|
+
enrollment), `methodOrder`, `labels`, `passkeyAvailable` (override capability detection),
|
|
1908
|
+
`passkeyAutofill` (WebAuthn conditional mediation — inert unless `passkeyLoginHandler` is set,
|
|
1909
|
+
the password method renders a username field, and the browser reports conditional mediation).
|
|
1910
|
+
|
|
1911
|
+
**Who owns the WebAuthn ceremony** — not this component. A ceremony needs server-issued
|
|
1912
|
+
options and server-side verification, so the catalog carries no WebAuthn dependency. Plug
|
|
1913
|
+
one in either way, never both for the same interaction:
|
|
1914
|
+
|
|
1915
|
+
- **Event mode** (no handler set) — the component dispatches `passkey-login`,
|
|
1916
|
+
`passkey-register` or `provider-login` and stops. Report progress back with `setBusy()` /
|
|
1917
|
+
`reportError()`.
|
|
1918
|
+
- **Handler mode** (`passkeyLoginHandler`, `passkeyRegisterHandler`, `providerLoginHandler`,
|
|
1919
|
+
`passwordLoginHandler`) — the component awaits the handler, owns that method's busy state
|
|
1920
|
+
and turns a rejection into that method's error message. The request event is not
|
|
1921
|
+
dispatched, so a ceremony can never start twice.
|
|
1922
|
+
|
|
1923
|
+
`login` is a notification rather than a request and always fires, even in handler mode.
|
|
1924
|
+
|
|
1925
|
+
Busy and error state is independent per method, per passkey intent and per provider, so a
|
|
1926
|
+
failed passkey attempt never blanks the password form. `reportError(target, message)`,
|
|
1927
|
+
`setBusy(target, busy)`, `isBusy(target)` and `getError(target)` each take either a
|
|
1928
|
+
`TDeesLoginMethod` or an `IDeesLoginTarget` (`{ method, intent?, providerId? }`).
|
|
1929
|
+
`clearError(target?)` takes an optional target and clears every error when called without
|
|
1930
|
+
one; `reset()` takes no arguments and clears all busy and error state plus the password form.
|
|
1931
|
+
|
|
1932
|
+
Provider icons are always consumer-supplied Lucide names — the catalog ships no third-party
|
|
1933
|
+
brand assets.
|
|
1934
|
+
|
|
1861
1935
|
---
|
|
1862
1936
|
|
|
1863
1937
|
### Shopping Components
|
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@design.estate/dees-catalog',
|
|
6
|
-
version: '3.
|
|
6
|
+
version: '3.98.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
|
}
|