diff --git a/.claude/scheduled_tasks.lock b/.claude/scheduled_tasks.lock deleted file mode 100644 index 5b1d84e..0000000 --- a/.claude/scheduled_tasks.lock +++ /dev/null @@ -1 +0,0 @@ -{"sessionId":"4b0f0a7f-f187-40a3-a38b-cb9a7e877011","pid":3110692,"acquiredAt":1775914414249} \ No newline at end of file diff --git a/changelog.md b/changelog.md index b6fb2b1..c0a8ca3 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## 2026-04-12 - 3.76.0 - feat(input) +separate label info tooltips from description text across input components + +- adds a dedicated infoText property for dees-label tooltips while keeping description available for helper text rendered below inputs +- introduces a shared renderDescription() helper in the input base component and updates multiple input components to use the unified description styling +- updates demos and consuming components to migrate tooltip content from description to infoText where appropriate + ## 2026-04-12 - 3.75.0 - feat(dees-tile) add configurable overscroll handling to tile content and use it in modals diff --git a/ts_web/00_commitinfo_data.ts b/ts_web/00_commitinfo_data.ts index f60bfc3..82ffa39 100644 --- a/ts_web/00_commitinfo_data.ts +++ b/ts_web/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@design.estate/dees-catalog', - version: '3.75.0', + version: '3.76.0', description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.' } diff --git a/ts_web/elements/00group-dataview/dees-table/dees-table.ts b/ts_web/elements/00group-dataview/dees-table/dees-table.ts index ea12e52..453bdb2 100644 --- a/ts_web/elements/00group-dataview/dees-table/dees-table.ts +++ b/ts_web/elements/00group-dataview/dees-table/dees-table.ts @@ -610,26 +610,26 @@ export class DeesTable extends DeesElement { diff --git a/ts_web/elements/00group-form/dees-form/dees-form.demo.ts b/ts_web/elements/00group-form/dees-form/dees-form.demo.ts index f4257c8..fdf8eb9 100644 --- a/ts_web/elements/00group-form/dees-form/dees-form.demo.ts +++ b/ts_web/elements/00group-form/dees-form/dees-form.demo.ts @@ -92,7 +92,7 @@ export const demoFunc = () => html` .required=${true} key="firstName" label="First Name" - .description=${'Your given name'} + .infoText=${'Your given name'} > html` .required=${true} key="email" label="Email Address" - .description=${'We will use this to contact you'} + .infoText=${'We will use this to contact you'} > html` key="password" label="Password" isPasswordBool - .description=${'Minimum 8 characters'} + .infoText=${'Minimum 8 characters'} > html` Submit Application diff --git a/ts_web/elements/00group-input/dees-input-base/dees-input-base.ts b/ts_web/elements/00group-input/dees-input-base/dees-input-base.ts index 8b8b72f..7c084c6 100644 --- a/ts_web/elements/00group-input/dees-input-base/dees-input-base.ts +++ b/ts_web/elements/00group-input/dees-input-base/dees-input-base.ts @@ -1,6 +1,7 @@ import { DeesElement, property, + html, css, type CSSResult, cssManager, @@ -42,6 +43,9 @@ export abstract class DeesInputBase extends DeesElement { @property({ type: Boolean }) accessor disabled: boolean = false; + @property({ type: String }) + accessor infoText!: string; + @property({ type: String }) accessor description!: string; @@ -90,6 +94,14 @@ export abstract class DeesInputBase extends DeesElement { :host([label-position="none"]) dees-label { display: none; } + + /* Description text below input */ + .descriptionText { + margin-top: 4px; + font-size: 12px; + line-height: 1.4; + color: ${cssManager.bdTheme('hsl(0 0% 45.1%)', 'hsl(0 0% 63.9%)')}; + } `, ]; } @@ -155,6 +167,14 @@ export abstract class DeesInputBase extends DeesElement { this.disabled = false; } + /** + * Renders the description text below the input. + * Call ${this.renderDescription()} at the end of your render template. + */ + public renderDescription() { + return this.description ? html`
${this.description}
` : ''; + } + /** * Abstract method that child classes must implement to get their value */ diff --git a/ts_web/elements/00group-input/dees-input-checkbox/dees-input-checkbox.ts b/ts_web/elements/00group-input/dees-input-checkbox/dees-input-checkbox.ts index 3c4f265..c3d2b57 100644 --- a/ts_web/elements/00group-input/dees-input-checkbox/dees-input-checkbox.ts +++ b/ts_web/elements/00group-input/dees-input-checkbox/dees-input-checkbox.ts @@ -147,12 +147,6 @@ export class DeesInputCheckbox extends DeesInputBase { color: ${cssManager.bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 90%)')}; } - /* Description */ - .description-text { - font-size: 12px; - color: ${cssManager.bdTheme('hsl(0 0% 45.1%)', 'hsl(0 0% 63.9%)')}; - line-height: 1.5; - } `, ]; @@ -185,7 +179,7 @@ export class DeesInputCheckbox extends DeesInputBase {
${this.label ? html`
${this.label}
` : ''} - ${this.description ? html`
${this.description}
` : ''} + ${this.renderDescription()}
diff --git a/ts_web/elements/00group-input/dees-input-code/dees-input-code.ts b/ts_web/elements/00group-input/dees-input-code/dees-input-code.ts index dcaeba8..7ca9f20 100644 --- a/ts_web/elements/00group-input/dees-input-code/dees-input-code.ts +++ b/ts_web/elements/00group-input/dees-input-code/dees-input-code.ts @@ -284,7 +284,7 @@ export class DeesInputCode extends DeesInputBase { }
- +
@@ -362,6 +362,7 @@ export class DeesInputCode extends DeesInputBase {
+ ${this.renderDescription()}
`; } diff --git a/ts_web/elements/00group-input/dees-input-datepicker/template.ts b/ts_web/elements/00group-input/dees-input-datepicker/template.ts index 83105fe..042910c 100644 --- a/ts_web/elements/00group-input/dees-input-datepicker/template.ts +++ b/ts_web/elements/00group-input/dees-input-datepicker/template.ts @@ -4,7 +4,7 @@ import type { DeesInputDatepicker } from './component.js'; export const renderDatepicker = (component: DeesInputDatepicker): TemplateResult => { return html`
- +
+ ${component.renderDescription()} `; diff --git a/ts_web/elements/00group-input/dees-input-dropdown/dees-input-dropdown.demo.ts b/ts_web/elements/00group-input/dees-input-dropdown/dees-input-dropdown.demo.ts index 941935c..6408aee 100644 --- a/ts_web/elements/00group-input/dees-input-dropdown/dees-input-dropdown.demo.ts +++ b/ts_web/elements/00group-input/dees-input-dropdown/dees-input-dropdown.demo.ts @@ -72,6 +72,7 @@ export const demoFunc = () => html`
{ public render(): TemplateResult { return html`
- +
{ ${this.selectedOption?.option || 'Select an option'}
+ ${this.renderDescription()}
`; } diff --git a/ts_web/elements/00group-input/dees-input-fileupload/component.ts b/ts_web/elements/00group-input/dees-input-fileupload/component.ts index 6a0732b..04ea9d3 100644 --- a/ts_web/elements/00group-input/dees-input-fileupload/component.ts +++ b/ts_web/elements/00group-input/dees-input-fileupload/component.ts @@ -73,7 +73,7 @@ export class DeesInputFileupload extends DeesInputBase {
{ ${this.validationMessage ? html`
${this.validationMessage}
` : html``} + ${this.renderDescription()}
`; } diff --git a/ts_web/elements/00group-input/dees-input-fileupload/demo.ts b/ts_web/elements/00group-input/dees-input-fileupload/demo.ts index 2426bd9..320dc81 100644 --- a/ts_web/elements/00group-input/dees-input-fileupload/demo.ts +++ b/ts_web/elements/00group-input/dees-input-fileupload/demo.ts @@ -59,14 +59,15 @@ export const demoFunc = () => html`
html`
@@ -100,7 +101,7 @@ export const demoFunc = () => html`
@@ -114,7 +115,7 @@ export const demoFunc = () => html` html` html` diff --git a/ts_web/elements/00group-input/dees-input-iban/dees-input-iban.demo.ts b/ts_web/elements/00group-input/dees-input-iban/dees-input-iban.demo.ts index eb6199b..23c496e 100644 --- a/ts_web/elements/00group-input/dees-input-iban/dees-input-iban.demo.ts +++ b/ts_web/elements/00group-input/dees-input-iban/dees-input-iban.demo.ts @@ -33,12 +33,13 @@ export const demoFunc = () => html`
@@ -64,13 +65,13 @@ export const demoFunc = () => html`
@@ -81,7 +82,7 @@ export const demoFunc = () => html` - + diff --git a/ts_web/elements/00group-input/dees-input-iban/dees-input-iban.ts b/ts_web/elements/00group-input/dees-input-iban/dees-input-iban.ts index 75f6138..0aeca04 100644 --- a/ts_web/elements/00group-input/dees-input-iban/dees-input-iban.ts +++ b/ts_web/elements/00group-input/dees-input-iban/dees-input-iban.ts @@ -44,7 +44,7 @@ export class DeesInputIban extends DeesInputBase { public render(): TemplateResult { return html`
- + { this.validateIban(eventArg); }} > + ${this.renderDescription()}
`; } diff --git a/ts_web/elements/00group-input/dees-input-list/dees-input-list.ts b/ts_web/elements/00group-input/dees-input-list/dees-input-list.ts index ba5bd68..2819904 100644 --- a/ts_web/elements/00group-input/dees-input-list/dees-input-list.ts +++ b/ts_web/elements/00group-input/dees-input-list/dees-input-list.ts @@ -373,13 +373,6 @@ export class DeesInputList extends DeesInputBase { line-height: 1.4; } - .description { - color: ${cssManager.bdTheme('hsl(215.4 16.3% 56.9%)', 'hsl(215 20.2% 55.1%)')}; - font-size: 12px; - margin-top: 4px; - line-height: 1.4; - } - /* Scrollbar styling */ .list-items::-webkit-scrollbar { width: 8px; @@ -546,9 +539,7 @@ export class DeesInputList extends DeesInputBase {
${this.validationText}
` : ''} - ${this.description ? html` -
${this.description}
- ` : ''} + ${this.renderDescription()}
`; } diff --git a/ts_web/elements/00group-input/dees-input-multitoggle/dees-input-multitoggle.demo.ts b/ts_web/elements/00group-input/dees-input-multitoggle/dees-input-multitoggle.demo.ts index f032a37..73b9957 100644 --- a/ts_web/elements/00group-input/dees-input-multitoggle/dees-input-multitoggle.demo.ts +++ b/ts_web/elements/00group-input/dees-input-multitoggle/dees-input-multitoggle.demo.ts @@ -55,7 +55,8 @@ export const demoFunc = () => html` @@ -64,7 +65,7 @@ export const demoFunc = () => html` @@ -76,7 +77,7 @@ export const demoFunc = () => html` @@ -85,7 +86,7 @@ export const demoFunc = () => html` html` { public render(): TemplateResult { return html`
- +
@@ -158,6 +158,7 @@ export class DeesInputMultitoggle extends DeesInputBase { )}
+ ${this.renderDescription()}
`; } diff --git a/ts_web/elements/00group-input/dees-input-phone/dees-input-phone.demo.ts b/ts_web/elements/00group-input/dees-input-phone/dees-input-phone.demo.ts index c6e5828..fabe935 100644 --- a/ts_web/elements/00group-input/dees-input-phone/dees-input-phone.demo.ts +++ b/ts_web/elements/00group-input/dees-input-phone/dees-input-phone.demo.ts @@ -33,13 +33,14 @@ export const demoFunc = () => html`
@@ -66,7 +67,7 @@ export const demoFunc = () => html`
diff --git a/ts_web/elements/00group-input/dees-input-phone/dees-input-phone.ts b/ts_web/elements/00group-input/dees-input-phone/dees-input-phone.ts index 412b108..313b701 100644 --- a/ts_web/elements/00group-input/dees-input-phone/dees-input-phone.ts +++ b/ts_web/elements/00group-input/dees-input-phone/dees-input-phone.ts @@ -47,7 +47,7 @@ export class DeesInputPhone extends DeesInputBase { public render(): TemplateResult { return html`
- + { .placeholder=${this.placeholder} @input=${(event: InputEvent) => this.handlePhoneInput(event)} > + ${this.renderDescription()}
`; } diff --git a/ts_web/elements/00group-input/dees-input-quantityselector/dees-input-quantityselector.demo.ts b/ts_web/elements/00group-input/dees-input-quantityselector/dees-input-quantityselector.demo.ts index 0243c0c..23e024b 100644 --- a/ts_web/elements/00group-input/dees-input-quantityselector/dees-input-quantityselector.demo.ts +++ b/ts_web/elements/00group-input/dees-input-quantityselector/dees-input-quantityselector.demo.ts @@ -69,13 +69,14 @@ export const demoFunc = () => html`
@@ -180,14 +181,14 @@ export const demoFunc = () => html`
@@ -204,7 +205,7 @@ export const demoFunc = () => html` > - ${this.label ? html`` : ''} + ${this.label ? html`` : ''}
+
+ ${this.renderDescription()}
`; } diff --git a/ts_web/elements/00group-input/dees-input-radiogroup/dees-input-radiogroup.ts b/ts_web/elements/00group-input/dees-input-radiogroup/dees-input-radiogroup.ts index b257025..3d84ae6 100644 --- a/ts_web/elements/00group-input/dees-input-radiogroup/dees-input-radiogroup.ts +++ b/ts_web/elements/00group-input/dees-input-radiogroup/dees-input-radiogroup.ts @@ -189,14 +189,6 @@ export class DeesInputRadiogroup extends DeesInputBase { line-height: 20px; } - .description-text { - font-size: 13px; - color: ${cssManager.bdTheme('hsl(215.4 16.3% 56.9%)', 'hsl(215 20.2% 55.1%)')}; - margin-top: 10px; - line-height: 1.5; - letter-spacing: -0.003em; - } - /* Validation styles */ :host([validationState="invalid"]) .radio-circle { border-color: ${cssManager.bdTheme('hsl(0 72.2% 50.6%)', 'hsl(0 62.8% 30.6%)')}; @@ -256,7 +248,7 @@ export class DeesInputRadiogroup extends DeesInputBase { `; })}
- ${this.description ? html`
${this.description}
` : ''} + ${this.renderDescription()}
`; } diff --git a/ts_web/elements/00group-input/dees-input-richtext/styles.ts b/ts_web/elements/00group-input/dees-input-richtext/styles.ts index 64f2818..760c36f 100644 --- a/ts_web/elements/00group-input/dees-input-richtext/styles.ts +++ b/ts_web/elements/00group-input/dees-input-richtext/styles.ts @@ -278,13 +278,6 @@ export const richtextStyles = [ border-color: ${cssManager.bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 93.9%)')}; } - .description { - margin-top: 8px; - font-size: 12px; - color: ${cssManager.bdTheme('hsl(215.4 16.3% 46.9%)', 'hsl(215 20.2% 65.1%)')}; - line-height: 1.4; - } - :host([disabled]) dees-tile { opacity: 0.6; cursor: not-allowed; diff --git a/ts_web/elements/00group-input/dees-input-richtext/template.ts b/ts_web/elements/00group-input/dees-input-richtext/template.ts index 28e1a0b..7b93804 100644 --- a/ts_web/elements/00group-input/dees-input-richtext/template.ts +++ b/ts_web/elements/00group-input/dees-input-richtext/template.ts @@ -26,7 +26,7 @@ export const renderRichtext = (component: DeesInputRichtext): TemplateResult => ` : ''} - ${component.description ? html`
${component.description}
` : ''} + ${component.renderDescription()}
`; diff --git a/ts_web/elements/00group-input/dees-input-tags/dees-input-tags.ts b/ts_web/elements/00group-input/dees-input-tags/dees-input-tags.ts index 81a67ac..fa3740f 100644 --- a/ts_web/elements/00group-input/dees-input-tags/dees-input-tags.ts +++ b/ts_web/elements/00group-input/dees-input-tags/dees-input-tags.ts @@ -210,14 +210,6 @@ export class DeesInputTags extends DeesInputBase { line-height: 1.5; } - /* Description styles */ - .description { - color: ${cssManager.bdTheme('hsl(215.4 16.3% 56.9%)', 'hsl(215 20.2% 55.1%)')}; - font-size: 13px; - margin-top: 6px; - line-height: 1.5; - } - /* Scrollbar styling */ .suggestions-dropdown::-webkit-scrollbar { width: 8px; @@ -302,9 +294,7 @@ export class DeesInputTags extends DeesInputBase {
${this.validationText}
` : ''} - ${this.description ? html` -
${this.description}
- ` : ''} + ${this.renderDescription()}
`; } diff --git a/ts_web/elements/00group-input/dees-input-text/dees-input-text.demo.ts b/ts_web/elements/00group-input/dees-input-text/dees-input-text.demo.ts index fdf02ab..7416115 100644 --- a/ts_web/elements/00group-input/dees-input-text/dees-input-text.demo.ts +++ b/ts_web/elements/00group-input/dees-input-text/dees-input-text.demo.ts @@ -94,12 +94,13 @@ export const demoFunc = () => html` .label=${'Username'} .value=${'johndoe'} .key=${'username'} + .description=${'Your username will be visible to other users'} > @@ -270,14 +271,14 @@ export const demoFunc = () => html` .label=${'Password with Toggle'} .isPasswordBool=${true} .value=${'mySecurePassword123'} - .description=${'Click the eye icon to show/hide password'} + .infoText=${'Click the eye icon to show/hide password'} > diff --git a/ts_web/elements/00group-input/dees-input-text/dees-input-text.ts b/ts_web/elements/00group-input/dees-input-text/dees-input-text.ts index fd96228..c49960e 100644 --- a/ts_web/elements/00group-input/dees-input-text/dees-input-text.ts +++ b/ts_web/elements/00group-input/dees-input-text/dees-input-text.ts @@ -289,7 +289,7 @@ export class DeesInputText extends DeesInputBase { `}
- +
` : html`
`} + ${this.renderDescription()}
`; diff --git a/ts_web/elements/00group-input/dees-input-toggle/dees-input-toggle.ts b/ts_web/elements/00group-input/dees-input-toggle/dees-input-toggle.ts index a7cbb1b..eb07d72 100644 --- a/ts_web/elements/00group-input/dees-input-toggle/dees-input-toggle.ts +++ b/ts_web/elements/00group-input/dees-input-toggle/dees-input-toggle.ts @@ -170,12 +170,6 @@ export class DeesInputToggle extends DeesInputBase { color: ${cssManager.bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 90%)')}; } - /* Description */ - .description-text { - font-size: 12px; - color: ${cssManager.bdTheme('hsl(0 0% 45.1%)', 'hsl(0 0% 63.9%)')}; - line-height: 1.5; - } `, ]; @@ -199,7 +193,7 @@ export class DeesInputToggle extends DeesInputBase {
${this.label ? html`
${this.label}
` : ''} - ${this.description ? html`
${this.description}
` : ''} + ${this.renderDescription()}
diff --git a/ts_web/elements/00group-input/dees-input-typelist/dees-input-typelist.demo.ts b/ts_web/elements/00group-input/dees-input-typelist/dees-input-typelist.demo.ts index 873dc21..e7f6120 100644 --- a/ts_web/elements/00group-input/dees-input-typelist/dees-input-typelist.demo.ts +++ b/ts_web/elements/00group-input/dees-input-typelist/dees-input-typelist.demo.ts @@ -48,13 +48,14 @@ export const demoFunc = () => html`
@@ -64,7 +65,7 @@ export const demoFunc = () => html`
@@ -88,14 +89,14 @@ export const demoFunc = () => html`
@@ -108,16 +109,16 @@ export const demoFunc = () => html` diff --git a/ts_web/elements/00group-input/dees-input-typelist/dees-input-typelist.ts b/ts_web/elements/00group-input/dees-input-typelist/dees-input-typelist.ts index 0aa75bb..750a9b8 100644 --- a/ts_web/elements/00group-input/dees-input-typelist/dees-input-typelist.ts +++ b/ts_web/elements/00group-input/dees-input-typelist/dees-input-typelist.ts @@ -153,7 +153,7 @@ export class DeesInputTypelist extends DeesInputBase { public render(): TemplateResult { return html`
- +
{ this.shadowRoot!.querySelector('input')!.focus(); @@ -188,6 +188,7 @@ export class DeesInputTypelist extends DeesInputBase { .disabled=${this.disabled} />
+ ${this.renderDescription()}
`; } diff --git a/ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.ts b/ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.ts index 246b0ab..13e9e6b 100644 --- a/ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.ts +++ b/ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.ts @@ -292,17 +292,18 @@ export class DeesInputWysiwyg extends DeesInputBase { return html`
-
+ ${this.renderDescription()} `; } diff --git a/ts_web/elements/00group-input/profilepicture/dees-input-profilepicture.ts b/ts_web/elements/00group-input/profilepicture/dees-input-profilepicture.ts index 5744949..86e30e7 100644 --- a/ts_web/elements/00group-input/profilepicture/dees-input-profilepicture.ts +++ b/ts_web/elements/00group-input/profilepicture/dees-input-profilepicture.ts @@ -273,7 +273,7 @@ export class DeesInputProfilePicture extends DeesInputBase - +
+ ${this.renderDescription()}
`; } diff --git a/ts_web/elements/00group-layout/dees-label/dees-label.demo.ts b/ts_web/elements/00group-layout/dees-label/dees-label.demo.ts index 31c6a8a..cc0d9ea 100644 --- a/ts_web/elements/00group-layout/dees-label/dees-label.demo.ts +++ b/ts_web/elements/00group-layout/dees-label/dees-label.demo.ts @@ -85,31 +85,31 @@ export const demoFunc = () => html`
-

Description (Info Icon)

-

When description is set, an info icon appears next to the label. Hover over it to see the tooltip.

+

Info Text (Info Icon)

+

When infoText is set, an info icon appears next to the label. Hover over it to see the tooltip.

- description="..." - + infoText="..." +
- short description - + short infoText +
-

Required + Description

+

Required + Info Text

Both indicators can be combined. The asterisk appears first, then the info icon.

- required + description - + required + infoText +
- required + description - + required + infoText +
diff --git a/ts_web/elements/00group-layout/dees-label/dees-label.ts b/ts_web/elements/00group-layout/dees-label/dees-label.ts index 7eb69fd..4b53dc2 100644 --- a/ts_web/elements/00group-layout/dees-label/dees-label.ts +++ b/ts_web/elements/00group-layout/dees-label/dees-label.ts @@ -32,7 +32,7 @@ export class DeesLabel extends DeesElement { type: String, reflect: true, }) - accessor description!: string; + accessor infoText!: string; @property({ type: Boolean, @@ -98,12 +98,12 @@ export class DeesLabel extends DeesElement {
${this.label} ${this.required ? html`*` : ''} - ${this.description + ${this.infoText ? html`
- + ` : html``}