@solid-design-system/components 1.30.0 → 1.32.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 (143) hide show
  1. package/dist/components/es/checkbox.js +1 -1
  2. package/dist/components/es/default-value.js +1 -0
  3. package/dist/components/es/drawer.js +1 -1
  4. package/dist/components/es/dropdown.js +1 -1
  5. package/dist/components/es/form-control.styles.js +1 -0
  6. package/dist/components/es/icon.js +3 -4
  7. package/dist/components/es/input.js +1 -1
  8. package/dist/components/es/live.js +3 -3
  9. package/dist/components/es/option.js +1 -0
  10. package/dist/components/es/popup.js +1 -1
  11. package/dist/components/es/scroll.js +1 -0
  12. package/dist/components/es/select.js +5 -0
  13. package/dist/components/es/solid-components2.js +1 -1
  14. package/dist/components/es/solid-element.js +1 -1
  15. package/dist/components/es/switch.js +1 -1
  16. package/dist/components/es/tabbable.js +1 -1
  17. package/dist/components/es/tag.js +1 -1
  18. package/dist/components/umd/solid-components.js +25 -22
  19. package/dist/custom-elements.json +1 -1
  20. package/dist/package/components/option/option.d.ts +30 -0
  21. package/dist/package/components/option/option.js +145 -0
  22. package/dist/package/components/popup/popup.d.ts +3 -0
  23. package/dist/package/components/popup/popup.js +17 -0
  24. package/dist/package/components/select/select.d.ts +101 -0
  25. package/dist/package/components/select/select.js +700 -0
  26. package/dist/package/components/tag/tag.d.ts +1 -0
  27. package/dist/package/components/tag/tag.js +5 -3
  28. package/dist/package/solid-components.d.ts +2 -0
  29. package/dist/package/solid-components.js +22 -18
  30. package/dist/package/styles/tailwind.css.js +1 -1
  31. package/dist/package/translations/en.js +3 -4
  32. package/dist/package/utilities/localize.d.ts +1 -0
  33. package/dist/styles/solid-styles.css +1 -1
  34. package/dist/versioned-components/es/accordion-group.js +1 -1
  35. package/dist/versioned-components/es/accordion.js +1 -1
  36. package/dist/versioned-components/es/badge.js +1 -1
  37. package/dist/versioned-components/es/brandshape.js +1 -1
  38. package/dist/versioned-components/es/button.js +1 -1
  39. package/dist/versioned-components/es/carousel-item.js +1 -1
  40. package/dist/versioned-components/es/carousel.js +3 -3
  41. package/dist/versioned-components/es/checkbox-group.js +1 -1
  42. package/dist/versioned-components/es/checkbox.js +1 -1
  43. package/dist/versioned-components/es/default-value.js +1 -0
  44. package/dist/versioned-components/es/divider.js +1 -1
  45. package/dist/versioned-components/es/drawer.js +1 -1
  46. package/dist/versioned-components/es/dropdown.js +1 -1
  47. package/dist/versioned-components/es/form-control.styles.js +1 -0
  48. package/dist/versioned-components/es/form.js +1 -1
  49. package/dist/versioned-components/es/header.js +1 -1
  50. package/dist/versioned-components/es/icon.js +3 -4
  51. package/dist/versioned-components/es/include.js +1 -1
  52. package/dist/versioned-components/es/input.js +1 -1
  53. package/dist/versioned-components/es/link.js +1 -1
  54. package/dist/versioned-components/es/live.js +3 -3
  55. package/dist/versioned-components/es/navigation-item.js +1 -1
  56. package/dist/versioned-components/es/notification.js +1 -1
  57. package/dist/versioned-components/es/option.js +1 -0
  58. package/dist/versioned-components/es/popup.js +1 -1
  59. package/dist/versioned-components/es/radio-group.js +1 -1
  60. package/dist/versioned-components/es/radio.js +1 -1
  61. package/dist/versioned-components/es/scroll.js +1 -0
  62. package/dist/versioned-components/es/select.js +5 -0
  63. package/dist/versioned-components/es/solid-components2.js +1 -1
  64. package/dist/versioned-components/es/solid-element.js +1 -1
  65. package/dist/versioned-components/es/spinner.js +1 -1
  66. package/dist/versioned-components/es/switch.js +1 -1
  67. package/dist/versioned-components/es/tabbable.js +1 -1
  68. package/dist/versioned-components/es/tag.js +1 -1
  69. package/dist/versioned-components/es/teaser.js +1 -1
  70. package/dist/versioned-components/es/tooltip.js +2 -2
  71. package/dist/versioned-components/es/video.js +1 -1
  72. package/dist/versioned-package/_components/button-group/button-group.d.ts +1 -1
  73. package/dist/versioned-package/_components/button-group/button-group.js +11 -11
  74. package/dist/versioned-package/components/accordion/accordion.d.ts +1 -1
  75. package/dist/versioned-package/components/accordion/accordion.js +2 -2
  76. package/dist/versioned-package/components/accordion-group/accordion-group.d.ts +1 -1
  77. package/dist/versioned-package/components/accordion-group/accordion-group.js +3 -3
  78. package/dist/versioned-package/components/badge/badge.d.ts +1 -1
  79. package/dist/versioned-package/components/badge/badge.js +1 -1
  80. package/dist/versioned-package/components/brandshape/brandshape.d.ts +1 -1
  81. package/dist/versioned-package/components/brandshape/brandshape.js +1 -1
  82. package/dist/versioned-package/components/button/button.d.ts +1 -1
  83. package/dist/versioned-package/components/button/button.js +4 -4
  84. package/dist/versioned-package/components/carousel/carousel.d.ts +1 -1
  85. package/dist/versioned-package/components/carousel/carousel.js +6 -6
  86. package/dist/versioned-package/components/carousel-item/carousel-item.d.ts +1 -1
  87. package/dist/versioned-package/components/carousel-item/carousel-item.js +1 -1
  88. package/dist/versioned-package/components/checkbox/checkbox.d.ts +1 -1
  89. package/dist/versioned-package/components/checkbox/checkbox.js +4 -4
  90. package/dist/versioned-package/components/checkbox-group/checkbox-group.d.ts +1 -1
  91. package/dist/versioned-package/components/checkbox-group/checkbox-group.js +5 -5
  92. package/dist/versioned-package/components/divider/divider.d.ts +1 -1
  93. package/dist/versioned-package/components/divider/divider.js +2 -2
  94. package/dist/versioned-package/components/drawer/drawer.d.ts +1 -1
  95. package/dist/versioned-package/components/drawer/drawer.js +2 -2
  96. package/dist/versioned-package/components/dropdown/dropdown.d.ts +1 -1
  97. package/dist/versioned-package/components/dropdown/dropdown.js +8 -8
  98. package/dist/versioned-package/components/header/header.d.ts +1 -1
  99. package/dist/versioned-package/components/header/header.js +4 -4
  100. package/dist/versioned-package/components/icon/icon.d.ts +1 -1
  101. package/dist/versioned-package/components/icon/icon.js +1 -1
  102. package/dist/versioned-package/components/include/include.d.ts +1 -1
  103. package/dist/versioned-package/components/include/include.js +1 -1
  104. package/dist/versioned-package/components/input/input.d.ts +1 -1
  105. package/dist/versioned-package/components/input/input.js +4 -4
  106. package/dist/versioned-package/components/link/link.d.ts +1 -1
  107. package/dist/versioned-package/components/link/link.js +2 -2
  108. package/dist/versioned-package/components/navigation-item/navigation-item.d.ts +1 -1
  109. package/dist/versioned-package/components/navigation-item/navigation-item.js +3 -3
  110. package/dist/versioned-package/components/notification/notification.d.ts +1 -1
  111. package/dist/versioned-package/components/notification/notification.js +5 -5
  112. package/dist/versioned-package/components/option/option.d.ts +30 -0
  113. package/dist/versioned-package/components/option/option.js +145 -0
  114. package/dist/versioned-package/components/popup/popup.d.ts +4 -1
  115. package/dist/versioned-package/components/popup/popup.js +18 -1
  116. package/dist/versioned-package/components/radio/radio.d.ts +1 -1
  117. package/dist/versioned-package/components/radio/radio.js +2 -2
  118. package/dist/versioned-package/components/radio-group/radio-group.d.ts +2 -2
  119. package/dist/versioned-package/components/radio-group/radio-group.js +14 -14
  120. package/dist/versioned-package/components/select/select.d.ts +101 -0
  121. package/dist/versioned-package/components/select/select.js +700 -0
  122. package/dist/versioned-package/components/spinner/spinner.d.ts +1 -1
  123. package/dist/versioned-package/components/spinner/spinner.js +1 -1
  124. package/dist/versioned-package/components/switch/switch.d.ts +1 -1
  125. package/dist/versioned-package/components/switch/switch.js +2 -2
  126. package/dist/versioned-package/components/tag/tag.d.ts +2 -1
  127. package/dist/versioned-package/components/tag/tag.js +6 -4
  128. package/dist/versioned-package/components/teaser/teaser.js +1 -1
  129. package/dist/versioned-package/components/tooltip/tooltip.d.ts +1 -1
  130. package/dist/versioned-package/components/tooltip/tooltip.js +5 -5
  131. package/dist/versioned-package/components/video/video.d.ts +1 -1
  132. package/dist/versioned-package/components/video/video.js +2 -2
  133. package/dist/versioned-package/internal/form.js +2 -2
  134. package/dist/versioned-package/solid-components.d.ts +2 -0
  135. package/dist/versioned-package/solid-components.js +22 -18
  136. package/dist/versioned-package/styles/form-control.styles.js +1 -1
  137. package/dist/versioned-package/styles/tailwind.css.js +1 -1
  138. package/dist/versioned-package/translations/en.js +3 -4
  139. package/dist/versioned-package/utilities/localize.d.ts +1 -0
  140. package/dist/versioned-styles/solid-styles.css +1 -1
  141. package/dist/vscode.html-custom-data.json +346 -32
  142. package/dist/web-types.json +790 -82
  143. package/package.json +3 -3
