@sellmate/design-system 1.0.74 → 1.0.76

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 (182) hide show
  1. package/dist/cjs/design-system.cjs.js +1 -1
  2. package/dist/cjs/index.cjs.js +5 -0
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/sd-button_4.cjs.entry.js +2 -2
  5. package/dist/cjs/sd-confirm-modal_2.cjs.entry.js +1 -1
  6. package/dist/cjs/sd-ghost-button.cjs.entry.js +10 -5
  7. package/dist/cjs/sd-modal-container.cjs.entry.js +76 -68
  8. package/dist/cjs/sd-pagination_5.cjs.entry.js +889 -0
  9. package/dist/cjs/sd-radio-button.cjs.entry.js +6 -1
  10. package/dist/cjs/sd-select-v2-list-item_4.cjs.entry.js +65 -5
  11. package/dist/cjs/sd-switch.cjs.entry.js +1 -1
  12. package/dist/cjs/sd-table.cjs.entry.js +167 -20
  13. package/dist/cjs/sd-tabs.cjs.entry.js +1 -1
  14. package/dist/cjs/sd-tag.cjs.entry.js +2 -2
  15. package/dist/cjs/sd-td.cjs.entry.js +53 -1
  16. package/dist/cjs/sd-text-link.cjs.entry.js +3 -3
  17. package/dist/cjs/sd-textarea.cjs.entry.js +1 -1
  18. package/dist/cjs/sd-toast-container.cjs.entry.js +1 -1
  19. package/dist/cjs/sd-toast.cjs.entry.js +2 -2
  20. package/dist/cjs/sd-toggle.cjs.entry.js +1 -1
  21. package/dist/collection/components/sd-ghost-button/sd-ghost-button.js +10 -5
  22. package/dist/collection/components/sd-loading-modal/sd-loading-modal.js +3 -3
  23. package/dist/collection/components/sd-modal-container/sd-modal-container.js +77 -71
  24. package/dist/collection/components/sd-radio-button/sd-radio-button.js +6 -1
  25. package/dist/collection/components/sd-select-v2/sd-select-v2-listbox/sd-select-v2-listbox.js +103 -3
  26. package/dist/collection/components/sd-select-v2/sd-select-v2-trigger/sd-select-v2-trigger.js +2 -2
  27. package/dist/collection/components/sd-select-v2/sd-select-v2.js +82 -4
  28. package/dist/collection/components/sd-switch/sd-switch.js +1 -1
  29. package/dist/collection/components/sd-table/sd-table.css +1 -1
  30. package/dist/collection/components/sd-table/sd-table.js +170 -21
  31. package/dist/collection/components/sd-table/sd-tbody/sd-tbody.js +7 -2
  32. package/dist/collection/components/sd-table/sd-td/sd-td.js +91 -1
  33. package/dist/collection/components/sd-table/sd-thead/sd-thead.js +9 -4
  34. package/dist/collection/components/sd-table/sd-tr/sd-tr.css +8 -0
  35. package/dist/collection/components/sd-table/sd-tr/sd-tr.js +62 -12
  36. package/dist/collection/components/sd-tabs/sd-tabs.js +1 -1
  37. package/dist/collection/components/sd-tag/sd-tag.js +2 -2
  38. package/dist/collection/components/sd-text-link/sd-text-link.js +3 -3
  39. package/dist/collection/components/sd-textarea/sd-textarea.js +1 -1
  40. package/dist/collection/components/sd-toast/sd-toast.js +2 -2
  41. package/dist/collection/components/sd-toast-container/sd-toast-container.js +1 -1
  42. package/dist/collection/components/sd-toggle/sd-toggle.js +1 -1
  43. package/dist/collection/components/sd-tooltip/sd-tooltip.js +2 -2
  44. package/dist/collection/utils/modal.js +5 -0
  45. package/dist/components/index.js +1 -1
  46. package/dist/components/{p-BALOEavB.js → p-6AvsuYqF.js} +1 -1
  47. package/dist/components/{p-CTwEbxRN.js → p-6PsyRF61.js} +1 -1
  48. package/dist/components/{p-DEBakAhm.js → p-7DKZPPev.js} +1 -1
  49. package/dist/components/p-BBD_1E3n.js +1 -0
  50. package/dist/components/p-BQvugXhH.js +1 -0
  51. package/dist/components/p-BRfPoWUn.js +1 -0
  52. package/dist/components/{p-CHFGWh0m.js → p-C-BOe23n.js} +1 -1
  53. package/dist/components/p-C7h8lwnU.js +1 -0
  54. package/dist/components/{p-SDBnyM8D.js → p-CUg9NH6y.js} +1 -1
  55. package/dist/components/{p-C3dI7f7C.js → p-CgMyz4NQ.js} +1 -1
  56. package/dist/components/p-Csfj4h1A.js +1 -0
  57. package/dist/components/{p-Bp0B8tcl.js → p-DAC3TaZV.js} +1 -1
  58. package/dist/components/p-DQfNwvwx.js +1 -0
  59. package/dist/components/p-DfOYYI9m.js +1 -0
  60. package/dist/components/{p-H-9uoufd.js → p-d4UB2UF7.js} +1 -1
  61. package/dist/components/p-eEC3ITv0.js +1 -0
  62. package/dist/components/{p-CWEeXx2E.js → p-nVHDJc9g.js} +1 -1
  63. package/dist/components/{p-D8fG9Yt7.js → p-rnbt1m4L.js} +1 -1
  64. package/dist/components/sd-action-modal.js +1 -1
  65. package/dist/components/sd-barcode-input.js +1 -1
  66. package/dist/components/sd-chip.js +1 -1
  67. package/dist/components/sd-confirm-modal.js +1 -1
  68. package/dist/components/sd-date-picker-calendar.js +1 -1
  69. package/dist/components/sd-date-picker.js +1 -1
  70. package/dist/components/sd-date-range-picker-calendar.js +1 -1
  71. package/dist/components/sd-date-range-picker.js +1 -1
  72. package/dist/components/sd-field.js +1 -1
  73. package/dist/components/sd-file-picker.js +1 -1
  74. package/dist/components/sd-ghost-button.js +1 -1
  75. package/dist/components/sd-guide.js +1 -1
  76. package/dist/components/sd-input.js +1 -1
  77. package/dist/components/sd-loading-modal.js +1 -1
  78. package/dist/components/sd-modal-container.js +1 -1
  79. package/dist/components/sd-number-input.js +1 -1
  80. package/dist/components/sd-popover.js +1 -1
  81. package/dist/components/sd-radio-button.js +1 -1
  82. package/dist/components/sd-select-dropdown.js +1 -1
  83. package/dist/components/sd-select-group.js +1 -1
  84. package/dist/components/sd-select-multiple-group.js +1 -1
  85. package/dist/components/sd-select-multiple.js +1 -1
  86. package/dist/components/sd-select-search-input.js +1 -1
  87. package/dist/components/sd-select-v2-listbox.js +1 -1
  88. package/dist/components/sd-select-v2-trigger.js +1 -1
  89. package/dist/components/sd-select-v2.js +1 -1
  90. package/dist/components/sd-select.js +1 -1
  91. package/dist/components/sd-switch.js +1 -1
  92. package/dist/components/sd-table.js +1 -1
  93. package/dist/components/sd-tabs.js +1 -1
  94. package/dist/components/sd-tag.js +1 -1
  95. package/dist/components/sd-tbody.js +1 -1
  96. package/dist/components/sd-td.js +1 -1
  97. package/dist/components/sd-text-link.js +1 -1
  98. package/dist/components/sd-textarea.js +1 -1
  99. package/dist/components/sd-thead.js +1 -1
  100. package/dist/components/sd-toast-container.js +1 -1
  101. package/dist/components/sd-toast.js +1 -1
  102. package/dist/components/sd-toggle.js +1 -1
  103. package/dist/components/sd-tooltip.js +1 -1
  104. package/dist/components/sd-tr.js +1 -1
  105. package/dist/design-system/design-system.esm.js +1 -1
  106. package/dist/design-system/index.esm.js +1 -1
  107. package/dist/design-system/p-0e1b27cc.entry.js +1 -0
  108. package/dist/design-system/p-11029f6e.entry.js +1 -0
  109. package/dist/design-system/{p-cc62c180.entry.js → p-140b40ab.entry.js} +1 -1
  110. package/dist/design-system/p-34f7345b.entry.js +1 -0
  111. package/dist/design-system/p-363c9451.entry.js +1 -0
  112. package/dist/design-system/{p-fdcfaa7c.entry.js → p-506f2b68.entry.js} +1 -1
  113. package/dist/design-system/{p-8200b5f2.entry.js → p-531a6a82.entry.js} +1 -1
  114. package/dist/design-system/p-55b65a41.entry.js +1 -0
  115. package/dist/design-system/{p-d1dfa0e1.entry.js → p-68d0d67e.entry.js} +1 -1
  116. package/dist/design-system/p-7fe3a466.entry.js +1 -0
  117. package/dist/design-system/{p-05a1c092.entry.js → p-9466cd93.entry.js} +1 -1
  118. package/dist/design-system/{p-33bec0e3.entry.js → p-b683f2fe.entry.js} +1 -1
  119. package/dist/design-system/p-c521e731.entry.js +1 -0
  120. package/dist/design-system/p-c7bcb232.entry.js +1 -0
  121. package/dist/design-system/{p-16a15368.entry.js → p-c9eb70f5.entry.js} +1 -1
  122. package/dist/design-system/p-d1846df9.entry.js +1 -0
  123. package/dist/design-system/{p-2d154fe0.entry.js → p-fdb52620.entry.js} +1 -1
  124. package/dist/esm/design-system.js +1 -1
  125. package/dist/esm/index.js +5 -0
  126. package/dist/esm/loader.js +1 -1
  127. package/dist/esm/sd-button_4.entry.js +2 -2
  128. package/dist/esm/sd-confirm-modal_2.entry.js +1 -1
  129. package/dist/esm/sd-ghost-button.entry.js +10 -5
  130. package/dist/esm/sd-modal-container.entry.js +76 -68
  131. package/dist/esm/sd-pagination_5.entry.js +883 -0
  132. package/dist/esm/sd-radio-button.entry.js +6 -1
  133. package/dist/esm/sd-select-v2-list-item_4.entry.js +65 -5
  134. package/dist/esm/sd-switch.entry.js +1 -1
  135. package/dist/esm/sd-table.entry.js +168 -21
  136. package/dist/esm/sd-tabs.entry.js +1 -1
  137. package/dist/esm/sd-tag.entry.js +2 -2
  138. package/dist/esm/sd-td.entry.js +53 -1
  139. package/dist/esm/sd-text-link.entry.js +3 -3
  140. package/dist/esm/sd-textarea.entry.js +1 -1
  141. package/dist/esm/sd-toast-container.entry.js +1 -1
  142. package/dist/esm/sd-toast.entry.js +2 -2
  143. package/dist/esm/sd-toggle.entry.js +1 -1
  144. package/dist/types/components/sd-ghost-button/sd-ghost-button.d.ts +1 -0
  145. package/dist/types/components/sd-loading-modal/sd-loading-modal.d.ts +1 -1
  146. package/dist/types/components/sd-modal-container/sd-modal-container.config.d.ts +1 -1
  147. package/dist/types/components/sd-modal-container/sd-modal-container.d.ts +6 -4
  148. package/dist/types/components/sd-radio-button/sd-radio-button.d.ts +1 -0
  149. package/dist/types/components/sd-select-v2/sd-select-v2-listbox/sd-select-v2-listbox.d.ts +9 -0
  150. package/dist/types/components/sd-select-v2/sd-select-v2.d.ts +4 -0
  151. package/dist/types/components/sd-table/sd-table.d.ts +17 -0
  152. package/dist/types/components/sd-table/sd-td/sd-td.d.ts +8 -0
  153. package/dist/types/components/sd-table/sd-tr/sd-tr.d.ts +4 -0
  154. package/dist/types/components.d.ts +55 -3
  155. package/hydrate/index.js +482 -142
  156. package/hydrate/index.mjs +482 -142
  157. package/package.json +1 -1
  158. package/dist/cjs/sd-pagination_2.cjs.entry.js +0 -427
  159. package/dist/cjs/sd-tbody.cjs.entry.js +0 -66
  160. package/dist/cjs/sd-thead.cjs.entry.js +0 -179
  161. package/dist/cjs/sd-tr.cjs.entry.js +0 -171
  162. package/dist/components/p-Bbs5Ws0k.js +0 -1
  163. package/dist/components/p-Biplmgfa.js +0 -1
  164. package/dist/components/p-CgL8_FSD.js +0 -1
  165. package/dist/components/p-DuMkBStM.js +0 -1
  166. package/dist/components/p-vQDL-PZ8.js +0 -1
  167. package/dist/design-system/p-109a10e4.entry.js +0 -1
  168. package/dist/design-system/p-380198bc.entry.js +0 -1
  169. package/dist/design-system/p-6b537e2f.entry.js +0 -1
  170. package/dist/design-system/p-6e90fb80.entry.js +0 -1
  171. package/dist/design-system/p-7b77c65c.entry.js +0 -1
  172. package/dist/design-system/p-8f88bd67.entry.js +0 -1
  173. package/dist/design-system/p-ba5fea6f.entry.js +0 -1
  174. package/dist/design-system/p-be54d6bd.entry.js +0 -1
  175. package/dist/design-system/p-c3379a6e.entry.js +0 -1
  176. package/dist/design-system/p-dc07d618.entry.js +0 -1
  177. package/dist/design-system/p-ef09409c.entry.js +0 -1
  178. package/dist/design-system/p-f8237991.entry.js +0 -1
  179. package/dist/esm/sd-pagination_2.entry.js +0 -424
  180. package/dist/esm/sd-tbody.entry.js +0 -64
  181. package/dist/esm/sd-thead.entry.js +0 -177
  182. package/dist/esm/sd-tr.entry.js +0 -169
