@iyulab/components 0.1.6 → 0.1.8

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 (275) hide show
  1. package/CHANGELOG.md +42 -18
  2. package/LICENSE +20 -20
  3. package/README.md +33 -33
  4. package/dist/assets/icons/arrow-clockwise.svg.js +1 -1
  5. package/dist/assets/icons/arrow-down.svg.js +1 -1
  6. package/dist/assets/icons/arrow-up.svg.js +1 -1
  7. package/dist/assets/icons/ban.svg.js +1 -1
  8. package/dist/assets/icons/bell-fill.svg.js +1 -1
  9. package/dist/assets/icons/check-circle-fill.svg.js +1 -1
  10. package/dist/assets/icons/check-lg.svg.js +1 -1
  11. package/dist/assets/icons/chevron-down.svg.js +1 -1
  12. package/dist/assets/icons/chevron-left.svg.js +1 -1
  13. package/dist/assets/icons/chevron-right.svg.js +1 -1
  14. package/dist/assets/icons/chevron-up.svg.js +1 -1
  15. package/dist/assets/icons/copy.svg.js +1 -1
  16. package/dist/assets/icons/dash-lg.svg.js +1 -1
  17. package/dist/assets/icons/exclamation-circle-fill.svg.js +1 -1
  18. package/dist/assets/icons/exclamation-triangle-fill.svg.js +1 -1
  19. package/dist/assets/icons/eye-slash.svg.js +1 -1
  20. package/dist/assets/icons/eye.svg.js +1 -1
  21. package/dist/assets/icons/info-circle-fill.svg.js +1 -1
  22. package/dist/assets/icons/layout-sidebar.svg.js +1 -1
  23. package/dist/assets/icons/lightbulb-fill.svg.js +1 -1
  24. package/dist/assets/icons/lightbulb-off.svg.js +1 -1
  25. package/dist/assets/icons/lightbulb.svg.js +1 -1
  26. package/dist/assets/icons/mic-fill.svg.js +1 -1
  27. package/dist/assets/icons/mic-mute-fill.svg.js +1 -1
  28. package/dist/assets/icons/paperclip.svg.js +1 -1
  29. package/dist/assets/icons/pencil-square.svg.js +1 -1
  30. package/dist/assets/icons/plus-lg.svg.js +1 -1
  31. package/dist/assets/icons/search.svg.js +1 -1
  32. package/dist/assets/icons/speedometer.svg.js +1 -1
  33. package/dist/assets/icons/x-lg.svg.js +1 -1
  34. package/dist/assets/styles/dark.css +129 -129
  35. package/dist/assets/styles/dark.css.js +1 -1
  36. package/dist/assets/styles/light.css +129 -129
  37. package/dist/assets/styles/light.css.js +1 -1
  38. package/dist/components/BaseElement.styles.js +1 -1
  39. package/dist/components/FloatingElement.d.ts +31 -19
  40. package/dist/components/FloatingElement.js +46 -34
  41. package/dist/components/FloatingElement.styles.js +5 -4
  42. package/dist/components/ModalElement.d.ts +70 -0
  43. package/dist/components/ModalElement.js +144 -0
  44. package/dist/components/ModalElement.styles.js +29 -0
  45. package/dist/components/alert/{Alert.d.ts → UAlert.component.d.ts} +1 -1
  46. package/dist/components/alert/{Alert.js → UAlert.component.js} +20 -18
  47. package/dist/components/alert/UAlert.d.ts +8 -0
  48. package/dist/components/alert/UAlert.js +5 -0
  49. package/dist/components/alert/{Alert.styles.js → UAlert.styles.js} +1 -3
  50. package/dist/components/button/{Button.d.ts → UButton.component.d.ts} +1 -1
  51. package/dist/components/button/{Button.js → UButton.component.js} +7 -7
  52. package/dist/components/button/UButton.d.ts +7 -0
  53. package/dist/components/button/UButton.js +5 -0
  54. package/dist/components/copy-button/{CopyButton.d.ts → UCopyButton.component.d.ts} +1 -1
  55. package/dist/components/copy-button/{CopyButton.js → UCopyButton.component.js} +10 -10
  56. package/dist/components/copy-button/UCopyButton.d.ts +7 -0
  57. package/dist/components/copy-button/UCopyButton.js +5 -0
  58. package/dist/components/dialog/UDialog.component.d.ts +15 -0
  59. package/dist/components/dialog/UDialog.component.js +65 -0
  60. package/dist/components/dialog/UDialog.d.ts +7 -0
  61. package/dist/components/dialog/UDialog.js +5 -0
  62. package/dist/components/dialog/{Dialog.styles.js → UDialog.styles.js} +14 -29
  63. package/dist/components/divider/{Divider.d.ts → UDivider.component.d.ts} +1 -1
  64. package/dist/components/divider/{Divider.js → UDivider.component.js} +6 -6
  65. package/dist/components/divider/UDivider.d.ts +7 -0
  66. package/dist/components/divider/UDivider.js +5 -0
  67. package/dist/components/drawer/UDrawer.component.d.ts +16 -0
  68. package/dist/components/drawer/UDrawer.component.js +59 -0
  69. package/dist/components/drawer/UDrawer.d.ts +8 -0
  70. package/dist/components/drawer/UDrawer.js +5 -0
  71. package/dist/components/drawer/UDrawer.styles.js +82 -0
  72. package/dist/components/form/{Form.d.ts → UForm.component.d.ts} +2 -2
  73. package/dist/components/form/{Form.js → UForm.component.js} +14 -12
  74. package/dist/components/form/UForm.d.ts +7 -0
  75. package/dist/components/form/UForm.js +5 -0
  76. package/dist/components/icon/{Icon.d.ts → UIcon.component.d.ts} +5 -4
  77. package/dist/components/icon/{Icon.js → UIcon.component.js} +9 -10
  78. package/dist/components/icon/UIcon.d.ts +8 -0
  79. package/dist/components/icon/UIcon.js +5 -0
  80. package/dist/components/icon-button/{IconButton.d.ts → UIconButton.component.d.ts} +3 -2
  81. package/dist/components/icon-button/{IconButton.js → UIconButton.component.js} +15 -15
  82. package/dist/components/icon-button/UIconButton.d.ts +7 -0
  83. package/dist/components/icon-button/UIconButton.js +5 -0
  84. package/dist/components/input/{Input.d.ts → UInput.component.d.ts} +14 -10
  85. package/dist/components/input/{Input.js → UInput.component.js} +71 -76
  86. package/dist/components/input/UInput.d.ts +7 -0
  87. package/dist/components/input/UInput.js +5 -0
  88. package/dist/components/input/{Input.styles.js → UInput.styles.js} +27 -24
  89. package/dist/components/menu/UMenu.component.d.ts +70 -0
  90. package/dist/components/menu/UMenu.component.js +327 -0
  91. package/dist/components/menu/UMenu.d.ts +8 -0
  92. package/dist/components/menu/UMenu.js +5 -0
  93. package/dist/components/menu/UMenu.styles.js +39 -0
  94. package/dist/components/menu-item/UMenuItem.component.d.ts +19 -0
  95. package/dist/components/menu-item/UMenuItem.component.js +96 -0
  96. package/dist/components/menu-item/UMenuItem.d.ts +7 -0
  97. package/dist/components/menu-item/UMenuItem.js +5 -0
  98. package/dist/components/menu-item/UMenuItem.styles.js +65 -0
  99. package/dist/components/progress-bar/{ProgressBar.d.ts → UProgressBar.component.d.ts} +1 -1
  100. package/dist/components/progress-bar/{ProgressBar.js → UProgressBar.component.js} +10 -10
  101. package/dist/components/progress-bar/UProgressBar.d.ts +7 -0
  102. package/dist/components/progress-bar/UProgressBar.js +5 -0
  103. package/dist/components/progress-ring/{ProgressRing.d.ts → UProgressRing.component.d.ts} +1 -1
  104. package/dist/components/progress-ring/{ProgressRing.js → UProgressRing.component.js} +9 -9
  105. package/dist/components/progress-ring/UProgressRing.d.ts +8 -0
  106. package/dist/components/progress-ring/UProgressRing.js +5 -0
  107. package/dist/components/skeleton/USkeleton.component.d.ts +22 -0
  108. package/dist/components/skeleton/USkeleton.component.js +58 -0
  109. package/dist/components/skeleton/USkeleton.d.ts +8 -0
  110. package/dist/components/skeleton/USkeleton.js +5 -0
  111. package/dist/components/skeleton/USkeleton.styles.js +74 -0
  112. package/dist/components/spinner/{Spinner.d.ts → USpinner.component.d.ts} +1 -1
  113. package/dist/components/spinner/{Spinner.js → USpinner.component.js} +3 -3
  114. package/dist/components/spinner/USpinner.d.ts +7 -0
  115. package/dist/components/spinner/USpinner.js +5 -0
  116. package/dist/components/split-panel/{SplitPanel.d.ts → USplitPanel.component.d.ts} +1 -1
  117. package/dist/components/split-panel/{SplitPanel.js → USplitPanel.component.js} +13 -13
  118. package/dist/components/split-panel/USplitPanel.d.ts +7 -0
  119. package/dist/components/split-panel/USplitPanel.js +5 -0
  120. package/dist/components/tooltip/{Tooltip.d.ts → UTooltip.component.d.ts} +6 -7
  121. package/dist/components/tooltip/{Tooltip.js → UTooltip.component.js} +12 -16
  122. package/dist/components/tooltip/UTooltip.d.ts +7 -0
  123. package/dist/components/tooltip/UTooltip.js +5 -0
  124. package/dist/components/tooltip/{Tooltip.styles.js → UTooltip.styles.js} +1 -0
  125. package/dist/components/tree/{Tree.d.ts → UTree.component.d.ts} +4 -4
  126. package/dist/components/tree/{Tree.js → UTree.component.js} +10 -10
  127. package/dist/components/tree/UTree.d.ts +7 -0
  128. package/dist/components/tree/UTree.js +5 -0
  129. package/dist/components/tree/UTree.styles.d.ts +1 -0
  130. package/dist/components/tree/{Tree.styles.js → UTree.styles.js} +0 -1
  131. package/dist/components/tree-item/{TreeItem.d.ts → UTreeItem.component.d.ts} +2 -2
  132. package/dist/components/tree-item/{TreeItem.js → UTreeItem.component.js} +15 -15
  133. package/dist/components/tree-item/UTreeItem.d.ts +7 -0
  134. package/dist/components/tree-item/UTreeItem.js +5 -0
  135. package/dist/index.d.ts +29 -2
  136. package/dist/index.js +40 -42
  137. package/dist/internals/attribute-converters.d.ts +5 -3
  138. package/dist/internals/node-helpers.d.ts +9 -9
  139. package/dist/internals/node-helpers.js +2 -2
  140. package/dist/utilities/icons.js +1 -4
  141. package/dist/utilities/notifier.d.ts +1 -1
  142. package/dist/utilities/notifier.js +3 -3
  143. package/package.json +60 -59
  144. package/dist/components/alert/index.d.ts +0 -7
  145. package/dist/components/alert/index.js +0 -5
  146. package/dist/components/button/index.d.ts +0 -7
  147. package/dist/components/button/index.js +0 -5
  148. package/dist/components/context-menu/ContextMenu.d.ts +0 -29
  149. package/dist/components/context-menu/ContextMenu.js +0 -148
  150. package/dist/components/context-menu/ContextMenu.styles.js +0 -15
  151. package/dist/components/context-menu/index.d.ts +0 -7
  152. package/dist/components/context-menu/index.js +0 -5
  153. package/dist/components/copy-button/index.d.ts +0 -7
  154. package/dist/components/copy-button/index.js +0 -5
  155. package/dist/components/dialog/Dialog.d.ts +0 -37
  156. package/dist/components/dialog/Dialog.js +0 -160
  157. package/dist/components/dialog/index.d.ts +0 -7
  158. package/dist/components/dialog/index.js +0 -5
  159. package/dist/components/divider/index.d.ts +0 -7
  160. package/dist/components/divider/index.js +0 -5
  161. package/dist/components/dropdown-menu/DropdownMenu.d.ts +0 -27
  162. package/dist/components/dropdown-menu/DropdownMenu.js +0 -135
  163. package/dist/components/dropdown-menu/DropdownMenu.styles.js +0 -15
  164. package/dist/components/dropdown-menu/index.d.ts +0 -7
  165. package/dist/components/dropdown-menu/index.js +0 -5
  166. package/dist/components/form/index.d.ts +0 -7
  167. package/dist/components/form/index.js +0 -5
  168. package/dist/components/icon/index.d.ts +0 -7
  169. package/dist/components/icon/index.js +0 -5
  170. package/dist/components/icon-button/index.d.ts +0 -7
  171. package/dist/components/icon-button/index.js +0 -5
  172. package/dist/components/index.d.ts +0 -20
  173. package/dist/components/input/index.d.ts +0 -7
  174. package/dist/components/input/index.js +0 -5
  175. package/dist/components/menu/Menu.d.ts +0 -25
  176. package/dist/components/menu/Menu.js +0 -168
  177. package/dist/components/menu/Menu.styles.js +0 -21
  178. package/dist/components/menu/index.d.ts +0 -7
  179. package/dist/components/menu/index.js +0 -5
  180. package/dist/components/menu-item/MenuItem.d.ts +0 -36
  181. package/dist/components/menu-item/MenuItem.js +0 -267
  182. package/dist/components/menu-item/MenuItem.styles.js +0 -70
  183. package/dist/components/menu-item/index.d.ts +0 -7
  184. package/dist/components/menu-item/index.js +0 -5
  185. package/dist/components/progress-bar/index.d.ts +0 -7
  186. package/dist/components/progress-bar/index.js +0 -5
  187. package/dist/components/progress-ring/index.d.ts +0 -7
  188. package/dist/components/progress-ring/index.js +0 -5
  189. package/dist/components/spinner/index.d.ts +0 -7
  190. package/dist/components/spinner/index.js +0 -5
  191. package/dist/components/split-panel/index.d.ts +0 -7
  192. package/dist/components/split-panel/index.js +0 -5
  193. package/dist/components/tooltip/index.d.ts +0 -7
  194. package/dist/components/tooltip/index.js +0 -5
  195. package/dist/components/tree/index.d.ts +0 -3
  196. package/dist/components/tree/index.js +0 -5
  197. package/dist/components/tree-item/index.d.ts +0 -3
  198. package/dist/components/tree-item/index.js +0 -5
  199. package/dist/events/index.d.ts +0 -6
  200. package/dist/integrations/react/UAlert.d.ts +0 -8
  201. package/dist/integrations/react/UAlert.js +0 -10
  202. package/dist/integrations/react/UButton.d.ts +0 -8
  203. package/dist/integrations/react/UButton.js +0 -10
  204. package/dist/integrations/react/UContextMenu.d.ts +0 -8
  205. package/dist/integrations/react/UContextMenu.js +0 -10
  206. package/dist/integrations/react/UCopyButton.d.ts +0 -8
  207. package/dist/integrations/react/UCopyButton.js +0 -10
  208. package/dist/integrations/react/UDialog.d.ts +0 -8
  209. package/dist/integrations/react/UDialog.js +0 -10
  210. package/dist/integrations/react/UDivider.d.ts +0 -8
  211. package/dist/integrations/react/UDivider.js +0 -10
  212. package/dist/integrations/react/UDropdownMenu.d.ts +0 -8
  213. package/dist/integrations/react/UDropdownMenu.js +0 -10
  214. package/dist/integrations/react/UForm.d.ts +0 -8
  215. package/dist/integrations/react/UForm.js +0 -10
  216. package/dist/integrations/react/UIcon.d.ts +0 -8
  217. package/dist/integrations/react/UIcon.js +0 -10
  218. package/dist/integrations/react/UIconButton.d.ts +0 -8
  219. package/dist/integrations/react/UIconButton.js +0 -10
  220. package/dist/integrations/react/UInput.d.ts +0 -8
  221. package/dist/integrations/react/UInput.js +0 -10
  222. package/dist/integrations/react/UMenu.d.ts +0 -8
  223. package/dist/integrations/react/UMenu.js +0 -10
  224. package/dist/integrations/react/UMenuItem.d.ts +0 -8
  225. package/dist/integrations/react/UMenuItem.js +0 -10
  226. package/dist/integrations/react/UProgressBar.d.ts +0 -8
  227. package/dist/integrations/react/UProgressBar.js +0 -10
  228. package/dist/integrations/react/UProgressRing.d.ts +0 -8
  229. package/dist/integrations/react/UProgressRing.js +0 -10
  230. package/dist/integrations/react/USpinner.d.ts +0 -8
  231. package/dist/integrations/react/USpinner.js +0 -10
  232. package/dist/integrations/react/USplitPanel.d.ts +0 -8
  233. package/dist/integrations/react/USplitPanel.js +0 -10
  234. package/dist/integrations/react/UTooltip.d.ts +0 -8
  235. package/dist/integrations/react/UTooltip.js +0 -10
  236. package/dist/integrations/react/UTree.d.ts +0 -8
  237. package/dist/integrations/react/UTree.js +0 -10
  238. package/dist/integrations/react/UTreeItem.d.ts +0 -8
  239. package/dist/integrations/react/UTreeItem.js +0 -10
  240. package/dist/integrations/react/index.d.ts +0 -27
  241. package/dist/integrations/react/index.js +0 -20
  242. package/dist/internals/index.d.ts +0 -3
  243. package/dist/utilities/decorators.js +0 -28
  244. package/dist/utilities/index.d.ts +0 -5
  245. /package/dist/components/{alert/Alert.styles.d.ts → ModalElement.styles.d.ts} +0 -0
  246. /package/dist/components/{button/Button.styles.d.ts → alert/UAlert.styles.d.ts} +0 -0
  247. /package/dist/components/{context-menu/ContextMenu.styles.d.ts → button/UButton.styles.d.ts} +0 -0
  248. /package/dist/components/button/{Button.styles.js → UButton.styles.js} +0 -0
  249. /package/dist/components/copy-button/{CopyButton.styles.d.ts → UCopyButton.styles.d.ts} +0 -0
  250. /package/dist/components/copy-button/{CopyButton.styles.js → UCopyButton.styles.js} +0 -0
  251. /package/dist/components/dialog/{Dialog.styles.d.ts → UDialog.styles.d.ts} +0 -0
  252. /package/dist/components/divider/{Divider.styles.d.ts → UDivider.styles.d.ts} +0 -0
  253. /package/dist/components/divider/{Divider.styles.js → UDivider.styles.js} +0 -0
  254. /package/dist/components/{dropdown-menu/DropdownMenu.styles.d.ts → drawer/UDrawer.styles.d.ts} +0 -0
  255. /package/dist/components/form/{Form.styles.d.ts → UForm.styles.d.ts} +0 -0
  256. /package/dist/components/form/{Form.styles.js → UForm.styles.js} +0 -0
  257. /package/dist/components/icon/{Icon.styles.d.ts → UIcon.styles.d.ts} +0 -0
  258. /package/dist/components/icon/{Icon.styles.js → UIcon.styles.js} +0 -0
  259. /package/dist/components/icon-button/{IconButton.styles.d.ts → UIconButton.styles.d.ts} +0 -0
  260. /package/dist/components/icon-button/{IconButton.styles.js → UIconButton.styles.js} +0 -0
  261. /package/dist/components/input/{Input.styles.d.ts → UInput.styles.d.ts} +0 -0
  262. /package/dist/components/menu/{Menu.styles.d.ts → UMenu.styles.d.ts} +0 -0
  263. /package/dist/components/menu-item/{MenuItem.styles.d.ts → UMenuItem.styles.d.ts} +0 -0
  264. /package/dist/components/progress-bar/{ProgressBar.styles.d.ts → UProgressBar.styles.d.ts} +0 -0
  265. /package/dist/components/progress-bar/{ProgressBar.styles.js → UProgressBar.styles.js} +0 -0
  266. /package/dist/components/progress-ring/{ProgressRing.styles.d.ts → UProgressRing.styles.d.ts} +0 -0
  267. /package/dist/components/progress-ring/{ProgressRing.styles.js → UProgressRing.styles.js} +0 -0
  268. /package/dist/components/{spinner/Spinner.styles.d.ts → skeleton/USkeleton.styles.d.ts} +0 -0
  269. /package/dist/components/{split-panel/SplitPanel.styles.d.ts → spinner/USpinner.styles.d.ts} +0 -0
  270. /package/dist/components/spinner/{Spinner.styles.js → USpinner.styles.js} +0 -0
  271. /package/dist/components/{tooltip/Tooltip.styles.d.ts → split-panel/USplitPanel.styles.d.ts} +0 -0
  272. /package/dist/components/split-panel/{SplitPanel.styles.js → USplitPanel.styles.js} +0 -0
  273. /package/dist/components/{tree-item/TreeItem.styles.d.ts → tooltip/UTooltip.styles.d.ts} +0 -0
  274. /package/dist/components/{tree/Tree.styles.d.ts → tree-item/UTreeItem.styles.d.ts} +0 -0
  275. /package/dist/components/tree-item/{TreeItem.styles.js → UTreeItem.styles.js} +0 -0