@@ -0,0 +1,30 @@
1
+ import '../icon/icon';
2
+ import SolidElement from '../../internal/solid-element';
3
+ export default class SdOption extends SolidElement {
4
+ private readonly hasSlotController;
5
+ private cachedTextLabel;
6
+ private readonly localize;
7
+ defaultSlot: HTMLSlotElement;
8
+ current: boolean;
9
+ selected: boolean;
10
+ hasHover: boolean;
11
+ size: 'lg' | 'md' | 'sm';
12
+ checkbox: boolean;
13
+ disabled: boolean;
14
+ value: string;
15
+ connectedCallback(): void;
16
+ private handleDefaultSlotChange;
17
+ private handleMouseEnter;
18
+ private handleMouseLeave;
19
+ handleDisabledChange(): void;
20
+ handleSelectedChange(): void;
21
+ handleValueChange(): void;
22
+ getTextLabel(): string;
23
+ render(): import("lit-html").TemplateResult<1>;
24
+ static styles: import("lit").CSSResultGroup[];
25
+ }
26
+ declare global {
27
+ interface HTMLElementTagNameMap {
28
+ 'sd-option': SdOption;
29
+ }
30
+ }
@@ -0,0 +1,145 @@
1
+ import "../icon/icon.js";
2
+ import { css, html } from "lit";
3
+ import { customElement } from "../../internal/register-custom-element.js";
4
+ import { HasSlotController } from "../../internal/slot.js";
5
+ import { LocalizeController } from "../../utilities/localize.js";
6
+ import { query, state, property } from "lit/decorators.js";
7
+ import { watch } from "../../internal/watch.js";
8
+ import componentStyles from "../../styles/component.styles.js";
9
+ import cx from "classix";
10
+ import formControlStyles from "../../styles/form-control.styles.js";
11
+ import SolidElement from "../../internal/solid-element.js";
12
+ var __defProp = Object.defineProperty;
13
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
14
+ var __decorateClass = (decorators, target, key, kind) => {
15
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
16
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
17
+ if (decorator = decorators[i])
18
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
19
+ if (kind && result)
20
+ __defProp(target, key, result);
21
+ return result;
22
+ };
23
+ let SdOption = class extends SolidElement {
24
+ constructor() {
25
+ super(...arguments);
26
+ this.hasSlotController = new HasSlotController(this, "default", "left", "right");
27
+ this.localize = new LocalizeController(this);
28
+ this.current = false;
29
+ this.selected = false;
30
+ this.hasHover = false;
31
+ this.size = "lg";
32
+ this.checkbox = false;
33
+ this.disabled = false;
34
+ this.value = "";
35
+ }
36
+ connectedCallback() {
37
+ super.connectedCallback();
38
+ this.setAttribute("role", "option");
39
+ this.setAttribute("aria-selected", "false");
40
+ }
41
+ handleDefaultSlotChange() {
42
+ const textLabel = this.getTextLabel();
43
+ if (typeof this.cachedTextLabel === "undefined") {
44
+ this.cachedTextLabel = textLabel;
45
+ return;
46
+ }
47
+ if (textLabel !== this.cachedTextLabel) {
48
+ this.cachedTextLabel = textLabel;
49
+ this.emit("slotchange", { bubbles: true, composed: false, cancelable: false });
50
+ }
51
+ }
52
+ handleMouseEnter() {
53
+ this.hasHover = true;
54
+ }
55
+ handleMouseLeave() {
56
+ this.hasHover = false;
57
+ }
58
+ handleDisabledChange() {
59
+ this.setAttribute("aria-disabled", this.disabled ? "true" : "false");
60
+ }
61
+ handleSelectedChange() {
62
+ this.setAttribute("aria-selected", this.selected ? "true" : "false");
63
+ }
64
+ handleValueChange() {
65
+ if (this.value.includes(" ")) {
66
+ console.error(`Option values cannot include a space. All spaces have been replaced with underscores.`, this);
67
+ this.value = this.value.replace(/ /g, "_");
68
+ }
69
+ }
70
+ /** Returns a plain text label based on the option's content. */
71
+ getTextLabel() {
72
+ return (this.textContent ?? "").trim();
73
+ }
74
+ render() {
75
+ const slots = {
76
+ default: this.hasSlotController.test("default"),
77
+ left: this.hasSlotController.test("left"),
78
+ right: this.hasSlotController.test("right")
79
+ };
80
+ return html`<div part="base" class="${cx(
81
+ "px-4 flex items-center w-full transition-all text-left text-base relative text-black",
82
+ {
83
+ sm: "text-sm py-1",
84
+ md: "text-base py-2",
85
+ lg: "text-base py-3"
86
+ }[this.size],
87
+ this.disabled ? "text-neutral-500 cursor-not-allowed" : "cursor-pointer",
88
+ this.hasHover && !this.disabled ? "bg-neutral-200" : "",
89
+ this.current && "bg-neutral-200"
90
+ )}" @mouseenter="${this.handleMouseEnter}" @mouseleave="${this.handleMouseLeave}"><span class="${cx(
91
+ "absolute w-full left-0 top-0 pointer-events-none transition-all duration-150 border-l-4 h-[calc(100%-8px)]",
92
+ this.selected && !this.checkbox ? "border-accent" : "border-transparent",
93
+ this.disabled && "border-neutral-500 top-1",
94
+ !this.disabled && this.hasHover ? "h-full top-0" : "top-1"
95
+ )}"></span> ${this.checkbox ? html`<span id="control" part="control ${this.selected ? " control--checked" : "control--unchecked"}" class="${cx(
96
+ "relative flex flex-initial items-center justify-center border rounded-sm h-4 w-4 mr-2",
97
+ this.disabled ? "border-neutral-500" : this.selected ? "bg-accent border-accent" : "border-neutral-800"
98
+ )}">${this.selected ? html`<sd-icon part="checked-icon" class="text-white w-3 h-3" library="system" name="status-hook"></sd-icon>` : ""}</span>` : ""} ${slots["left"] ? html`<slot name="left" part="left" class="inline-flex mr-2"></slot>` : ""}<slot part="label" class="inline-block flex-grow" @slotchange="${this.handleDefaultSlotChange}"></slot>${slots["right"] ? html`<slot name="right" part="right" class="inline-flex ml-2"></slot>` : ""}</div>`;
99
+ }
100
+ };
101
+ SdOption.styles = [
102
+ componentStyles,
103
+ formControlStyles,
104
+ SolidElement.styles,
105
+ css`:host{outline:0!important;display:block;position:relative;width:100%}`
106
+ ];
107
+ __decorateClass([
108
+ query('[part="base"]')
109
+ ], SdOption.prototype, "defaultSlot", 2);
110
+ __decorateClass([
111
+ state()
112
+ ], SdOption.prototype, "current", 2);
113
+ __decorateClass([
114
+ state()
115
+ ], SdOption.prototype, "selected", 2);
116
+ __decorateClass([
117
+ state()
118
+ ], SdOption.prototype, "hasHover", 2);
119
+ __decorateClass([
120
+ property({ reflect: true })
121
+ ], SdOption.prototype, "size", 2);
122
+ __decorateClass([
123
+ property({ type: Boolean, reflect: true })
124
+ ], SdOption.prototype, "checkbox", 2);
125
+ __decorateClass([
126
+ property({ type: Boolean, reflect: true })
127
+ ], SdOption.prototype, "disabled", 2);
128
+ __decorateClass([
129
+ property({ reflect: true })
130
+ ], SdOption.prototype, "value", 2);
131
+ __decorateClass([
132
+ watch("disabled")
133
+ ], SdOption.prototype, "handleDisabledChange", 1);
134
+ __decorateClass([
135
+ watch("selected")
136
+ ], SdOption.prototype, "handleSelectedChange", 1);
137
+ __decorateClass([
138
+ watch("value")
139
+ ], SdOption.prototype, "handleValueChange", 1);
140
+ SdOption = __decorateClass([
141
+ customElement("sd-option")
142
+ ], SdOption);
143
+ export {
144
+ SdOption as default
145
+ };
@@ -2,6 +2,7 @@ import SolidElement from '../../internal/solid-element';
2
2
  export default class SdPopup extends SolidElement {
3
3
  private anchorEl;
4
4
  private cleanup;
5
+ private mutationObserver;
5
6
  popup: HTMLElement;
6
7
  private arrowEl;
7
8
  anchor: Element | string;
@@ -28,6 +29,8 @@ export default class SdPopup extends SolidElement {
28
29
  connectedCallback(): Promise<void>;
29
30
  disconnectedCallback(): void;
30
31
  updated(changedProps: Map<string, unknown>): Promise<void>;
32
+ private setupMutationObserver;
33
+ private handleCurrentPlacementChange;
31
34
  private handleAnchorChange;
32
35
  private start;
33
36
  private stop;
@@ -39,9 +39,13 @@ let SdPopup = class extends SolidElement {
39
39
  super.connectedCallback();
40
40
  await this.updateComplete;
41
41
  this.start();
42
+ this.setupMutationObserver();
42
43
  }
43
44
  disconnectedCallback() {
44
45
  this.stop();
46
+ if (this.mutationObserver) {
47
+ this.mutationObserver.disconnect();
48
+ }
45
49
  }
46
50
  async updated(changedProps) {
47
51
  super.updated(changedProps);
@@ -60,6 +64,19 @@ let SdPopup = class extends SolidElement {
60
64
  this.reposition();
61
65
  }
62
66
  }
67
+ setupMutationObserver() {
68
+ this.mutationObserver = new MutationObserver((mutations) => this.handleCurrentPlacementChange(mutations));
69
+ const config = { attributes: true };
70
+ this.mutationObserver.observe(this, config);
71
+ }
72
+ handleCurrentPlacementChange(mutations) {
73
+ return mutations.forEach((mutation) => {
74
+ if (mutation.attributeName === "data-current-placement") {
75
+ const currentPlacement = this.getAttribute("data-current-placement");
76
+ this.emit("sd-current-placement", { detail: currentPlacement });
77
+ }
78
+ });
79
+ }
63
80
  async handleAnchorChange() {
64
81
  await this.stop();
65
82
  if (this.anchor && typeof this.anchor === "string") {
@@ -0,0 +1,101 @@
1
+ import SdIcon from '../icon/icon';
2
+ import SdPopup from '../popup/popup';
3
+ import SdTag from '../tag/tag';
4
+ import SolidElement from '../../internal/solid-element';
5
+ import type { SolidFormControl } from '../../internal/solid-element';
6
+ import type { TemplateResult } from 'lit';
7
+ import type SdOption from '../option/option';
8
+ export default class SdSelect extends SolidElement implements SolidFormControl {
9
+ static dependencies: {
10
+ 'sd-icon': typeof SdIcon;
11
+ 'sd-popup': typeof SdPopup;
12
+ 'sd-tag': typeof SdTag;
13
+ };
14
+ private readonly formControlController;
15
+ private readonly hasSlotController;
16
+ private readonly localize;
17
+ private typeToSelectString;
18
+ private typeToSelectTimeout;
19
+ _optionsInDefaultSlot: SdOption[];
20
+ popup: SdPopup;
21
+ combobox: HTMLSlotElement;
22
+ displayInput: HTMLInputElement;
23
+ valueInput: HTMLInputElement;
24
+ listbox: HTMLSlotElement;
25
+ private hasFocus;
26
+ hasHover: boolean;
27
+ private displayLabel;
28
+ private currentOption;
29
+ private selectedOptions;
30
+ private isValid;
31
+ private isInvalid;
32
+ defaultValue: string | string[];
33
+ open: boolean;
34
+ size: 'lg' | 'md' | 'sm';
35
+ label: string;
36
+ placeholder: string;
37
+ helpText: string;
38
+ placement: 'top' | 'bottom';
39
+ private currentPlacement;
40
+ clearable: boolean;
41
+ disabled: boolean;
42
+ multiple: boolean;
43
+ useTags: boolean;
44
+ maxOptionsVisible: number;
45
+ form: string;
46
+ name: string;
47
+ value: string | string[];
48
+ required: boolean;
49
+ hoist: boolean;
50
+ getTag: (option: SdOption, index: number) => TemplateResult | string | HTMLElement;
51
+ get validity(): ValidityState;
52
+ get validationMessage(): string;
53
+ connectedCallback(): void;
54
+ updated(): void;
55
+ private addOpenListeners;
56
+ private removeOpenListeners;
57
+ private handleFocus;
58
+ private handleBlur;
59
+ private handleDocumentFocusIn;
60
+ private handleDocumentKeyDown;
61
+ private handleDocumentMouseDown;
62
+ private handleLabelClick;
63
+ private handleComboboxMouseDown;
64
+ private handleComboboxKeyDown;
65
+ private handleClearClick;
66
+ private handleClearMouseDown;
67
+ private handleOptionClick;
68
+ private handleDefaultSlotChange;
69
+ private handleTagRemove;
70
+ private getAllOptions;
71
+ private getFirstOption;
72
+ private setCurrentOption;
73
+ private setSelectedOptions;
74
+ private toggleOptionSelection;
75
+ private selectionChanged;
76
+ protected get tags(): TemplateResult<1>[];
77
+ private handleInvalid;
78
+ private handleMouseEnter;
79
+ private handleMouseLeave;
80
+ private handleCurrentPlacement;
81
+ handleUseTagsChange(): void;
82
+ handleDisabledChange(): void;
83
+ handleOpenChange(): Promise<void>;
84
+ applySizeToOptions(): void;
85
+ handleValueChange(): void;
86
+ show(): Promise<void>;
87
+ hide(): Promise<void>;
88
+ checkValidity(): boolean;
89
+ getForm(): HTMLFormElement | null;
90
+ reportValidity(): boolean;
91
+ setCustomValidity(message: string): void;
92
+ focus(options?: FocusOptions): void;
93
+ blur(): void;
94
+ render(): TemplateResult<1>;
95
+ static styles: import("lit").CSSResultGroup[];
96
+ }
97
+ declare global {
98
+ interface HTMLElementTagNameMap {
99
+ 'sd-select': SdSelect;
100
+ }
101
+ }