@iyulab/components 1.3.4 → 1.5.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 (165) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/_virtual/_glob-assets_raw/alert-circle-fill.svg.1e438750.js +4 -0
  3. package/dist/_virtual/_glob-assets_raw/alert-triangle-fill.svg.1a8797c4.js +4 -0
  4. package/dist/_virtual/_glob-assets_raw/bell-fill.svg.d37c41d9.js +1 -1
  5. package/dist/_virtual/_glob-assets_raw/check.svg.4690b01e.js +4 -0
  6. package/dist/_virtual/_glob-assets_raw/chevron-down.svg.0ccd06ea.js +1 -1
  7. package/dist/_virtual/_glob-assets_raw/chevron-left.svg.b4601050.js +1 -1
  8. package/dist/_virtual/_glob-assets_raw/chevron-right.svg.0711bb67.js +1 -1
  9. package/dist/_virtual/_glob-assets_raw/chevron-up.svg.ed917211.js +1 -1
  10. package/dist/_virtual/_glob-assets_raw/circle-check-fill.svg.3f0fcb72.js +4 -0
  11. package/dist/_virtual/_glob-assets_raw/copy.svg.6192f853.js +4 -0
  12. package/dist/_virtual/_glob-assets_raw/dark.css.e8ac080d.js +1 -1
  13. package/dist/_virtual/_glob-assets_raw/eye-off.svg.7aa25df0.js +4 -0
  14. package/dist/_virtual/_glob-assets_raw/eye.svg.2e5e9c4c.js +1 -1
  15. package/dist/_virtual/_glob-assets_raw/info-circle-fill.svg.6580071d.js +1 -1
  16. package/dist/_virtual/_glob-assets_raw/minus.svg.4610de75.js +4 -0
  17. package/dist/_virtual/_glob-assets_raw/plus.svg.d83ead68.js +4 -0
  18. package/dist/_virtual/_glob-assets_raw/search.svg.0ba2012d.js +1 -1
  19. package/dist/_virtual/_glob-assets_raw/star-fill.svg.f24b5a2d.js +1 -1
  20. package/dist/_virtual/_glob-assets_raw/star.svg.4af61468.js +1 -1
  21. package/dist/_virtual/_glob-assets_raw/x.svg.5596f6bb.js +4 -0
  22. package/dist/assets/locales/ar.json.js +23 -0
  23. package/dist/assets/locales/de.json.js +23 -0
  24. package/dist/assets/locales/en.json.js +23 -0
  25. package/dist/assets/locales/es.json.js +23 -0
  26. package/dist/assets/locales/fr.json.js +23 -0
  27. package/dist/assets/locales/id.json.js +23 -0
  28. package/dist/assets/locales/ja.json.js +23 -0
  29. package/dist/assets/locales/ko.json.js +23 -0
  30. package/dist/assets/locales/pt-BR.json.js +23 -0
  31. package/dist/assets/locales/ru.json.js +23 -0
  32. package/dist/assets/locales/th.json.js +23 -0
  33. package/dist/assets/locales/vi.json.js +23 -0
  34. package/dist/assets/locales/zh-CN.json.js +23 -0
  35. package/dist/assets/locales/zh-TW.json.js +23 -0
  36. package/dist/components/UFloatingElement.js +13 -4
  37. package/dist/components/UFormControlElement.d.ts +38 -8
  38. package/dist/components/UFormControlElement.js +61 -6
  39. package/dist/components/UOverlayElement.d.ts +4 -0
  40. package/dist/components/UOverlayElement.js +14 -4
  41. package/dist/components/alert/UAlert.js +14 -8
  42. package/dist/components/alert/UAlert.styles.js +0 -6
  43. package/dist/components/avatar/UAvatar.js +1 -1
  44. package/dist/components/badge/UBadge.d.ts +1 -1
  45. package/dist/components/badge/UBadge.js +2 -2
  46. package/dist/components/badge/UBadge.styles.js +1 -1
  47. package/dist/components/breadcrumb/UBreadcrumb.js +1 -1
  48. package/dist/components/breadcrumb-item/UBreadcrumbItem.js +1 -1
  49. package/dist/components/button/UButton.d.ts +6 -11
  50. package/dist/components/button/UButton.js +1 -1
  51. package/dist/components/button/UButton.styles.js +50 -51
  52. package/dist/components/button-group/UButtonGroup.js +1 -1
  53. package/dist/components/card/UCard.js +1 -1
  54. package/dist/components/carousel/UCarousel.js +2 -2
  55. package/dist/components/checkbox/UCheckbox.d.ts +4 -1
  56. package/dist/components/checkbox/UCheckbox.js +12 -9
  57. package/dist/components/checkbox/UCheckbox.styles.js +12 -7
  58. package/dist/components/chip/UChip.js +8 -5
  59. package/dist/components/copy-button/UCopyButton.d.ts +47 -0
  60. package/dist/components/copy-button/UCopyButton.js +94 -0
  61. package/dist/components/copy-button/UCopyButton.styles.js +21 -0
  62. package/dist/components/dialog/UDialog.js +3 -3
  63. package/dist/components/divider/UDivider.js +1 -1
  64. package/dist/components/drawer/UDrawer.js +3 -3
  65. package/dist/components/drawer/UDrawer.styles.js +0 -6
  66. package/dist/components/field/UField.js +1 -1
  67. package/dist/components/form/UForm.js +1 -1
  68. package/dist/components/icon/UIcon.js +1 -1
  69. package/dist/components/icon-button/UIconButton.d.ts +0 -1
  70. package/dist/components/icon-button/UIconButton.js +2 -7
  71. package/dist/components/icon-button/UIconButton.styles.js +2 -2
  72. package/dist/components/input/UInput.d.ts +2 -3
  73. package/dist/components/input/UInput.js +39 -11
  74. package/dist/components/input/UInput.styles.js +1 -4
  75. package/dist/components/menu/UMenu.js +1 -1
  76. package/dist/components/menu-item/UMenuItem.js +2 -2
  77. package/dist/components/menu-item/UMenuItem.styles.js +4 -3
  78. package/dist/components/option/UOption.d.ts +4 -1
  79. package/dist/components/option/UOption.js +11 -5
  80. package/dist/components/option/UOption.styles.js +5 -4
  81. package/dist/components/panel/UPanel.js +1 -1
  82. package/dist/components/popover/UPopover.js +1 -1
  83. package/dist/components/progress-bar/UProgressBar.js +1 -1
  84. package/dist/components/progress-bar/UProgressBar.styles.js +2 -2
  85. package/dist/components/progress-ring/UProgressRing.js +1 -1
  86. package/dist/components/progress-ring/UProgressRing.styles.js +2 -2
  87. package/dist/components/radio/URadio.d.ts +1 -1
  88. package/dist/components/radio/URadio.js +5 -6
  89. package/dist/components/radio/URadio.styles.js +21 -16
  90. package/dist/components/rating/URating.d.ts +3 -2
  91. package/dist/components/rating/URating.js +30 -37
  92. package/dist/components/select/USelect.d.ts +8 -5
  93. package/dist/components/select/USelect.js +30 -42
  94. package/dist/components/select/USelect.styles.js +5 -5
  95. package/dist/components/skeleton/USkeleton.js +1 -1
  96. package/dist/components/slider/USlider.d.ts +3 -2
  97. package/dist/components/slider/USlider.js +20 -30
  98. package/dist/components/slider/USlider.styles.js +2 -2
  99. package/dist/components/spinner/USpinner.js +1 -1
  100. package/dist/components/spinner/USpinner.styles.js +1 -1
  101. package/dist/components/split-panel/USplitPanel.js +25 -13
  102. package/dist/components/switch/USwitch.d.ts +4 -1
  103. package/dist/components/switch/USwitch.js +11 -8
  104. package/dist/components/switch/USwitch.styles.js +5 -1
  105. package/dist/components/tab/UTab.js +7 -4
  106. package/dist/components/tab-panel/UTabPanel.d.ts +5 -0
  107. package/dist/components/tab-panel/UTabPanel.js +12 -4
  108. package/dist/components/tab-panel/UTabPanel.styles.js +7 -3
  109. package/dist/components/tag/UTag.js +1 -1
  110. package/dist/components/tag/UTag.styles.js +14 -13
  111. package/dist/components/textarea/UTextarea.d.ts +1 -1
  112. package/dist/components/textarea/UTextarea.js +17 -6
  113. package/dist/components/tooltip/UTooltip.js +1 -1
  114. package/dist/components/tree/UTree.js +1 -1
  115. package/dist/components/tree-item/UTreeItem.js +11 -5
  116. package/dist/components/tree-item/UTreeItem.styles.js +5 -4
  117. package/dist/index.d.ts +3 -4
  118. package/dist/index.js +7 -8
  119. package/dist/react/UCopyButton.d.ts +10 -0
  120. package/dist/react/UCopyButton.js +12 -0
  121. package/dist/react/UTabPanel.d.ts +1 -0
  122. package/dist/react/UTabPanel.js +3 -1
  123. package/dist/react/index.d.ts +1 -0
  124. package/dist/react/index.js +1 -0
  125. package/dist/styles/dark.css +99 -99
  126. package/dist/utilities/Locale.d.ts +38 -0
  127. package/dist/utilities/Locale.js +93 -0
  128. package/dist/utilities/Toast.d.ts +9 -0
  129. package/dist/utilities/Toast.js +15 -7
  130. package/dist/utilities/elements.d.ts +0 -23
  131. package/dist/utilities/elements.js +1 -34
  132. package/dist/utilities/icons.d.ts +1 -1
  133. package/dist/utilities/icons.js +22 -25
  134. package/package.json +2 -3
  135. package/skills/iyulab-components/SKILL.md +2 -3
  136. package/skills/iyulab-components/references/components/input.md +1 -2
  137. package/skills/iyulab-components/references/components/option.md +1 -0
  138. package/skills/iyulab-components/references/components/select.md +1 -2
  139. package/skills/iyulab-components/references/components/tab-panel.md +6 -0
  140. package/skills/iyulab-components/references/extensions/form-control.md +22 -6
  141. package/skills/iyulab-components/references/usage.md +11 -0
  142. package/skills/iyulab-components/references/utilities/elements.md +1 -17
  143. package/skills/iyulab-components/references/utilities/locale.md +36 -0
  144. package/skills/iyulab-components/references/utilities/theme.md +12 -0
  145. package/skills/iyulab-components/references/utilities/toast.md +6 -0
  146. package/dist/_virtual/_glob-assets_raw/check-circle-fill.svg.51c33a2a.js +0 -4
  147. package/dist/_virtual/_glob-assets_raw/check-lg.svg.371c5e78.js +0 -4
  148. package/dist/_virtual/_glob-assets_raw/dash-lg.svg.b40b8b3a.js +0 -4
  149. package/dist/_virtual/_glob-assets_raw/exclamation-circle-fill.svg.dc8c523e.js +0 -4
  150. package/dist/_virtual/_glob-assets_raw/exclamation-triangle-fill.svg.7949d2c7.js +0 -4
  151. package/dist/_virtual/_glob-assets_raw/eye-slash.svg.240afafa.js +0 -4
  152. package/dist/_virtual/_glob-assets_raw/plus-lg.svg.294e9073.js +0 -4
  153. package/dist/_virtual/_glob-assets_raw/three-dots-vertical.svg.9fee78c5.js +0 -4
  154. package/dist/_virtual/_glob-assets_raw/three-dots.svg.6a7a5b23.js +0 -4
  155. package/dist/_virtual/_glob-assets_raw/x-lg.svg.f34b882c.js +0 -4
  156. package/dist/components/UDataElement.d.ts +0 -44
  157. package/dist/components/UDataElement.js +0 -101
  158. package/dist/components/UDataElement.styles.js +0 -95
  159. package/dist/core/locale.d.ts +0 -69
  160. package/dist/core/locale.js +0 -85
  161. package/dist/utilities/sanitizers.d.ts +0 -35
  162. package/dist/utilities/sanitizers.js +0 -75
  163. package/skills/iyulab-components/references/extensions/data.md +0 -60
  164. package/skills/iyulab-components/references/utilities/sanitizers.md +0 -32
  165. /package/dist/components/{UDataElement.styles.d.ts → copy-button/UCopyButton.styles.d.ts} +0 -0