@@ -57,10 +57,10 @@ const SdToast = class {
57
57
  render() {
58
58
  const typeConfig = TOAST_TYPE_CONFIG[this.type] ?? TOAST_TYPE_CONFIG.default;
59
59
  const iconSize = Number(TOAST_LAYOUT.iconSize);
60
- return (index.h("div", { key: 'd4b73e2503514143f5174bc8859baf0e59c2f8da', style: {
60
+ return (index.h("div", { key: '77954c9d285339cb48032eec5eca0dcbe308affc', style: {
61
61
  '--sd-toast-bg': typeConfig.bg,
62
62
  '--sd-toast-text': typeConfig.content,
63
- } }, index.h("div", { key: '7334daee691fb03a1005c2afac64033554489046', class: "sd-toast", role: "status", "aria-live": "polite", "aria-atomic": "true" }, this.icon && (index.h("div", { key: '297ada835b0710bf43a936b02e53b0873b7f4af3', class: "sd-toast__icon" }, index.h("sd-icon", { key: 'b5bc4716df28231dc7af15db63595ae9044189b5', name: this.icon, size: iconSize, color: typeConfig.content }))), index.h("div", { key: 'd0239c8f8b495fbdaedad0f65a6d0a0edfaada60', class: "sd-toast__content" }, index.h("span", { key: 'dc70d403673bb8f99cfd91393054a86bf17e5ac2', class: "sd-toast__message" }, this.message)), this.link && (index.h("a", { key: '1a76bcee482720693b501d3a13c54e720bbe44fc', href: this.link, class: "sd-toast__link", target: "_blank", rel: "noopener noreferrer" }, this.linkLabel || this.link)), this.useClose && (index.h("sd-ghost-button", { key: 'a8dc3c15cabf5ca4e075e75c4fb2744dd5da4fa0', class: "sd-toast__close", icon: "close", intent: this.type === 'caution' ? 'default' : 'inverse', ariaLabel: "close", size: "xs", onClick: () => this.close.emit() })))));
63
+ } }, index.h("div", { key: '73c792f19982140f91397a3ec7d6e22914ca316f', class: "sd-toast", role: "status", "aria-live": "polite", "aria-atomic": "true" }, this.icon && (index.h("div", { key: 'cc140bfd043b0d0cd6a7697053f736dac707f86b', class: "sd-toast__icon" }, index.h("sd-icon", { key: '85f38036cd39cb4d0f4a43ef0d307ef9faa03eb1', name: this.icon, size: iconSize, color: typeConfig.content }))), index.h("div", { key: '4d36e34a9ccac80fc2ed01f33b1e2aa80d70c78b', class: "sd-toast__content" }, index.h("span", { key: '9105d37004bbde90e8a7118ca5a58a6e4d6953f5', class: "sd-toast__message" }, this.message)), this.link && (index.h("a", { key: 'fdaabae7d8efb6540ce770cc5783b286789cdb3c', href: this.link, class: "sd-toast__link", target: "_blank", rel: "noopener noreferrer" }, this.linkLabel || this.link)), this.useClose && (index.h("sd-ghost-button", { key: 'c5985e50041b8f3e8c77e142fd06afaf0537de47', class: "sd-toast__close", icon: "close", intent: this.type === 'caution' ? 'default' : 'inverse', ariaLabel: "close", size: "xs", onClick: () => this.close.emit() })))));
64
64
  }
65
65
  };