@@ -1,20 +0,0 @@
1
- export * from './alert';
2
- export * from './button';
3
- export * from './context-menu';
4
- export * from './copy-button';
5
- export * from './dialog';
6
- export * from './divider';
7
- export * from './dropdown-menu';
8
- export * from './form';
9
- export * from './icon';
10
- export * from './icon-button';
11
- export * from './input';
12
- export * from './menu';
13
- export * from './menu-item';
14
- export * from './progress-bar';
15
- export * from './progress-ring';
16
- export * from './spinner';
17
- export * from './split-panel';
18
- export * from './tooltip';
19
- export * from './tree';
20
- export * from './tree-item';
@@ -1,7 +0,0 @@
1
- import { Input } from './Input.js';
2
- declare global {
3
- interface HTMLElementTagNameMap {
4
- "u-input": Input;
5
- }
6
- }
7
- export { Input };
@@ -1,5 +0,0 @@
1
- import { Input } from './Input.js';
2
-
3
- Input.define("u-input");
4
-
5
- export { Input };
@@ -1,25 +0,0 @@
1
- import { PropertyValues } from 'lit';
2
- import { BaseElement } from '../BaseElement.js';
3
- export declare class Menu extends BaseElement {
4
- static styles: import('lit').CSSResultGroup[];
5
- static dependencies: Record<string, typeof BaseElement>;
6
- private items;
7
- open: boolean;
8
- selectable: boolean;
9
- value: string;
10
- connectedCallback(): void;
11
- disconnectedCallback(): void;
12
- protected updated(changedProperties: PropertyValues): void;
13
- render(): import('lit-html').TemplateResult<1>;
14
- show: () => Promise<void>;
15
- hide: () => Promise<void>;
16
- /** (추가) 첫 번째 활성 아이템 포커스 */
17
- focusFirstItem: () => Promise<void>;
18
- private updateOpenState;
19
- private updateSelection;
20
- private handleSlotChange;
21
- private handleSelect;
22
- /** 같은 레벨 다른 submenu 닫기 */
23
- private handleSubmenuOpen;
24
- private handleKeydown;
25
- }
@@ -1,168 +0,0 @@
1
- import { html } from 'lit';
2
- import { queryAssignedElements, property } from 'lit/decorators.js';
3
- import { BaseElement } from '../BaseElement.js';
4
- import { MenuItem } from '../menu-item/MenuItem.js';
5
- import { styles } from './Menu.styles.js';
6
-
7
- var __defProp = Object.defineProperty;
8
- var __decorateClass = (decorators, target, key, kind) => {
9
- var result = void 0 ;
10
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
11
- if (decorator = decorators[i])
12
- result = (decorator(target, key, result) ) || result;
13
- if (result) __defProp(target, key, result);
14
- return result;
15
- };
16
- class Menu extends BaseElement {
17
- constructor() {
18
- super(...arguments);
19
- this.open = false;
20
- this.selectable = false;
21
- this.value = "";
22
- this.show = async () => {
23
- await this.updateComplete;
24
- requestAnimationFrame(() => this.open = true);
25
- };
26
- this.hide = async () => {
27
- await this.updateComplete;
28
- requestAnimationFrame(() => this.open = false);
29
- };
30
- /** (추가) 첫 번째 활성 아이템 포커스 */
31
- this.focusFirstItem = async () => {
32
- await this.updateComplete;
33
- const enabled = (this.items || []).filter((i) => !i.disabled);
34
- if (enabled.length) enabled[0].focus();
35
- };
36
- this.handleSlotChange = () => {
37
- if (this.selectable && this.value) this.updateSelection();
38
- };
39
- this.handleSelect = (e) => {
40
- const event = e;
41
- const menuItem = e.target;
42
- if (this.selectable && menuItem) {
43
- this.value = menuItem.value || event.detail?.value || "";
44
- this.updateSelection();
45
- }
46
- };
47
- /** 같은 레벨 다른 submenu 닫기 */
48
- this.handleSubmenuOpen = (e) => {
49
- const openedItem = e.detail?.item;
50
- if (!openedItem) return;
51
- (this.items || []).forEach((item) => {
52
- if (item !== openedItem) item.closeSubmenu?.();
53
- });
54
- };
55
- this.handleKeydown = async (e) => {
56
- const items = (this.items || []).filter((item) => !item.disabled);
57
- if (items.length === 0) return;
58
- const currentIndex = items.findIndex((item) => item === e.target);
59
- let nextIndex = currentIndex;
60
- switch (e.key) {
61
- case "ArrowDown":
62
- e.preventDefault();
63
- nextIndex = (currentIndex + 1) % items.length;
64
- items[nextIndex].focus();
65
- break;
66
- case "ArrowUp":
67
- e.preventDefault();
68
- nextIndex = currentIndex - 1 < 0 ? items.length - 1 : currentIndex - 1;
69
- items[nextIndex].focus();
70
- break;
71
- case "Home":
72
- e.preventDefault();
73
- items[0].focus();
74
- break;
75
- case "End":
76
- e.preventDefault();
77
- items[items.length - 1].focus();
78
- break;
79
- case "Enter":
80
- case " ":
81
- e.preventDefault();
82
- if (currentIndex >= 0) items[currentIndex].click();
83
- break;
84
- case "ArrowLeft": {
85
- const parentItem = this.parentElement;
86
- if (parentItem?.tagName?.toLowerCase() === "u-menu-item") {
87
- e.preventDefault();
88
- parentItem.closeSubmenu?.();
89
- parentItem.focus?.();
90
- }
91
- break;
92
- }
93
- case "Escape": {
94
- e.preventDefault();
95
- const parentItem = this.parentElement;
96
- if (parentItem?.tagName?.toLowerCase() === "u-menu-item") {
97
- parentItem.closeSubmenu?.();
98
- parentItem.focus?.();
99
- } else {
100
- this.emit("u-request-close");
101
- await this.hide();
102
- }
103
- break;
104
- }
105
- }
106
- };
107
- }
108
- static {
109
- this.styles = [super.styles, styles];
110
- }
111
- static {
112
- this.dependencies = {
113
- "u-menu-item": MenuItem
114
- };
115
- }
116
- connectedCallback() {
117
- super.connectedCallback();
118
- this.setAttribute("role", "menu");
119
- this.addEventListener("u-select", this.handleSelect);
120
- this.addEventListener("keydown", this.handleKeydown);
121
- this.addEventListener("u-submenu-open", this.handleSubmenuOpen);
122
- }
123
- disconnectedCallback() {
124
- this.removeEventListener("u-select", this.handleSelect);
125
- this.removeEventListener("keydown", this.handleKeydown);
126
- this.removeEventListener("u-submenu-open", this.handleSubmenuOpen);
127
- super.disconnectedCallback();
128
- }
129
- updated(changedProperties) {
130
- super.updated(changedProperties);
131
- if (changedProperties.has("value") && this.selectable) {
132
- this.updateSelection();
133
- }
134
- if (changedProperties.has("open")) {
135
- this.updateOpenState(this.open);
136
- }
137
- }
138
- render() {
139
- return html`
140
- <div class="container">
141
- <slot @slotchange=${this.handleSlotChange}></slot>
142
- </div>
143
- `;
144
- }
145
- updateOpenState(open) {
146
- if (open) this.emit("u-show");
147
- else this.emit("u-hide");
148
- }
149
- updateSelection() {
150
- (this.items || []).forEach((item) => {
151
- item.selected = item.value === this.value;
152
- });
153
- }
154
- }
155
- __decorateClass([
156
- queryAssignedElements({ selector: "u-menu-item" })
157
- ], Menu.prototype, "items");
158
- __decorateClass([
159
- property({ type: Boolean, reflect: true })
160
- ], Menu.prototype, "open");
161
- __decorateClass([
162
- property({ type: Boolean })
163
- ], Menu.prototype, "selectable");
164
- __decorateClass([
165
- property({ type: String })
166
- ], Menu.prototype, "value");
167
-
168
- export { Menu };
@@ -1,21 +0,0 @@
1
- import { css } from 'lit';
2
-
3
- const styles = css`
4
- :host {
5
- display: none;
6
- min-width: 180px;
7
- padding: 6px;
8
- border-radius: 8px;
9
- background: var(--u-menu-bg, #fff);
10
- box-shadow: 0 10px 24px rgba(0,0,0,0.18);
11
- }
12
- :host([open]) {
13
- display: block;
14
- }
15
-
16
- .container {
17
- display: block;
18
- }
19
- `;
20
-
21
- export { styles };
@@ -1,7 +0,0 @@
1
- import { Menu } from './Menu.js';
2
- declare global {
3
- interface HTMLElementTagNameMap {
4
- 'u-menu': Menu;
5
- }
6
- }
7
- export { Menu };
@@ -1,5 +0,0 @@
1
- import { Menu } from './Menu.js';
2
-
3
- Menu.define("u-menu");
4
-
5
- export { Menu };
@@ -1,36 +0,0 @@
1
- import { PropertyValues } from 'lit';
2
- import { BaseElement } from '../BaseElement.js';
3
- export declare class MenuItem extends BaseElement {
4
- static styles: import('lit').CSSResultGroup[];
5
- static dependencies: Record<string, typeof BaseElement>;
6
- disabled: boolean;
7
- selected: boolean;
8
- checked: boolean;
9
- checkable: boolean;
10
- value: string;
11
- private submenuOpen;
12
- private containerEl;
13
- private submenuList;
14
- private submenuCleanup;
15
- private closeTimer;
16
- private get submenu();
17
- connectedCallback(): void;
18
- disconnectedCallback(): void;
19
- protected updated(changed: PropertyValues): void;
20
- private updateRole;
21
- render(): import('lit-html').TemplateResult<1>;
22
- private renderPrefixItem;
23
- /** 외부에서 호출 가능하게(부모 menu가 형제 submenu 닫을 때 사용) */
24
- closeSubmenu: () => Promise<void>;
25
- private openSubmenu;
26
- private onSubmenuSelect;
27
- private scheduleCloseSubmenu;
28
- private stopSubmenuAutoUpdate;
29
- private positionSubmenu;
30
- private onPointerEnter;
31
- private onPointerLeave;
32
- private onFocusIn;
33
- private onFocusOut;
34
- private handleKeydown;
35
- private handleClick;
36
- }
@@ -1,267 +0,0 @@
1
- import { nothing, html } from 'lit';
2
- import { property, state, query, queryAssignedElements } from 'lit/decorators.js';
3
- import { autoUpdate, computePosition, offset, flip, shift } from '@floating-ui/dom';
4
- import { BaseElement } from '../BaseElement.js';
5
- import { styles } from './MenuItem.styles.js';
6
-
7
- var __defProp = Object.defineProperty;
8
- var __decorateClass = (decorators, target, key, kind) => {
9
- var result = void 0 ;
10
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
11
- if (decorator = decorators[i])
12
- result = (decorator(target, key, result) ) || result;
13
- if (result) __defProp(target, key, result);
14
- return result;
15
- };
16
- class MenuItem extends BaseElement {
17
- constructor() {
18
- super(...arguments);
19
- this.disabled = false;
20
- this.selected = false;
21
- this.checked = false;
22
- this.checkable = false;
23
- this.value = "";
24
- this.submenuOpen = false;
25
- this.submenuCleanup = null;
26
- this.closeTimer = null;
27
- /** 외부에서 호출 가능하게(부모 menu가 형제 submenu 닫을 때 사용) */
28
- this.closeSubmenu = async () => {
29
- const sm = this.submenu;
30
- if (!sm) return;
31
- this.stopSubmenuAutoUpdate();
32
- if (this.closeTimer) window.clearTimeout(this.closeTimer);
33
- this.submenuOpen = false;
34
- this.setAttribute("aria-expanded", "false");
35
- await sm.hide();
36
- };
37
- this.openSubmenu = async (focusFirst = false) => {
38
- const sm = this.submenu;
39
- if (!sm || this.disabled) return;
40
- if (this.closeTimer) {
41
- window.clearTimeout(this.closeTimer);
42
- this.closeTimer = null;
43
- }
44
- this.submenuOpen = true;
45
- this.setAttribute("aria-expanded", "true");
46
- this.emit("u-submenu-open", { item: this });
47
- await sm.show();
48
- await this.positionSubmenu();
49
- this.stopSubmenuAutoUpdate();
50
- this.submenuCleanup = autoUpdate(this.containerEl, sm, () => {
51
- this.positionSubmenu();
52
- });
53
- sm.addEventListener("u-select", this.onSubmenuSelect, { once: true });
54
- if (focusFirst) {
55
- await sm.focusFirstItem?.();
56
- }
57
- };
58
- this.onSubmenuSelect = () => {
59
- this.closeSubmenu();
60
- };
61
- this.scheduleCloseSubmenu = () => {
62
- if (!this.submenu) return;
63
- if (this.closeTimer) window.clearTimeout(this.closeTimer);
64
- this.closeTimer = window.setTimeout(() => this.closeSubmenu(), 150);
65
- };
66
- this.positionSubmenu = async () => {
67
- const sm = this.submenu;
68
- if (!sm) return;
69
- const pos = await computePosition(this.containerEl, sm, {
70
- strategy: "fixed",
71
- placement: "right-start",
72
- middleware: [
73
- offset(6),
74
- flip(),
75
- shift({ padding: 8 })
76
- ]
77
- });
78
- Object.assign(sm.style, {
79
- position: "fixed",
80
- left: `${pos.x}px`,
81
- top: `${pos.y}px`,
82
- zIndex: "1001",
83
- transformOrigin: (() => {
84
- switch (pos.placement) {
85
- case "left":
86
- case "left-start":
87
- case "left-end":
88
- return "right center";
89
- case "right":
90
- case "right-start":
91
- case "right-end":
92
- return "left center";
93
- case "top":
94
- case "top-start":
95
- case "top-end":
96
- return "center bottom";
97
- default:
98
- return "center top";
99
- }
100
- })()
101
- });
102
- };
103
- this.onPointerEnter = () => {
104
- if (this.submenu) this.openSubmenu(false);
105
- };
106
- this.onPointerLeave = (e) => {
107
- const sm = this.submenu;
108
- if (!sm) return;
109
- const next = e.relatedTarget;
110
- if (next && (this.contains(next) || sm.contains(next))) return;
111
- this.scheduleCloseSubmenu();
112
- };
113
- this.onFocusIn = () => {
114
- if (this.submenu) this.openSubmenu(false);
115
- };
116
- this.onFocusOut = (e) => {
117
- const sm = this.submenu;
118
- if (!sm) return;
119
- const next = e.relatedTarget;
120
- if (next && (this.contains(next) || sm.contains(next))) return;
121
- this.scheduleCloseSubmenu();
122
- };
123
- this.handleKeydown = async (e) => {
124
- if (!this.submenu) return;
125
- if (e.key === "ArrowRight" || e.key === "Enter" || e.key === " ") {
126
- e.preventDefault();
127
- await this.openSubmenu(true);
128
- }
129
- };
130
- this.handleClick = async (e) => {
131
- if (this.disabled) {
132
- e.preventDefault();
133
- e.stopPropagation();
134
- return;
135
- }
136
- if (this.submenu) {
137
- e.preventDefault();
138
- e.stopPropagation();
139
- if (this.submenuOpen) await this.closeSubmenu();
140
- else await this.openSubmenu(true);
141
- return;
142
- }
143
- if (this.checkable) {
144
- this.checked = !this.checked;
145
- this.emit("u-check", { checked: this.checked });
146
- } else {
147
- this.emit("u-select", { value: this.value });
148
- }
149
- };
150
- }
151
- static {
152
- this.styles = [super.styles, styles];
153
- }
154
- static {
155
- this.dependencies = {};
156
- }
157
- get submenu() {
158
- return this.submenuList?.[0];
159
- }
160
- connectedCallback() {
161
- super.connectedCallback();
162
- this.setAttribute("tabindex", this.disabled ? "-1" : "0");
163
- this.updateRole();
164
- this.addEventListener("keydown", this.handleKeydown);
165
- this.addEventListener("pointerenter", this.onPointerEnter);
166
- this.addEventListener("pointerleave", this.onPointerLeave);
167
- this.addEventListener("focusin", this.onFocusIn);
168
- this.addEventListener("focusout", this.onFocusOut);
169
- }
170
- disconnectedCallback() {
171
- this.removeEventListener("keydown", this.handleKeydown);
172
- this.removeEventListener("pointerenter", this.onPointerEnter);
173
- this.removeEventListener("pointerleave", this.onPointerLeave);
174
- this.removeEventListener("focusin", this.onFocusIn);
175
- this.removeEventListener("focusout", this.onFocusOut);
176
- this.stopSubmenuAutoUpdate();
177
- if (this.closeTimer) window.clearTimeout(this.closeTimer);
178
- super.disconnectedCallback();
179
- }
180
- updated(changed) {
181
- super.updated(changed);
182
- if (changed.has("disabled")) {
183
- this.setAttribute("tabindex", this.disabled ? "-1" : "0");
184
- this.setAttribute("aria-disabled", this.disabled ? "true" : "false");
185
- if (this.disabled) this.closeSubmenu();
186
- }
187
- if (changed.has("checked")) {
188
- this.setAttribute("aria-checked", this.checked ? "true" : "false");
189
- }
190
- if (changed.has("checkable")) {
191
- this.updateRole();
192
- }
193
- }
194
- updateRole() {
195
- const hasSubmenu = !!this.submenu;
196
- if (this.checkable) {
197
- this.setAttribute("role", "menuitemcheckbox");
198
- this.setAttribute("aria-checked", this.checked ? "true" : "false");
199
- } else {
200
- this.setAttribute("role", "menuitem");
201
- }
202
- if (hasSubmenu) {
203
- this.setAttribute("aria-haspopup", "menu");
204
- this.setAttribute("aria-expanded", this.submenuOpen ? "true" : "false");
205
- } else {
206
- this.removeAttribute("aria-haspopup");
207
- this.removeAttribute("aria-expanded");
208
- }
209
- }
210
- render() {
211
- const hasSubmenu = !!this.submenu;
212
- return html`
213
- <div class="container" @click=${this.handleClick}>
214
- ${this.renderPrefixItem()}
215
- <slot name="prefix"></slot>
216
-
217
- <span class="content">
218
- <slot></slot>
219
- </span>
220
-
221
- <slot name="suffix"></slot>
222
- ${hasSubmenu ? html`<span class="submenu-indicator">›</span>` : nothing}
223
- </div>
224
-
225
- <!-- Shoelace 방식 그대로 -->
226
- <slot name="submenu"></slot>
227
- `;
228
- }
229
- renderPrefixItem() {
230
- if (this.checkable) {
231
- return html`<span class="checker" ?checked=${this.checked}>✓</span>`;
232
- }
233
- return nothing;
234
- }
235
- stopSubmenuAutoUpdate() {
236
- if (this.submenuCleanup) {
237
- this.submenuCleanup();
238
- this.submenuCleanup = null;
239
- }
240
- }
241
- }
242
- __decorateClass([
243
- property({ type: Boolean, reflect: true })
244
- ], MenuItem.prototype, "disabled");
245
- __decorateClass([
246
- property({ type: Boolean, reflect: true })
247
- ], MenuItem.prototype, "selected");
248
- __decorateClass([
249
- property({ type: Boolean, reflect: true })
250
- ], MenuItem.prototype, "checked");
251
- __decorateClass([
252
- property({ type: Boolean })
253
- ], MenuItem.prototype, "checkable");
254
- __decorateClass([
255
- property({ type: String })
256
- ], MenuItem.prototype, "value");
257
- __decorateClass([
258
- state()
259
- ], MenuItem.prototype, "submenuOpen");
260
- __decorateClass([
261
- query(".container")
262
- ], MenuItem.prototype, "containerEl");
263
- __decorateClass([
264
- queryAssignedElements({ slot: "submenu", selector: "u-menu" })
265
- ], MenuItem.prototype, "submenuList");
266
-
267
- export { MenuItem };
@@ -1,70 +0,0 @@
1
- import { css } from 'lit';
2
-
3
- const styles = css`
4
- :host {
5
- display: block;
6
-
7
- --selected-color: var(--u-blue-600, #0066cc);
8
- --selected-bg-color: var(--u-blue-50, #e8f4f8);
9
- }
10
- :host([disabled]) {
11
- opacity: 0.5;
12
- pointer-events: none;
13
- cursor: not-allowed;
14
- }
15
- :host([disabled]) .container {
16
- cursor: not-allowed;
17
- pointer-events: none;
18
- }
19
- :host(:not([disabled])) .container:hover {
20
- background-color: var(--u-bg-color-hover, #f5f5f5);
21
- }
22
- :host([selected]) .container {
23
- color: var(--selected-color, #0066cc);
24
- background-color: var(--selected-bg-color, #e8f4f8);
25
- }
26
-
27
- .container {
28
- display: flex;
29
- flex-direction: row;
30
- align-items: center;
31
- gap: 8px;
32
- padding: 8px 12px;
33
- line-height: 1.5;
34
- border-radius: 4px;
35
- background-color: transparent;
36
- transition: background-color 0.2s ease;
37
- user-select: none;
38
- cursor: pointer;
39
- }
40
-
41
- .checker {
42
- display: flex;
43
- align-items: center;
44
- justify-content: center;
45
- opacity: 0;
46
- width: 1em;
47
- font-size: 0.75em;
48
- font-weight: bold;
49
- color: var(--u-blue-600, #0066cc);
50
- transition: opacity 0.2s ease;
51
- }
52
- .checker[checked] {
53
- opacity: 1;
54
- }
55
-
56
- .content {
57
- flex: 1;
58
- overflow: hidden;
59
- text-overflow: ellipsis;
60
- white-space: nowrap;
61
- }
62
-
63
- .submenu-indicator {
64
- margin-left: 8px;
65
- opacity: 0.7;
66
- user-select: none;
67
- }
68
- `;
69
-
70
- export { styles };
@@ -1,7 +0,0 @@
1
- import { MenuItem } from './MenuItem.js';
2
- declare global {
3
- interface HTMLElementTagNameMap {
4
- 'u-menu-item': MenuItem;
5
- }
6
- }
7
- export { MenuItem };
@@ -1,5 +0,0 @@
1
- import { MenuItem } from './MenuItem.js';
2
-
3
- MenuItem.define("u-menu-item");
4
-
5
- export { MenuItem };
@@ -1,7 +0,0 @@
1
- import { ProgressBar } from './ProgressBar';
2
- declare global {
3
- interface HTMLElementTagNameMap {
4
- 'u-progress-bar': ProgressBar;
5
- }
6
- }
7
- export { ProgressBar };
@@ -1,5 +0,0 @@
1
- import { ProgressBar } from './ProgressBar.js';
2
-
3
- ProgressBar.define("u-progress-bar");
4
-
5
- export { ProgressBar };
@@ -1,7 +0,0 @@
1
- import { ProgressRing } from './ProgressRing.js';
2
- declare global {
3
- interface HTMLElementTagNameMap {
4
- 'u-progress-ring': ProgressRing;
5
- }
6
- }
7
- export { ProgressRing };
@@ -1,5 +0,0 @@
1
- import { ProgressRing } from './ProgressRing.js';
2
-
3
- ProgressRing.define("u-progress-ring");
4
-
5
- export { ProgressRing };