@@ -1,8 +1,8 @@
1
1
  import { UElement } from "./UElement.js";
2
- import __decorateMetadata from "../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorateMetadata.js";
3
- import __decorate from "../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorate.js";
4
2
  import { getParentElement, querySelectorAllWithin } from "../utilities/elements.js";
5
3
  import { styles } from "./UFloatingElement.styles.js";
4
+ import __decorateMetadata from "../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorateMetadata.js";
5
+ import __decorate from "../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorate.js";
6
6
  import { property, state } from "lit/decorators.js";
7
7
  import { arrow, autoPlacement, autoUpdate, computePosition, flip, offset, shift } from "@floating-ui/dom";
8
8
  //#region src/components/UFloatingElement.ts
@@ -73,7 +73,10 @@ var UFloatingElement = class extends UElement {
73
73
  });
74
74
  this.targetEl = target;
75
75
  if (this.open) return true;
76
- if (this.fire("show")) {
76
+ if (this.fire("show", {
77
+ bubbles: false,
78
+ composed: false
79
+ })) {
77
80
  if (this.showDelay > 0) this.showTimer = window.setTimeout(() => {
78
81
  this.showTimer = void 0;
79
82
  this.open = true;
@@ -102,7 +105,10 @@ var UFloatingElement = class extends UElement {
102
105
  await this.updateComplete;
103
106
  this.targetEl = void 0;
104
107
  if (!this.open) return true;
105
- if (this.fire("hide")) {
108
+ if (this.fire("hide", {
109
+ bubbles: false,
110
+ composed: false
111
+ })) {
106
112
  if (this.hideDelay > 0) this.hideTimer = window.setTimeout(() => {
107
113
  this.hideTimer = void 0;
108
114
  this.open = false;
@@ -118,6 +124,9 @@ var UFloatingElement = class extends UElement {
118
124
  * @param target - 위치 계산에 사용할 타겟 엘리먼트입니다.
119
125
  */
120
126
  async reposition(target) {
127
+ const targetRect = target.getBoundingClientRect();
128
+ this.style.setProperty("--anchor-width", `${targetRect.width}px`);
129
+ this.style.setProperty("--anchor-height", `${targetRect.height}px`);
121
130
  const position = await computePosition(target, this, {
122
131
  strategy: this.strategy,
123
132
  placement: this.placement,
@@ -1,4 +1,4 @@
1
- import { CSSResultGroup } from 'lit';
1
+ import { CSSResultGroup, PropertyValues } from 'lit';
2
2
  import { UElement } from './UElement.js';
3
3
  /**
4
4
  * 폼 컨트롤 컴포넌트의 공통 기반 클래스입니다.
@@ -21,10 +21,6 @@ export declare abstract class UFormControlElement<T> extends UElement {
21
21
  label?: string;
22
22
  /** 보조 설명 텍스트 */
23
23
  description?: string;
24
- /** 커스텀 유효성 검증 메시지 */
25
- validationMessage?: string;
26
- /** chrome 문자열(검증 메시지 등)에 사용할 로케일 태그 (예: 'ko-KR'). 미지정 시 전역 기본/문서 언어를 따른다. */
27
- locale?: string;
28
24
  /** 폼 제출 시 사용되는 이름 */
29
25
  name?: string;
30
26
  /** 폼 제출 시 사용되는 값 */
@@ -43,14 +39,48 @@ export declare abstract class UFormControlElement<T> extends UElement {
43
39
  * ElementInternals를 지원하지 않는 브라우저에서는 undefined를 반환합니다.
44
40
  */
45
41
  get validity(): ValidityState | undefined;
42
+ /**
43
+ * 지금 `internals`에 설정된 유효성 메시지입니다. `setValidity()`가 계산한 값을
44
+ * 그대로 반영하는 읽기 전용 파생값이며, 별도로 저장하지 않는다.
45
+ * ElementInternals를 지원하지 않는 브라우저에서는 빈 문자열을 반환한다.
46
+ */
47
+ get validationMessage(): string;
48
+ /** `setCustomValidity()`로 주입된 커스텀 메시지. 비어있으면 커스텀 메시지가 없는 상태. */
49
+ private customMessage;
50
+ /**
51
+ * 네이티브 `HTMLInputElement.setCustomValidity()`와 동일한 API입니다.
52
+ * 상태(및 `internals`)만 갱신할 뿐 화면은 건드리지 않는다 — UI 반영은 항상 `validate()`의 몫이다.
53
+ * 빈 문자열을 넘기면 해제되어 원래 자동 계산된 메시지로 돌아간다.
54
+ */
55
+ setCustomValidity(message: string): void;
56
+ /**
57
+ * 각 컴포넌트의 `setValidity()`가 계산한 flags/message를 `internals.setValidity()`로
58
+ * 반영하는 공통 헬퍼입니다. `setCustomValidity()`로 커스텀 메시지가 주입돼 있으면
59
+ * 네이티브와 동일하게 그 메시지가 다른 모든 검증 결과보다 우선한다.
60
+ */
61
+ protected commit(flags: ValidityStateFlags, message: string, anchor?: HTMLElement): void;
46
62
  connectedCallback(): void;
63
+ protected updated(changedProperties: PropertyValues): void;
64
+ /**
65
+ * 어떤 속성이 바뀌었을 때 `setValidity()`를 다시 호출할지 결정합니다.
66
+ * 기본값은 `value`/`required`. `checked`처럼 다른 속성으로 상태를
67
+ * 표현하는 컴포넌트는 override합니다 (`super.shouldValidate(changed) || changed.has('checked')`).
68
+ */
69
+ protected shouldValidate(changed: PropertyValues): boolean;
70
+ /**
71
+ * 지금 상태를 검증해 `internals.setValidity(flags, message, anchor)`를 호출합니다.
72
+ * 각 컴포넌트가 자신의 검증 규칙과 메시지 조회(`Locale.getValue()`)를 직접 구현합니다.
73
+ */
74
+ protected abstract setValidity(): void;
47
75
  /**
48
- * 컴포넌트 자체 유효성을 검증하고 `invalid` 상태를 갱신합니다.
49
- * 각 컴포넌트가 자신의 검증 로직으로 구현합니다.
76
+ * 컴포넌트 자체 유효성을 검증합니다.
50
77
  *
78
+ * @param report `true`(기본값)면 `invalid` 상태(및 에러 메시지 표시)를 갱신한다.
79
+ * `false`면 화면에 아무 영향 없이 유효 여부만 조용히 확인한다 — 네이티브
80
+ * `checkValidity()`(조용히 확인) vs `reportValidity()`(UI 갱신)와 같은 관계.
51
81
  * @returns 유효하면 `true`, 아니면 `false`
52
82
  */
53
- abstract validate(): boolean;
83
+ validate(report?: boolean): boolean;
54
84
  /**
55
85
  * 폼이 리셋될 때 호출되는 메서드입니다.
56
86
  * 각 컴포넌트가 자신의 초기 상태로 리셋하는 로직을 구현합니다.
@@ -1,7 +1,7 @@
1
1
  import { UElement } from "./UElement.js";
2
- import { styles } from "./UFormControlElement.styles.js";
3
2
  import __decorateMetadata from "../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorateMetadata.js";
4
3
  import __decorate from "../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorate.js";
4
+ import { styles } from "./UFormControlElement.styles.js";
5
5
  import { property } from "lit/decorators.js";
6
6
  //#region src/components/UFormControlElement.ts
7
7
  /**
@@ -16,6 +16,7 @@ var UFormControlElement = class extends UElement {
16
16
  this.required = false;
17
17
  this.invalid = false;
18
18
  this.novalidate = false;
19
+ this.customMessage = "";
19
20
  }
20
21
  static {
21
22
  this.styles = [super.styles, styles];
@@ -23,24 +24,80 @@ var UFormControlElement = class extends UElement {
23
24
  static {
24
25
  this.formAssociated = true;
25
26
  }
26
- /**
27
+ /**
27
28
  * 폼과의 연동을 위해 `form` 속성을 제공합니다. ElementInternals를 지원하는 브라우저에서 폼 요소에 접근할 수 있습니다.
28
- * 지원하지 않는 브라우저에서는 null을 반환합니다.
29
+ * 지원하지 않는 브라우저에서는 null을 반환합니다.
29
30
  */
30
31
  get form() {
31
32
  return this.internals?.form ?? null;
32
33
  }
33
- /**
34
+ /**
34
35
  * 각 컴포넌트가 자신의 검증 로직으로 validity 상태를 갱신하면, 이 객체를 통해 유효성 상태를 확인할 수 있습니다.
35
36
  * ElementInternals를 지원하지 않는 브라우저에서는 undefined를 반환합니다.
36
37
  */
37
38
  get validity() {
38
39
  return this.internals?.validity;
39
40
  }
41
+ /**
42
+ * 지금 `internals`에 설정된 유효성 메시지입니다. `setValidity()`가 계산한 값을
43
+ * 그대로 반영하는 읽기 전용 파생값이며, 별도로 저장하지 않는다.
44
+ * ElementInternals를 지원하지 않는 브라우저에서는 빈 문자열을 반환한다.
45
+ */
46
+ get validationMessage() {
47
+ return this.internals?.validationMessage ?? "";
48
+ }
49
+ /**
50
+ * 네이티브 `HTMLInputElement.setCustomValidity()`와 동일한 API입니다.
51
+ * 상태(및 `internals`)만 갱신할 뿐 화면은 건드리지 않는다 — UI 반영은 항상 `validate()`의 몫이다.
52
+ * 빈 문자열을 넘기면 해제되어 원래 자동 계산된 메시지로 돌아간다.
53
+ */
54
+ setCustomValidity(message) {
55
+ this.customMessage = message;
56
+ this.setValidity();
57
+ }
58
+ /**
59
+ * 각 컴포넌트의 `setValidity()`가 계산한 flags/message를 `internals.setValidity()`로
60
+ * 반영하는 공통 헬퍼입니다. `setCustomValidity()`로 커스텀 메시지가 주입돼 있으면
61
+ * 네이티브와 동일하게 그 메시지가 다른 모든 검증 결과보다 우선한다.
62
+ */
63
+ commit(flags, message, anchor) {
64
+ if (this.customMessage) this.internals?.setValidity({ customError: true }, this.customMessage, anchor);
65
+ else this.internals?.setValidity(flags, message, anchor);
66
+ }
40
67
  connectedCallback() {
41
68
  super.connectedCallback();
42
69
  if ("attachInternals" in this) this.internals = this.attachInternals();
43
70
  }
71
+ updated(changedProperties) {
72
+ super.updated(changedProperties);
73
+ if (this.shouldValidate(changedProperties)) {
74
+ this.setValidity();
75
+ this.requestUpdate();
76
+ }
77
+ }
78
+ /**
79
+ * 어떤 속성이 바뀌었을 때 `setValidity()`를 다시 호출할지 결정합니다.
80
+ * 기본값은 `value`/`required`. `checked`처럼 다른 속성으로 상태를
81
+ * 표현하는 컴포넌트는 override합니다 (`super.shouldValidate(changed) || changed.has('checked')`).
82
+ */
83
+ shouldValidate(changed) {
84
+ return changed.has("value") || changed.has("required");
85
+ }
86
+ /**
87
+ * 컴포넌트 자체 유효성을 검증합니다.
88
+ *
89
+ * @param report `true`(기본값)면 `invalid` 상태(및 에러 메시지 표시)를 갱신한다.
90
+ * `false`면 화면에 아무 영향 없이 유효 여부만 조용히 확인한다 — 네이티브
91
+ * `checkValidity()`(조용히 확인) vs `reportValidity()`(UI 갱신)와 같은 관계.
92
+ * @returns 유효하면 `true`, 아니면 `false`
93
+ */
94
+ validate(report = true) {
95
+ this.setValidity();
96
+ this.requestUpdate();
97
+ const valid = this.internals ? this.internals.checkValidity() : true;
98
+ if (report) this.invalid = !valid;
99
+ return valid;
100
+ }
44
101
  };
45
102
  __decorate([property({
46
103
  type: Boolean,
@@ -61,8 +118,6 @@ __decorate([property({
61
118
  __decorate([property({ type: Boolean }), __decorateMetadata("design:type", Boolean)], UFormControlElement.prototype, "novalidate", void 0);
62
119
  __decorate([property({ type: String }), __decorateMetadata("design:type", String)], UFormControlElement.prototype, "label", void 0);
63
120
  __decorate([property({ type: String }), __decorateMetadata("design:type", String)], UFormControlElement.prototype, "description", void 0);
64
- __decorate([property({ type: String }), __decorateMetadata("design:type", String)], UFormControlElement.prototype, "validationMessage", void 0);
65
- __decorate([property({ type: String }), __decorateMetadata("design:type", String)], UFormControlElement.prototype, "locale", void 0);
66
121
  __decorate([property({ type: String }), __decorateMetadata("design:type", String)], UFormControlElement.prototype, "name", void 0);
67
122
  __decorate([property({ type: Object }), __decorateMetadata("design:type", Object)], UFormControlElement.prototype, "value", void 0);
68
123
  //#endregion
@@ -52,6 +52,10 @@ export declare abstract class UOverlayElement extends UElement {
52
52
  /**
53
53
  * 오버레이를 숨깁니다. `hide` 이벤트가 취소되면 닫히지 않습니다.
54
54
  * (이벤트 이름은 `hide`, prefix 없음 — `addEventListener('hide', ...)`로 수신)
55
+ *
56
+ * bubbles:false — 중첩된 다이얼로그/드로어/팝오버 조합에서 자식의 hide가
57
+ * 조상 오버레이까지 버블링되어 조상이 자신의 hide로 오인해 닫히는 사고를 방지한다.
58
+ * 이 이벤트는 항상 자기 자신(target)에 리스너를 붙이는 패턴으로만 소비된다.
55
59
  */
56
60
  hide(): boolean;
57
61
  /** closeOn 정책에 따라 닫기를 시도합니다. */
@@ -50,12 +50,15 @@ var UOverlayElement = class extends UElement {
50
50
  super.updated(changedProperties);
51
51
  if (changedProperties.has("open")) this.open ? this.setup() : this.cleanup();
52
52
  }
53
- /**
54
- * 오버레이를 표시합니다. u-show 이벤트가 취소되면 열리지 않습니다.
53
+ /**
54
+ * 오버레이를 표시합니다. u-show 이벤트가 취소되면 열리지 않습니다.
55
55
  */
56
56
  show() {
57
57
  if (this.open) return true;
58
- if (this.fire("show")) {
58
+ if (this.fire("show", {
59
+ bubbles: false,
60
+ composed: false
61
+ })) {
59
62
  this.open = true;
60
63
  return true;
61
64
  }
@@ -64,10 +67,17 @@ var UOverlayElement = class extends UElement {
64
67
  /**
65
68
  * 오버레이를 숨깁니다. `hide` 이벤트가 취소되면 닫히지 않습니다.
66
69
  * (이벤트 이름은 `hide`, prefix 없음 — `addEventListener('hide', ...)`로 수신)
70
+ *
71
+ * bubbles:false — 중첩된 다이얼로그/드로어/팝오버 조합에서 자식의 hide가
72
+ * 조상 오버레이까지 버블링되어 조상이 자신의 hide로 오인해 닫히는 사고를 방지한다.
73
+ * 이 이벤트는 항상 자기 자신(target)에 리스너를 붙이는 패턴으로만 소비된다.
67
74
  */
68
75
  hide() {
69
76
  if (!this.open) return true;
70
- if (this.fire("hide")) {
77
+ if (this.fire("hide", {
78
+ bubbles: false,
79
+ composed: false
80
+ })) {
71
81
  this.open = false;
72
82
  return true;
73
83
  }
@@ -1,11 +1,11 @@
1
1
  import { UElement } from "../UElement.js";
2
2
  import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorateMetadata.js";
3
3
  import __decorate from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorate.js";
4
- import "../icon/UIcon.js";
5
4
  import "../button/UButton.js";
5
+ import "../icon/UIcon.js";
6
6
  import { styles } from "./UAlert.styles.js";
7
- import { customElement, property } from "lit/decorators.js";
8
7
  import { html } from "lit";
8
+ import { customElement, property } from "lit/decorators.js";
9
9
  //#region src/components/alert/UAlert.ts
10
10
  var UAlert = class UAlert extends UElement {
11
11
  constructor(..._args) {
@@ -39,7 +39,7 @@ var UAlert = class UAlert extends UElement {
39
39
  variant="ghost"
40
40
  ?hidden=${!this.closable}
41
41
  @click=${this.hide}>
42
- <u-icon lib="internal" name="x-lg"></u-icon>
42
+ <u-icon lib="internal" name="x"></u-icon>
43
43
  </u-button>
44
44
  </div>
45
45
  <div class="content" part="content" scrollable>
@@ -56,7 +56,10 @@ var UAlert = class UAlert extends UElement {
56
56
  */
57
57
  show() {
58
58
  if (this.open) return true;
59
- if (this.fire("show")) {
59
+ if (this.fire("show", {
60
+ bubbles: false,
61
+ composed: false
62
+ })) {
60
63
  this.open = true;
61
64
  return true;
62
65
  }
@@ -67,7 +70,10 @@ var UAlert = class UAlert extends UElement {
67
70
  */
68
71
  hide() {
69
72
  if (!this.open) return true;
70
- if (this.fire("hide")) {
73
+ if (this.fire("hide", {
74
+ bubbles: false,
75
+ composed: false
76
+ })) {
71
77
  this.open = false;
72
78
  return true;
73
79
  }
@@ -76,9 +82,9 @@ var UAlert = class UAlert extends UElement {
76
82
  /** Alert 상태에 따른 아이콘 이름을 반환합니다. */
77
83
  mapIcon(status) {
78
84
  switch (status) {
79
- case "error": return "exclamation-circle-fill";
80
- case "warning": return "exclamation-triangle-fill";
81
- case "success": return "check-circle-fill";
85
+ case "error": return "alert-circle-fill";
86
+ case "warning": return "alert-triangle-fill";
87
+ case "success": return "circle-check-fill";
82
88
  case "info": return "info-circle-fill";
83
89
  case "notice": return "bell-fill";
84
90
  default: return "bell-fill";
@@ -39,12 +39,6 @@ var styles = css`
39
39
  min-width: 200px;
40
40
  max-width: 100%;
41
41
  max-height: 50vh;
42
- /*
43
- * 내부 여백은 .container 에 둔다(:host 아님).
44
- * 소비앱의 light-DOM 리셋(예: Tailwind preflight 의 *{padding:0})은
45
- * 호스트 엘리먼트의 :host padding 을 덮어버리므로, Shadow DOM 내부
46
- * 엘리먼트(.container)에 패딩을 두어 외부 리셋으로부터 보호한다.
47
- */
48
42
  border-radius: 8px;
49
43
  box-shadow: 0 4px 12px var(--u-shadow-color-normal);
50
44
 
@@ -2,8 +2,8 @@ import { UElement } from "../UElement.js";
2
2
  import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorateMetadata.js";
3
3
  import __decorate from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorate.js";
4
4
  import { styles } from "./UAvatar.styles.js";
5
- import { customElement, property } from "lit/decorators.js";
6
5
  import { html } from "lit";
6
+ import { customElement, property } from "lit/decorators.js";
7
7
  //#region src/components/avatar/UAvatar.ts
8
8
  var UAvatar = class UAvatar extends UElement {
9
9
  constructor(..._args) {
@@ -19,7 +19,7 @@ export declare class UBadge extends UElement {
19
19
  color: BadgeColor;
20
20
  /** 부모 요소 기준 배치 위치 (설정 시 position: absolute) */
21
21
  anchor?: BadgeAnchor;
22
- render(): typeof nothing | import('lit-html').TemplateResult<1>;
22
+ render(): import('lit-html').TemplateResult<1> | typeof nothing;
23
23
  }
24
24
  declare global {
25
25
  interface HTMLElementTagNameMap {
@@ -2,14 +2,14 @@ import { UElement } from "../UElement.js";
2
2
  import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorateMetadata.js";
3
3
  import __decorate from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorate.js";
4
4
  import { styles } from "./UBadge.styles.js";
5
- import { customElement, property } from "lit/decorators.js";
6
5
  import { html, nothing } from "lit";
6
+ import { customElement, property } from "lit/decorators.js";
7
7
  //#region src/components/badge/UBadge.ts
8
8
  var UBadge = class UBadge extends UElement {
9
9
  constructor(..._args) {
10
10
  super(..._args);
11
11
  this.variant = "pill";
12
- this.color = "neutral";
12
+ this.color = "blue";
13
13
  }
14
14
  static {
15
15
  this.styles = [super.styles, styles];
@@ -40,7 +40,7 @@ var styles = css`
40
40
  }
41
41
  :host([color="blue"]) {
42
42
  color: var(--u-neutral-0);
43
- background-color: var(--u-blue-500);
43
+ background-color: var(--u-primary-color, var(--u-blue-500));
44
44
  }
45
45
  :host([color="green"]) {
46
46
  color: var(--u-neutral-0);
@@ -2,8 +2,8 @@ import { UElement } from "../UElement.js";
2
2
  import __decorate from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorate.js";
3
3
  import "../icon/UIcon.js";
4
4
  import { styles } from "./UBreadcrumb.styles.js";
5
- import { customElement } from "lit/decorators.js";
6
5
  import { html } from "lit";
6
+ import { customElement } from "lit/decorators.js";
7
7
  //#region src/components/breadcrumb/UBreadcrumb.ts
8
8
  var UBreadcrumb = class UBreadcrumb extends UElement {
9
9
  constructor(..._args) {
@@ -2,8 +2,8 @@ import { UElement } from "../UElement.js";
2
2
  import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorateMetadata.js";
3
3
  import __decorate from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorate.js";
4
4
  import { styles } from "./UBreadcrumbItem.styles.js";
5
- import { customElement, property } from "lit/decorators.js";
6
5
  import { html } from "lit";
6
+ import { customElement, property } from "lit/decorators.js";
7
7
  import { ifDefined } from "lit/directives/if-defined.js";
8
8
  //#region src/components/breadcrumb-item/UBreadcrumbItem.ts
9
9
  var UBreadcrumbItem = class UBreadcrumbItem extends UElement {
@@ -16,6 +16,8 @@ export type ButtonSize = "sm" | "md" | "lg";
16
16
  * @csspart button - 내부 버튼 요소
17
17
  * @csspart content - 콘텐츠 영역
18
18
  * @csspart mask - 로딩 마스크 영역
19
+ *
20
+ * @cssprop --u-primary-color - color="neutral"일 때 버튼 기준색. 지정 시 hover/active/surface 톤이 color-mix()로 자동 파생.
19
21
  */
20
22
  export declare class UButton extends UElement {
21
23
  static styles: import('lit').CSSResultGroup[];
@@ -23,16 +25,11 @@ export declare class UButton extends UElement {
23
25
  /** 버튼 스타일 변형 */
24
26
  variant: ButtonVariant;
25
27
  /**
26
- * Semantic 색상. 기본값 `"neutral"`은 기존(v1.1.x 이전) 렌더링과 동일 하위 호환.
27
- * `variant`가 사용하는 색상 스케일을 값으로 교체한다(예: `color="red"` + `variant="solid"` 파괴적 액션 버튼).
28
- * `variant="link"`는 `color="neutral"`(기본값)일 때 기존 동작(파랑)을 유지하고, 다른 색을 명시하면 그 색으로 재정의된다.
29
- * `variant="ghost"`는 hover/active 배경이 중립 팔레트에 묶여 있지 않아 이 속성의 영향을 받지 않는다.
28
+ * Semantic 색상. 기본값 `neutral`은 --u-primary-color 미지정 blue로 렌더링(회색에서 변경됨).
29
+ * `link`는 neutral일 기존 파랑 유지, 다른 지정 재정의. `ghost`는 영향받지 않음.
30
30
  */
31
31
  color: ButtonColor;
32
- /**
33
- * 버튼 크기. 기본값 `"md"`는 기존(v1.2.0 이전) 렌더링과 동일 — 하위 호환.
34
- * `font-size`만 변경하며, padding/spinner/prefix·suffix 여백은 이미 `em` 단위라 함께 비례 축소·확대된다.
35
- */
32
+ /** 버튼 크기. `font-size`만 변경하며 나머지는 `em` 단위라 비례 조정됨. */
36
33
  size: ButtonSize;
37
34
  /** 경계선 둥글게 여부 */
38
35
  rounded: boolean;
@@ -54,9 +51,7 @@ export declare class UButton extends UElement {
54
51
  name?: string;
55
52
  /** form data에 포함될 value */
56
53
  value?: string;
57
- /**
58
- * ElementInternals는 폼과의 연동, 유효성 검사 상태 관리 등을 지원하는 네이티브 API입니다.
59
- */
54
+ /** 폼 연동을 위한 ElementInternals. */
60
55
  internals?: ElementInternals;
61
56
  set form(val: string);
62
57
  get form(): HTMLFormElement | null;
@@ -3,8 +3,8 @@ import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.138.0/hel
3
3
  import __decorate from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorate.js";
4
4
  import "../spinner/USpinner.js";
5
5
  import { styles } from "./UButton.styles.js";
6
- import { customElement, property } from "lit/decorators.js";
7
6
  import { html } from "lit";
7
+ import { customElement, property } from "lit/decorators.js";
8
8
  import { ifDefined } from "lit/directives/if-defined.js";
9
9
  //#region src/components/button/UButton.ts
10
10
  var UButton = class UButton extends UElement {
@@ -1,6 +1,21 @@
1
1
  import { css } from "lit";
2
2
  //#region src/components/button/UButton.styles.ts
3
3
  var styles = css`
4
+ :host {
5
+ /* --btn-color 하나만 정해지면 hover/active/surface/outline 톤이 전부 자동 파생 */
6
+ --btn-color: var(--u-primary-color, var(--u-blue-600));
7
+ --btn-color-hover: color-mix(in srgb, var(--btn-color) 85%, black);
8
+ --btn-color-active: color-mix(in srgb, var(--btn-color) 70%, black);
9
+ --btn-color-surface: color-mix(in srgb, var(--btn-color) 12%, var(--u-bg-color));
10
+ --btn-color-surface-hover: color-mix(in srgb, var(--btn-color) 22%, var(--u-bg-color));
11
+ --btn-color-surface-active: color-mix(in srgb, var(--btn-color) 32%, var(--u-bg-color));
12
+ --btn-color-border: color-mix(in srgb, var(--btn-color) 45%, var(--u-bg-color));
13
+ --btn-color-border-hover: color-mix(in srgb, var(--btn-color) 60%, var(--u-bg-color));
14
+ --btn-color-border-active: color-mix(in srgb, var(--btn-color) 75%, var(--u-bg-color));
15
+ --btn-color-outline-hover: color-mix(in srgb, var(--btn-color) 6%, var(--u-bg-color));
16
+ --btn-color-outline-active: color-mix(in srgb, var(--btn-color) 12%, var(--u-bg-color));
17
+ }
18
+
4
19
  :host {
5
20
  position: relative;
6
21
  display: inline-flex;
@@ -17,35 +32,19 @@ var styles = css`
17
32
  overflow: hidden;
18
33
  user-select: none;
19
34
  cursor: pointer;
35
+ }
36
+
37
+ /* === Color tokens === */
38
+ :host([color="blue"]) { --btn-color: var(--u-blue-600); }
39
+ :host([color="green"]) { --btn-color: var(--u-green-600); }
40
+ :host([color="red"]) { --btn-color: var(--u-red-600); }
41
+ :host([color="orange"]) { --btn-color: var(--u-orange-600); }
42
+ :host([color="teal"]) { --btn-color: var(--u-teal-600); }
43
+ :host([color="cyan"]) { --btn-color: var(--u-cyan-600); }
44
+ :host([color="purple"]) { --btn-color: var(--u-purple-600); }
45
+ :host([color="pink"]) { --btn-color: var(--u-pink-600); }
20
46
 
21
- /* Semantic color tokens consumed by variant rules below. Default (color="neutral")
22
- maps 1:1 onto the neutral scale — zero visual change for existing consumers. */
23
- --btn-c-50: var(--u-neutral-50);
24
- --btn-c-100: var(--u-neutral-100);
25
- --btn-c-200: var(--u-neutral-200);
26
- --btn-c-300: var(--u-neutral-300);
27
- --btn-c-400: var(--u-neutral-400);
28
- --btn-c-500: var(--u-neutral-500);
29
- --btn-c-600: var(--u-neutral-600);
30
- --btn-c-700: var(--u-neutral-700);
31
- --btn-c-800: var(--u-neutral-800);
32
- }
33
-
34
- /* === Color tokens ===
35
- Non-neutral colors have no "50" tier in the design system (see assets/styles/light.css) —
36
- tier "0" (the palest stop) is used in that slot instead of inventing a non-existent token. */
37
- :host([color="blue"]) { --btn-c-50: var(--u-blue-0); --btn-c-100: var(--u-blue-100); --btn-c-200: var(--u-blue-200); --btn-c-300: var(--u-blue-300); --btn-c-400: var(--u-blue-400); --btn-c-500: var(--u-blue-500); --btn-c-600: var(--u-blue-600); --btn-c-700: var(--u-blue-700); --btn-c-800: var(--u-blue-800); }
38
- :host([color="green"]) { --btn-c-50: var(--u-green-0); --btn-c-100: var(--u-green-100); --btn-c-200: var(--u-green-200); --btn-c-300: var(--u-green-300); --btn-c-400: var(--u-green-400); --btn-c-500: var(--u-green-500); --btn-c-600: var(--u-green-600); --btn-c-700: var(--u-green-700); --btn-c-800: var(--u-green-800); }
39
- :host([color="red"]) { --btn-c-50: var(--u-red-0); --btn-c-100: var(--u-red-100); --btn-c-200: var(--u-red-200); --btn-c-300: var(--u-red-300); --btn-c-400: var(--u-red-400); --btn-c-500: var(--u-red-500); --btn-c-600: var(--u-red-600); --btn-c-700: var(--u-red-700); --btn-c-800: var(--u-red-800); }
40
- :host([color="orange"]) { --btn-c-50: var(--u-orange-0); --btn-c-100: var(--u-orange-100); --btn-c-200: var(--u-orange-200); --btn-c-300: var(--u-orange-300); --btn-c-400: var(--u-orange-400); --btn-c-500: var(--u-orange-500); --btn-c-600: var(--u-orange-600); --btn-c-700: var(--u-orange-700); --btn-c-800: var(--u-orange-800); }
41
- :host([color="teal"]) { --btn-c-50: var(--u-teal-0); --btn-c-100: var(--u-teal-100); --btn-c-200: var(--u-teal-200); --btn-c-300: var(--u-teal-300); --btn-c-400: var(--u-teal-400); --btn-c-500: var(--u-teal-500); --btn-c-600: var(--u-teal-600); --btn-c-700: var(--u-teal-700); --btn-c-800: var(--u-teal-800); }
42
- :host([color="cyan"]) { --btn-c-50: var(--u-cyan-0); --btn-c-100: var(--u-cyan-100); --btn-c-200: var(--u-cyan-200); --btn-c-300: var(--u-cyan-300); --btn-c-400: var(--u-cyan-400); --btn-c-500: var(--u-cyan-500); --btn-c-600: var(--u-cyan-600); --btn-c-700: var(--u-cyan-700); --btn-c-800: var(--u-cyan-800); }
43
- :host([color="purple"]) { --btn-c-50: var(--u-purple-0); --btn-c-100: var(--u-purple-100); --btn-c-200: var(--u-purple-200); --btn-c-300: var(--u-purple-300); --btn-c-400: var(--u-purple-400); --btn-c-500: var(--u-purple-500); --btn-c-600: var(--u-purple-600); --btn-c-700: var(--u-purple-700); --btn-c-800: var(--u-purple-800); }
44
- :host([color="pink"]) { --btn-c-50: var(--u-pink-0); --btn-c-100: var(--u-pink-100); --btn-c-200: var(--u-pink-200); --btn-c-300: var(--u-pink-300); --btn-c-400: var(--u-pink-400); --btn-c-500: var(--u-pink-500); --btn-c-600: var(--u-pink-600); --btn-c-700: var(--u-pink-700); --btn-c-800: var(--u-pink-800); }
45
-
46
- /* === Size ===
47
- padding (0.5em), the spinner (1em/0.5em), and prefix/suffix margins (0.5em) are all
48
- em-relative already, so changing font-size alone scales the whole button proportionally. */
47
+ /* === Size === */
49
48
  :host([size="sm"]) {
50
49
  font-size: 12px;
51
50
  }
@@ -83,59 +82,59 @@ var styles = css`
83
82
  /* solid: 강한 채움 (기본 color="neutral") */
84
83
  :host([variant="solid"]) {
85
84
  color: #fff;
86
- background-color: var(--btn-c-600);
87
- border-color: var(--btn-c-600);
85
+ background-color: var(--btn-color);
86
+ border-color: var(--btn-color);
88
87
  }
89
88
  :host([variant="solid"]:hover) {
90
- background-color: var(--btn-c-700);
91
- border-color: var(--btn-c-700);
89
+ background-color: var(--btn-color-hover);
90
+ border-color: var(--btn-color-hover);
92
91
  }
93
92
  :host([variant="solid"]:active) {
94
- background-color: var(--btn-c-800);
95
- border-color: var(--btn-c-800);
93
+ background-color: var(--btn-color-active);
94
+ border-color: var(--btn-color-active);
96
95
  }
97
96
 
98
97
  /* surface: 채우기 + 경계 */
99
98
  :host([variant="surface"]) {
100
99
  color: var(--u-txt-color);
101
- background-color: var(--btn-c-100);
102
- border-color: var(--btn-c-300);
100
+ background-color: var(--btn-color-surface);
101
+ border-color: var(--btn-color-border);
103
102
  }
104
103
  :host([variant="surface"]:hover) {
105
- background-color: var(--btn-c-200);
106
- border-color: var(--btn-c-400);
104
+ background-color: var(--btn-color-surface-hover);
105
+ border-color: var(--btn-color-border-hover);
107
106
  }
108
107
  :host([variant="surface"]:active) {
109
- background-color: var(--btn-c-300);
110
- border-color: var(--btn-c-500);
108
+ background-color: var(--btn-color-surface-active);
109
+ border-color: var(--btn-color-border-active);
111
110
  }
112
111
 
113
112
  /* filled: 채우기만 */
114
113
  :host([variant="filled"]) {
115
114
  color: var(--u-txt-color);
116
- background-color: var(--btn-c-100);
115
+ background-color: var(--btn-color-surface);
117
116
  border-color: transparent;
118
117
  }
119
118
  :host([variant="filled"]:hover) {
120
- background-color: var(--btn-c-200);
119
+ background-color: var(--btn-color-surface-hover);
121
120
  }
122
121
  :host([variant="filled"]:active) {
123
- background-color: var(--btn-c-300);
122
+ background-color: var(--btn-color-surface-active);
124
123
  }
125
124
 
126
125
  /* outlined: 경계만 */
127
126
  :host([variant="outlined"]) {
128
127
  color: var(--u-txt-color);
129
- border-color: var(--btn-c-300);
128
+ border-color: var(--btn-color-border);
130
129
  background-color: transparent;
131
130
  }
132
131
  :host([variant="outlined"]:hover) {
133
- border-color: var(--btn-c-400);
134
- background-color: var(--btn-c-50);
132
+ border-color: var(--btn-color-border-hover);
133
+ background-color: var(--btn-color-outline-hover);
135
134
  }
136
135
  :host([variant="outlined"]:active) {
137
- border-color: var(--btn-c-500);
138
- background-color: var(--btn-c-100);
136
+ border-color: var(--btn-color-border-active);
137
+ background-color: var(--btn-color-outline-active);
139
138
  }
140
139
 
141
140
  /* ghost: transparent */
@@ -168,13 +167,13 @@ var styles = css`
168
167
  }
169
168
  /* link + 명시적 non-neutral color: 링크 자체 색상을 재정의 (예: 파괴적 액션 링크) */
170
169
  :host([variant="link"][color]:not([color="neutral"])) {
171
- color: var(--btn-c-500);
170
+ color: var(--btn-color);
172
171
  }
173
172
  :host([variant="link"][color]:not([color="neutral"]):hover) {
174
- color: var(--btn-c-600);
173
+ color: var(--btn-color-hover);
175
174
  }
176
175
  :host([variant="link"][color]:not([color="neutral"]):active) {
177
- color: var(--btn-c-700);
176
+ color: var(--btn-color-active);
178
177
  }
179
178
 
180
179
  /* === Inner === */
@@ -4,8 +4,8 @@ import __decorate from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm
4
4
  import { UButton } from "../button/UButton.js";
5
5
  import { UIconButton } from "../icon-button/UIconButton.js";
6
6
  import { styles } from "./UButtonGroup.styles.js";
7
- import { customElement, property } from "lit/decorators.js";
8
7
  import { html } from "lit";
8
+ import { customElement, property } from "lit/decorators.js";
9
9
  //#region src/components/button-group/UButtonGroup.ts
10
10
  var UButtonGroup = class UButtonGroup extends UElement {
11
11
  constructor(..._args) {