@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.
Files changed (37) hide show
  1. package/dist_bundle/bundle.js +4701 -3485
  2. package/dist_ts_web/00_commitinfo_data.js +1 -1
  3. package/dist_ts_web/elements/00group-button/dees-button/dees-button.d.ts +35 -0
  4. package/dist_ts_web/elements/00group-button/dees-button/dees-button.js +128 -5
  5. package/dist_ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.js +5 -6
  6. package/dist_ts_web/elements/00group-dataview/dees-table/dees-table.d.ts +1 -0
  7. package/dist_ts_web/elements/00group-dataview/dees-table/dees-table.js +21 -11
  8. package/dist_ts_web/elements/00group-feedback/dees-spinner/dees-spinner.js +12 -3
  9. package/dist_ts_web/elements/00group-form/dees-form-submit/dees-form-submit.d.ts +9 -0
  10. package/dist_ts_web/elements/00group-form/dees-form-submit/dees-form-submit.js +25 -2
  11. package/dist_ts_web/elements/00group-input/dees-input-multitoggle/dees-input-multitoggle.js +20 -4
  12. package/dist_ts_web/elements/00group-input/dees-input-text/dees-input-text.d.ts +15 -0
  13. package/dist_ts_web/elements/00group-input/dees-input-text/dees-input-text.js +36 -2
  14. package/dist_ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.js +2 -1
  15. package/dist_ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.d.ts +246 -0
  16. package/dist_ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.demo.js +439 -21
  17. package/dist_ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.js +857 -23
  18. package/dist_ts_web/elements/00group-utility/dees-icon/dees-icon.d.ts +2 -1
  19. package/dist_ts_web/elements/00group-utility/dees-icon/dees-icon.js +52 -80
  20. package/dist_ts_web/elements/00theme.d.ts +2 -0
  21. package/dist_ts_web/elements/00theme.js +7 -1
  22. package/package.json +3 -3
  23. package/readme.hints.md +35 -0
  24. package/readme.md +85 -11
  25. package/ts_web/00_commitinfo_data.ts +1 -1
  26. package/ts_web/elements/00group-button/dees-button/dees-button.ts +128 -2
  27. package/ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.ts +5 -6
  28. package/ts_web/elements/00group-dataview/dees-table/dees-table.ts +43 -27
  29. package/ts_web/elements/00group-feedback/dees-spinner/dees-spinner.ts +11 -2
  30. package/ts_web/elements/00group-form/dees-form-submit/dees-form-submit.ts +18 -0
  31. package/ts_web/elements/00group-input/dees-input-multitoggle/dees-input-multitoggle.ts +19 -3
  32. package/ts_web/elements/00group-input/dees-input-text/dees-input-text.ts +29 -0
  33. package/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.ts +1 -0
  34. package/ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.demo.ts +418 -19
  35. package/ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.ts +969 -20
  36. package/ts_web/elements/00group-utility/dees-icon/dees-icon.ts +55 -91
  37. 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 renderLucideIcon;
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
- // Use a global static cache for all icons to reduce rendering
57
- const iconCache = new Map();
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 (iconCache.size > MAX_CACHE_SIZE) {
62
+ if (iconMaskCache.size > MAX_CACHE_SIZE) {
62
63
  // Remove oldest entries (first 20% of items)
63
- const keysToDelete = Array.from(iconCache.keys()).slice(0, MAX_CACHE_SIZE / 5);
64
- keysToDelete.forEach(key => iconCache.delete(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
- renderLucideIcon(iconName) {
195
- // Create a cache key based on all visual properties
196
- const cacheKey = `lucide:${iconName}:${this.iconSize}:${this.color}:${this.strokeWidth}`;
197
- // Check if we already have this icon in the cache
198
- if (iconCache.has(cacheKey)) {
199
- return iconCache.get(cacheKey) || '';
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
- try {
202
- // Get the Pascal case icon name (Menu instead of menu, FileText instead of file-text)
203
- const pascalCaseName = lucideNameToPascalCase(iconName);
204
- // Check if the icon exists in lucideIcons
205
- if (!lucideIcons[pascalCaseName]) {
206
- console.warn(`Lucide icon '${pascalCaseName}' not found in lucideIcons object`);
207
- return '';
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
- /* Improve rendering performance */
248
- #iconContainer svg {
249
- display: block;
250
- height: 100%;
251
- width: 100%;
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.innerHTML = '';
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
- // For Lucide, use direct DOM manipulation as shown in the docs
304
- // This approach avoids HTML string issues
305
- container.innerHTML = ''; // Clear container
306
- try {
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.innerHTML = '';
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1pY29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtdXRpbGl0eS9kZWVzLWljb24vZGVlcy1pY29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLElBQUksRUFDSixRQUFRLEVBQ1IsYUFBYSxFQUNiLFVBQVUsRUFDVixHQUFHLEdBRUosTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEtBQUssUUFBUSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvQyxxREFBcUQ7QUFDckQsT0FBTyxLQUFLLFdBQVcsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV2Qzs7Ozs7O0dBTUc7QUFDSCxTQUFTLHNCQUFzQixDQUFDLElBQVk7SUFDMUMsT0FBTyxJQUFJO1NBQ1IsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNiLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDZixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZCxDQUFDO0FBT0QsOERBQThEO0FBQzlELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0FBRTVDLDBEQUEwRDtBQUMxRCxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFDM0IsU0FBUyxjQUFjO0lBQ3JCLElBQUksU0FB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
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.97.0",
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.0",
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.0"
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="medium" // Options: small, medium, large
156
- type="primary" // Options: primary, secondary, light, dark
157
- overlay // Optional: adds a full-screen overlay
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
- Simple login form component with validation and customization.
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
- .appName=${'My Application'}
1851
- .logo=${'./assets/logo.png'}
1852
- .backgroundImage=${'./assets/background.jpg'}
1853
- .fields=${['username', 'password']}
1854
- showForgotPassword
1855
- showRememberMe
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.97.0',
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
  }