@iyulab/components 1.43.0 โ 1.44.1
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.
- package/CHANGELOG.md +94 -0
- package/dist/_virtual/_glob-assets_raw/dark.css.e8ac080d.js +1 -1
- package/dist/assets/locales/ar.json.js +6 -2
- package/dist/assets/locales/de.json.js +6 -2
- package/dist/assets/locales/en.json.js +6 -2
- package/dist/assets/locales/es.json.js +6 -2
- package/dist/assets/locales/fr.json.js +6 -2
- package/dist/assets/locales/id.json.js +6 -2
- package/dist/assets/locales/ja.json.js +5 -2
- package/dist/assets/locales/ko.json.js +6 -2
- package/dist/assets/locales/pt-BR.json.js +6 -2
- package/dist/assets/locales/ru.json.js +6 -2
- package/dist/assets/locales/th.json.js +6 -2
- package/dist/assets/locales/vi.json.js +6 -2
- package/dist/assets/locales/zh-CN.json.js +6 -2
- package/dist/assets/locales/zh-TW.json.js +6 -2
- package/dist/components/UOverlayElement.d.ts +7 -1
- package/dist/components/UOverlayElement.js +1 -1
- package/dist/components/breadcrumb-item/UBreadcrumbItem.js +1 -0
- package/dist/components/date-picker/UDatePicker.js +1 -0
- package/dist/components/input/UInput.js +2 -1
- package/dist/components/menu-item/UMenuItem.js +5 -1
- package/dist/components/popover/UPopover.d.ts +10 -0
- package/dist/components/popover/UPopover.js +3 -1
- package/dist/components/radio/URadio.js +1 -0
- package/dist/components/rating/URating.js +1 -0
- package/dist/components/select/USelect.d.ts +8 -0
- package/dist/components/select/USelect.js +6 -1
- package/dist/components/tab/UTab.d.ts +2 -0
- package/dist/components/tab/UTab.js +7 -0
- package/dist/components/tree-item/UTreeItem.js +5 -1
- package/dist/styles/dark.css +72 -47
- package/dist/utilities/Dialog.d.ts +2 -2
- package/dist/utilities/Dialog.js +5 -4
- package/dist/utilities/Locale.d.ts +1 -1
- package/dist/utilities/Theme.d.ts +18 -0
- package/dist/utilities/Theme.js +25 -2
- package/package.json +1 -1
- package/skills/iyulab-components/SKILL.md +7 -0
- package/skills/iyulab-components/references/components/popover.md +12 -0
- package/skills/iyulab-components/references/extensions/overlay.md +3 -1
- package/skills/iyulab-components/references/utilities/dialog.md +2 -2
- package/skills/iyulab-components/references/utilities/theme.md +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,99 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.44.1] - 2026-09-23
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- ๐ด **A closed popover no longer consumes `Escape`.** A popover with `escape` in its `dismiss`
|
|
8
|
+
list listens on the document from the moment it connects, and it called `preventDefault()`
|
|
9
|
+
whether or not it was open. Every form control carries a popover, so on any real screen a
|
|
10
|
+
document-level `Escape` always arrived already `defaultPrevented` โ and `defaultPrevented` is
|
|
11
|
+
exactly the signal you need to tell whether an inner layer handled the key. Now only an open
|
|
12
|
+
popover consumes it. A popover waiting on `showDelay` still has its pending show cancelled, but
|
|
13
|
+
the key is not consumed because nothing was visible yet. A closed popover also ignores document
|
|
14
|
+
clicks instead of running `hide()` on every click.
|
|
15
|
+
- **`u-input` no longer consumes `Escape` while its suggestion list is closed.**
|
|
16
|
+
- **`u-select` returns focus to the combobox when its list closes with focus inside it.** Closing
|
|
17
|
+
the list with `Escape` or choosing an option with the keyboard left focus inside the hidden
|
|
18
|
+
list, where keyboard users lost their place and the next `Escape` was swallowed again. Closing
|
|
19
|
+
by clicking elsewhere does not move focus.
|
|
20
|
+
- **Dialogs and drawers ignore an `Escape` that something inside them already consumed.** With an
|
|
21
|
+
open list inside a dialog, one press used to close both. Now the first press closes the list and
|
|
22
|
+
the second closes the dialog โ one press, one layer.
|
|
23
|
+
- ๐ด **`disabled` is now exposed to assistive technology on controls whose role sits on a
|
|
24
|
+
non-native node.** These controls blocked interaction but never said so: screen readers
|
|
25
|
+
announced nothing, and test tools that check actionability treated the control as enabled,
|
|
26
|
+
clicked it, and had the click silently swallowed. `aria-disabled="true"` is now set on the
|
|
27
|
+
`combobox` of `u-select` and `u-date-picker`, the `radiogroup` of `u-radio` and `u-rating`,
|
|
28
|
+
the host of `u-menu-item`, `u-tab` and `u-tree-item`, and the link of `u-breadcrumb-item`.
|
|
29
|
+
|
|
30
|
+
- ๐ด **In dark mode, a `:root` override of the scale tokens now wins, as it does in light.**
|
|
31
|
+
`dark.css` redeclared radius, spacing, the type scale, motion and fonts โ with the same values as
|
|
32
|
+
`light.css` โ under `:root[theme="dark"]`, which outranks `:root`. So every layer that sets those
|
|
33
|
+
tokens on `:root` (the `@iyulab/enterprise` preset, a brand sheet) lost in dark mode regardless
|
|
34
|
+
of load order. Colors still switched, so dark mode *looked* fine while the type scale and radius
|
|
35
|
+
quietly fell back to neutral. Those tokens now sit in a `:root:where([theme="dark"])` block, at
|
|
36
|
+
the same specificity as `:root`. `dark.css` still defines every token, so a fixed-dark screen
|
|
37
|
+
that loads only that sheet is unaffected. **No visual change** for anyone not overriding them.
|
|
38
|
+
- ๐ด **`prefers-reduced-motion` is honoured in dark mode.** The durations were among the tokens
|
|
39
|
+
redeclared at the higher specificity, so `light.css`'s reduced-motion rule lost to them and
|
|
40
|
+
animations kept running for users who asked for less motion. `dark.css` now carries the same
|
|
41
|
+
rule for itself.
|
|
42
|
+
|
|
43
|
+
- **`Dialog.confirm` and `Dialog.prompt` label their buttons in the active locale.** The defaults
|
|
44
|
+
were the English literals `Cancel` and `Confirm`, so an app that had switched `Locale` got
|
|
45
|
+
English buttons under a translated message, while every other built-in label in this package
|
|
46
|
+
already followed the locale. `confirm` and `cancel` are now in all fourteen built-in tables;
|
|
47
|
+
labels you pass explicitly still win, and English is unchanged.
|
|
48
|
+
|
|
49
|
+
โ **If you close your own panel on `Escape`**, you can now guard it with `event.defaultPrevented`
|
|
50
|
+
the way the platform intends; you no longer need to inspect which popovers are open. **If a test
|
|
51
|
+
locates a control by tag and expects a click on a disabled one to be attempted**, it will now
|
|
52
|
+
wait instead โ locate by role.
|
|
53
|
+
|
|
54
|
+
### Documentation
|
|
55
|
+
|
|
56
|
+
- The popover and overlay references state the `Escape` contract, with the guard a consumer
|
|
57
|
+
panel should use. The skill index states where `disabled` is exposed for each control.
|
|
58
|
+
- `docs/theming.md` says which tokens a `:root` override reaches in dark mode, and how to
|
|
59
|
+
override a color there too.
|
|
60
|
+
|
|
61
|
+
## [1.44.0] - 2026-09-22
|
|
62
|
+
|
|
63
|
+
### Fixed
|
|
64
|
+
|
|
65
|
+
- ๐ด **`Theme.init()` no longer overrides styles the document already has.** The built-in token
|
|
66
|
+
sheets were appended to the end of `<head>`. A consumer stylesheet declaring the same `--u-*`
|
|
67
|
+
tokens on `:root` is placed by the bundler while the document parses, so the runtime append
|
|
68
|
+
always came *after* it โ and at equal specificity the later rule wins. The result was that the
|
|
69
|
+
built-in defaults silently overrode whatever the consumer had set, with no error and no
|
|
70
|
+
warning. Where the two sheets agreed on some values and differed on others, it read as
|
|
71
|
+
*partially applied* rather than as ignored, which is harder to notice than an outright failure.
|
|
72
|
+
- **The sheets are a defaults layer, so they now go in front of the document's other styles.**
|
|
73
|
+
They are inserted ahead of the first `<style>`/`<link rel=stylesheet>` โ not pushed past
|
|
74
|
+
`<meta>` and friends โ and their order relative to each other is preserved rather than
|
|
75
|
+
reversed. If a document has no stylesheets at all, they are appended as before; anything added
|
|
76
|
+
later still comes after them, which is the point.
|
|
77
|
+
|
|
78
|
+
โ **If you relied on the old behavior** โ that is, on the built-in values winning over a sheet
|
|
79
|
+
you loaded yourself โ you no longer need to; load order now works the way `:root` at equal
|
|
80
|
+
specificity implies. Nothing changes for consumers who never override these tokens.
|
|
81
|
+
|
|
82
|
+
### Documentation
|
|
83
|
+
|
|
84
|
+
- **`docs/theming.md` no longer tells you to sequence your override after `Theme.init()`.** That
|
|
85
|
+
instruction existed because of the behavior above, and it outlived it by exactly one release
|
|
86
|
+
otherwise. The Custom Themes section now says a plain static `import` is enough, states what
|
|
87
|
+
changed for anyone still on an older version, and keeps the one rule that *does* still decide
|
|
88
|
+
the outcome: specificity. `How Theme Switching Works` says where the sheets are inserted, not
|
|
89
|
+
just that they are.
|
|
90
|
+
- The same note is in the skill reference for `Theme`, which is where an assistant reads it.
|
|
91
|
+
|
|
92
|
+
### Notes
|
|
93
|
+
|
|
94
|
+
- The regression measures computed values in a real browser. Asserting where a node was inserted
|
|
95
|
+
would describe placement, not the cascade, and the contract here is the cascade.
|
|
96
|
+
|
|
3
97
|
## [1.43.0] - 2026-09-22
|
|
4
98
|
|
|
5
99
|
### Added
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
//#region \0glob-assets_raw/dark.css.e8ac080d
|
|
2
|
-
var dark_css_default = ":root[theme=\"dark\"] {\n color-scheme: dark;\n\n /* Neutral Colors */\n --u-neutral-0: #000000;\n --u-neutral-50: #0A0A0A;\n --u-neutral-100: #121212;\n --u-neutral-200: #1E1E1E;\n --u-neutral-300: #2A2A2A;\n --u-neutral-400: #3D3D3D;\n --u-neutral-500: #525252;\n --u-neutral-600: #6E6E6E;\n --u-neutral-700: #8A8A8A;\n --u-neutral-800: #B0B0B0;\n --u-neutral-900: #D4D4D4;\n --u-neutral-1000: #FFFFFF;\n\n /* Blue Colors */\n --u-blue-0: #030D1A;\n --u-blue-100: #061629;\n --u-blue-200: #0A223B;\n --u-blue-300: #103150;\n --u-blue-400: #174167;\n --u-blue-500: #205281;\n --u-blue-600: #2A659D;\n --u-blue-700: #3678B8;\n --u-blue-800: #478DCE;\n --u-blue-900: #5DA2DF;\n --u-blue-1000: #79BBEA;\n\n /* Green Colors */\n --u-green-0: #06140C;\n --u-green-100: #0A2114;\n --u-green-200: #10301D;\n --u-green-300: #164228;\n --u-green-400: #1F5535;\n --u-green-500: #2A6942;\n --u-green-600: #367E50;\n --u-green-700: #4A9563;\n --u-green-800: #63AB7A;\n --u-green-900: #80BE97;\n --u-green-1000: #9BCFB1;\n\n /* Yellow Colors */\n --u-yellow-0: #1C1300;\n --u-yellow-100: #2D1E00;\n --u-yellow-200: #402B00;\n --u-yellow-300: #553900;\n --u-yellow-400: #6B4900;\n --u-yellow-500: #825A00;\n --u-yellow-600: #9A6C00;\n --u-yellow-700: #B08012;\n --u-yellow-800: #C69635;\n --u-yellow-900: #D9AD5A;\n --u-yellow-1000: #E8C57F;\n\n /* Red Colors */\n --u-red-0: #1C0707;\n --u-red-100: #2C0B0B;\n --u-red-200: #3E1111;\n --u-red-300: #541818;\n --u-red-400: #6C2020;\n --u-red-500: #852A2A;\n --u-red-600: #A13535;\n --u-red-700: #B94949;\n --u-red-800: #CB6262;\n --u-red-900: #D98383;\n --u-red-1000: #E7A2A2;\n\n /* Orange Colors */\n --u-orange-0: #1D0E00;\n --u-orange-100: #2F1700;\n --u-orange-200: #421F00;\n --u-orange-300: #582A00;\n --u-orange-400: #703600;\n --u-orange-500: #8A4500;\n --u-orange-600: #A55600;\n --u-orange-700: #BD6A18;\n --u-orange-800: #D1823C;\n --u-orange-900: #E19D67;\n --u-orange-1000: #EDB992;\n\n /* Teal Colors */\n --u-teal-0: #041411;\n --u-teal-100: #07201B;\n --u-teal-200: #0B2E28;\n --u-teal-300: #10403A;\n --u-teal-400: #16544D;\n --u-teal-500: #1E6860;\n --u-teal-600: #297D74;\n --u-teal-700: #3A9389;\n --u-teal-800: #54A89F;\n --u-teal-900: #73BBB3;\n --u-teal-1000: #93CBC5;\n\n /* Cyan Colors */\n --u-cyan-0: #041318;\n --u-cyan-100: #071F29;\n --u-cyan-200: #0B2D3A;\n --u-cyan-300: #104050;\n --u-cyan-400: #165469;\n --u-cyan-500: #1E6A82;\n --u-cyan-600: #287F9C;\n --u-cyan-700: #3995B5;\n --u-cyan-800: #53AACC;\n --u-cyan-900: #73BEDD;\n --u-cyan-1000: #95CFE8;\n\n /* Purple Colors */\n --u-purple-0: #150A22;\n --u-purple-100: #220F36;\n --u-purple-200: #31164B;\n --u-purple-300: #432064;\n --u-purple-400: #572B80;\n --u-purple-500: #6C379C;\n --u-purple-600: #8245B7;\n --u-purple-700: #975BCB;\n --u-purple-800: #AB79D9;\n --u-purple-900: #BD99E2;\n --u-purple-1000: #CEB8EA;\n\n /* Pink Colors */\n --u-pink-0: #1F0A14;\n --u-pink-100: #310F20;\n --u-pink-200: #451532;\n --u-pink-300: #5C1D45;\n --u-pink-400: #74285A;\n --u-pink-500: #8F336F;\n --u-pink-600: #AB4187;\n --u-pink-700: #C0569D;\n --u-pink-800: #D174B3;\n --u-pink-900: #E095C7;\n --u-pink-1000: #EBB5D9;\n\n /* ==========================================================================\n Role Colors โ ์๋ฏธ ์ญํ ์ธต\n ์ปดํฌ๋ํธ๋ ํ๋ ํธ ํ๋ฆฌ๋ฏธํฐ๋ธ๊ฐ ์๋๋ผ ์ด ์ธต์ ์ฐธ์กฐํ๋ค.\n ๋ธ๋๋ ์ ๊ต์ฒด๋ ์๋ 25๊ฐ๋ง ์ฌ์ ์ํ๋ฉด ์๋งจํฑ ์ธต๊น์ง ๋ฐ๋ผ์จ๋ค.\n\n ๋จ์ '๊ฐ๋' ์ถ์ด๋ค (weakest -> strong). ์ฉ๋(๋ฐฐ๊ฒฝ/ํ
๋๋ฆฌ/ํ
์คํธ)๋\n ์๋น์ฒ๊ฐ ์ ํ๋ค -- ๋จ์ ์์ฑ์ ๋ฌถ์ผ๋ฉด primary ๋ฒํผ์ ๋ฐฐ๊ฒฝ์ด ์ด๋\n ๋จ์ธ์ง ๊ฐ์ ๋ชจ์์ด ์๊ธด๋ค.\n\n โ
**๋ค๋ง ๋ ๋จ์ ์ฉ๋๊ฐ ํ์ ๋ผ ์๋ค** โ ๋๋น ์๊ตฌ๊ฐ ์๋ก ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.\n `-color` = **๋ฉด**. `--u-*-txt-color` ๊ฐ ๊ทธ ์์ ์นํ๋ฏ๋ก on-color ๊ธฐ์ค 4.5.\n `-strong` = **๊ธ์ยท์์ด์ฝ**. `--u-bg-color` ์์ ๋์ด๋ฏ๋ก ๋ฐํ ๊ธฐ์ค 4.5.\n ๋ผ์ดํธ์์๋ ๋ฐํ๋ on-color ๋ ํฐ์์ด๋ผ ๋ ์๊ตฌ๊ฐ ํ ์กฐ๊ฑด์ผ๋ก ํฉ์ณ์ง์ง๋ง,\n **๋คํฌ์์๋ ์ ๋ฐ๋ ๋ฐฉํฅ**์ด๋ค(๋ฐํ #121212 ยท on-color #FFFFFF). ๋ฐํ์์ ์ฝํ๋\n ๋ฐ์ ๋จ์ ํฐ ๊ธ์๋ฅผ ๋ชป ๋ฐ๊ณ , ํฐ ๊ธ์๋ฅผ ๋ฐ๋ ์ด๋์ด ๋จ์ ๋ฐํ์์ ์ ์ฝํ๋ค.\n โ ๋คํฌ์์ `-color` ์ `-strong` ์ด ๋ ๋จ ๋ฒ์ด์ง๋ ๊ฒ์ด ๊ทธ ๊ฒฐ๊ณผ๋ค.\n `tests/build/token-contrast.test.ts` ๊ฐ ๊ฐ์ ์งํจ๋ค.\n ========================================================================== */\n\n /* primary โ ๋ธ๋๋ ยท ๊ฐ์กฐ ยท ํฌ์ปค์ค ยท ๋งํฌ */\n --u-primary-color-weakest: var(--u-blue-200);\n --u-primary-color-weaker: var(--u-blue-300);\n --u-primary-color-weak: var(--u-blue-500);\n --u-primary-color: var(--u-blue-600); /* ๋ฉด: ํฐ ๊ธ์ 6.09 โ */\n --u-primary-color-strong: var(--u-blue-800); /* ๊ธ์: ๋ฐํ 5.32 โ (700 ์ 4.05 โ) */\n\n /* info โ ์ ๋ณด ์๋ด (primary ์ ๊ธฐ๋ณธ๊ฐ์ ๊ฐ์ผ๋ ์ญํ ์ด ๋ค๋ฅด๋ค โ ๋ธ๋๋ฉ์ primary ๋ง ๋ฐ๊พผ๋ค) */\n --u-info-color-weakest: var(--u-blue-200);\n --u-info-color-weaker: var(--u-blue-300);\n --u-info-color-weak: var(--u-blue-500);\n --u-info-color: var(--u-blue-600);\n --u-info-color-strong: var(--u-blue-800);\n\n /* success โ ์ฑ๊ณต ยท ์๋ฃ */\n --u-success-color-weakest: var(--u-green-200);\n --u-success-color-weaker: var(--u-green-300);\n --u-success-color-weak: var(--u-green-500);\n --u-success-color: var(--u-green-600);\n --u-success-color-strong: var(--u-green-700);\n\n /* warning โ ์ฃผ์ */\n --u-warning-color-weakest: var(--u-yellow-200);\n --u-warning-color-weaker: var(--u-yellow-300);\n --u-warning-color-weak: var(--u-yellow-500);\n --u-warning-color: var(--u-yellow-600);\n --u-warning-color-strong: var(--u-yellow-700);\n\n /* danger โ ์ค๋ฅ ยท ์ํ ยท ์ ํจ์ฑ ์คํจ */\n --u-danger-color-weakest: var(--u-red-200);\n --u-danger-color-weaker: var(--u-red-300);\n --u-danger-color-weak: var(--u-red-500);\n --u-danger-color: var(--u-red-600); /* ๋ฉด: ํฐ ๊ธ์ 6.83 โ */\n --u-danger-color-strong: var(--u-red-800); /* ๊ธ์: ๋ฐํ 4.87 โ (700 ์ 3.67 โ) */\n /* ==========================================================================\n Radius Scale โ ๋ชจ์๋ฆฌ ๋ฐ๊ฒฝ\n ๋ฆฌํฐ๋ด์ ํฉ๋ฟ๋ฆฌ๋ฉด ๊ฐ์ด ๊ฐ๋ฆฐ๋ค(์ค์ ๋ก pill ์ด 999px/9999px ๋ ํ๊ธฐ๋ก ๋๋์ด ์์๋ค).\n ========================================================================== */\n --u-radius-none: 0;\n --u-radius-sm: 3px;\n --u-radius-md: 4px;\n --u-radius-lg: 6px;\n --u-radius-xl: 8px;\n /* โ
์๋จ 2๋จ์ **๋ฉด(surface)์ฉ**์ด๋ค โ ์นด๋ยทํจ๋ยท๋ํ์์์ฒ๋ผ ํฐ ์ฌ๊ฐํ์ ์ปจํธ๋กค๊ณผ\n ๊ฐ์ ๋ฐ๊ฒฝ์ ์ฐ๋ฉด ๊ฐ์ ธ ๋ณด์ธ๋ค. ๊ธฐ์กด 5๋จ์ **์ปจํธ๋กค์ฉ**์ด๊ณ ๊ฐ์ ๋ฐ๊พธ์ง ์๋๋ค\n (๋ฐ๊พธ๋ฉด ๋ชจ๋ ์๋น์์ ๋ฒํผยท์
๋ ฅ์ด ๋์์ ์์ง์ธ๋ค). */\n --u-radius-2xl: 12px;\n --u-radius-3xl: 16px;\n --u-radius-pill: 9999px;\n --u-radius-circle: 50%;\n\n /* ==========================================================================\n Space Scale โ ์ปจํ
์ด๋ยท์ค๋ฒ๋ ์ด์ ์ ๋ ์ฌ๋ฐฑ\n โ **์ฌ๋ฐฑ์ ํ๋์ ์ถ์ด ์๋๋ค.** ์ด ์ค์ผ์ผ์ ์ปจํ
์ด๋/์ค๋ฒ๋ ์ด์ **๋ ์ด์์ ์ฌ๋ฐฑ**๋ง\n ๋ด๋นํ๋ค. ํผยท์ธ๋ผ์ธ ์์์ `em` ์ฌ๋ฐฑ์ ์์๋ `font-size` ์ ๋น๋กํ๋ ๊ฒ์ด ์๋์ด๋ฏ๋ก\n **์ฌ๊ธฐ๋ก ํก์ํ์ง ์๋๋ค.** ๋ฐ๊ฒฝ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ
๋ง์ ๋ฌด๊ดํ๋ฏ๋ก ๋ ์ํธ๊ฐ ๊ฐ๋ค.\n ์ถ ๊ตฌ๋ถ๊ณผ ๊ทผ๊ฑฐ๋ docs/design-tokens.md ์ฐธ์กฐ.\n ========================================================================== */\n --u-space-3xs: 2px;\n --u-space-2xs: 4px;\n --u-space-xs: 6px;\n --u-space-sm: 8px;\n --u-space-md: 12px;\n --u-space-lg: 16px;\n /* โ
์๋จ 4๋จ์ **ํ๋ฉด ๋ฆฌ๋ฌ**์ด๋ค โ ์นด๋ ์์ชฝ ์ฌ๋ฐฑ(20~24)ยท์น์
๊ฐ๊ฒฉ(24~32)ยทํ์ด์ง ์ฌ๋ฐฑ\n (32~40). ์ข
์ ์๋ ์ด ๊ตฌ๊ฐ์ด ํต์งธ๋ก ๋น์ด ์์ด ์๋น์๊ฐ ์ ๋ถ ๋ฆฌํฐ๋ด๋ก ์ ์๊ณ ,\n ๊ทธ๋์ ์ฑ๋ง๋ค ํ๋ฉด ๋ฐ๋๊ฐ ๋ฌ๋ผ์ก๋ค. `lg`(16px) ์ดํ๋ **์์ ์ฌ์ด**, `xl` ์ด์์\n **์์ญ ์ฌ์ด**๋ก ๋๋ ์ด๋ค.\n โ `xs: 6px` ๋ 4px ๊ฒฉ์์์ ๋ฒ์ด๋ ์์ผ๋ **๋ฐ๊พธ์ง ์๋๋ค** โ ์ด๋ฏธ ๋ฐฐ์ ๋ ์ปจํธ๋กค\n ์ฌ๋ฐฑ์ด ์ ๋ถ ์์ง์ธ๋ค. ์ ๊ท ๋จ์ ์ ๋ถ 4์ ๋ฐฐ์๋ก ๋๋ค. */\n --u-space-xl: 20px;\n --u-space-2xl: 24px;\n --u-space-3xl: 32px;\n --u-space-4xl: 40px;\n\n /* Text Colors */\n --u-txt-color: var(--u-neutral-900);\n --u-txt-color-inverse: var(--u-neutral-100);\n\n /* ์ ์ฑ์ ๋ฐฐ๊ฒฝ ์์ ๊ธ์ โ warning ๋ง ๋ค๋ฅด๋ค(light.css ์ฐธ์กฐ). */\n --u-primary-txt-color: #FFFFFF;\n --u-info-txt-color: #FFFFFF;\n --u-success-txt-color: #FFFFFF;\n --u-danger-txt-color: #FFFFFF;\n /* โ
๋ผ์ดํธ ์ํธ์ ๊ฐ์ ์ด์ ๋ก ์ค๋ฆฝ ์ต์๋จ์ ์ด๋ค โ ๋คํฌ์์๋ ๊ทธ ๊ฐ์ด #FFFFFF ๋ผ\n ๊ฒฐ๊ณผ๊ฐ ์ข
์ ๊ณผ ๊ฐ๋ค(4.65 โ). ๋ฆฌํฐ๋ด ๋์ ํ ํฐ์ ์ฐ๋ ์ด์ ๋ ๋ผ์ดํธ์์ ๋ค์งํ๊ธฐ\n ๋๋ฌธ์ด๋ค(#000000). ๋ ์ํธ๊ฐ ๊ฐ์ ์ ์ธ์ด ๋์ด ์ด๊ธ๋ ์๋ฆฌ๊ฐ ์์ด์ง๋ค. */\n --u-warning-txt-color: var(--u-neutral-1000);\n --u-txt-color-hover: var(--u-primary-color-strong);\n --u-txt-color-active: var(--u-primary-color-strong);\n --u-txt-color-disabled: var(--u-neutral-500);\n /* ๋ผ์ดํธ์ ๊ฐ์ ๊ธฐ์ค โ ๋์ด๋ ๋ชจ๋ ๋ฉด์์ AA. neutral-700(#8A8A8A)์ ๋ฐํ 5.43 ยท\n ์ฌ๋ฆผ๋ฉด(neutral-300) 4.16 ยท active ๋ฉด(neutral-400) 3.15 ๋ก ๋ฏธ๋ฌ์ด์๋ค.\n neutral-800(#B0B0B0) = 8.64 ยท 6.62 ยท 5.01. ๋ณธ๋ฌธ(neutral-900)๊ณผ์ ๋๋น๋น 1.46. */\n --u-txt-color-weak: var(--u-neutral-800);\n --u-txt-color-strong: var(--u-neutral-1000);\n\n --u-link-txt-color: var(--u-primary-color-strong);\n --u-tooltip-txt-color: var(--u-neutral-100);\n\n /* Icon Colors */\n --u-icon-color: var(--u-neutral-800);\n --u-icon-color-inverse: var(--u-neutral-100);\n --u-icon-color-hover: var(--u-primary-color-strong);\n --u-icon-color-active: var(--u-primary-color-strong);\n --u-icon-color-disabled: var(--u-neutral-500);\n\n /* Border Colors\n โ
`-weak` ๋ `neutral-300` ์ผ ์ ์๋ค โ `--u-bg-color-raised` ๊ฐ ๊ฐ์ ๋จ์ด๋ผ, ์ฌ๋ฆผ๋ฉด(์ฌ์ด๋๋ฐยท\n ํ ๋จธ๋ฆฌ/ํยท๋ง์คํฐ-๋ํ
์ผ ๊ตฌ๋ถ์ ) ์์ ๊ทธ๋ฆฌ๋ ์ฝํ ์ ์ด **๋ฉด๊ณผ ๊ฐ์ ์**(๋๋น 1.00)์ด ๋์ด\n ํ๋ฉด์์ ์ฌ๋ผ์ง๋ค. ๋ผ์ดํธ๋ 200 ๋จ์ด ์ฌ๋ฆผ๋ฉด(50)๊ณผ ๋จ์ด์ ธ ์์ด ๋ณด์ธ๋ค. ๋จํ์์ ์ฌ๋ฆผ๋ฉด(300)\n ์๋ก ์ฌ๋ฆด ์ ์๋ ๋ค์ ๋จ์ด 400 ๋ฟ์ด๋ผ `-weak` ๋ ์ด ํ
๋ง์์ `--u-border-color` ์ ๊ฐ์\n ๋จ์ด๋ค โ ๋คํฌ์์๋ ยซ์ฝํจ/๋ณดํตยป ๋ ๋จ์ด ํ๋๋ก ํฉ์ณ์ง์ง๋ง, ์ข
์ `-weak` ๋ ๊ทธ๊ฒ์ด ์ฐ์ด๋\n ๋ฉด ์์์ ์ ์ด์ ๊ตฌ๋ณ๋์ง ์์๋ค. */\n --u-border-color: var(--u-neutral-400);\n --u-border-color-weak: var(--u-neutral-400);\n --u-border-color-strong: var(--u-neutral-500);\n --u-border-color-hover: var(--u-neutral-500);\n\n /* โ
์ํ ํ
๋๋ฆฌ๋ `-strong` ๋จ์ด๋ค โ light.css ์ ๊ฐ์ ์๋ฆฌ ์ฃผ์ ์ฐธ์กฐ.\n ์ด ํ
๋ง๊ฐ ์ค์ ๋ก ๋ฏธ๋ฌ์ด์๋ค: focus 2.74 ยท invalid 2.44 โ 4.74 / 4.34. */\n --u-input-border-color: var(--u-neutral-400);\n --u-input-border-color-hover: var(--u-neutral-500);\n --u-input-border-color-focus: var(--u-primary-color-strong);\n --u-input-border-color-invalid: var(--u-danger-color-strong);\n\n /* Background Colors */\n --u-bg-color: var(--u-neutral-100);\n --u-bg-color-inverse: var(--u-neutral-0);\n --u-bg-color-hover: var(--u-neutral-300);\n --u-bg-color-active: var(--u-neutral-400);\n --u-bg-color-disabled: var(--u-neutral-100);\n\n /* ๋ฉด ๋์ด โ ์์ธ๋ light.css ์ฐธ์กฐ. ๋คํฌ๋ **๋ฐํ๋ณด๋ค ๋ฐ์ ์ชฝ**์ด ์๋ค.\n neutral-300(#2A2A2A)์ ๋ฐํ(#121212) ๋๋น 1.42 ๋ก, ์๋น ์ธก์ด ์ค๋ฒ๋ผ์ด๋๋ก ์ฐ๋\n neutral-200(1.15)๋ณด๋ค ์ค์ ๋ก ๋ ์ ๊ตฌ๋ถ๋๋ค โ ๊ทธ ์ค๋ฒ๋ผ์ด๋๊ฐ ํด๊ฒฐํ๋ ค๋ ์ฆ์์ด\n *\"ํด๋ฐยทํค๋๊ฐ ๋ฐฐ๊ฒฝ์ ๋ฌปํ๋ค\"* ์๋ค. */\n --u-bg-color-raised: var(--u-neutral-300);\n\n /* โ
์ฌ๋ฆผ๋ฉด ์์ hover โ `--u-bg-color-hover`(์ ์ญ, ๋ฐํ๋ฉด ์ ์ฉ)์ ๊ฐ์ด ๊ฐ์์\n (ยซ๋ ๋ค neutral-300ยป) ์นด๋ยทํ ๋จธ๋ฆฌ ์์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ค๋ ์๋ฌด ์ผ๋ ์ ์ผ์ด๋ฌ๋ค\n (์๋น์ ์ค์ธก). ์ ์ญ ํ ํฐ ํ๋๋ก๋ \"์ง๊ธ ์์ ์๋ ๋ฉด\"์\n ์ ๋ฐฉ๋ฒ์ด ์์ด(์ฐธ์กฐ ์ง์ ๋ง๋ค ๊ณ์ฐ ๊ธฐ์ค์ด ๋ค๋ฅผ ์ ์๋ค) **์ ์ฉ ํ ํฐ**์ ์ ์คํ๋ค.\n\n โ **A์**(`raised`๋ฅผ neutral-200์ผ๋ก) โ ๊ณผ๊ฑฐ์ ๊ฑฐ๋ถ๋ ๊ฐ(์ ์ฃผ์). **B์**(์ ์ญ\n `hover`๋ฅผ neutral-400์ผ๋ก) โ `--u-bg-color-active` ์ ์ถฉ๋ํด ๊ฒฐํจ์ด ๋ค๋ฅธ ์์ผ๋ก\n ์ฎ๊ฒจ๊ฐ๋ค. โ hover ๋ ๋ณธ๋ \"ํ์ฌ ๋ฉด๋ณด๋ค ํ ๋จ ์\"์ด์ง ์ ๋ ๋จ์ด ์๋๋ฏ๋ก\n `color-mix()` ๋ก raised ์์ ์ ๊ธฐ์ค ์ผ์ ์๋ ๊ณ์ฐํ๋ค.\n\n N=6% ๋ raised(Lโ0.023)์ active(Lโ0.047, neutral-400) ์ฌ์ด ๋๋น ๊ณ์ฐ์ผ๋ก ๊ณจ๋๋ค โ\n ๊ฒฐ๊ณผ Lโ0.038, raised ๋๋น โ1.21(๋ผ์ดํธ์ ๊ธฐ์กด \"์ฝํ\" 1.04๋ณด๋ค ๋๋ ทํ๊ณ , `bgโraised`\n ์ ๊ธฐ์กด 1.31 ๊ณผ ๋น์ทํ ์ฒด๊ฐ), active ์๋ ๊ฐ์ด ๋ฌ๋ผ ๊ฒน์น์ง ์๋๋ค(โ#373737 vs\n active #3D3D3D). N ์ ๋ ์ฌ๋ฆฌ๋ฉด(โ10%+) active ๋ฅผ ๋์ด์ ์์๊ฐ ๋ค์งํ๋ค โ ํ์ธํจ. */\n --u-bg-color-raised-hover: color-mix(in srgb, var(--u-bg-color-raised), white 6%);\n\n /* ์ ์ฑ์ ํ๋ฉด โ ๋ผ์ดํธ์ **๊ฐ์ ๋จ์ด ์๋๋ผ ๊ฐ์ ์ธ๊ธฐ**๋ก ์ง์ง์๋ค(light.css ์ฐธ์กฐ).\n ํ๋ ํธ ์ ์ฑ์ ํดํธ๊ฐ ๋คํฌ์์ ์ง๋๋ฆฌ๋ฏ๋ก ํ ๋จ ์๋ฅผ ์ด๋ค. green ์ ๋์นญ์ด๋ผ ๊ทธ๋๋ก. */\n --u-primary-bg-color: var(--u-blue-100);\n --u-info-bg-color: var(--u-blue-100);\n --u-success-bg-color: var(--u-green-0);\n --u-danger-bg-color: var(--u-red-100);\n /* warning ํฉ๋ฅ โ ๋ผ์ดํธ๋ yellow-200 ์ด๋ค(๋จ ์ด๋ฆ์ด ๋ค๋ฅธ ์ด์ ๋ light.css ์ฐธ์กฐ). */\n --u-warning-bg-color: var(--u-yellow-100);\n\n --u-input-bg-color: var(--u-neutral-200);\n --u-panel-bg-color: var(--u-neutral-200);\n --u-overlay-bg-color: rgba(0, 0, 0, 0.7);\n --u-tooltip-bg-color: rgba(255, 255, 255, 0.85);\n\n /* Shadow Colors */\n --u-shadow-color-weaker: rgba(0, 0, 0, 0.15);\n --u-shadow-color-weak: rgba(0, 0, 0, 0.25);\n --u-shadow-color-normal: rgba(0, 0, 0, 0.35);\n --u-shadow-color-strong: rgba(0, 0, 0, 0.45);\n --u-shadow-color-stronger: rgba(0, 0, 0, 0.60);\n\n /* Elevation Scale โ ๊ทผ๊ฑฐ๋ light.css ์ ๊ฐ์ ์๋ฆฌ ์ฃผ์ ์ฐธ์กฐ.\n โ
๋คํฌ๋ ์ํ๊ฐ 3๋ฐฐ ๊ฐ๊น์ด ์งํ๋ค โ ๋ฆฌํฐ๋ด๋ก ํฉ์ด์ ธ ์๋ ์ข
์ ์๋ ์ด ์ฐจ์ด๊ฐ\n ์ ์ฉ๋์ง ์์ ๋คํฌ์์ ๊ทธ๋ฆผ์๊ฐ ์ฌ์ค์ ๋ณด์ด์ง ์์๋ค. */\n --u-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.25), 0 1px 1px rgba(0, 0, 0, 0.14); /* = shadow-color-weak */\n --u-shadow-md: 0 2px 8px rgba(0, 0, 0, 0.35), 0 1px 2px rgba(0, 0, 0, 0.18); /* = shadow-color-normal */\n --u-shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.45), 0 2px 4px rgba(0, 0, 0, 0.22); /* = shadow-color-strong */\n --u-shadow-xl: 0 6px 18px rgba(0, 0, 0, 0.60), 0 2px 6px rgba(0, 0, 0, 0.30); /* = shadow-color-stronger */\n\n\n /* ==========================================================================\n Type Scale โ ๊ธ์ ํฌ๊ธฐยท๊ตต๊ธฐยทํ๊ฐยท์๊ฐ์ **ํ ๋ฒ**\n โ
**ํฌ๊ธฐ๋ง ์ฃผ๋ฉด ์ค์ผ์ผ์ด ๋์ง ์๋๋ค.** ์๋น์๊ฐ ํฌ๊ธฐ๋ง ๋ฐ๊ณ ๊ตต๊ธฐยทํ๊ฐ์ ๊ฐ์ ์ ํ๋ฉด\n ๊ฒฐ๊ตญ ํ๋ฉด๋ง๋ค ๋ค๋ฅธ ์๊ณ๊ฐ ์๊ธด๋ค โ ๊ทธ๋์ ๋ค ๊ฐ์ **๋จ ๋จ์๋ก ๋ฌถ์ด** ๋ธ๋ค.\n\n ๋จ ์ด๋ฆ์ ํฌ๊ธฐ๊ฐ ์๋๋ผ **์ญํ **์ด๋ค(`lg`/`xl` ์ด ์๋๋ผ `title`/`label`). ์ญํ ๋ก ๋๋ฉด\n ์๋น์๊ฐ *\"์ด๋ ํฌ๊ธฐ๋ฅผ ์ธ๊น\"* ๊ฐ ์๋๋ผ *\"์ด ๊ธ์๋ ๋ฌด์์ธ๊ฐ\"* ๋ฅผ ๋ฌป๊ฒ ๋๋ค.\n\n โ
**ํ๊ธ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ๊ณจ๋๋ค**:\n โด ํ๊ฐ์ **1.4 ์ด์**. ๋ผํด ๊ด๋ก(1.2)๋ ํ๊ธ์์ ๋ต๋ตํ๋ค โ ๋ฐ์นจ ๋๋ฌธ์ ๊ธ์ ์์๊ฐ\n ์ธ๋ก๋ก ๊ฝ ์ฐจ ์์ด ๋ผํด๊ณผ ๊ฐ์ ํ๊ฐ์ด๋ฉด ์ค์ด ๋ถ์ด ๋ณด์ธ๋ค.\n โต ์๊ฐ์ **0 ์ด ๊ธฐ๋ณธ**์ด๊ณ ํฐ ์ ๋ชฉ๋ง **์์**. ํ๊ธ์ ์์ ์๊ฐ(letter-spacing)์ ์ฃผ๋ฉด\n ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ค โ ๋ผํด ์๋ฌธ์ ์กฐํ ๊ด๋ก๋ฅผ ๊ทธ๋๋ก ์ฎ๊ธฐ๋ฉด ์ ๋๋ ์๋ฆฌ๋ค.\n โถ `overline` ์๋ง ์์ ์๊ฐ์ ๋๋ค. ๊ทธ ๋จ์ **์๋ฌธยท์ซ์ ๋ผ๋ฒจ**์ ์ ์ ํ ์๋ฆฌ์ด๊ณ ,\n ํ๊ธ์ ๋ฃ์ ์๋น์๋ ์๊ฐ์ 0 ์ผ๋ก ๋ฎ์ด์ผ ํ๋ค(๋ฌธ์์ ๋ช
์).\n\n โ **`text-transform` ์ ํ ํฐ์ผ๋ก ๋ด์ง ์๋๋ค.** ํ๊ธ์๋ ๋๋ฌธ์๊ฐ ์์ด `uppercase` ๊ฐ\n ์๋ฌด ํจ๊ณผ๊ฐ ์๊ณ , ์๋ฌธ์ด ์์ด๋ฉด ๊ทธ๊ฒ๋ง ์ปค์ ธ ์คํ๋ ค ์ด์์ ํด์ง๋ค.\n ========================================================================== */\n --u-text-display-size: 26px;\n --u-text-display-weight: 700;\n --u-text-display-leading: 1.4;\n --u-text-display-tracking: -0.02em;\n\n --u-text-title-size: 20px;\n --u-text-title-weight: 700;\n --u-text-title-leading: 1.45;\n --u-text-title-tracking: -0.01em;\n\n --u-text-subtitle-size: 16px;\n --u-text-subtitle-weight: 600;\n --u-text-subtitle-leading: 1.5;\n --u-text-subtitle-tracking: 0;\n\n --u-text-body-size: 14px;\n --u-text-body-weight: 400;\n --u-text-body-leading: 1.6;\n --u-text-body-tracking: 0;\n\n --u-text-label-size: 13px;\n --u-text-label-weight: 600;\n --u-text-label-leading: 1.5;\n --u-text-label-tracking: 0;\n\n --u-text-caption-size: 12px;\n --u-text-caption-weight: 400;\n --u-text-caption-leading: 1.5;\n --u-text-caption-tracking: 0;\n\n --u-text-overline-size: 11px;\n --u-text-overline-weight: 700;\n --u-text-overline-leading: 1.45;\n --u-text-overline-tracking: 0.06em;\n\n /* ==========================================================================\n Motion โ ์ง์์๊ฐยท์ด์ง\n โ
๊ฐ์ด ์์ผ๋ฉด ์ฑ๋ง๋ค ๋ค๋ฅธ ์๋๊ฐ ์๊ธฐ๊ณ , `prefers-reduced-motion` ์ **๋ฐ๋์**\n ๋น ๋จ๋ฆฌ๋ ์ฑ์ด ๋์จ๋ค. ์ถ์ ์ฌ๊ธฐ ๋๊ณ ์กด์ค ๊ท์น์ ์๋ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๊ฐ ์ง๋ค.\n ========================================================================== */\n --u-duration-instant: 80ms;\n --u-duration-fast: 140ms;\n --u-duration-normal: 220ms;\n --u-duration-slow: 320ms;\n --u-ease-standard: cubic-bezier(0.2, 0, 0, 1);\n --u-ease-decelerate: cubic-bezier(0, 0, 0, 1);\n --u-ease-accelerate: cubic-bezier(0.3, 0, 1, 1);\n\n /* Scrollbar Colors */\n --u-scrollbar-color: var(--u-neutral-500);\n --u-scrollbar-color-hover: var(--u-neutral-600);\n --u-scrollbar-track-color: transparent;\n\n /* ==========================================================================\n Font Styles\n โ
**CJK ํด๋ฐฑ์ ์คํ์ ํฌํจํ๋ค โ ๊ตญ์ ํ์ด์ง ์ทจํฅ์ด ์๋๋ค.**\n ์ข
์ ์คํ(`-apple-system, Segoe UI, Noto Sans, Helvetica, Arial`)์๋ **ํ์ค์ผ ๊ธ๋ฆฝ์\n ๊ฐ์ง ํฐํธ๊ฐ ํ๋๋ ์์๋ค.** Windows ์์ ํ๊ธ์ `Segoe UI` ์ ์์ผ๋ฏ๋ก UA ๊ฐ ์์๋ก\n ๋ง์ ๊ณ ๋์ ๊ณ ๋ฅด๊ณ , macOS ๋ `-apple-system` ์ด Apple SD Gothic Neo ๋ฅผ ์ค๋ค โ **๊ฐ์ ์ฑ์ด\n OS ๋ง๋ค ๋ค๋ฅธ ๊ธ๊ผด๋ก ๋ ๋**๋๋ค. ํด๋ฐฑ์ ๋ช
์ํ๋ฉด ๊ทธ ์ ํ์ด ๊ฒฐ์ ์ ์ด ๋๋ค.\n โ **์นํฐํธ๋ฅผ ๋ก๋ํ์ง ์๋๋ค.** ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋คํธ์ํฌ ์์ฒญ์ ๋ง๋ค๋ฉด ์๋น์์ CSPยท\n ์คํ๋ผ์ธ ํ๊ฒฝ์ ๊นฌ๋ค. ์คํ ๋งจ ์์ `Pretendard` ๋ **์๋น์๊ฐ ๋ก๋ํ์ ๋๋ง** ์กํ๋\n ์ ํ์ ์ด๋ฆ์ด๋ค(์์ผ๋ฉด ์กฐ์ฉํ ๋ค์์ผ๋ก ๋์ด๊ฐ๋ค).\n ========================================================================== */\n --u-font-base: 'Pretendard Variable', Pretendard, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, 'Apple SD Gothic Neo', 'Malgun Gothic', 'Noto Sans KR', 'Hiragino Sans', 'Yu Gothic UI', 'Microsoft YaHei', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';\n --u-font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Monaco, 'Courier New', monospace;\n --u-font-serif: 'Georgia', 'Times New Roman', Times, serif;\n --u-font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;\n --u-font-modern: 'Inter', 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --u-font-rounded: 'Nunito', 'Quicksand', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n}";
|
|
2
|
+
var dark_css_default = ":root[theme=\"dark\"] {\n color-scheme: dark;\n\n /* Neutral Colors */\n --u-neutral-0: #000000;\n --u-neutral-50: #0A0A0A;\n --u-neutral-100: #121212;\n --u-neutral-200: #1E1E1E;\n --u-neutral-300: #2A2A2A;\n --u-neutral-400: #3D3D3D;\n --u-neutral-500: #525252;\n --u-neutral-600: #6E6E6E;\n --u-neutral-700: #8A8A8A;\n --u-neutral-800: #B0B0B0;\n --u-neutral-900: #D4D4D4;\n --u-neutral-1000: #FFFFFF;\n\n /* Blue Colors */\n --u-blue-0: #030D1A;\n --u-blue-100: #061629;\n --u-blue-200: #0A223B;\n --u-blue-300: #103150;\n --u-blue-400: #174167;\n --u-blue-500: #205281;\n --u-blue-600: #2A659D;\n --u-blue-700: #3678B8;\n --u-blue-800: #478DCE;\n --u-blue-900: #5DA2DF;\n --u-blue-1000: #79BBEA;\n\n /* Green Colors */\n --u-green-0: #06140C;\n --u-green-100: #0A2114;\n --u-green-200: #10301D;\n --u-green-300: #164228;\n --u-green-400: #1F5535;\n --u-green-500: #2A6942;\n --u-green-600: #367E50;\n --u-green-700: #4A9563;\n --u-green-800: #63AB7A;\n --u-green-900: #80BE97;\n --u-green-1000: #9BCFB1;\n\n /* Yellow Colors */\n --u-yellow-0: #1C1300;\n --u-yellow-100: #2D1E00;\n --u-yellow-200: #402B00;\n --u-yellow-300: #553900;\n --u-yellow-400: #6B4900;\n --u-yellow-500: #825A00;\n --u-yellow-600: #9A6C00;\n --u-yellow-700: #B08012;\n --u-yellow-800: #C69635;\n --u-yellow-900: #D9AD5A;\n --u-yellow-1000: #E8C57F;\n\n /* Red Colors */\n --u-red-0: #1C0707;\n --u-red-100: #2C0B0B;\n --u-red-200: #3E1111;\n --u-red-300: #541818;\n --u-red-400: #6C2020;\n --u-red-500: #852A2A;\n --u-red-600: #A13535;\n --u-red-700: #B94949;\n --u-red-800: #CB6262;\n --u-red-900: #D98383;\n --u-red-1000: #E7A2A2;\n\n /* Orange Colors */\n --u-orange-0: #1D0E00;\n --u-orange-100: #2F1700;\n --u-orange-200: #421F00;\n --u-orange-300: #582A00;\n --u-orange-400: #703600;\n --u-orange-500: #8A4500;\n --u-orange-600: #A55600;\n --u-orange-700: #BD6A18;\n --u-orange-800: #D1823C;\n --u-orange-900: #E19D67;\n --u-orange-1000: #EDB992;\n\n /* Teal Colors */\n --u-teal-0: #041411;\n --u-teal-100: #07201B;\n --u-teal-200: #0B2E28;\n --u-teal-300: #10403A;\n --u-teal-400: #16544D;\n --u-teal-500: #1E6860;\n --u-teal-600: #297D74;\n --u-teal-700: #3A9389;\n --u-teal-800: #54A89F;\n --u-teal-900: #73BBB3;\n --u-teal-1000: #93CBC5;\n\n /* Cyan Colors */\n --u-cyan-0: #041318;\n --u-cyan-100: #071F29;\n --u-cyan-200: #0B2D3A;\n --u-cyan-300: #104050;\n --u-cyan-400: #165469;\n --u-cyan-500: #1E6A82;\n --u-cyan-600: #287F9C;\n --u-cyan-700: #3995B5;\n --u-cyan-800: #53AACC;\n --u-cyan-900: #73BEDD;\n --u-cyan-1000: #95CFE8;\n\n /* Purple Colors */\n --u-purple-0: #150A22;\n --u-purple-100: #220F36;\n --u-purple-200: #31164B;\n --u-purple-300: #432064;\n --u-purple-400: #572B80;\n --u-purple-500: #6C379C;\n --u-purple-600: #8245B7;\n --u-purple-700: #975BCB;\n --u-purple-800: #AB79D9;\n --u-purple-900: #BD99E2;\n --u-purple-1000: #CEB8EA;\n\n /* Pink Colors */\n --u-pink-0: #1F0A14;\n --u-pink-100: #310F20;\n --u-pink-200: #451532;\n --u-pink-300: #5C1D45;\n --u-pink-400: #74285A;\n --u-pink-500: #8F336F;\n --u-pink-600: #AB4187;\n --u-pink-700: #C0569D;\n --u-pink-800: #D174B3;\n --u-pink-900: #E095C7;\n --u-pink-1000: #EBB5D9;\n\n /* ==========================================================================\n Role Colors โ ์๋ฏธ ์ญํ ์ธต\n ์ปดํฌ๋ํธ๋ ํ๋ ํธ ํ๋ฆฌ๋ฏธํฐ๋ธ๊ฐ ์๋๋ผ ์ด ์ธต์ ์ฐธ์กฐํ๋ค.\n ๋ธ๋๋ ์ ๊ต์ฒด๋ ์๋ 25๊ฐ๋ง ์ฌ์ ์ํ๋ฉด ์๋งจํฑ ์ธต๊น์ง ๋ฐ๋ผ์จ๋ค.\n\n ๋จ์ '๊ฐ๋' ์ถ์ด๋ค (weakest -> strong). ์ฉ๋(๋ฐฐ๊ฒฝ/ํ
๋๋ฆฌ/ํ
์คํธ)๋\n ์๋น์ฒ๊ฐ ์ ํ๋ค -- ๋จ์ ์์ฑ์ ๋ฌถ์ผ๋ฉด primary ๋ฒํผ์ ๋ฐฐ๊ฒฝ์ด ์ด๋\n ๋จ์ธ์ง ๊ฐ์ ๋ชจ์์ด ์๊ธด๋ค.\n\n โ
**๋ค๋ง ๋ ๋จ์ ์ฉ๋๊ฐ ํ์ ๋ผ ์๋ค** โ ๋๋น ์๊ตฌ๊ฐ ์๋ก ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.\n `-color` = **๋ฉด**. `--u-*-txt-color` ๊ฐ ๊ทธ ์์ ์นํ๋ฏ๋ก on-color ๊ธฐ์ค 4.5.\n `-strong` = **๊ธ์ยท์์ด์ฝ**. `--u-bg-color` ์์ ๋์ด๋ฏ๋ก ๋ฐํ ๊ธฐ์ค 4.5.\n ๋ผ์ดํธ์์๋ ๋ฐํ๋ on-color ๋ ํฐ์์ด๋ผ ๋ ์๊ตฌ๊ฐ ํ ์กฐ๊ฑด์ผ๋ก ํฉ์ณ์ง์ง๋ง,\n **๋คํฌ์์๋ ์ ๋ฐ๋ ๋ฐฉํฅ**์ด๋ค(๋ฐํ #121212 ยท on-color #FFFFFF). ๋ฐํ์์ ์ฝํ๋\n ๋ฐ์ ๋จ์ ํฐ ๊ธ์๋ฅผ ๋ชป ๋ฐ๊ณ , ํฐ ๊ธ์๋ฅผ ๋ฐ๋ ์ด๋์ด ๋จ์ ๋ฐํ์์ ์ ์ฝํ๋ค.\n โ ๋คํฌ์์ `-color` ์ `-strong` ์ด ๋ ๋จ ๋ฒ์ด์ง๋ ๊ฒ์ด ๊ทธ ๊ฒฐ๊ณผ๋ค.\n `tests/build/token-contrast.test.ts` ๊ฐ ๊ฐ์ ์งํจ๋ค.\n ========================================================================== */\n\n /* primary โ ๋ธ๋๋ ยท ๊ฐ์กฐ ยท ํฌ์ปค์ค ยท ๋งํฌ */\n --u-primary-color-weakest: var(--u-blue-200);\n --u-primary-color-weaker: var(--u-blue-300);\n --u-primary-color-weak: var(--u-blue-500);\n --u-primary-color: var(--u-blue-600); /* ๋ฉด: ํฐ ๊ธ์ 6.09 โ */\n --u-primary-color-strong: var(--u-blue-800); /* ๊ธ์: ๋ฐํ 5.32 โ (700 ์ 4.05 โ) */\n\n /* info โ ์ ๋ณด ์๋ด (primary ์ ๊ธฐ๋ณธ๊ฐ์ ๊ฐ์ผ๋ ์ญํ ์ด ๋ค๋ฅด๋ค โ ๋ธ๋๋ฉ์ primary ๋ง ๋ฐ๊พผ๋ค) */\n --u-info-color-weakest: var(--u-blue-200);\n --u-info-color-weaker: var(--u-blue-300);\n --u-info-color-weak: var(--u-blue-500);\n --u-info-color: var(--u-blue-600);\n --u-info-color-strong: var(--u-blue-800);\n\n /* success โ ์ฑ๊ณต ยท ์๋ฃ */\n --u-success-color-weakest: var(--u-green-200);\n --u-success-color-weaker: var(--u-green-300);\n --u-success-color-weak: var(--u-green-500);\n --u-success-color: var(--u-green-600);\n --u-success-color-strong: var(--u-green-700);\n\n /* warning โ ์ฃผ์ */\n --u-warning-color-weakest: var(--u-yellow-200);\n --u-warning-color-weaker: var(--u-yellow-300);\n --u-warning-color-weak: var(--u-yellow-500);\n --u-warning-color: var(--u-yellow-600);\n --u-warning-color-strong: var(--u-yellow-700);\n\n /* danger โ ์ค๋ฅ ยท ์ํ ยท ์ ํจ์ฑ ์คํจ */\n --u-danger-color-weakest: var(--u-red-200);\n --u-danger-color-weaker: var(--u-red-300);\n --u-danger-color-weak: var(--u-red-500);\n --u-danger-color: var(--u-red-600); /* ๋ฉด: ํฐ ๊ธ์ 6.83 โ */\n --u-danger-color-strong: var(--u-red-800); /* ๊ธ์: ๋ฐํ 4.87 โ (700 ์ 3.67 โ) */\n /* Text Colors */\n --u-txt-color: var(--u-neutral-900);\n --u-txt-color-inverse: var(--u-neutral-100);\n\n /* ์ ์ฑ์ ๋ฐฐ๊ฒฝ ์์ ๊ธ์ โ warning ๋ง ๋ค๋ฅด๋ค(light.css ์ฐธ์กฐ). */\n --u-primary-txt-color: #FFFFFF;\n --u-info-txt-color: #FFFFFF;\n --u-success-txt-color: #FFFFFF;\n --u-danger-txt-color: #FFFFFF;\n /* โ
๋ผ์ดํธ ์ํธ์ ๊ฐ์ ์ด์ ๋ก ์ค๋ฆฝ ์ต์๋จ์ ์ด๋ค โ ๋คํฌ์์๋ ๊ทธ ๊ฐ์ด #FFFFFF ๋ผ\n ๊ฒฐ๊ณผ๊ฐ ์ข
์ ๊ณผ ๊ฐ๋ค(4.65 โ). ๋ฆฌํฐ๋ด ๋์ ํ ํฐ์ ์ฐ๋ ์ด์ ๋ ๋ผ์ดํธ์์ ๋ค์งํ๊ธฐ\n ๋๋ฌธ์ด๋ค(#000000). ๋ ์ํธ๊ฐ ๊ฐ์ ์ ์ธ์ด ๋์ด ์ด๊ธ๋ ์๋ฆฌ๊ฐ ์์ด์ง๋ค. */\n --u-warning-txt-color: var(--u-neutral-1000);\n --u-txt-color-hover: var(--u-primary-color-strong);\n --u-txt-color-active: var(--u-primary-color-strong);\n --u-txt-color-disabled: var(--u-neutral-500);\n /* ๋ผ์ดํธ์ ๊ฐ์ ๊ธฐ์ค โ ๋์ด๋ ๋ชจ๋ ๋ฉด์์ AA. neutral-700(#8A8A8A)์ ๋ฐํ 5.43 ยท\n ์ฌ๋ฆผ๋ฉด(neutral-300) 4.16 ยท active ๋ฉด(neutral-400) 3.15 ๋ก ๋ฏธ๋ฌ์ด์๋ค.\n neutral-800(#B0B0B0) = 8.64 ยท 6.62 ยท 5.01. ๋ณธ๋ฌธ(neutral-900)๊ณผ์ ๋๋น๋น 1.46. */\n --u-txt-color-weak: var(--u-neutral-800);\n --u-txt-color-strong: var(--u-neutral-1000);\n\n --u-link-txt-color: var(--u-primary-color-strong);\n --u-tooltip-txt-color: var(--u-neutral-100);\n\n /* Icon Colors */\n --u-icon-color: var(--u-neutral-800);\n --u-icon-color-inverse: var(--u-neutral-100);\n --u-icon-color-hover: var(--u-primary-color-strong);\n --u-icon-color-active: var(--u-primary-color-strong);\n --u-icon-color-disabled: var(--u-neutral-500);\n\n /* Border Colors\n โ
`-weak` ๋ `neutral-300` ์ผ ์ ์๋ค โ `--u-bg-color-raised` ๊ฐ ๊ฐ์ ๋จ์ด๋ผ, ์ฌ๋ฆผ๋ฉด(์ฌ์ด๋๋ฐยท\n ํ ๋จธ๋ฆฌ/ํยท๋ง์คํฐ-๋ํ
์ผ ๊ตฌ๋ถ์ ) ์์ ๊ทธ๋ฆฌ๋ ์ฝํ ์ ์ด **๋ฉด๊ณผ ๊ฐ์ ์**(๋๋น 1.00)์ด ๋์ด\n ํ๋ฉด์์ ์ฌ๋ผ์ง๋ค. ๋ผ์ดํธ๋ 200 ๋จ์ด ์ฌ๋ฆผ๋ฉด(50)๊ณผ ๋จ์ด์ ธ ์์ด ๋ณด์ธ๋ค. ๋จํ์์ ์ฌ๋ฆผ๋ฉด(300)\n ์๋ก ์ฌ๋ฆด ์ ์๋ ๋ค์ ๋จ์ด 400 ๋ฟ์ด๋ผ `-weak` ๋ ์ด ํ
๋ง์์ `--u-border-color` ์ ๊ฐ์\n ๋จ์ด๋ค โ ๋คํฌ์์๋ ยซ์ฝํจ/๋ณดํตยป ๋ ๋จ์ด ํ๋๋ก ํฉ์ณ์ง์ง๋ง, ์ข
์ `-weak` ๋ ๊ทธ๊ฒ์ด ์ฐ์ด๋\n ๋ฉด ์์์ ์ ์ด์ ๊ตฌ๋ณ๋์ง ์์๋ค. */\n --u-border-color: var(--u-neutral-400);\n --u-border-color-weak: var(--u-neutral-400);\n --u-border-color-strong: var(--u-neutral-500);\n --u-border-color-hover: var(--u-neutral-500);\n\n /* โ
์ํ ํ
๋๋ฆฌ๋ `-strong` ๋จ์ด๋ค โ light.css ์ ๊ฐ์ ์๋ฆฌ ์ฃผ์ ์ฐธ์กฐ.\n ์ด ํ
๋ง๊ฐ ์ค์ ๋ก ๋ฏธ๋ฌ์ด์๋ค: focus 2.74 ยท invalid 2.44 โ 4.74 / 4.34. */\n --u-input-border-color: var(--u-neutral-400);\n --u-input-border-color-hover: var(--u-neutral-500);\n --u-input-border-color-focus: var(--u-primary-color-strong);\n --u-input-border-color-invalid: var(--u-danger-color-strong);\n\n /* Background Colors */\n --u-bg-color: var(--u-neutral-100);\n --u-bg-color-inverse: var(--u-neutral-0);\n --u-bg-color-hover: var(--u-neutral-300);\n --u-bg-color-active: var(--u-neutral-400);\n --u-bg-color-disabled: var(--u-neutral-100);\n\n /* ๋ฉด ๋์ด โ ์์ธ๋ light.css ์ฐธ์กฐ. ๋คํฌ๋ **๋ฐํ๋ณด๋ค ๋ฐ์ ์ชฝ**์ด ์๋ค.\n neutral-300(#2A2A2A)์ ๋ฐํ(#121212) ๋๋น 1.42 ๋ก, ์๋น ์ธก์ด ์ค๋ฒ๋ผ์ด๋๋ก ์ฐ๋\n neutral-200(1.15)๋ณด๋ค ์ค์ ๋ก ๋ ์ ๊ตฌ๋ถ๋๋ค โ ๊ทธ ์ค๋ฒ๋ผ์ด๋๊ฐ ํด๊ฒฐํ๋ ค๋ ์ฆ์์ด\n *\"ํด๋ฐยทํค๋๊ฐ ๋ฐฐ๊ฒฝ์ ๋ฌปํ๋ค\"* ์๋ค. */\n --u-bg-color-raised: var(--u-neutral-300);\n\n /* โ
์ฌ๋ฆผ๋ฉด ์์ hover โ `--u-bg-color-hover`(์ ์ญ, ๋ฐํ๋ฉด ์ ์ฉ)์ ๊ฐ์ด ๊ฐ์์\n (ยซ๋ ๋ค neutral-300ยป) ์นด๋ยทํ ๋จธ๋ฆฌ ์์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ค๋ ์๋ฌด ์ผ๋ ์ ์ผ์ด๋ฌ๋ค\n (์๋น์ ์ค์ธก). ์ ์ญ ํ ํฐ ํ๋๋ก๋ \"์ง๊ธ ์์ ์๋ ๋ฉด\"์\n ์ ๋ฐฉ๋ฒ์ด ์์ด(์ฐธ์กฐ ์ง์ ๋ง๋ค ๊ณ์ฐ ๊ธฐ์ค์ด ๋ค๋ฅผ ์ ์๋ค) **์ ์ฉ ํ ํฐ**์ ์ ์คํ๋ค.\n\n โ **A์**(`raised`๋ฅผ neutral-200์ผ๋ก) โ ๊ณผ๊ฑฐ์ ๊ฑฐ๋ถ๋ ๊ฐ(์ ์ฃผ์). **B์**(์ ์ญ\n `hover`๋ฅผ neutral-400์ผ๋ก) โ `--u-bg-color-active` ์ ์ถฉ๋ํด ๊ฒฐํจ์ด ๋ค๋ฅธ ์์ผ๋ก\n ์ฎ๊ฒจ๊ฐ๋ค. โ hover ๋ ๋ณธ๋ \"ํ์ฌ ๋ฉด๋ณด๋ค ํ ๋จ ์\"์ด์ง ์ ๋ ๋จ์ด ์๋๋ฏ๋ก\n `color-mix()` ๋ก raised ์์ ์ ๊ธฐ์ค ์ผ์ ์๋ ๊ณ์ฐํ๋ค.\n\n N=6% ๋ raised(Lโ0.023)์ active(Lโ0.047, neutral-400) ์ฌ์ด ๋๋น ๊ณ์ฐ์ผ๋ก ๊ณจ๋๋ค โ\n ๊ฒฐ๊ณผ Lโ0.038, raised ๋๋น โ1.21(๋ผ์ดํธ์ ๊ธฐ์กด \"์ฝํ\" 1.04๋ณด๋ค ๋๋ ทํ๊ณ , `bgโraised`\n ์ ๊ธฐ์กด 1.31 ๊ณผ ๋น์ทํ ์ฒด๊ฐ), active ์๋ ๊ฐ์ด ๋ฌ๋ผ ๊ฒน์น์ง ์๋๋ค(โ#373737 vs\n active #3D3D3D). N ์ ๋ ์ฌ๋ฆฌ๋ฉด(โ10%+) active ๋ฅผ ๋์ด์ ์์๊ฐ ๋ค์งํ๋ค โ ํ์ธํจ. */\n --u-bg-color-raised-hover: color-mix(in srgb, var(--u-bg-color-raised), white 6%);\n\n /* ์ ์ฑ์ ํ๋ฉด โ ๋ผ์ดํธ์ **๊ฐ์ ๋จ์ด ์๋๋ผ ๊ฐ์ ์ธ๊ธฐ**๋ก ์ง์ง์๋ค(light.css ์ฐธ์กฐ).\n ํ๋ ํธ ์ ์ฑ์ ํดํธ๊ฐ ๋คํฌ์์ ์ง๋๋ฆฌ๋ฏ๋ก ํ ๋จ ์๋ฅผ ์ด๋ค. green ์ ๋์นญ์ด๋ผ ๊ทธ๋๋ก. */\n --u-primary-bg-color: var(--u-blue-100);\n --u-info-bg-color: var(--u-blue-100);\n --u-success-bg-color: var(--u-green-0);\n --u-danger-bg-color: var(--u-red-100);\n /* warning ํฉ๋ฅ โ ๋ผ์ดํธ๋ yellow-200 ์ด๋ค(๋จ ์ด๋ฆ์ด ๋ค๋ฅธ ์ด์ ๋ light.css ์ฐธ์กฐ). */\n --u-warning-bg-color: var(--u-yellow-100);\n\n --u-input-bg-color: var(--u-neutral-200);\n --u-panel-bg-color: var(--u-neutral-200);\n --u-overlay-bg-color: rgba(0, 0, 0, 0.7);\n --u-tooltip-bg-color: rgba(255, 255, 255, 0.85);\n\n /* Shadow Colors */\n --u-shadow-color-weaker: rgba(0, 0, 0, 0.15);\n --u-shadow-color-weak: rgba(0, 0, 0, 0.25);\n --u-shadow-color-normal: rgba(0, 0, 0, 0.35);\n --u-shadow-color-strong: rgba(0, 0, 0, 0.45);\n --u-shadow-color-stronger: rgba(0, 0, 0, 0.60);\n\n /* Elevation Scale โ ๊ทผ๊ฑฐ๋ light.css ์ ๊ฐ์ ์๋ฆฌ ์ฃผ์ ์ฐธ์กฐ.\n โ
๋คํฌ๋ ์ํ๊ฐ 3๋ฐฐ ๊ฐ๊น์ด ์งํ๋ค โ ๋ฆฌํฐ๋ด๋ก ํฉ์ด์ ธ ์๋ ์ข
์ ์๋ ์ด ์ฐจ์ด๊ฐ\n ์ ์ฉ๋์ง ์์ ๋คํฌ์์ ๊ทธ๋ฆผ์๊ฐ ์ฌ์ค์ ๋ณด์ด์ง ์์๋ค. */\n --u-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.25), 0 1px 1px rgba(0, 0, 0, 0.14); /* = shadow-color-weak */\n --u-shadow-md: 0 2px 8px rgba(0, 0, 0, 0.35), 0 1px 2px rgba(0, 0, 0, 0.18); /* = shadow-color-normal */\n --u-shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.45), 0 2px 4px rgba(0, 0, 0, 0.22); /* = shadow-color-strong */\n --u-shadow-xl: 0 6px 18px rgba(0, 0, 0, 0.60), 0 2px 6px rgba(0, 0, 0, 0.30); /* = shadow-color-stronger */\n\n\n /* Scrollbar Colors */\n --u-scrollbar-color: var(--u-neutral-500);\n --u-scrollbar-color-hover: var(--u-neutral-600);\n --u-scrollbar-track-color: transparent;\n}\n\n/* ==========================================================================\n โ
๋ชจ๋์ ๋ฌด๊ดํ ์ค์ผ์ผ โ ๋ฐ๊ฒฝยท์ฌ๋ฐฑยท๊ธ์ ์ค์ผ์ผยท๋ชจ์
ยท๊ธ๊ผด.\n ๊ฐ์ด light.css ์ **๊ฐ๋ค.** ๊ทธ๋ฐ๋ฐ ์ ๋ธ๋ก(`:root[theme=\"dark\"]`, ํน์ด๋ 0,1,1)์ ๋๋ฉด\n `:root`(0,1,0)๋ก ์ด ํ ํฐ์ ๋ฎ๋ **๋ชจ๋ ์ธต**(ํ์ฐ์ค ํ๋ฆฌ์
ยท์๋น์ ๋ธ๋๋ ์ํธ)์ด ๋คํฌ\n ๋ชจ๋์์๋ง **๋ก๋ ์์์ ๋ฌด๊ดํ๊ฒ** ์ง๋ค โ ์๋ฌ๋ ๊ฒฝ๊ณ ๋ ์์ด, ์์ ์ ์์ผ๋ก ๋ฐ๋๋ฏ๋ก\n ยซ๋คํฌ๊ฐ ์ ๋๋คยป ๋ก ๋ณด์ธ๋ค. `:where()` ๋ก ํน์ด๋๋ฅผ `:root` ์ ๊ฐ๊ฒ ๋๋ฉด ์ธต ๋ชจ๋ธ์ด ๋ผ์ดํธ์\n ๋๊ฐ์ด ๋ก๋ ์์๋ก ์ ๋ค.\n โ ์ด ๋ธ๋ก์ ์ง์ฐ์ง ๋ง ๊ฒ โ ์ด ์ํธ๋ง ์ฐ๋ ยซ๊ณ ์ ๋คํฌ ๋์์ธยป ์๋น์(docs/theming.md)๋\n ์ด ํ ํฐ๋ค์ ์ฌ๊ธฐ์ ๋ฐ๋๋ค. ๋ ์ํธ๋ฅผ ํจ๊ป ์ธ ๋๋ ๊ฐ์ด ๊ฐ์ผ๋ฏ๋ก ์ด๋ ์ชฝ์ด ์ด๊ฒจ๋ ๊ฐ๋ค.\n ========================================================================== */\n:root:where([theme=\"dark\"]) {\n /* ==========================================================================\n Radius Scale โ ๋ชจ์๋ฆฌ ๋ฐ๊ฒฝ\n ๋ฆฌํฐ๋ด์ ํฉ๋ฟ๋ฆฌ๋ฉด ๊ฐ์ด ๊ฐ๋ฆฐ๋ค(์ค์ ๋ก pill ์ด 999px/9999px ๋ ํ๊ธฐ๋ก ๋๋์ด ์์๋ค).\n ========================================================================== */\n --u-radius-none: 0;\n --u-radius-sm: 3px;\n --u-radius-md: 4px;\n --u-radius-lg: 6px;\n --u-radius-xl: 8px;\n /* โ
์๋จ 2๋จ์ **๋ฉด(surface)์ฉ**์ด๋ค โ ์นด๋ยทํจ๋ยท๋ํ์์์ฒ๋ผ ํฐ ์ฌ๊ฐํ์ ์ปจํธ๋กค๊ณผ\n ๊ฐ์ ๋ฐ๊ฒฝ์ ์ฐ๋ฉด ๊ฐ์ ธ ๋ณด์ธ๋ค. ๊ธฐ์กด 5๋จ์ **์ปจํธ๋กค์ฉ**์ด๊ณ ๊ฐ์ ๋ฐ๊พธ์ง ์๋๋ค\n (๋ฐ๊พธ๋ฉด ๋ชจ๋ ์๋น์์ ๋ฒํผยท์
๋ ฅ์ด ๋์์ ์์ง์ธ๋ค). */\n --u-radius-2xl: 12px;\n --u-radius-3xl: 16px;\n --u-radius-pill: 9999px;\n --u-radius-circle: 50%;\n\n /* ==========================================================================\n Space Scale โ ์ปจํ
์ด๋ยท์ค๋ฒ๋ ์ด์ ์ ๋ ์ฌ๋ฐฑ\n โ **์ฌ๋ฐฑ์ ํ๋์ ์ถ์ด ์๋๋ค.** ์ด ์ค์ผ์ผ์ ์ปจํ
์ด๋/์ค๋ฒ๋ ์ด์ **๋ ์ด์์ ์ฌ๋ฐฑ**๋ง\n ๋ด๋นํ๋ค. ํผยท์ธ๋ผ์ธ ์์์ `em` ์ฌ๋ฐฑ์ ์์๋ `font-size` ์ ๋น๋กํ๋ ๊ฒ์ด ์๋์ด๋ฏ๋ก\n **์ฌ๊ธฐ๋ก ํก์ํ์ง ์๋๋ค.** ๋ฐ๊ฒฝ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ
๋ง์ ๋ฌด๊ดํ๋ฏ๋ก ๋ ์ํธ๊ฐ ๊ฐ๋ค.\n ์ถ ๊ตฌ๋ถ๊ณผ ๊ทผ๊ฑฐ๋ docs/design-tokens.md ์ฐธ์กฐ.\n ========================================================================== */\n --u-space-3xs: 2px;\n --u-space-2xs: 4px;\n --u-space-xs: 6px;\n --u-space-sm: 8px;\n --u-space-md: 12px;\n --u-space-lg: 16px;\n /* โ
์๋จ 4๋จ์ **ํ๋ฉด ๋ฆฌ๋ฌ**์ด๋ค โ ์นด๋ ์์ชฝ ์ฌ๋ฐฑ(20~24)ยท์น์
๊ฐ๊ฒฉ(24~32)ยทํ์ด์ง ์ฌ๋ฐฑ\n (32~40). ์ข
์ ์๋ ์ด ๊ตฌ๊ฐ์ด ํต์งธ๋ก ๋น์ด ์์ด ์๋น์๊ฐ ์ ๋ถ ๋ฆฌํฐ๋ด๋ก ์ ์๊ณ ,\n ๊ทธ๋์ ์ฑ๋ง๋ค ํ๋ฉด ๋ฐ๋๊ฐ ๋ฌ๋ผ์ก๋ค. `lg`(16px) ์ดํ๋ **์์ ์ฌ์ด**, `xl` ์ด์์\n **์์ญ ์ฌ์ด**๋ก ๋๋ ์ด๋ค.\n โ `xs: 6px` ๋ 4px ๊ฒฉ์์์ ๋ฒ์ด๋ ์์ผ๋ **๋ฐ๊พธ์ง ์๋๋ค** โ ์ด๋ฏธ ๋ฐฐ์ ๋ ์ปจํธ๋กค\n ์ฌ๋ฐฑ์ด ์ ๋ถ ์์ง์ธ๋ค. ์ ๊ท ๋จ์ ์ ๋ถ 4์ ๋ฐฐ์๋ก ๋๋ค. */\n --u-space-xl: 20px;\n --u-space-2xl: 24px;\n --u-space-3xl: 32px;\n --u-space-4xl: 40px;\n\n /* ==========================================================================\n Type Scale โ ๊ธ์ ํฌ๊ธฐยท๊ตต๊ธฐยทํ๊ฐยท์๊ฐ์ **ํ ๋ฒ**\n โ
**ํฌ๊ธฐ๋ง ์ฃผ๋ฉด ์ค์ผ์ผ์ด ๋์ง ์๋๋ค.** ์๋น์๊ฐ ํฌ๊ธฐ๋ง ๋ฐ๊ณ ๊ตต๊ธฐยทํ๊ฐ์ ๊ฐ์ ์ ํ๋ฉด\n ๊ฒฐ๊ตญ ํ๋ฉด๋ง๋ค ๋ค๋ฅธ ์๊ณ๊ฐ ์๊ธด๋ค โ ๊ทธ๋์ ๋ค ๊ฐ์ **๋จ ๋จ์๋ก ๋ฌถ์ด** ๋ธ๋ค.\n\n ๋จ ์ด๋ฆ์ ํฌ๊ธฐ๊ฐ ์๋๋ผ **์ญํ **์ด๋ค(`lg`/`xl` ์ด ์๋๋ผ `title`/`label`). ์ญํ ๋ก ๋๋ฉด\n ์๋น์๊ฐ *\"์ด๋ ํฌ๊ธฐ๋ฅผ ์ธ๊น\"* ๊ฐ ์๋๋ผ *\"์ด ๊ธ์๋ ๋ฌด์์ธ๊ฐ\"* ๋ฅผ ๋ฌป๊ฒ ๋๋ค.\n\n โ
**ํ๊ธ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ๊ณจ๋๋ค**:\n โด ํ๊ฐ์ **1.4 ์ด์**. ๋ผํด ๊ด๋ก(1.2)๋ ํ๊ธ์์ ๋ต๋ตํ๋ค โ ๋ฐ์นจ ๋๋ฌธ์ ๊ธ์ ์์๊ฐ\n ์ธ๋ก๋ก ๊ฝ ์ฐจ ์์ด ๋ผํด๊ณผ ๊ฐ์ ํ๊ฐ์ด๋ฉด ์ค์ด ๋ถ์ด ๋ณด์ธ๋ค.\n โต ์๊ฐ์ **0 ์ด ๊ธฐ๋ณธ**์ด๊ณ ํฐ ์ ๋ชฉ๋ง **์์**. ํ๊ธ์ ์์ ์๊ฐ(letter-spacing)์ ์ฃผ๋ฉด\n ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ค โ ๋ผํด ์๋ฌธ์ ์กฐํ ๊ด๋ก๋ฅผ ๊ทธ๋๋ก ์ฎ๊ธฐ๋ฉด ์ ๋๋ ์๋ฆฌ๋ค.\n โถ `overline` ์๋ง ์์ ์๊ฐ์ ๋๋ค. ๊ทธ ๋จ์ **์๋ฌธยท์ซ์ ๋ผ๋ฒจ**์ ์ ์ ํ ์๋ฆฌ์ด๊ณ ,\n ํ๊ธ์ ๋ฃ์ ์๋น์๋ ์๊ฐ์ 0 ์ผ๋ก ๋ฎ์ด์ผ ํ๋ค(๋ฌธ์์ ๋ช
์).\n\n โ **`text-transform` ์ ํ ํฐ์ผ๋ก ๋ด์ง ์๋๋ค.** ํ๊ธ์๋ ๋๋ฌธ์๊ฐ ์์ด `uppercase` ๊ฐ\n ์๋ฌด ํจ๊ณผ๊ฐ ์๊ณ , ์๋ฌธ์ด ์์ด๋ฉด ๊ทธ๊ฒ๋ง ์ปค์ ธ ์คํ๋ ค ์ด์์ ํด์ง๋ค.\n ========================================================================== */\n --u-text-display-size: 26px;\n --u-text-display-weight: 700;\n --u-text-display-leading: 1.4;\n --u-text-display-tracking: -0.02em;\n\n --u-text-title-size: 20px;\n --u-text-title-weight: 700;\n --u-text-title-leading: 1.45;\n --u-text-title-tracking: -0.01em;\n\n --u-text-subtitle-size: 16px;\n --u-text-subtitle-weight: 600;\n --u-text-subtitle-leading: 1.5;\n --u-text-subtitle-tracking: 0;\n\n --u-text-body-size: 14px;\n --u-text-body-weight: 400;\n --u-text-body-leading: 1.6;\n --u-text-body-tracking: 0;\n\n --u-text-label-size: 13px;\n --u-text-label-weight: 600;\n --u-text-label-leading: 1.5;\n --u-text-label-tracking: 0;\n\n --u-text-caption-size: 12px;\n --u-text-caption-weight: 400;\n --u-text-caption-leading: 1.5;\n --u-text-caption-tracking: 0;\n\n --u-text-overline-size: 11px;\n --u-text-overline-weight: 700;\n --u-text-overline-leading: 1.45;\n --u-text-overline-tracking: 0.06em;\n\n /* ==========================================================================\n Motion โ ์ง์์๊ฐยท์ด์ง\n โ
๊ฐ์ด ์์ผ๋ฉด ์ฑ๋ง๋ค ๋ค๋ฅธ ์๋๊ฐ ์๊ธฐ๊ณ , `prefers-reduced-motion` ์ **๋ฐ๋์**\n ๋น ๋จ๋ฆฌ๋ ์ฑ์ด ๋์จ๋ค. ์ถ์ ์ฌ๊ธฐ ๋๊ณ ์กด์ค ๊ท์น์ ์๋ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๊ฐ ์ง๋ค.\n ========================================================================== */\n --u-duration-instant: 80ms;\n --u-duration-fast: 140ms;\n --u-duration-normal: 220ms;\n --u-duration-slow: 320ms;\n --u-ease-standard: cubic-bezier(0.2, 0, 0, 1);\n --u-ease-decelerate: cubic-bezier(0, 0, 0, 1);\n --u-ease-accelerate: cubic-bezier(0.3, 0, 1, 1);\n\n /* ==========================================================================\n Font Styles\n โ
**CJK ํด๋ฐฑ์ ์คํ์ ํฌํจํ๋ค โ ๊ตญ์ ํ์ด์ง ์ทจํฅ์ด ์๋๋ค.**\n ์ข
์ ์คํ(`-apple-system, Segoe UI, Noto Sans, Helvetica, Arial`)์๋ **ํ์ค์ผ ๊ธ๋ฆฝ์\n ๊ฐ์ง ํฐํธ๊ฐ ํ๋๋ ์์๋ค.** Windows ์์ ํ๊ธ์ `Segoe UI` ์ ์์ผ๋ฏ๋ก UA ๊ฐ ์์๋ก\n ๋ง์ ๊ณ ๋์ ๊ณ ๋ฅด๊ณ , macOS ๋ `-apple-system` ์ด Apple SD Gothic Neo ๋ฅผ ์ค๋ค โ **๊ฐ์ ์ฑ์ด\n OS ๋ง๋ค ๋ค๋ฅธ ๊ธ๊ผด๋ก ๋ ๋**๋๋ค. ํด๋ฐฑ์ ๋ช
์ํ๋ฉด ๊ทธ ์ ํ์ด ๊ฒฐ์ ์ ์ด ๋๋ค.\n โ **์นํฐํธ๋ฅผ ๋ก๋ํ์ง ์๋๋ค.** ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋คํธ์ํฌ ์์ฒญ์ ๋ง๋ค๋ฉด ์๋น์์ CSPยท\n ์คํ๋ผ์ธ ํ๊ฒฝ์ ๊นฌ๋ค. ์คํ ๋งจ ์์ `Pretendard` ๋ **์๋น์๊ฐ ๋ก๋ํ์ ๋๋ง** ์กํ๋\n ์ ํ์ ์ด๋ฆ์ด๋ค(์์ผ๋ฉด ์กฐ์ฉํ ๋ค์์ผ๋ก ๋์ด๊ฐ๋ค).\n ========================================================================== */\n --u-font-base: 'Pretendard Variable', Pretendard, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, 'Apple SD Gothic Neo', 'Malgun Gothic', 'Noto Sans KR', 'Hiragino Sans', 'Yu Gothic UI', 'Microsoft YaHei', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';\n --u-font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Monaco, 'Courier New', monospace;\n --u-font-serif: 'Georgia', 'Times New Roman', Times, serif;\n --u-font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;\n --u-font-modern: 'Inter', 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --u-font-rounded: 'Nunito', 'Quicksand', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n}\n\n/* โ
`prefers-reduced-motion` โ light.css ์ ๊ฐ์ ๊ท์น์ ์ด ์ํธ๋ ์ง๋ค. ์ด ์ํธ๋ง ์ฐ๋\n ์๋น์๊ฐ ์๊ณ , ๋ ์ํธ๋ฅผ ํจ๊ป ์ธ ๋๋ ์ด๋ ์ํธ๊ฐ ๋ค์ ์ค๋ **๋ง์ง๋ง ์ ์ธ์ด ์ด 0ms**\n ๊ฐ ๋๋๋ก ๊ฐ ์ํธ๊ฐ ์๊ธฐ ๋ธ๋ก ๋ค์ ๋๋ค. ์ข
์ ์๋ ์ง์์๊ฐ์ด ์ (0,1,1) ๋ธ๋ก์ ์์ด\n ๋คํฌ ๋ชจ๋์์ ยซ๋์ ์ค์ด๊ธฐยป ์ค์ ์ด **๋ฌด์๋๋ค.** */\n@media (prefers-reduced-motion: reduce) {\n :root:where([theme=\"dark\"]) {\n --u-duration-instant: 0ms;\n --u-duration-fast: 0ms;\n --u-duration-normal: 0ms;\n --u-duration-slow: 0ms;\n }\n}\n";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { dark_css_default as default };
|
|
@@ -38,6 +38,8 @@ var alertMessage = "ุฑุณุงูุฉ";
|
|
|
38
38
|
var remove = "ุฅุฒุงูุฉ";
|
|
39
39
|
var closeTab = "ุฅุบูุงู ุนูุงู
ุฉ ุงูุชุจููุจ";
|
|
40
40
|
var breadcrumb = "ู
ุณุงุฑ ุงูุชููู";
|
|
41
|
+
var confirm = "ุชุฃููุฏ";
|
|
42
|
+
var cancel = "ุฅูุบุงุก";
|
|
41
43
|
var ar_default = {
|
|
42
44
|
valueMissing,
|
|
43
45
|
badInput,
|
|
@@ -77,7 +79,9 @@ var ar_default = {
|
|
|
77
79
|
alertMessage,
|
|
78
80
|
remove,
|
|
79
81
|
closeTab,
|
|
80
|
-
breadcrumb
|
|
82
|
+
breadcrumb,
|
|
83
|
+
confirm,
|
|
84
|
+
cancel
|
|
81
85
|
};
|
|
82
86
|
//#endregion
|
|
83
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, ar_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
87
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, confirm, copied, copy, decrement, ar_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -38,6 +38,8 @@ var alertMessage = "Nachricht";
|
|
|
38
38
|
var remove = "Entfernen";
|
|
39
39
|
var closeTab = "Tab schlieรen";
|
|
40
40
|
var breadcrumb = "Navigationspfad";
|
|
41
|
+
var confirm = "Bestรคtigen";
|
|
42
|
+
var cancel = "Abbrechen";
|
|
41
43
|
var de_default = {
|
|
42
44
|
valueMissing,
|
|
43
45
|
badInput,
|
|
@@ -77,7 +79,9 @@ var de_default = {
|
|
|
77
79
|
alertMessage,
|
|
78
80
|
remove,
|
|
79
81
|
closeTab,
|
|
80
|
-
breadcrumb
|
|
82
|
+
breadcrumb,
|
|
83
|
+
confirm,
|
|
84
|
+
cancel
|
|
81
85
|
};
|
|
82
86
|
//#endregion
|
|
83
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, de_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
87
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, confirm, copied, copy, decrement, de_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -38,6 +38,8 @@ var alertMessage = "Message";
|
|
|
38
38
|
var remove = "Remove";
|
|
39
39
|
var closeTab = "Close tab";
|
|
40
40
|
var breadcrumb = "Breadcrumb";
|
|
41
|
+
var confirm = "Confirm";
|
|
42
|
+
var cancel = "Cancel";
|
|
41
43
|
var en_default = {
|
|
42
44
|
valueMissing,
|
|
43
45
|
badInput,
|
|
@@ -77,7 +79,9 @@ var en_default = {
|
|
|
77
79
|
alertMessage,
|
|
78
80
|
remove,
|
|
79
81
|
closeTab,
|
|
80
|
-
breadcrumb
|
|
82
|
+
breadcrumb,
|
|
83
|
+
confirm,
|
|
84
|
+
cancel
|
|
81
85
|
};
|
|
82
86
|
//#endregion
|
|
83
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, en_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
87
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, confirm, copied, copy, decrement, en_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -37,6 +37,8 @@ var alertMessage = "Mensaje";
|
|
|
37
37
|
var remove = "Quitar";
|
|
38
38
|
var closeTab = "Cerrar pestaรฑa";
|
|
39
39
|
var breadcrumb = "Ruta de navegaciรณn";
|
|
40
|
+
var confirm = "Confirmar";
|
|
41
|
+
var cancel = "Cancelar";
|
|
40
42
|
var es_default = {
|
|
41
43
|
valueMissing,
|
|
42
44
|
badInput,
|
|
@@ -76,7 +78,9 @@ var es_default = {
|
|
|
76
78
|
alertMessage,
|
|
77
79
|
remove,
|
|
78
80
|
closeTab,
|
|
79
|
-
breadcrumb
|
|
81
|
+
breadcrumb,
|
|
82
|
+
confirm,
|
|
83
|
+
cancel
|
|
80
84
|
};
|
|
81
85
|
//#endregion
|
|
82
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, es_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, tooLong, tooShort, typeMismatch, valueMissing };
|
|
86
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, confirm, copied, copy, decrement, es_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -38,6 +38,8 @@ var alertMessage = "Message";
|
|
|
38
38
|
var remove = "Supprimer";
|
|
39
39
|
var closeTab = "Fermer l'onglet";
|
|
40
40
|
var breadcrumb = "Fil d'Ariane";
|
|
41
|
+
var confirm = "Confirmer";
|
|
42
|
+
var cancel = "Annuler";
|
|
41
43
|
var fr_default = {
|
|
42
44
|
valueMissing,
|
|
43
45
|
badInput,
|
|
@@ -77,7 +79,9 @@ var fr_default = {
|
|
|
77
79
|
alertMessage,
|
|
78
80
|
remove,
|
|
79
81
|
closeTab,
|
|
80
|
-
breadcrumb
|
|
82
|
+
breadcrumb,
|
|
83
|
+
confirm,
|
|
84
|
+
cancel
|
|
81
85
|
};
|
|
82
86
|
//#endregion
|
|
83
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, fr_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
87
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, confirm, copied, copy, decrement, fr_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -38,6 +38,8 @@ var alertMessage = "Pesan";
|
|
|
38
38
|
var remove = "Hapus";
|
|
39
39
|
var closeTab = "Tutup tab";
|
|
40
40
|
var breadcrumb = "Navigasi remah roti";
|
|
41
|
+
var confirm = "Konfirmasi";
|
|
42
|
+
var cancel = "Batal";
|
|
41
43
|
var id_default = {
|
|
42
44
|
valueMissing,
|
|
43
45
|
badInput,
|
|
@@ -77,7 +79,9 @@ var id_default = {
|
|
|
77
79
|
alertMessage,
|
|
78
80
|
remove,
|
|
79
81
|
closeTab,
|
|
80
|
-
breadcrumb
|
|
82
|
+
breadcrumb,
|
|
83
|
+
confirm,
|
|
84
|
+
cancel
|
|
81
85
|
};
|
|
82
86
|
//#endregion
|
|
83
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, id_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
87
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, confirm, copied, copy, decrement, id_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -38,6 +38,7 @@ var alertMessage = "ใกใใปใผใธ";
|
|
|
38
38
|
var remove = "ๅ้ค";
|
|
39
39
|
var closeTab = "ใฟใใ้ใใ";
|
|
40
40
|
var breadcrumb = "ใใณใใใชในใ";
|
|
41
|
+
var cancel = "ใญใฃใณใปใซ";
|
|
41
42
|
var ja_default = {
|
|
42
43
|
valueMissing,
|
|
43
44
|
badInput,
|
|
@@ -77,7 +78,9 @@ var ja_default = {
|
|
|
77
78
|
alertMessage,
|
|
78
79
|
remove,
|
|
79
80
|
closeTab,
|
|
80
|
-
breadcrumb
|
|
81
|
+
breadcrumb,
|
|
82
|
+
confirm: "OK",
|
|
83
|
+
cancel
|
|
81
84
|
};
|
|
82
85
|
//#endregion
|
|
83
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, ja_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
86
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, ja_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -38,6 +38,8 @@ var alertMessage = "๋ฉ์์ง";
|
|
|
38
38
|
var remove = "์ ๊ฑฐ";
|
|
39
39
|
var closeTab = "ํญ ๋ซ๊ธฐ";
|
|
40
40
|
var breadcrumb = "ํ์ ๊ฒฝ๋ก";
|
|
41
|
+
var confirm = "ํ์ธ";
|
|
42
|
+
var cancel = "์ทจ์";
|
|
41
43
|
var ko_default = {
|
|
42
44
|
valueMissing,
|
|
43
45
|
badInput,
|
|
@@ -77,7 +79,9 @@ var ko_default = {
|
|
|
77
79
|
alertMessage,
|
|
78
80
|
remove,
|
|
79
81
|
closeTab,
|
|
80
|
-
breadcrumb
|
|
82
|
+
breadcrumb,
|
|
83
|
+
confirm,
|
|
84
|
+
cancel
|
|
81
85
|
};
|
|
82
86
|
//#endregion
|
|
83
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, ko_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
87
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, confirm, copied, copy, decrement, ko_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -38,6 +38,8 @@ var alertMessage = "Mensagem";
|
|
|
38
38
|
var remove = "Remover";
|
|
39
39
|
var closeTab = "Fechar aba";
|
|
40
40
|
var breadcrumb = "Trilha de navegaรงรฃo";
|
|
41
|
+
var confirm = "Confirmar";
|
|
42
|
+
var cancel = "Cancelar";
|
|
41
43
|
var pt_BR_default = {
|
|
42
44
|
valueMissing,
|
|
43
45
|
badInput,
|
|
@@ -77,7 +79,9 @@ var pt_BR_default = {
|
|
|
77
79
|
alertMessage,
|
|
78
80
|
remove,
|
|
79
81
|
closeTab,
|
|
80
|
-
breadcrumb
|
|
82
|
+
breadcrumb,
|
|
83
|
+
confirm,
|
|
84
|
+
cancel
|
|
81
85
|
};
|
|
82
86
|
//#endregion
|
|
83
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, pt_BR_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
87
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, confirm, copied, copy, decrement, pt_BR_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -38,6 +38,8 @@ var alertMessage = "ะกะพะพะฑัะตะฝะธะต";
|
|
|
38
38
|
var remove = "ะฃะดะฐะปะธัั";
|
|
39
39
|
var closeTab = "ะะฐะบัััั ะฒะบะปะฐะดะบั";
|
|
40
40
|
var breadcrumb = "ะะฐะฒะธะณะฐัะธะพะฝะฝะฐั ัะตะฟะพัะบะฐ";
|
|
41
|
+
var confirm = "ะะพะดัะฒะตัะดะธัั";
|
|
42
|
+
var cancel = "ะัะผะตะฝะฐ";
|
|
41
43
|
var ru_default = {
|
|
42
44
|
valueMissing,
|
|
43
45
|
badInput,
|
|
@@ -77,7 +79,9 @@ var ru_default = {
|
|
|
77
79
|
alertMessage,
|
|
78
80
|
remove,
|
|
79
81
|
closeTab,
|
|
80
|
-
breadcrumb
|
|
82
|
+
breadcrumb,
|
|
83
|
+
confirm,
|
|
84
|
+
cancel
|
|
81
85
|
};
|
|
82
86
|
//#endregion
|
|
83
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, ru_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
87
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, confirm, copied, copy, decrement, ru_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -38,6 +38,8 @@ var alertMessage = "เธเนเธญเธเธงเธฒเธก";
|
|
|
38
38
|
var remove = "เธฅเธ";
|
|
39
39
|
var closeTab = "เธเธดเธเนเธเนเธ";
|
|
40
40
|
var breadcrumb = "เนเธชเนเธเธเธฒเธเธเธฒเธฃเธเธณเธเธฒเธ";
|
|
41
|
+
var confirm = "เธขเธทเธเธขเธฑเธ";
|
|
42
|
+
var cancel = "เธขเธเนเธฅเธดเธ";
|
|
41
43
|
var th_default = {
|
|
42
44
|
valueMissing,
|
|
43
45
|
badInput,
|
|
@@ -77,7 +79,9 @@ var th_default = {
|
|
|
77
79
|
alertMessage,
|
|
78
80
|
remove,
|
|
79
81
|
closeTab,
|
|
80
|
-
breadcrumb
|
|
82
|
+
breadcrumb,
|
|
83
|
+
confirm,
|
|
84
|
+
cancel
|
|
81
85
|
};
|
|
82
86
|
//#endregion
|
|
83
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, th_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
87
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, confirm, copied, copy, decrement, th_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -38,6 +38,8 @@ var alertMessage = "Thรดng bรกo";
|
|
|
38
38
|
var remove = "Xรณa";
|
|
39
39
|
var closeTab = "ฤรณng tab";
|
|
40
40
|
var breadcrumb = "ฤฦฐแปng dแบซn ฤiแปu hฦฐแปng";
|
|
41
|
+
var confirm = "Xรกc nhแบญn";
|
|
42
|
+
var cancel = "Hแปงy";
|
|
41
43
|
var vi_default = {
|
|
42
44
|
valueMissing,
|
|
43
45
|
badInput,
|
|
@@ -77,7 +79,9 @@ var vi_default = {
|
|
|
77
79
|
alertMessage,
|
|
78
80
|
remove,
|
|
79
81
|
closeTab,
|
|
80
|
-
breadcrumb
|
|
82
|
+
breadcrumb,
|
|
83
|
+
confirm,
|
|
84
|
+
cancel
|
|
81
85
|
};
|
|
82
86
|
//#endregion
|
|
83
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, vi_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
87
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, confirm, copied, copy, decrement, vi_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -38,6 +38,8 @@ var alertMessage = "ๆถๆฏ";
|
|
|
38
38
|
var remove = "็งป้ค";
|
|
39
39
|
var closeTab = "ๅ
ณ้ญๆ ็ญพ้กต";
|
|
40
40
|
var breadcrumb = "้ขๅ
ๅฑๅฏผ่ช";
|
|
41
|
+
var confirm = "็กฎๅฎ";
|
|
42
|
+
var cancel = "ๅๆถ";
|
|
41
43
|
var zh_CN_default = {
|
|
42
44
|
valueMissing,
|
|
43
45
|
badInput,
|
|
@@ -77,7 +79,9 @@ var zh_CN_default = {
|
|
|
77
79
|
alertMessage,
|
|
78
80
|
remove,
|
|
79
81
|
closeTab,
|
|
80
|
-
breadcrumb
|
|
82
|
+
breadcrumb,
|
|
83
|
+
confirm,
|
|
84
|
+
cancel
|
|
81
85
|
};
|
|
82
86
|
//#endregion
|
|
83
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, zh_CN_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
87
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, confirm, copied, copy, decrement, zh_CN_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -38,6 +38,8 @@ var alertMessage = "่จๆฏ";
|
|
|
38
38
|
var remove = "็งป้ค";
|
|
39
39
|
var closeTab = "้้ๅ้ ";
|
|
40
40
|
var breadcrumb = "้บตๅ
ๅฑๅฐ่ฆฝ";
|
|
41
|
+
var confirm = "็ขบๅฎ";
|
|
42
|
+
var cancel = "ๅๆถ";
|
|
41
43
|
var zh_TW_default = {
|
|
42
44
|
valueMissing,
|
|
43
45
|
badInput,
|
|
@@ -77,7 +79,9 @@ var zh_TW_default = {
|
|
|
77
79
|
alertMessage,
|
|
78
80
|
remove,
|
|
79
81
|
closeTab,
|
|
80
|
-
breadcrumb
|
|
82
|
+
breadcrumb,
|
|
83
|
+
confirm,
|
|
84
|
+
cancel
|
|
81
85
|
};
|
|
82
86
|
//#endregion
|
|
83
|
-
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, chooseDate, chooseFile, clear, close, closeTab, copied, copy, decrement, zh_TW_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
87
|
+
export { alertError, alertInfo, alertMessage, alertNotice, alertSuccess, alertWarning, badInput, breadcrumb, cancel, chooseDate, chooseFile, clear, close, closeTab, confirm, copied, copy, decrement, zh_TW_default as default, filesSelected, goToSlide, hidePassword, increment, nextMonth, nextSlide, noFileChosen, patternMismatch, previousMonth, previousSlide, rangeOverflow, rangeUnderflow, remove, resizePanels, search, showPassword, stepMismatch, time, today, tooLong, tooShort, typeMismatch, valueMissing };
|
|
@@ -87,6 +87,12 @@ export declare abstract class UOverlayElement extends UElement {
|
|
|
87
87
|
private cleanup;
|
|
88
88
|
/** host ์์ฒด๋ฅผ ํด๋ฆญํ ๊ฒฝ์ฐ(๋ฐฑ๋๋กญ)๋ง ๋ซ๊ธฐ ์์ฒญ */
|
|
89
89
|
private handlePointerdown;
|
|
90
|
-
/**
|
|
90
|
+
/**
|
|
91
|
+
* ESC ํค ์
๋ ฅ ์ ๋ซ๊ธฐ ์์ฒญ (์ต์์ ์ค๋ฒ๋ ์ด์ ๋ํด์๋ง).
|
|
92
|
+
*
|
|
93
|
+
* ์ด๋ฏธ ์๋น๋ Escape(`defaultPrevented`)๋ ๋ฐ์ง ์๋๋ค โ ์ค๋ฒ๋ ์ด ์์์ ์ด๋ฆฐ ๋ชฉ๋กยทํ์ค๋ฒ๊ฐ
|
|
94
|
+
* ์๊ธฐ ์ธต์ ๋ซ์ผ๋ฉฐ ๋จน์ ํค๋ค. ํ ๋ฒ์ Escape ๋ ํ ์ธต๋ง ๋ซ๋๋ค. ์ด ๋ฆฌ์ค๋๋ window ๋ฒ๋ธ์
|
|
95
|
+
* ์์ผ๋ฏ๋ก ์์ชฝ ์ปจํธ๋กค๊ณผ document ๋ฆฌ์ค๋๊ฐ ๋ชจ๋ ๋ ยซ๋คยป ์ ํ๋จํ๋ค.
|
|
96
|
+
*/
|
|
91
97
|
private handleWindowKeydown;
|
|
92
98
|
}
|
|
@@ -28,7 +28,7 @@ var UOverlayElement = class extends UElement {
|
|
|
28
28
|
if (e.composedPath()[0] === this) this.requestClose("backdrop");
|
|
29
29
|
};
|
|
30
30
|
this.handleWindowKeydown = (e) => {
|
|
31
|
-
if (!this.open || e.key !== "Escape") return;
|
|
31
|
+
if (!this.open || e.key !== "Escape" || e.defaultPrevented) return;
|
|
32
32
|
if (!OverlayManager.isTopmost(this)) return;
|
|
33
33
|
e.preventDefault();
|
|
34
34
|
this.requestClose("escape");
|
|
@@ -25,6 +25,7 @@ var UBreadcrumbItem = class UBreadcrumbItem extends UElement {
|
|
|
25
25
|
if (this.href) return html`
|
|
26
26
|
<a part="link"
|
|
27
27
|
href=${this.href}
|
|
28
|
+
aria-disabled=${ifDefined(this.disabled ? "true" : void 0)}
|
|
28
29
|
target=${ifDefined(this.target)}
|
|
29
30
|
rel=${ifDefined(this.rel)}
|
|
30
31
|
@click=${this.handleAnchorClick}
|
|
@@ -201,6 +201,7 @@ var UDatePicker = class UDatePicker extends UFormControlElement {
|
|
|
201
201
|
<div class="container" part="container"
|
|
202
202
|
tabindex=${this.disabled ? "-1" : "0"}
|
|
203
203
|
role="combobox"
|
|
204
|
+
aria-disabled=${ifDefined(this.disabled ? "true" : void 0)}
|
|
204
205
|
aria-haspopup="dialog"
|
|
205
206
|
aria-expanded=${this.open}
|
|
206
207
|
aria-label=${ifDefined(this.resolvedAriaLabel)}
|
|
@@ -72,8 +72,9 @@ var UInput = class UInput extends UFormControlElement {
|
|
|
72
72
|
this.options.find((o) => !o.hidden && !o.disabled)?.focus();
|
|
73
73
|
break;
|
|
74
74
|
case "Escape":
|
|
75
|
+
if (!this.popoverEl?.open) break;
|
|
75
76
|
e.preventDefault();
|
|
76
|
-
this.popoverEl
|
|
77
|
+
this.popoverEl.hide();
|
|
77
78
|
}
|
|
78
79
|
};
|
|
79
80
|
this.handleSuffixIconKeydown = (action) => (e) => {
|
|
@@ -74,7 +74,11 @@ var UMenuItem = class UMenuItem extends UElement {
|
|
|
74
74
|
}
|
|
75
75
|
updated(changedProperties) {
|
|
76
76
|
super.updated(changedProperties);
|
|
77
|
-
if (changedProperties.has("disabled"))
|
|
77
|
+
if (changedProperties.has("disabled")) {
|
|
78
|
+
this.setAttribute("tabindex", this.disabled ? "-1" : "0");
|
|
79
|
+
if (this.disabled) this.setAttribute("aria-disabled", "true");
|
|
80
|
+
else this.removeAttribute("aria-disabled");
|
|
81
|
+
}
|
|
78
82
|
if (changedProperties.has("expanded") && !this.expanded) this._childItems.forEach((c) => c.expanded = false);
|
|
79
83
|
if (changedProperties.has("depth") || changedProperties.has("inline")) this.style.setProperty("--menu-item-depth", String(this.inline ? this.depth : 0));
|
|
80
84
|
}
|
|
@@ -59,6 +59,16 @@ export declare class UPopover extends UFloatingElement {
|
|
|
59
59
|
private startSafeTimer;
|
|
60
60
|
private cancelSafeTimer;
|
|
61
61
|
private handleDocumentClick;
|
|
62
|
+
/**
|
|
63
|
+
* ์ด ๋ฆฌ์ค๋๋ `dismiss` ์ `escape` ๊ฐ ์์ผ๋ฉด **์ฐ๊ฒฐ ์์ ์** document ์ ๋ถ์ผ๋ฏ๋ก, ๋ซํ
|
|
64
|
+
* ์ธ์คํด์ค๋ ๋ชจ๋ Escape ๋ฅผ ๋ฐ๋๋ค. ๋ซํ ํ์ค๋ฒ๋ Escape ๋ก ํ ์ผ์ด ์๋ค โ ์ฌ๊ธฐ์
|
|
65
|
+
* `preventDefault()` ํ๋ฉด ํ๋ฉด์ ํ์ค๋ฒ๊ฐ ยซ์กด์ฌํ๊ธฐ๋งยป ํด๋ document ๋ฒ๋ธ ์์ ์ Escape ๊ฐ
|
|
66
|
+
* ํญ์ ์๋น๋ ๊ฒ์ผ๋ก ๋ณด์ฌ, ์๋น์(๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ ์ค๋ฒ๋ ์ด)๊ฐ `defaultPrevented` ๋ก ยซ์์์ ๋๊ฐ
|
|
67
|
+
* ๋จน์๋ยป ๋ฅผ ๊ฐ๋ฆด ์ ์๊ฒ ๋๋ค.
|
|
68
|
+
*
|
|
69
|
+
* ํ์ ๋๊ธฐ ์ค(`showDelay`)์ด๋ฉด `targetEl` ์ด ์ด๋ฏธ ์ ์์ผ๋ฏ๋ก ๊ทธ ๋๊ธฐ๋ ์ทจ์ํ๋ค โ ๋ค๋ง
|
|
70
|
+
* ์์ง ๋ณด์ด์ง ์์์ผ๋ ์๋นํ์ง๋ ์๋๋ค.
|
|
71
|
+
*/
|
|
62
72
|
private handleDocumentKeydown;
|
|
63
73
|
/**
|
|
64
74
|
* ํ์ฌ ํ์ ์ค์ด๋ฉฐ ์ต์ปค๊ฐ **์ขํ ๊ธฐ๋ฐ ๊ฐ์ ์๋ฆฌ๋จผํธ**์ธ์ง ์ฌ๋ถ.
|
|
@@ -99,6 +99,7 @@ var UPopover = class UPopover extends UFloatingElement {
|
|
|
99
99
|
this.startSafeTimer();
|
|
100
100
|
};
|
|
101
101
|
this.handleDocumentClick = (e) => {
|
|
102
|
+
if (!this.open && !this.targetEl) return;
|
|
102
103
|
if (this.trigger === "contextmenu") {
|
|
103
104
|
this.hide();
|
|
104
105
|
return;
|
|
@@ -110,7 +111,8 @@ var UPopover = class UPopover extends UFloatingElement {
|
|
|
110
111
|
};
|
|
111
112
|
this.handleDocumentKeydown = (e) => {
|
|
112
113
|
if (e.key !== "Escape") return;
|
|
113
|
-
|
|
114
|
+
if (!this.open && !this.targetEl) return;
|
|
115
|
+
if (this.open) e.preventDefault();
|
|
114
116
|
this.hide();
|
|
115
117
|
};
|
|
116
118
|
this.handleDocumentScroll = () => {
|
|
@@ -93,6 +93,7 @@ var URadio = class URadio extends UFormControlElement {
|
|
|
93
93
|
>
|
|
94
94
|
<div class="container" part="container"
|
|
95
95
|
role="radiogroup"
|
|
96
|
+
aria-disabled=${ifDefined(this.disabled ? "true" : void 0)}
|
|
96
97
|
aria-label=${ifDefined(this.resolvedAriaLabel)}
|
|
97
98
|
aria-description=${ifDefined(this.resolvedAriaDescription)}>
|
|
98
99
|
<slot @slotchange=${this.handleSlotChange}></slot>
|
|
@@ -112,6 +112,7 @@ var URating = class URating extends UFormControlElement {
|
|
|
112
112
|
.validationMessage=${this.validationMessage}
|
|
113
113
|
>
|
|
114
114
|
<div class="symbols" part="container" role="radiogroup"
|
|
115
|
+
aria-disabled=${ifDefined(this.disabled ? "true" : void 0)}
|
|
115
116
|
aria-label=${ifDefined(this.resolvedAriaLabel)}
|
|
116
117
|
aria-description=${ifDefined(this.resolvedAriaDescription)}>
|
|
117
118
|
${Array.from({ length: this.max }, (_, i) => {
|
|
@@ -89,6 +89,14 @@ export declare class USelect extends UFormControlElement<string | string[]> {
|
|
|
89
89
|
* updated() ๊ฒฝ๋ก๋ base์ silent setValidity()๋ง ์ํํด Lit ์ค๋ณต ์
๋ฐ์ดํธ๋ฅผ ํผํ๋ค). */
|
|
90
90
|
private emitChange;
|
|
91
91
|
private handleSlotChange;
|
|
92
|
+
/**
|
|
93
|
+
* ๋ชฉ๋ก์ด ๋ซํ ๋ ํฌ์ปค์ค๊ฐ ๊ทธ ยซ์ยป(์ต์
ยท๊ฒ์ ์
๋ ฅ)์ ์์์ผ๋ฉด ์ฝค๋ณด๋ฐ์ค๋ก ๋๋๋ฆฐ๋ค.
|
|
94
|
+
*
|
|
95
|
+
* ๋๋๋ฆฌ์ง ์์ผ๋ฉด ํฌ์ปค์ค๊ฐ ์จ์ ๋ชฉ๋ก ์์ ๋จ๋๋ค โ ํค๋ณด๋ ์ฌ์ฉ์๋ ์๊ธฐ ์์น๋ฅผ ์๊ณ ,
|
|
96
|
+
* ๊ทธ ์ต์
์ ๋ค์ Escape ๊น์ง ๋ฐ์ ์๋นํด ๋ฐ๊นฅ ์ธต(์ค๋ฒ๋ ์ดยท์๋น์ ํจ๋)์ด ๋ซํ์ง ์๋๋ค.
|
|
97
|
+
* ๋ฐ๊นฅ ํด๋ฆญ์ผ๋ก ๋ซํ ๋๋ ํฌ์ปค์ค๊ฐ ์ด๋ฏธ ๋ค๋ฅธ ๊ณณ์ ์์ผ๋ฏ๋ก ๊ฑด๋๋ฆฌ์ง ์๋๋ค.
|
|
98
|
+
*/
|
|
99
|
+
private handlePopoverHide;
|
|
92
100
|
private handleOptionClick;
|
|
93
101
|
private handleOptionKeydown;
|
|
94
102
|
private handleSearchInput;
|
|
@@ -31,6 +31,10 @@ var USelect = class USelect extends UFormControlElement {
|
|
|
31
31
|
this.options = slot.assignedElements({ flatten: true }).filter((el) => el instanceof UOption);
|
|
32
32
|
this.setup(this.options);
|
|
33
33
|
};
|
|
34
|
+
this.handlePopoverHide = () => {
|
|
35
|
+
this.open = false;
|
|
36
|
+
if (this.popoverEl?.matches(":focus-within")) this.containerEl?.focus();
|
|
37
|
+
};
|
|
34
38
|
this.handleOptionClick = (e) => {
|
|
35
39
|
const option = e.currentTarget;
|
|
36
40
|
if (option.disabled) return;
|
|
@@ -173,6 +177,7 @@ var USelect = class USelect extends UFormControlElement {
|
|
|
173
177
|
|
|
174
178
|
<div class="container" part="container" tabindex=${this.disabled ? "-1" : "0"}
|
|
175
179
|
role="combobox"
|
|
180
|
+
aria-disabled=${ifDefined(this.disabled ? "true" : void 0)}
|
|
176
181
|
aria-label=${ifDefined(this.resolvedAriaLabel)}
|
|
177
182
|
aria-description=${ifDefined(this.resolvedAriaDescription)}
|
|
178
183
|
aria-haspopup=${this.searchable ? "dialog" : "listbox"}
|
|
@@ -215,7 +220,7 @@ var USelect = class USelect extends UFormControlElement {
|
|
|
215
220
|
for=".container"
|
|
216
221
|
trigger="click"
|
|
217
222
|
@show=${() => this.open = true}
|
|
218
|
-
@hide=${
|
|
223
|
+
@hide=${this.handlePopoverHide}
|
|
219
224
|
strategy="fixed"
|
|
220
225
|
placement="bottom-start"
|
|
221
226
|
offset="1"
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PropertyValues } from 'lit';
|
|
1
2
|
import { UElement } from '../UElement.js';
|
|
2
3
|
/**
|
|
3
4
|
* ํญ ํจ๋์์ ์ฌ์ฉํ๋ ํญ ์์ดํ
(ํญ ๋ฒํผ) ์ปดํฌ๋ํธ์
๋๋ค.
|
|
@@ -24,6 +25,7 @@ export declare class UTab extends UElement {
|
|
|
24
25
|
/** ํญ ๋๋๊ทธ ์ฌ๋ถ */
|
|
25
26
|
draggable: boolean;
|
|
26
27
|
connectedCallback(): void;
|
|
28
|
+
protected updated(changedProperties: PropertyValues): void;
|
|
27
29
|
render(): import('lit-html').TemplateResult<1>;
|
|
28
30
|
private handleRemoveClick;
|
|
29
31
|
}
|
|
@@ -33,6 +33,13 @@ var UTab = class UTab extends UElement {
|
|
|
33
33
|
this.setAttribute("tabindex", "0");
|
|
34
34
|
if (!this.hasAttribute("slot")) this.setAttribute("slot", "tab");
|
|
35
35
|
}
|
|
36
|
+
updated(changedProperties) {
|
|
37
|
+
super.updated(changedProperties);
|
|
38
|
+
if (changedProperties.has("disabled")) {
|
|
39
|
+
if (this.disabled) this.setAttribute("aria-disabled", "true");
|
|
40
|
+
else this.removeAttribute("aria-disabled");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
36
43
|
render() {
|
|
37
44
|
return html`
|
|
38
45
|
<div class="base" part="base">
|
|
@@ -83,7 +83,11 @@ var UTreeItem = class UTreeItem extends UElement {
|
|
|
83
83
|
}
|
|
84
84
|
updated(changedProperties) {
|
|
85
85
|
super.updated(changedProperties);
|
|
86
|
-
if (changedProperties.has("disabled"))
|
|
86
|
+
if (changedProperties.has("disabled")) {
|
|
87
|
+
this.setAttribute("tabindex", this.disabled ? "-1" : "0");
|
|
88
|
+
if (this.disabled) this.setAttribute("aria-disabled", "true");
|
|
89
|
+
else this.removeAttribute("aria-disabled");
|
|
90
|
+
}
|
|
87
91
|
if (changedProperties.has("depth")) this.style.setProperty("--tree-item-depth", String(this.depth));
|
|
88
92
|
}
|
|
89
93
|
render() {
|
package/dist/styles/dark.css
CHANGED
|
@@ -185,47 +185,6 @@
|
|
|
185
185
|
--u-danger-color-weak: var(--u-red-500);
|
|
186
186
|
--u-danger-color: var(--u-red-600); /* ๋ฉด: ํฐ ๊ธ์ 6.83 โ */
|
|
187
187
|
--u-danger-color-strong: var(--u-red-800); /* ๊ธ์: ๋ฐํ 4.87 โ (700 ์ 3.67 โ) */
|
|
188
|
-
/* ==========================================================================
|
|
189
|
-
Radius Scale โ ๋ชจ์๋ฆฌ ๋ฐ๊ฒฝ
|
|
190
|
-
๋ฆฌํฐ๋ด์ ํฉ๋ฟ๋ฆฌ๋ฉด ๊ฐ์ด ๊ฐ๋ฆฐ๋ค(์ค์ ๋ก pill ์ด 999px/9999px ๋ ํ๊ธฐ๋ก ๋๋์ด ์์๋ค).
|
|
191
|
-
========================================================================== */
|
|
192
|
-
--u-radius-none: 0;
|
|
193
|
-
--u-radius-sm: 3px;
|
|
194
|
-
--u-radius-md: 4px;
|
|
195
|
-
--u-radius-lg: 6px;
|
|
196
|
-
--u-radius-xl: 8px;
|
|
197
|
-
/* โ
์๋จ 2๋จ์ **๋ฉด(surface)์ฉ**์ด๋ค โ ์นด๋ยทํจ๋ยท๋ํ์์์ฒ๋ผ ํฐ ์ฌ๊ฐํ์ ์ปจํธ๋กค๊ณผ
|
|
198
|
-
๊ฐ์ ๋ฐ๊ฒฝ์ ์ฐ๋ฉด ๊ฐ์ ธ ๋ณด์ธ๋ค. ๊ธฐ์กด 5๋จ์ **์ปจํธ๋กค์ฉ**์ด๊ณ ๊ฐ์ ๋ฐ๊พธ์ง ์๋๋ค
|
|
199
|
-
(๋ฐ๊พธ๋ฉด ๋ชจ๋ ์๋น์์ ๋ฒํผยท์
๋ ฅ์ด ๋์์ ์์ง์ธ๋ค). */
|
|
200
|
-
--u-radius-2xl: 12px;
|
|
201
|
-
--u-radius-3xl: 16px;
|
|
202
|
-
--u-radius-pill: 9999px;
|
|
203
|
-
--u-radius-circle: 50%;
|
|
204
|
-
|
|
205
|
-
/* ==========================================================================
|
|
206
|
-
Space Scale โ ์ปจํ
์ด๋ยท์ค๋ฒ๋ ์ด์ ์ ๋ ์ฌ๋ฐฑ
|
|
207
|
-
โ **์ฌ๋ฐฑ์ ํ๋์ ์ถ์ด ์๋๋ค.** ์ด ์ค์ผ์ผ์ ์ปจํ
์ด๋/์ค๋ฒ๋ ์ด์ **๋ ์ด์์ ์ฌ๋ฐฑ**๋ง
|
|
208
|
-
๋ด๋นํ๋ค. ํผยท์ธ๋ผ์ธ ์์์ `em` ์ฌ๋ฐฑ์ ์์๋ `font-size` ์ ๋น๋กํ๋ ๊ฒ์ด ์๋์ด๋ฏ๋ก
|
|
209
|
-
**์ฌ๊ธฐ๋ก ํก์ํ์ง ์๋๋ค.** ๋ฐ๊ฒฝ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ
๋ง์ ๋ฌด๊ดํ๋ฏ๋ก ๋ ์ํธ๊ฐ ๊ฐ๋ค.
|
|
210
|
-
์ถ ๊ตฌ๋ถ๊ณผ ๊ทผ๊ฑฐ๋ docs/design-tokens.md ์ฐธ์กฐ.
|
|
211
|
-
========================================================================== */
|
|
212
|
-
--u-space-3xs: 2px;
|
|
213
|
-
--u-space-2xs: 4px;
|
|
214
|
-
--u-space-xs: 6px;
|
|
215
|
-
--u-space-sm: 8px;
|
|
216
|
-
--u-space-md: 12px;
|
|
217
|
-
--u-space-lg: 16px;
|
|
218
|
-
/* โ
์๋จ 4๋จ์ **ํ๋ฉด ๋ฆฌ๋ฌ**์ด๋ค โ ์นด๋ ์์ชฝ ์ฌ๋ฐฑ(20~24)ยท์น์
๊ฐ๊ฒฉ(24~32)ยทํ์ด์ง ์ฌ๋ฐฑ
|
|
219
|
-
(32~40). ์ข
์ ์๋ ์ด ๊ตฌ๊ฐ์ด ํต์งธ๋ก ๋น์ด ์์ด ์๋น์๊ฐ ์ ๋ถ ๋ฆฌํฐ๋ด๋ก ์ ์๊ณ ,
|
|
220
|
-
๊ทธ๋์ ์ฑ๋ง๋ค ํ๋ฉด ๋ฐ๋๊ฐ ๋ฌ๋ผ์ก๋ค. `lg`(16px) ์ดํ๋ **์์ ์ฌ์ด**, `xl` ์ด์์
|
|
221
|
-
**์์ญ ์ฌ์ด**๋ก ๋๋ ์ด๋ค.
|
|
222
|
-
โ `xs: 6px` ๋ 4px ๊ฒฉ์์์ ๋ฒ์ด๋ ์์ผ๋ **๋ฐ๊พธ์ง ์๋๋ค** โ ์ด๋ฏธ ๋ฐฐ์ ๋ ์ปจํธ๋กค
|
|
223
|
-
์ฌ๋ฐฑ์ด ์ ๋ถ ์์ง์ธ๋ค. ์ ๊ท ๋จ์ ์ ๋ถ 4์ ๋ฐฐ์๋ก ๋๋ค. */
|
|
224
|
-
--u-space-xl: 20px;
|
|
225
|
-
--u-space-2xl: 24px;
|
|
226
|
-
--u-space-3xl: 32px;
|
|
227
|
-
--u-space-4xl: 40px;
|
|
228
|
-
|
|
229
188
|
/* Text Colors */
|
|
230
189
|
--u-txt-color: var(--u-neutral-900);
|
|
231
190
|
--u-txt-color-inverse: var(--u-neutral-100);
|
|
@@ -336,6 +295,64 @@
|
|
|
336
295
|
--u-shadow-xl: 0 6px 18px rgba(0, 0, 0, 0.60), 0 2px 6px rgba(0, 0, 0, 0.30); /* = shadow-color-stronger */
|
|
337
296
|
|
|
338
297
|
|
|
298
|
+
/* Scrollbar Colors */
|
|
299
|
+
--u-scrollbar-color: var(--u-neutral-500);
|
|
300
|
+
--u-scrollbar-color-hover: var(--u-neutral-600);
|
|
301
|
+
--u-scrollbar-track-color: transparent;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/* ==========================================================================
|
|
305
|
+
โ
๋ชจ๋์ ๋ฌด๊ดํ ์ค์ผ์ผ โ ๋ฐ๊ฒฝยท์ฌ๋ฐฑยท๊ธ์ ์ค์ผ์ผยท๋ชจ์
ยท๊ธ๊ผด.
|
|
306
|
+
๊ฐ์ด light.css ์ **๊ฐ๋ค.** ๊ทธ๋ฐ๋ฐ ์ ๋ธ๋ก(`:root[theme="dark"]`, ํน์ด๋ 0,1,1)์ ๋๋ฉด
|
|
307
|
+
`:root`(0,1,0)๋ก ์ด ํ ํฐ์ ๋ฎ๋ **๋ชจ๋ ์ธต**(ํ์ฐ์ค ํ๋ฆฌ์
ยท์๋น์ ๋ธ๋๋ ์ํธ)์ด ๋คํฌ
|
|
308
|
+
๋ชจ๋์์๋ง **๋ก๋ ์์์ ๋ฌด๊ดํ๊ฒ** ์ง๋ค โ ์๋ฌ๋ ๊ฒฝ๊ณ ๋ ์์ด, ์์ ์ ์์ผ๋ก ๋ฐ๋๋ฏ๋ก
|
|
309
|
+
ยซ๋คํฌ๊ฐ ์ ๋๋คยป ๋ก ๋ณด์ธ๋ค. `:where()` ๋ก ํน์ด๋๋ฅผ `:root` ์ ๊ฐ๊ฒ ๋๋ฉด ์ธต ๋ชจ๋ธ์ด ๋ผ์ดํธ์
|
|
310
|
+
๋๊ฐ์ด ๋ก๋ ์์๋ก ์ ๋ค.
|
|
311
|
+
โ ์ด ๋ธ๋ก์ ์ง์ฐ์ง ๋ง ๊ฒ โ ์ด ์ํธ๋ง ์ฐ๋ ยซ๊ณ ์ ๋คํฌ ๋์์ธยป ์๋น์(docs/theming.md)๋
|
|
312
|
+
์ด ํ ํฐ๋ค์ ์ฌ๊ธฐ์ ๋ฐ๋๋ค. ๋ ์ํธ๋ฅผ ํจ๊ป ์ธ ๋๋ ๊ฐ์ด ๊ฐ์ผ๋ฏ๋ก ์ด๋ ์ชฝ์ด ์ด๊ฒจ๋ ๊ฐ๋ค.
|
|
313
|
+
========================================================================== */
|
|
314
|
+
:root:where([theme="dark"]) {
|
|
315
|
+
/* ==========================================================================
|
|
316
|
+
Radius Scale โ ๋ชจ์๋ฆฌ ๋ฐ๊ฒฝ
|
|
317
|
+
๋ฆฌํฐ๋ด์ ํฉ๋ฟ๋ฆฌ๋ฉด ๊ฐ์ด ๊ฐ๋ฆฐ๋ค(์ค์ ๋ก pill ์ด 999px/9999px ๋ ํ๊ธฐ๋ก ๋๋์ด ์์๋ค).
|
|
318
|
+
========================================================================== */
|
|
319
|
+
--u-radius-none: 0;
|
|
320
|
+
--u-radius-sm: 3px;
|
|
321
|
+
--u-radius-md: 4px;
|
|
322
|
+
--u-radius-lg: 6px;
|
|
323
|
+
--u-radius-xl: 8px;
|
|
324
|
+
/* โ
์๋จ 2๋จ์ **๋ฉด(surface)์ฉ**์ด๋ค โ ์นด๋ยทํจ๋ยท๋ํ์์์ฒ๋ผ ํฐ ์ฌ๊ฐํ์ ์ปจํธ๋กค๊ณผ
|
|
325
|
+
๊ฐ์ ๋ฐ๊ฒฝ์ ์ฐ๋ฉด ๊ฐ์ ธ ๋ณด์ธ๋ค. ๊ธฐ์กด 5๋จ์ **์ปจํธ๋กค์ฉ**์ด๊ณ ๊ฐ์ ๋ฐ๊พธ์ง ์๋๋ค
|
|
326
|
+
(๋ฐ๊พธ๋ฉด ๋ชจ๋ ์๋น์์ ๋ฒํผยท์
๋ ฅ์ด ๋์์ ์์ง์ธ๋ค). */
|
|
327
|
+
--u-radius-2xl: 12px;
|
|
328
|
+
--u-radius-3xl: 16px;
|
|
329
|
+
--u-radius-pill: 9999px;
|
|
330
|
+
--u-radius-circle: 50%;
|
|
331
|
+
|
|
332
|
+
/* ==========================================================================
|
|
333
|
+
Space Scale โ ์ปจํ
์ด๋ยท์ค๋ฒ๋ ์ด์ ์ ๋ ์ฌ๋ฐฑ
|
|
334
|
+
โ **์ฌ๋ฐฑ์ ํ๋์ ์ถ์ด ์๋๋ค.** ์ด ์ค์ผ์ผ์ ์ปจํ
์ด๋/์ค๋ฒ๋ ์ด์ **๋ ์ด์์ ์ฌ๋ฐฑ**๋ง
|
|
335
|
+
๋ด๋นํ๋ค. ํผยท์ธ๋ผ์ธ ์์์ `em` ์ฌ๋ฐฑ์ ์์๋ `font-size` ์ ๋น๋กํ๋ ๊ฒ์ด ์๋์ด๋ฏ๋ก
|
|
336
|
+
**์ฌ๊ธฐ๋ก ํก์ํ์ง ์๋๋ค.** ๋ฐ๊ฒฝ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ
๋ง์ ๋ฌด๊ดํ๋ฏ๋ก ๋ ์ํธ๊ฐ ๊ฐ๋ค.
|
|
337
|
+
์ถ ๊ตฌ๋ถ๊ณผ ๊ทผ๊ฑฐ๋ docs/design-tokens.md ์ฐธ์กฐ.
|
|
338
|
+
========================================================================== */
|
|
339
|
+
--u-space-3xs: 2px;
|
|
340
|
+
--u-space-2xs: 4px;
|
|
341
|
+
--u-space-xs: 6px;
|
|
342
|
+
--u-space-sm: 8px;
|
|
343
|
+
--u-space-md: 12px;
|
|
344
|
+
--u-space-lg: 16px;
|
|
345
|
+
/* โ
์๋จ 4๋จ์ **ํ๋ฉด ๋ฆฌ๋ฌ**์ด๋ค โ ์นด๋ ์์ชฝ ์ฌ๋ฐฑ(20~24)ยท์น์
๊ฐ๊ฒฉ(24~32)ยทํ์ด์ง ์ฌ๋ฐฑ
|
|
346
|
+
(32~40). ์ข
์ ์๋ ์ด ๊ตฌ๊ฐ์ด ํต์งธ๋ก ๋น์ด ์์ด ์๋น์๊ฐ ์ ๋ถ ๋ฆฌํฐ๋ด๋ก ์ ์๊ณ ,
|
|
347
|
+
๊ทธ๋์ ์ฑ๋ง๋ค ํ๋ฉด ๋ฐ๋๊ฐ ๋ฌ๋ผ์ก๋ค. `lg`(16px) ์ดํ๋ **์์ ์ฌ์ด**, `xl` ์ด์์
|
|
348
|
+
**์์ญ ์ฌ์ด**๋ก ๋๋ ์ด๋ค.
|
|
349
|
+
โ `xs: 6px` ๋ 4px ๊ฒฉ์์์ ๋ฒ์ด๋ ์์ผ๋ **๋ฐ๊พธ์ง ์๋๋ค** โ ์ด๋ฏธ ๋ฐฐ์ ๋ ์ปจํธ๋กค
|
|
350
|
+
์ฌ๋ฐฑ์ด ์ ๋ถ ์์ง์ธ๋ค. ์ ๊ท ๋จ์ ์ ๋ถ 4์ ๋ฐฐ์๋ก ๋๋ค. */
|
|
351
|
+
--u-space-xl: 20px;
|
|
352
|
+
--u-space-2xl: 24px;
|
|
353
|
+
--u-space-3xl: 32px;
|
|
354
|
+
--u-space-4xl: 40px;
|
|
355
|
+
|
|
339
356
|
/* ==========================================================================
|
|
340
357
|
Type Scale โ ๊ธ์ ํฌ๊ธฐยท๊ตต๊ธฐยทํ๊ฐยท์๊ฐ์ **ํ ๋ฒ**
|
|
341
358
|
โ
**ํฌ๊ธฐ๋ง ์ฃผ๋ฉด ์ค์ผ์ผ์ด ๋์ง ์๋๋ค.** ์๋น์๊ฐ ํฌ๊ธฐ๋ง ๋ฐ๊ณ ๊ตต๊ธฐยทํ๊ฐ์ ๊ฐ์ ์ ํ๋ฉด
|
|
@@ -403,11 +420,6 @@
|
|
|
403
420
|
--u-ease-decelerate: cubic-bezier(0, 0, 0, 1);
|
|
404
421
|
--u-ease-accelerate: cubic-bezier(0.3, 0, 1, 1);
|
|
405
422
|
|
|
406
|
-
/* Scrollbar Colors */
|
|
407
|
-
--u-scrollbar-color: var(--u-neutral-500);
|
|
408
|
-
--u-scrollbar-color-hover: var(--u-neutral-600);
|
|
409
|
-
--u-scrollbar-track-color: transparent;
|
|
410
|
-
|
|
411
423
|
/* ==========================================================================
|
|
412
424
|
Font Styles
|
|
413
425
|
โ
**CJK ํด๋ฐฑ์ ์คํ์ ํฌํจํ๋ค โ ๊ตญ์ ํ์ด์ง ์ทจํฅ์ด ์๋๋ค.**
|
|
@@ -425,4 +437,17 @@
|
|
|
425
437
|
--u-font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;
|
|
426
438
|
--u-font-modern: 'Inter', 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
427
439
|
--u-font-rounded: 'Nunito', 'Quicksand', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
428
|
-
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/* โ
`prefers-reduced-motion` โ light.css ์ ๊ฐ์ ๊ท์น์ ์ด ์ํธ๋ ์ง๋ค. ์ด ์ํธ๋ง ์ฐ๋
|
|
443
|
+
์๋น์๊ฐ ์๊ณ , ๋ ์ํธ๋ฅผ ํจ๊ป ์ธ ๋๋ ์ด๋ ์ํธ๊ฐ ๋ค์ ์ค๋ **๋ง์ง๋ง ์ ์ธ์ด ์ด 0ms**
|
|
444
|
+
๊ฐ ๋๋๋ก ๊ฐ ์ํธ๊ฐ ์๊ธฐ ๋ธ๋ก ๋ค์ ๋๋ค. ์ข
์ ์๋ ์ง์์๊ฐ์ด ์ (0,1,1) ๋ธ๋ก์ ์์ด
|
|
445
|
+
๋คํฌ ๋ชจ๋์์ ยซ๋์ ์ค์ด๊ธฐยป ์ค์ ์ด **๋ฌด์๋๋ค.** */
|
|
446
|
+
@media (prefers-reduced-motion: reduce) {
|
|
447
|
+
:root:where([theme="dark"]) {
|
|
448
|
+
--u-duration-instant: 0ms;
|
|
449
|
+
--u-duration-fast: 0ms;
|
|
450
|
+
--u-duration-normal: 0ms;
|
|
451
|
+
--u-duration-slow: 0ms;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
@@ -22,9 +22,9 @@ export interface DialogOptions {
|
|
|
22
22
|
}
|
|
23
23
|
/** Confirm Dialog ์ต์
*/
|
|
24
24
|
export interface ConfirmDialogOptions extends DialogOptions {
|
|
25
|
-
/** ํ์ธ ๋ฒํผ ํ
์คํธ (๊ธฐ๋ณธ: 'Confirm') */
|
|
25
|
+
/** ํ์ธ ๋ฒํผ ํ
์คํธ (๊ธฐ๋ณธ: ํ์ฌ ๋ก์ผ์ผ์ `confirm` โ ์์ด๋ 'Confirm') */
|
|
26
26
|
confirmLabel?: string;
|
|
27
|
-
/** ์ทจ์ ๋ฒํผ ํ
์คํธ (๊ธฐ๋ณธ: 'Cancel') */
|
|
27
|
+
/** ์ทจ์ ๋ฒํผ ํ
์คํธ (๊ธฐ๋ณธ: ํ์ฌ ๋ก์ผ์ผ์ `cancel` โ ์์ด๋ 'Cancel') */
|
|
28
28
|
cancelLabel?: string;
|
|
29
29
|
}
|
|
30
30
|
/** Prompt Dialog ์ต์
*/
|
package/dist/utilities/Dialog.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import "../components/button/UButton.js";
|
|
2
|
+
import { Locale } from "./Locale.js";
|
|
2
3
|
import { UDialog } from "../components/dialog/UDialog.js";
|
|
3
4
|
import "../components/input/UInput.js";
|
|
4
5
|
import { html, nothing, render } from "lit";
|
|
@@ -29,11 +30,11 @@ var Dialog = class {
|
|
|
29
30
|
...options,
|
|
30
31
|
content: message,
|
|
31
32
|
actions: [{
|
|
32
|
-
label: options?.cancelLabel || "
|
|
33
|
+
label: options?.cancelLabel || Locale.getValue("cancel"),
|
|
33
34
|
value: "cancel",
|
|
34
35
|
variant: "outlined"
|
|
35
36
|
}, {
|
|
36
|
-
label: options?.confirmLabel || "
|
|
37
|
+
label: options?.confirmLabel || Locale.getValue("confirm"),
|
|
37
38
|
value: "confirm"
|
|
38
39
|
}]
|
|
39
40
|
}) === "confirm";
|
|
@@ -68,11 +69,11 @@ var Dialog = class {
|
|
|
68
69
|
</div>
|
|
69
70
|
`,
|
|
70
71
|
actions: [{
|
|
71
|
-
label: options?.cancelLabel || "
|
|
72
|
+
label: options?.cancelLabel || Locale.getValue("cancel"),
|
|
72
73
|
value: "cancel",
|
|
73
74
|
variant: "outlined"
|
|
74
75
|
}, {
|
|
75
|
-
label: options?.confirmLabel || "
|
|
76
|
+
label: options?.confirmLabel || Locale.getValue("confirm"),
|
|
76
77
|
value: "confirm"
|
|
77
78
|
}]
|
|
78
79
|
}) === "confirm" ? inputValue : null;
|
|
@@ -12,7 +12,7 @@ export type SupportedLocale = 'en' | 'ko' | 'ja' | 'zh-CN' | 'zh-TW' | 'es' | 'f
|
|
|
12
12
|
/** ๋ด์ฅ ๋ก์ผ์ผ์ ์๋์์ฑ๋์ง๋ง, ์์์ BCP47 ํ๊ทธ๋ ๊ทธ๋๋ก ๋ฐ๋๋ค. */
|
|
13
13
|
export type LocaleTag = SupportedLocale | (string & {});
|
|
14
14
|
/** ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ chrome ๋ฌธ์์ด ํค. ์ง๊ธ์ ๊ฒ์ฆ ๋ฉ์์ง๋ฟ์ด์ง๋ง ์ดํ ๋ค๋ฅธ UI ๋ฌธ๊ตฌ๋ ์ถ๊ฐ๋ ์ ์๋ค. */
|
|
15
|
-
export type LocaleMessageKey = 'valueMissing' | 'badInput' | 'typeMismatch' | 'patternMismatch' | 'rangeUnderflow' | 'rangeOverflow' | 'stepMismatch' | 'tooShort' | 'tooLong' | 'increment' | 'decrement' | 'clear' | 'today' | 'time' | 'showPassword' | 'hidePassword' | 'previousSlide' | 'nextSlide' | 'goToSlide' | 'chooseDate' | 'previousMonth' | 'nextMonth' | 'close' | 'copy' | 'copied' | 'chooseFile' | 'noFileChosen' | 'filesSelected' | 'resizePanels' | 'breadcrumb' | 'search' | 'alertError' | 'alertWarning' | 'alertSuccess' | 'alertInfo' | 'alertNotice' | 'alertMessage' | 'remove' | 'closeTab';
|
|
15
|
+
export type LocaleMessageKey = 'valueMissing' | 'badInput' | 'typeMismatch' | 'patternMismatch' | 'rangeUnderflow' | 'rangeOverflow' | 'stepMismatch' | 'tooShort' | 'tooLong' | 'increment' | 'decrement' | 'clear' | 'today' | 'time' | 'showPassword' | 'hidePassword' | 'previousSlide' | 'nextSlide' | 'goToSlide' | 'chooseDate' | 'previousMonth' | 'nextMonth' | 'close' | 'copy' | 'copied' | 'chooseFile' | 'noFileChosen' | 'filesSelected' | 'resizePanels' | 'breadcrumb' | 'search' | 'alertError' | 'alertWarning' | 'alertSuccess' | 'alertInfo' | 'alertNotice' | 'alertMessage' | 'remove' | 'closeTab' | 'confirm' | 'cancel';
|
|
16
16
|
type LocaleTable = Record<LocaleMessageKey, string>;
|
|
17
17
|
/**
|
|
18
18
|
* ํ ํจํค์ง(๋๋ ์ฑ ์์ญ)์ ๋ฌธ์์ด ๋ฌถ์.
|
|
@@ -102,6 +102,24 @@ export declare class Theme {
|
|
|
102
102
|
static accent(seed: string | null): void;
|
|
103
103
|
/** ํ์ฌ ์๋๋ฅผ ํ์ฌ ํ
๋ง์ ๋ฐํ์ ๋ง์ถฐ ๋ค์ ๊ณ์ฐํด ์ ์ฉํ๋ค. */
|
|
104
104
|
private static applyAccent;
|
|
105
|
+
/**
|
|
106
|
+
* ๋ด์ฅ ์ํธ๋ฅผ ๋ฃ์ ์๋ฆฌ โ **๋ค๋ฅธ ๋ชจ๋ ์คํ์ผ ยซ์ยป, ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ๋ฃ์ ๊ฒ ยซ๋คยป**.
|
|
107
|
+
*
|
|
108
|
+
* ๐ด**์ ๋งจ ์์ธ๊ฐ.** ์ด ์ํธ๋ค์ ์ด๋ฆ ๊ทธ๋๋ก ยซ๊ธฐ๋ณธ๊ฐยป ์ธต์ด๋ค. ์๋น์(๋๋ ํ์ฐ์ค ํ๋ฆฌ์
)๊ฐ
|
|
109
|
+
* ๊ฐ์ `--u-*` ํ ํฐ์ `:root` ๋ก ๋ฎ์ผ๋ฉด **ํน์ด๋๊ฐ ๋๋ฑ**ํ๋ฏ๋ก ์น๋ถ๋ ๋ฌธ์ ์์๊ฐ ๊ฐ๋ฅธ๋ค โ
|
|
110
|
+
* ๊ทธ๋ฐ๋ฐ ์ด ์ํธ๋ **๋ฐํ์์** ๋ถ๊ณ ์๋น์ ์ํธ๋ ๋ฒ๋ค๋ฌ๊ฐ **ํ์ฑ ์์ ์** ์ฌ๋ฆฌ๋ฏ๋ก,
|
|
111
|
+
* ์ข
์ (`appendChild`)์๋ ***์ธ์ ๋ ๊ธฐ๋ณธ๊ฐ์ด ์ด๊ฒผ๋ค.*** ์๋น์ ์
์ฅ์์๋ ๋ฎ์ด์ฐ๊ธฐ๊ฐ
|
|
112
|
+
* **์ค๋ฅ๋ ๊ฒฝ๊ณ ๋ ์์ด ๋ฌดํจ**๊ฐ ๋๊ณ , ๊ฐ์ด ์ผ๋ถ๋ง ๋ค๋ฅด๋ฉด ใ์ ์ฉ๋ ๊ฒ์ฒ๋ผใ ๋ณด์ด๊ธฐ๊น์ง ํ๋ค.
|
|
113
|
+
*
|
|
114
|
+
* โ **`<meta charset>` ๋ฅ๋ฅผ ๋์ด ๋งจ ์์ผ๋ก ๋ฐ์ง ์๋๋ค** โ ์ฒซ ยซ์คํ์ผยป ์์๋ง ์ ๋ค.
|
|
115
|
+
* ์คํ์ผ์ด ํ๋๋ ์์ผ๋ฉด ๋ถ์ผ ๊ณณ์ด ์์ผ๋ฏ๋ก ๊ทธ๋๋ก ๋์ ๋ฃ๋๋ค(๋ค์ ์ค๋ ๊ฒ์ด ์ด๊ธด๋ค๋
|
|
116
|
+
* ์ฑ์ง์ ๊ทธ๋๋ก๋ค).
|
|
117
|
+
*
|
|
118
|
+
* โ **์ฐ๋ฆฌ ์ํธ๋ผ๋ฆฌ์ ์์๋ ์ ์งํ๋ค** โ ๋งค๋ฒ `firstChild` ์์ ๋ฃ์ผ๋ฉด ๋ฒ๋ค ์์๊ฐ ๋ค์งํ๋ค.
|
|
119
|
+
* ์ค์ ๋ก๋ `light`/`dark` ์ ์๋ ์์๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊พธ์ง ์์ง๋ง(`dark.css` ๋
|
|
120
|
+
* `:root[theme="dark"]` ๋ก **ํน์ด๋๊ฐ ์ด๊ธด๋ค**), ์์๊ฐ ๋ค์งํ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋จ๊ธฐ์ง ์๋๋ค.
|
|
121
|
+
*/
|
|
122
|
+
private static builtInAnchor;
|
|
105
123
|
/** ๋๋ฒ๊ทธ ๋ชจ๋์ ๋ก๊ทธ ์ถ๋ ฅ ํจ์ (์ธ์คํด์ค ์ค์ฝํ) */
|
|
106
124
|
private static log;
|
|
107
125
|
}
|
package/dist/utilities/Theme.js
CHANGED
|
@@ -73,8 +73,8 @@ var Theme = class {
|
|
|
73
73
|
this.log("style already present, skipping", name);
|
|
74
74
|
continue;
|
|
75
75
|
}
|
|
76
|
-
document.head.
|
|
77
|
-
this.log("
|
|
76
|
+
document.head.insertBefore(style, this.builtInAnchor());
|
|
77
|
+
this.log("inserted style at the base layer", name);
|
|
78
78
|
}
|
|
79
79
|
} else {
|
|
80
80
|
document.head.querySelectorAll("style[data-name]").forEach((el) => el.remove());
|
|
@@ -218,6 +218,29 @@ var Theme = class {
|
|
|
218
218
|
for (const [name, value] of Object.entries(accentCustomProperties(ramp))) root.style.setProperty(name, value);
|
|
219
219
|
this.log("accent applied", this.accentSeed, "โ", ramp);
|
|
220
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* ๋ด์ฅ ์ํธ๋ฅผ ๋ฃ์ ์๋ฆฌ โ **๋ค๋ฅธ ๋ชจ๋ ์คํ์ผ ยซ์ยป, ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ๋ฃ์ ๊ฒ ยซ๋คยป**.
|
|
223
|
+
*
|
|
224
|
+
* ๐ด**์ ๋งจ ์์ธ๊ฐ.** ์ด ์ํธ๋ค์ ์ด๋ฆ ๊ทธ๋๋ก ยซ๊ธฐ๋ณธ๊ฐยป ์ธต์ด๋ค. ์๋น์(๋๋ ํ์ฐ์ค ํ๋ฆฌ์
)๊ฐ
|
|
225
|
+
* ๊ฐ์ `--u-*` ํ ํฐ์ `:root` ๋ก ๋ฎ์ผ๋ฉด **ํน์ด๋๊ฐ ๋๋ฑ**ํ๋ฏ๋ก ์น๋ถ๋ ๋ฌธ์ ์์๊ฐ ๊ฐ๋ฅธ๋ค โ
|
|
226
|
+
* ๊ทธ๋ฐ๋ฐ ์ด ์ํธ๋ **๋ฐํ์์** ๋ถ๊ณ ์๋น์ ์ํธ๋ ๋ฒ๋ค๋ฌ๊ฐ **ํ์ฑ ์์ ์** ์ฌ๋ฆฌ๋ฏ๋ก,
|
|
227
|
+
* ์ข
์ (`appendChild`)์๋ ***์ธ์ ๋ ๊ธฐ๋ณธ๊ฐ์ด ์ด๊ฒผ๋ค.*** ์๋น์ ์
์ฅ์์๋ ๋ฎ์ด์ฐ๊ธฐ๊ฐ
|
|
228
|
+
* **์ค๋ฅ๋ ๊ฒฝ๊ณ ๋ ์์ด ๋ฌดํจ**๊ฐ ๋๊ณ , ๊ฐ์ด ์ผ๋ถ๋ง ๋ค๋ฅด๋ฉด ใ์ ์ฉ๋ ๊ฒ์ฒ๋ผใ ๋ณด์ด๊ธฐ๊น์ง ํ๋ค.
|
|
229
|
+
*
|
|
230
|
+
* โ **`<meta charset>` ๋ฅ๋ฅผ ๋์ด ๋งจ ์์ผ๋ก ๋ฐ์ง ์๋๋ค** โ ์ฒซ ยซ์คํ์ผยป ์์๋ง ์ ๋ค.
|
|
231
|
+
* ์คํ์ผ์ด ํ๋๋ ์์ผ๋ฉด ๋ถ์ผ ๊ณณ์ด ์์ผ๋ฏ๋ก ๊ทธ๋๋ก ๋์ ๋ฃ๋๋ค(๋ค์ ์ค๋ ๊ฒ์ด ์ด๊ธด๋ค๋
|
|
232
|
+
* ์ฑ์ง์ ๊ทธ๋๋ก๋ค).
|
|
233
|
+
*
|
|
234
|
+
* โ **์ฐ๋ฆฌ ์ํธ๋ผ๋ฆฌ์ ์์๋ ์ ์งํ๋ค** โ ๋งค๋ฒ `firstChild` ์์ ๋ฃ์ผ๋ฉด ๋ฒ๋ค ์์๊ฐ ๋ค์งํ๋ค.
|
|
235
|
+
* ์ค์ ๋ก๋ `light`/`dark` ์ ์๋ ์์๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊พธ์ง ์์ง๋ง(`dark.css` ๋
|
|
236
|
+
* `:root[theme="dark"]` ๋ก **ํน์ด๋๊ฐ ์ด๊ธด๋ค**), ์์๊ฐ ๋ค์งํ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋จ๊ธฐ์ง ์๋๋ค.
|
|
237
|
+
*/
|
|
238
|
+
static builtInAnchor() {
|
|
239
|
+
const ours = document.head.querySelectorAll("style[data-name]");
|
|
240
|
+
const last = ours[ours.length - 1];
|
|
241
|
+
if (last) return last.nextSibling;
|
|
242
|
+
return document.head.querySelectorAll("style, link[rel~=\"stylesheet\"]")[0] ?? null;
|
|
243
|
+
}
|
|
221
244
|
/** ๋๋ฒ๊ทธ ๋ชจ๋์ ๋ก๊ทธ ์ถ๋ ฅ ํจ์ (์ธ์คํด์ค ์ค์ฝํ) */
|
|
222
245
|
static log(...args) {
|
|
223
246
|
if (this._isDebugMode) console.log("[theme]", ...args);
|
package/package.json
CHANGED
|
@@ -78,6 +78,13 @@ import { UButton, UInput } from '@iyulab/components/react';
|
|
|
78
78
|
- [`u-form`](./references/components/form.md) โ Form group with two-way model binding and validation
|
|
79
79
|
- [`u-option`](./references/components/option.md) โ Selectable option item for `u-select`, `u-radio`, `u-input`
|
|
80
80
|
|
|
81
|
+
**`disabled` is exposed where assistive technology and test tools look for it** โ on the node that
|
|
82
|
+
carries the control's role, not on the host element. Native nodes use native `disabled`
|
|
83
|
+
(`u-input`, `u-textarea`, `u-checkbox`, `u-switch`, `u-file-input`); role nodes get
|
|
84
|
+
`aria-disabled="true"` (the `combobox` of `u-select`/`u-date-picker`, the `radiogroup` of
|
|
85
|
+
`u-radio`/`u-rating`, the `slider` thumbs). In end-to-end tests, locate controls by role
|
|
86
|
+
(`getByRole('combobox')`) rather than by tag, so actionability checks see the disabled state.
|
|
87
|
+
|
|
81
88
|
### Overlay & Floating
|
|
82
89
|
|
|
83
90
|
- [`u-dialog`](./references/components/dialog.md) โ Modal/non-modal dialog with configurable placement
|
|
@@ -62,6 +62,18 @@ Inherits all `UFloatingElement` properties (see [floating.md](../extensions/floa
|
|
|
62
62
|
|
|
63
63
|
`click` and `escape` express user intent and always close the popover.
|
|
64
64
|
|
|
65
|
+
**Only an open popover consumes `Escape`.** When it closes on `Escape` it calls `preventDefault()`;
|
|
66
|
+
a closed popover leaves the event alone. So `event.defaultPrevented` at the document or window
|
|
67
|
+
level reliably means *something above already handled this key* โ use it to decide whether your
|
|
68
|
+
own panel should close:
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
document.addEventListener('keydown', (e) => {
|
|
72
|
+
if (e.key !== 'Escape' || e.defaultPrevented) return; // an open list or popover took it
|
|
73
|
+
closeMyPanel();
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
65
77
|
`scroll` and `resize` are viewport-geometry changes and **only close the popover when it is
|
|
66
78
|
anchored to a coordinate** โ i.e. the virtual anchor created by `trigger="contextmenu"`, whose
|
|
67
79
|
`clientX`/`clientY` stop matching whatever they pointed at once the page reflows.
|
|
@@ -8,7 +8,9 @@ Abstract base class for full-screen or contained overlays (dialogs, drawers, sid
|
|
|
8
8
|
|
|
9
9
|
- **Focus-trap** via `focus-trap` library
|
|
10
10
|
- **Body scroll lock** while open
|
|
11
|
-
- **ESC key** and **backdrop click** close
|
|
11
|
+
- **ESC key** and **backdrop click** close โ an `Escape` that something inside the overlay
|
|
12
|
+
already consumed (`defaultPrevented`, e.g. an open select list closing itself) does not close
|
|
13
|
+
the overlay, so one press closes one layer
|
|
12
14
|
- **OverlayManager** z-index stacking
|
|
13
15
|
|
|
14
16
|
## When to extend
|
|
@@ -55,8 +55,8 @@ interface DialogOptions {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
interface ConfirmDialogOptions extends DialogOptions {
|
|
58
|
-
confirmLabel?: string; // default: 'Confirm'
|
|
59
|
-
cancelLabel?: string; // default: 'Cancel'
|
|
58
|
+
confirmLabel?: string; // default: the active locale's `confirm` (en: 'Confirm')
|
|
59
|
+
cancelLabel?: string; // default: the active locale's `cancel` (en: 'Cancel')
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
interface PromptDialogOptions extends ConfirmDialogOptions {
|
|
@@ -51,6 +51,12 @@ changes**, because those targets are relative to the page background.
|
|
|
51
51
|
> from `--u-primary-color-strong`, so they stay on the default ramp and the brand looks
|
|
52
52
|
> half-applied. (The sheet derives no step from `--u-primary-color` โ measured: 0 references.)
|
|
53
53
|
|
|
54
|
+
> **Load that block however you like โ a plain static `import` is enough.** Since 1.44.0 the
|
|
55
|
+
> built-in sheets are inserted *ahead of* the document's other styles, so your override wins at
|
|
56
|
+
> equal specificity whenever it arrives. Before 1.44.0 they were appended last and a static
|
|
57
|
+
> import silently did nothing; on those versions, load your sheet after `await Theme.init(...)`.
|
|
58
|
+
> Specificity still decides: a `:where(:root)` wrapper drops to 0 and loses regardless of order.
|
|
59
|
+
|
|
54
60
|
## API
|
|
55
61
|
|
|
56
62
|
| Member | Type | Description |
|