66
66
  SdToast.style = sdToastCss();
@@ -120,7 +120,7 @@ const SdToggle = class {
120
120
  '--sd-toggle-content-select': TOGGLE_COLORS.content.select,
121
121
  '--sd-toggle-content-disabled': TOGGLE_COLORS.content.disabled,
122
122
  };
123
- return (index.h("label", { key: 'fe56ffe876ccc859536ca74703e0870ad97e1668', class: this.toggleClasses, style: cssVars, "aria-label": this.label || 'toggle' }, this.label, index.h("input", { key: 'f473fd71c03d0e4e3e8fb354753d769033f148f2', style: { display: 'none' }, type: "checkbox", onInput: this.handleChange })));
123
+ return (index.h("label", { key: 'e9bb126d92605cdd3a88ff1840aa79a4b66c7cf8', class: this.toggleClasses, style: cssVars, "aria-label": this.label || 'toggle' }, this.label, index.h("input", { key: '41c18a29c10ae91b84ecd6d2619a40ab99f5d151', style: { display: 'none' }, type: "checkbox", onInput: this.handleChange })));
124
124
  }
125
125
  };
126
126
  SdToggle.style = sdToggleCss();
@@ -8,6 +8,11 @@ export class SdGhostButton {
8
8
  disabled = false;
9
9
  click;
10
10
  hasWarnedMissingAriaLabel = false;
11
+ componentWillLoad() {
12
+ this.size ??= 'sm';
13
+ this.intent ??= 'default';
14
+ this.ariaLabel ??= '';
15
+ }
11
16
  handleClick = (event) => {
12
17
  if (this.disabled) {
13
18
  event.preventDefault();
@@ -32,19 +37,19 @@ export class SdGhostButton {
32
37
  render() {
33
38
  const sizeConfig = GHOST_BUTTON_SIZES[this.size];
34
39
  const contentColor = this.disabled
35
- ? GHOST_BUTTON_DISABLED_COLORS[this.intent ?? 'default']
36
- : GHOST_BUTTON_CONTENT_COLORS[this.intent ?? 'default'];
40
+ ? GHOST_BUTTON_DISABLED_COLORS[this.intent]
41
+ : GHOST_BUTTON_CONTENT_COLORS[this.intent];
37
42
  const accessibleName = this.ariaLabel.trim() || undefined;
38
- return (h("button", { key: '34c5026b4819b624b19d1773bad413b689633c2a', class: {
43
+ return (h("button", { key: 'd7f6fcbed3526ffb8b90b205dbe2bbf55abf03a0', class: {
39
44
  'sd-ghost-button': true,
40
45
  'sd-ghost-button--disabled': this.disabled,
41
46
  }, type: "button", disabled: this.disabled, "aria-label": accessibleName, style: {
42
47
  '--sd-ghost-button-size': `${sizeConfig.size}px`,
43
48
  '--sd-ghost-button-radius': `${GHOST_BUTTON_RADIUS[this.size]}px`,
44
- '--sd-ghost-button-hover-bg': GHOST_BUTTON_HOVER_BG_COLORS[this.intent ?? 'default'],
49
+ '--sd-ghost-button-hover-bg': GHOST_BUTTON_HOVER_BG_COLORS[this.intent],
45
50
  '--sd-ghost-button-hover-opacity': GHOST_BUTTON_HOVER_OPACITY,
46
51
  '--sd-ghost-button-accent': GHOST_BUTTON_FOCUS_RING_COLOR,
47
- }, onClick: this.handleClick }, h("sd-icon", { key: '063f7cfabfdbf0f4f2f4c1a2c811e6c3734d941f', name: this.icon, size: sizeConfig.icon, color: contentColor })));
52
+ }, onClick: this.handleClick }, h("sd-icon", { key: '9efc3a3fbf7878a9a50b2efbf054b335d9cddfe0', name: this.icon, size: sizeConfig.icon, color: contentColor })));
48
53
  }
49
54
  static get is() { return "sd-ghost-button"; }
50
55
  static get originalStyleUrls() {
@@ -42,7 +42,7 @@ export class SdLoadingModal {
42
42
  '--sd-loading-modal-width': this.toCssSize(this.width) ?? `${LOADING_MODAL_LAYOUT.minWidth}px`,
43
43
  '--sd-loading-modal-height': this.toCssSize(this.height) ?? `${LOADING_MODAL_LAYOUT.minHeight}px`,
44
44
  };
45
- return (h(Host, { key: '91fe223de0146ad3a631284728597d6dca312a7e', style: hostStyle }, h("div", { key: 'e3284b3e8fd775b0128ae2e7495141d04d07eaa8', class: "sd-loading-modal" }, h("div", { key: '4975a8e75f7cf983c54a015f25520c34aef855a5', class: "sd-loading-modal__content" }, this.state === 'loading' ? (h("sd-circle-progress", { indeterminate: true })) : (h("sd-icon", { class: "sd-loading-modal__icon", name: "warningOutline", size: LOADING_MODAL_LAYOUT.contentSize, color: LOADING_MODAL_COLORS.errorIcon }))), h("p", { key: 'c3d09b0c957a0cf2097772499a91bb8f86f19e98', class: "sd-loading-modal__message" }, this.resolvedMessage), this.useButton && (h("div", { key: 'c5c1fa02e3c7c3dd3747a1609dc1fa9aab70c61c', class: "sd-loading-modal__button" }, h("sd-button-v2", { key: '849bdd00035bfa602ec814e55b585588f15871c6', name: LOADING_MODAL_BUTTON_PRESET, label: this.resolvedButtonLabel, onSdClick: this.handleClick }))))));
45
+ return (h(Host, { key: '3113deea33ae8f08ac631e53744c94dfc0ffe829', style: hostStyle }, h("div", { key: 'd6afa60fe2cf83bd1afd707e8aa218d2c66d761b', class: "sd-loading-modal" }, h("div", { key: 'be70c3adcbea4fca528f459ad7fbc33e82649073', class: "sd-loading-modal__content" }, this.state === 'loading' ? (h("sd-circle-progress", { indeterminate: true })) : (h("sd-icon", { class: "sd-loading-modal__icon", name: "warningOutline", size: LOADING_MODAL_LAYOUT.contentSize, color: LOADING_MODAL_COLORS.errorIcon }))), h("div", { key: '9aa73a423423e093606e58796490be123e5fa52a', class: "sd-loading-modal__message-wrapper" }, Array.isArray(this.resolvedMessage) ? (this.resolvedMessage.map(message => (h("p", { class: "sd-loading-modal__message" }, message)))) : (h("p", { class: "sd-loading-modal__message" }, this.resolvedMessage))), this.useButton && (h("div", { key: '59fd5cf61b53f1362974a7b92ad6e6319f141def', class: "sd-loading-modal__button" }, h("sd-button-v2", { key: '9bfe53124cd1f8a3008d8a2ccc6ea9d8af5d62c2', name: LOADING_MODAL_BUTTON_PRESET, label: this.resolvedButtonLabel, onSdClick: this.handleClick }))))));
46
46
  }
47
47
  static get is() { return "sd-loading-modal"; }
48
48
  static get originalStyleUrls() {
@@ -88,8 +88,8 @@ export class SdLoadingModal {
88
88
  "type": "string",
89
89
  "mutable": false,
90
90
  "complexType": {
91
- "original": "string",
92
- "resolved": "string",
91
+ "original": "string | string[]",
92
+ "resolved": "string | string[]",
93
93
  "references": {}
94
94
  },
95
95
  "required": false,
@@ -5,10 +5,8 @@ const ANIMATION_DURATION = 350;
5
5
  export class SdModalContainer {
6
6
  el;
7
7
  autoRemove = false;
8
- entry;
9
- isVisible = false;
10
- backdropVisible = false;
11
- layerRef;
8
+ entries = [];
9
+ layerRefs = new Map();
12
10
  async open(options, modalRef) {
13
11
  const id = `modal-${++modalIdCounter}`;
14
12
  const modalEl = this.createConfirmModal(id, options);
@@ -19,6 +17,7 @@ export class SdModalContainer {
19
17
  modalRef,
20
18
  persistent: !!options.persistent,
21
19
  closing: false,
20
+ backdropVisible: false,
22
21
  });
23
22
  return id;
24
23
  }
@@ -32,6 +31,7 @@ export class SdModalContainer {
32
31
  modalRef,
33
32
  persistent: !!options.persistent,
34
33
  closing: false,
34
+ backdropVisible: false,
35
35
  });
36
36
  return id;
37
37
  }
@@ -46,91 +46,93 @@ export class SdModalContainer {
46
46
  modalRef,
47
47
  persistent: !!options.persistent,
48
48
  closing: false,
49
+ backdropVisible: false,
49
50
  });
50
51
  return id;
51
52
  }
52
53
  componentDidRender() {
53
- if (!this.entry || this.entry.closing || !this.layerRef)
54
+ if (!Array.isArray(this.entries))
54
55
  return;
55
- if (this.entry.modalEl.isConnected)
56
- return;
57
- const { id, modalEl } = this.entry;
58
- this.layerRef.appendChild(modalEl);
59
- this.waitForModalReady(modalEl).then(() => {
60
- requestAnimationFrame(() => {
61
- if (!this.entry || this.entry.id !== id || this.entry.closing || !modalEl.isConnected)
62
- return;
63
- this.backdropVisible = true;
64
- modalEl.classList.add('sd-modal-container__modal--visible');
56
+ for (const entry of this.entries) {
57
+ if (entry.closing || entry.modalEl.isConnected)
58
+ continue;
59
+ const layerRef = this.layerRefs.get(entry.id);
60
+ if (!layerRef)
61
+ continue;
62
+ const { id, modalEl } = entry;
63
+ layerRef.appendChild(modalEl);
64
+ this.waitForModalReady(modalEl).then(() => {
65
+ requestAnimationFrame(() => {
66
+ const current = this.entries.find(e => e.id === id);
67
+ if (!current || current.closing || !modalEl.isConnected)
68
+ return;
69
+ this.entries = this.entries.map(e => e.id === id ? { ...e, backdropVisible: true } : e);
70
+ modalEl.classList.add('sd-modal-container__modal--visible');
71
+ });
65
72
  });
66
- });
73
+ }
67
74
  }
68
75
  disconnectedCallback() {
69
- if (this.entry?.dismissTimerId)
70
- clearTimeout(this.entry.dismissTimerId);
71
- if (this.entry)
72
- unregisterModal(this.entry.id);
76
+ for (const entry of this.entries ?? []) {
77
+ if (entry.dismissTimerId)
78
+ clearTimeout(entry.dismissTimerId);
79
+ unregisterModal(entry.id);
80
+ }
73
81
  }
74
82
  async dismissById(id, reason) {
75
- if (this.entry?.id !== id)
83
+ const entry = this.entries.find(e => e.id === id);
84
+ if (!entry)
76
85
  return;
77
- this.requestDismiss(reason);
86
+ this.requestDismiss(id, reason);
78
87
  }
79
88
  async update(id, props) {
80
- if (!this.entry || this.entry.id !== id || this.entry.closing)
89
+ const entry = this.entries.find(e => e.id === id && !e.closing);
90
+ if (!entry)
81
91
  return;
82
- const tag = this.entry.modalEl.tagName.toLowerCase();
92
+ const tag = entry.modalEl.tagName.toLowerCase();
83
93
  if (tag === 'sd-loading-modal') {
84
- this.applyLoadingProps(this.entry.modalEl, props);
94
+ this.applyLoadingProps(entry.modalEl, props);
85
95
  return;
86
96
  }
87
- this.applyProps(this.entry.modalEl, props);
97
+ this.applyProps(entry.modalEl, props);
88
98
  }
89
99
  mountEntry(entry) {
90
- if (this.entry) {
91
- throw new Error('[sd-modal-container] This instance already manages an active modal.');
92
- }
93
- this.entry = entry;
94
- this.backdropVisible = false;
95
- this.isVisible = true;
100
+ this.entries = [...(this.entries ?? []), entry];
96
101
  registerModal({
97
102
  id: entry.id,
98
103
  persistent: entry.persistent,
99
- requestClose: () => this.dispatchClose(),
104
+ requestClose: () => this.dispatchClose(entry.id),
100
105
  shake: () => this.shakeModal(entry.modalEl),
101
106
  setZIndex: zIndex => {
102
107
  this.el.style.setProperty('--sd-modal-container-z-index', String(zIndex));
103
108
  },
104
109
  });
105
110
  }
106
- attachModalEventListeners(_id, modalEl) {
107
- modalEl.addEventListener('sdOk', () => this.requestDismiss('confirm'));
108
- modalEl.addEventListener('sdCancel', () => this.requestDismiss('cancel'));
109
- modalEl.addEventListener('sdClose', () => this.requestDismiss('close'));
111
+ attachModalEventListeners(id, modalEl) {
112
+ modalEl.addEventListener('sdOk', () => this.requestDismiss(id, 'confirm'));
113
+ modalEl.addEventListener('sdCancel', () => this.requestDismiss(id, 'cancel'));
114
+ modalEl.addEventListener('sdClose', () => this.requestDismiss(id, 'close'));
110
115
  }
111
- attachLoadingModalEventListeners(_id, modalEl) {
116
+ attachLoadingModalEventListeners(id, modalEl) {
112
117
  modalEl.addEventListener('sdClick', () => {
113
- this.entry?.modalRef._triggerClick?.();
118
+ const entry = this.entries.find(e => e.id === id);
119
+ entry?.modalRef._triggerClick?.();
114
120
  });
115
121
  }
116
- dispatchClose() {
117
- this.entry?.modalEl.dispatchEvent(new CustomEvent('sdClose'));
122
+ dispatchClose(id) {
123
+ const entry = this.entries.find(e => e.id === id);
124
+ entry?.modalEl.dispatchEvent(new CustomEvent('sdClose'));
118
125
  }
119
- requestDismiss(reason) {
120
- const currentEntry = this.entry;
126
+ requestDismiss(id, reason) {
127
+ const currentEntry = this.entries.find(e => e.id === id);
121
128
  if (!currentEntry || currentEntry.closing)
122
129
  return;
123
130
  currentEntry.modalEl.classList.remove('sd-modal-container__modal--visible');
124
131
  const dismissTimerId = setTimeout(() => {
125
- this.finalizeDismiss(currentEntry.id);
132
+ this.finalizeDismiss(id);
126
133
  }, ANIMATION_DURATION);
127
- setModalInteractive(currentEntry.id, false);
128
- this.entry = {
129
- ...currentEntry,
130
- closing: true,
131
- dismissTimerId,
132
- };
133
- this.backdropVisible = false;
134
+ setModalInteractive(id, false);
135
+ this.entries = (this.entries ?? []).map(e => e.id === id ? { ...e, closing: true, dismissTimerId, backdropVisible: false } : e);
134
136
  if (reason === 'confirm')
135
137
  currentEntry.modalRef._triggerOk();
136
138
  else if (reason === 'cancel')
@@ -139,18 +141,17 @@ export class SdModalContainer {
139
141
  currentEntry.modalRef._triggerClose();
140
142
  }
141
143
  finalizeDismiss(id) {
142
- const currentEntry = this.entry;
143
- if (!currentEntry || currentEntry.id !== id)
144
+ const currentEntry = this.entries.find(e => e.id === id);
145
+ if (!currentEntry)
144
146
  return;
145
147
  if (currentEntry.dismissTimerId)
146
148
  clearTimeout(currentEntry.dismissTimerId);
147
149
  currentEntry.modalEl.remove();
148
150
  unregisterModal(id);
149
151
  currentEntry.modalRef._triggerDismissed();
150
- this.entry = undefined;
151
- this.backdropVisible = false;
152
- this.isVisible = false;
153
- if (this.autoRemove) {
152
+ this.layerRefs.delete(id);
153
+ this.entries = (this.entries ?? []).filter(e => e.id !== id);
154
+ if (this.autoRemove && this.entries.length === 0) {
154
155
  this.el.remove();
155
156
  }
156
157
  }
@@ -171,8 +172,14 @@ export class SdModalContainer {
171
172
  applyLoadingProps(el, options) {
172
173
  if (this.hasOwnProp(options, 'state'))
173
174
  this.setAttr(el, 'state', options.state);
174
- if (this.hasOwnProp(options, 'message'))
175
- this.setAttr(el, 'message', options.message);
175
+ if (this.hasOwnProp(options, 'message')) {
176
+ if (Array.isArray(options.message)) {
177
+ el.message = options.message;
178
+ }
179
+ else {
180
+ this.setAttr(el, 'message', options.message);
181
+ }
182
+ }
176
183
  if (this.hasOwnProp(options, 'useButton')) {
177
184
  if (options.useButton)
178
185
  el.setAttribute('use-button', '');
@@ -218,11 +225,11 @@ export class SdModalContainer {
218
225
  if (this.hasOwnProp(options, 'tagContents'))
219
226
  el.tagContents = options.tagContents;
220
227
  }
221
- handleBackdropClick = () => {
222
- if (!this.entry || !isTopInteractiveModal(this.entry.id))
228
+ handleBackdropClick(id) {
229
+ if (!isTopInteractiveModal(id))
223
230
  return;
224
- requestCloseForModal(this.entry.id);
225
- };
231
+ requestCloseForModal(id);
232
+ }
226
233
  shakeModal(modalEl) {
227
234
  const cls = 'sd-modal-container__modal--shake';
228
235
  modalEl.classList.remove(cls);
@@ -251,14 +258,15 @@ export class SdModalContainer {
251
258
  el.setAttribute(name, value);
252
259
  }
253
260
  render() {
254
- if (!this.isVisible || !this.entry)
261
+ if (!this.entries?.length)
255
262
  return null;
256
- return (h("div", { class: "sd-modal-container" }, h("div", { class: "sd-modal-container__layer", "data-modal-id": this.entry.id, ref: el => {
257
- this.layerRef = el;
263
+ return (h("div", { class: "sd-modal-container" }, this.entries.map((entry, index) => (h("div", { key: entry.id, class: "sd-modal-container__layer", style: { zIndex: String(index + 1) }, "data-modal-id": entry.id, ref: el => {
264
+ if (el)
265
+ this.layerRefs.set(entry.id, el);
258
266
  } }, h("div", { class: {
259
267
  'sd-modal-container__backdrop': true,
260
- 'sd-modal-container__backdrop--visible': this.backdropVisible,
261
- }, onClick: this.handleBackdropClick }))));
268
+ 'sd-modal-container__backdrop--visible': entry.backdropVisible,
269
+ }, onClick: () => this.handleBackdropClick(entry.id) }))))));
262
270
  }
263
271
  static get is() { return "sd-modal-container"; }
264
272
  static get originalStyleUrls() {
@@ -297,9 +305,7 @@ export class SdModalContainer {
297
305
  }
298
306
  static get states() {
299
307
  return {
300
- "entry": {},
301
- "isVisible": {},
302
- "backdropVisible": {}
308
+ "entries": {}
303
309
  };
304
310
  }
305
311
  static get methods() {
@@ -7,6 +7,11 @@ export class SdRadioButton {
7
7
  disabled = false;
8
8
  name;
9
9
  change;
10
+ componentWillLoad() {
11
+ this.size ??= 'sm';
12
+ this.options ??= [];
13
+ this.disabled ??= false;
14
+ }
10
15
  handleRadioChange = (optionValue, optionDisabled) => {
11
16
  if (this.disabled || optionDisabled)
12
17
  return;
@@ -67,7 +72,7 @@ export class SdRadioButton {
67
72
  '--sd-radio-button-content-select': RADIO_BUTTON_COLORS.content.select,
68
73
  '--sd-radio-button-content-disabled': RADIO_BUTTON_COLORS.content.disabled,
69
74
  };
70
- return (h("div", { key: '67c8e7ad03fb6ee4cabd06591e3e11e5d38914f0', class: this.getGroupClasses(), style: cssVars, role: "radiogroup", "aria-disabled": this.disabled.toString() }, this.options.map(option => {
75
+ return (h("div", { key: 'fbc0246d9cf615956121295e29bf8c702ee73edc', class: this.getGroupClasses(), style: cssVars, role: "radiogroup", "aria-disabled": this.disabled.toString() }, this.options.map(option => {
71
76
  const isSelected = this.isOptionSelected(option);
72
77
  const isDisabled = this.isOptionDisabled(option);
73
78
  return (h("label", { key: `radio-${option.value}`, class: this.getButtonClasses(option), "aria-label": option.label || 'radio option', "data-label": option.label }, h("input", { type: "radio", name: this.groupName, value: option.value.toString(), checked: isSelected, disabled: isDisabled, onInput: () => this.handleRadioChange(option.value, option.disabled) }), option.label && h("span", { class: "sd-radio-button__label" }, option.label)));
@@ -5,6 +5,8 @@ export class SdSelectV2Listbox {
5
5
  options = [];
6
6
  value = null;
7
7
  emitValue = false;
8
+ useSearch = false;
9
+ useSelectAll = false;
8
10
  triggerWidth = '200px';
9
11
  maxWidth = '640px';
10
12
  maxHeight = '260px';
@@ -22,7 +24,40 @@ export class SdSelectV2Listbox {
22
24
  get isMulti() {
23
25
  return this.type === 'multi' || this.type === 'multi_depth';
24
26
  }
27
+ static SELECT_ALL_OPTION = {
28
+ value: '__select_all__',
29
+ label: '전체',
30
+ };
31
+ get showSelectAll() {
32
+ return this.useSelectAll && this.isMulti;
33
+ }
34
+ getAllNonDisabledLeaves() {
35
+ const collect = (opts) => opts.flatMap(o => {
36
+ if (o.disabled)
37
+ return [];
38
+ if (o.children)
39
+ return collect(o.children);
40
+ return [o];
41
+ });
42
+ return collect(this.options);
43
+ }
44
+ get selectAllState() {
45
+ if (!this.showSelectAll)
46
+ return false;
47
+ const allLeaves = this.getAllNonDisabledLeaves();
48
+ if (allLeaves.length === 0)
49
+ return false;
50
+ const selectedValues = this.getSelectedValues();
51
+ const selectedCount = allLeaves.filter(l => selectedValues.has(l.value)).length;
52
+ if (selectedCount === 0)
53
+ return false;
54
+ if (selectedCount === allLeaves.length)
55
+ return true;
56
+ return null;
57
+ }
25
58
  get showSearch() {
59
+ if (!this.useSearch)
60
+ return false;
26
61
  const count = this.isDepth ? countLeaves(this.options) : this.options.length;
27
62
  return count >= SEARCH_THRESHOLD;
28
63
  }
@@ -124,6 +159,9 @@ export class SdSelectV2Listbox {
124
159
  }
125
160
  get navigableOptions() {
126
161
  const items = [];
162
+ if (this.showSelectAll) {
163
+ items.push(SdSelectV2Listbox.SELECT_ALL_OPTION);
164
+ }
127
165
  const walk = (opts) => {
128
166
  for (const opt of opts) {
129
167
  const isGroup = !!opt.children;
@@ -137,6 +175,22 @@ export class SdSelectV2Listbox {
137
175
  walk(this.filteredOptions);
138
176
  return items;
139
177
  }
178
+ isSelectAllOption(option) {
179
+ return this.showSelectAll && option.value === SdSelectV2Listbox.SELECT_ALL_OPTION.value;
180
+ }
181
+ emitSelectAll() {
182
+ if (!this.showSelectAll)
183
+ return;
184
+ const allLeaves = this.getAllNonDisabledLeaves();
185
+ this.optionSelect.emit({
186
+ option: { ...SdSelectV2Listbox.SELECT_ALL_OPTION, children: allLeaves },
187
+ leaves: allLeaves,
188
+ });
189
+ }
190
+ handleSelectAllClick = (e) => {
191
+ e.stopPropagation();
192
+ this.emitSelectAll();
193
+ };
140
194
  isOptionFocused(option) {
141
195
  if (this.focusedIndex < 0)
142
196
  return false;
@@ -209,7 +263,13 @@ export class SdSelectV2Listbox {
209
263
  return;
210
264
  e.preventDefault();
211
265
  e.stopPropagation();
212
- this.emitOptionSelect(items[this.focusedIndex]);
266
+ const focused = items[this.focusedIndex];
267
+ if (this.isSelectAllOption(focused)) {
268
+ this.emitSelectAll();
269
+ }
270
+ else {
271
+ this.emitOptionSelect(focused);
272
+ }
213
273
  }
214
274
  };
215
275
  /**
@@ -288,9 +348,9 @@ export class SdSelectV2Listbox {
288
348
  '--listbox-max-height': this.maxHeight,
289
349
  '--listbox-radius': `${LIST_BOX_LAYOUT.radius}px`,
290
350
  };
291
- return (h("div", { key: 'd4d80ebd565436cd929961a2f9ce50adf92c124b', class: "sd-select-v2-listbox", style: cssVars }, this.showSearch && (h("sd-select-v2-list-item-search", { key: 'bd549975fe6187aa7e77e718c8d2ba4a6d6e33de', isScrolled: this.isScrolled, onSdSearchFilter: this.handleSearchFilter })), h("div", { key: '4ac6a1512781942fef3e42d6ca32762962df1836', class: "sd-select-v2-listbox__list", onScroll: this.handleScroll, ref: el => {
351
+ return (h("div", { key: '34efe12dfb3829dd7024eb473d0bb6460ad07e61', class: "sd-select-v2-listbox", style: cssVars }, this.showSearch && (h("sd-select-v2-list-item-search", { key: 'd59a97386213e93f905a817b7c3242d1fb5d5035', isScrolled: this.isScrolled, onSdSearchFilter: this.handleSearchFilter })), h("div", { key: '0feb6763afe5ac661de85df2c1a3683e56b17035', class: "sd-select-v2-listbox__list", onScroll: this.handleScroll, ref: el => {
292
352
  this.listEl = el;
293
- } }, this.isEmpty ? (h("div", { class: "sd-select-v2-listbox__empty" }, EMPTY_MESSAGE)) : this.isDepth ? (this.renderOptions(this.filteredOptions)) : (this.filteredOptions.map(option => (h("sd-select-v2-list-item", { option: option, depth: 1, isSelected: this.isOptionSelected(option), isFocused: this.isOptionFocused(option), useCheckbox: this.isMulti, onSdListItemClick: this.handleOptionClick, onMouseEnter: () => this.handleOptionHover(option) })))))));
353
+ } }, this.showSelectAll && (h("sd-select-v2-list-item", { key: 'b4a765ddfadd39808baafd925d0cd2fcdab78800', option: SdSelectV2Listbox.SELECT_ALL_OPTION, depth: 1, isSelected: this.selectAllState, isFocused: this.isOptionFocused(SdSelectV2Listbox.SELECT_ALL_OPTION), useCheckbox: true, onSdListItemClick: this.handleSelectAllClick, onMouseEnter: () => this.handleOptionHover(SdSelectV2Listbox.SELECT_ALL_OPTION) })), this.isEmpty ? (h("div", { class: "sd-select-v2-listbox__empty" }, EMPTY_MESSAGE)) : this.isDepth ? (this.renderOptions(this.filteredOptions)) : (this.filteredOptions.map(option => (h("sd-select-v2-list-item", { option: option, depth: 1, isSelected: this.isOptionSelected(option), isFocused: this.isOptionFocused(option), useCheckbox: this.isMulti, onSdListItemClick: this.handleOptionClick, onMouseEnter: () => this.handleOptionHover(option) })))))));
294
354
  }
295
355
  static get is() { return "sd-select-v2-listbox"; }
296
356
  static get encapsulation() { return "shadow"; }
@@ -405,6 +465,46 @@ export class SdSelectV2Listbox {
405
465
  "attribute": "emit-value",
406
466
  "defaultValue": "false"
407
467
  },
468
+ "useSearch": {
469
+ "type": "boolean",
470
+ "mutable": false,
471
+ "complexType": {
472
+ "original": "boolean",
473
+ "resolved": "boolean",
474
+ "references": {}
475
+ },
476
+ "required": false,
477
+ "optional": false,
478
+ "docs": {
479
+ "tags": [],
480
+ "text": ""
481
+ },
482
+ "getter": false,
483
+ "setter": false,
484
+ "reflect": false,
485
+ "attribute": "use-search",
486
+ "defaultValue": "false"
487
+ },
488
+ "useSelectAll": {
489
+ "type": "boolean",
490
+ "mutable": false,
491
+ "complexType": {
492
+ "original": "boolean",
493
+ "resolved": "boolean",
494
+ "references": {}
495
+ },
496
+ "required": false,
497
+ "optional": false,
498
+ "docs": {
499
+ "tags": [],
500
+ "text": ""
501
+ },
502
+ "getter": false,
503
+ "setter": false,
504
+ "reflect": false,
505
+ "attribute": "use-select-all",
506
+ "defaultValue": "false"
507
+ },
408
508
  "triggerWidth": {
409
509
  "type": "string",
410
510
  "mutable": false,
@@ -42,13 +42,13 @@ export class SdSelectV2Trigger {
42
42
  ? SELECT_COLORS.icon.disabled
43
43
  : SELECT_COLORS.icon.default,
44
44
  };
45
- return (h("div", { key: '7c4f60c972c17b5954cbf0d0cc7ee38c8e6c16a3', ref: el => {
45
+ return (h("div", { key: 'ec8bf544b2878082a046fbe881afa2369709033f', ref: el => {
46
46
  this.triggerEl = el;
47
47
  }, tabindex: this.disabled ? -1 : 0, class: {
48
48
  'sd-select-v2-trigger': true,
49
49
  'sd-select-v2-trigger--open': this.isOpen,
50
50
  'sd-select-v2-trigger--disabled': this.disabled,
51
- }, style: cssVars, onClick: this.handleClick, onFocus: this.handleFocus, onBlur: this.handleBlur }, h("div", { key: 'de5f5a44626fce29c5a83cf0a14dd03352d40b57', class: "sd-select-v2-trigger__content" }, h("span", { key: 'a36a013e9ef359160c2b9d24b42ee6f228aca302', class: "sd-select-v2-trigger__text" }, hasValue ? this.displayText : this.placeholder), h("sd-icon", { key: '4bfcfce96fbe2008517ee26d7802d4492292faa5', name: "chevronDown", size: 12, color: "var(--trigger-icon-color)", class: {
51
+ }, style: cssVars, onClick: this.handleClick, onFocus: this.handleFocus, onBlur: this.handleBlur }, h("div", { key: '1a6a5cf66208aa5a996e788886ff593ec0830d51', class: "sd-select-v2-trigger__content" }, h("span", { key: 'bd905f9149f3842e5e169e1a6086b33164b0ab66', class: "sd-select-v2-trigger__text" }, hasValue ? this.displayText : this.placeholder), h("sd-icon", { key: 'cc487e430f42fdd61540e265a9e5bb01e9045a58', name: "chevronDown", size: 12, color: "var(--trigger-icon-color)", class: {
52
52
  'sd-select-v2-trigger__icon': true,
53
53
  'sd-select-v2-trigger__icon--open': this.isOpen,
54
54
  } }))));