@bestow-ui/react 0.12.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/chunk-PFEZ3D2H.js +212 -0
- package/dist/chunk-PFEZ3D2H.js.map +1 -0
- package/dist/client.js +3279 -0
- package/dist/client.js.map +1 -0
- package/dist/index.cjs +748 -575
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +119 -9
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +234 -108
- package/dist/index.d.ts +234 -108
- package/dist/index.js +2 -3507
- package/dist/shared.js +248 -0
- package/dist/shared.js.map +1 -0
- package/package.json +14 -8
- package/dist/index.js.map +0 -1
package/dist/shared.js
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import {
|
|
2
|
+
composeExtraAddress,
|
|
3
|
+
createTheme,
|
|
4
|
+
formatBusinessNumber,
|
|
5
|
+
formatKoreanAmount,
|
|
6
|
+
formatKoreanDate,
|
|
7
|
+
formatPhoneNumber,
|
|
8
|
+
isValidBusinessNumber,
|
|
9
|
+
kakaoPostcodeProvider,
|
|
10
|
+
parseISODate,
|
|
11
|
+
themeClass,
|
|
12
|
+
toISODate,
|
|
13
|
+
vars
|
|
14
|
+
} from "./chunk-PFEZ3D2H.js";
|
|
15
|
+
|
|
16
|
+
// src/theme/color.ts
|
|
17
|
+
import { darkColors, lightColors, palette } from "@bestow-ui/tokens";
|
|
18
|
+
function parseHex(hex) {
|
|
19
|
+
const m = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex.trim());
|
|
20
|
+
if (!m) throw new Error(`\uC62C\uBC14\uB978 hex \uC0C9\uC774 \uC544\uB2C8\uC5D0\uC694: "${hex}" (\uC608: "#7c3aed")`);
|
|
21
|
+
let h = m[1];
|
|
22
|
+
if (h.length === 3) h = h.replace(/./g, (c) => c + c);
|
|
23
|
+
return [0, 2, 4].map((i) => parseInt(h.slice(i, i + 2), 16) / 255);
|
|
24
|
+
}
|
|
25
|
+
function toHex(rgb) {
|
|
26
|
+
return `#${rgb.map(
|
|
27
|
+
(v) => Math.round(Math.min(1, Math.max(0, v)) * 255).toString(16).padStart(2, "0")
|
|
28
|
+
).join("")}`;
|
|
29
|
+
}
|
|
30
|
+
var toLinear = (c) => c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
|
|
31
|
+
var fromLinear = (c) => c <= 31308e-7 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - 0.055;
|
|
32
|
+
function rgbToOklch([r, g, b]) {
|
|
33
|
+
const [lr, lg, lb] = [toLinear(r), toLinear(g), toLinear(b)];
|
|
34
|
+
const l_ = Math.cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);
|
|
35
|
+
const m_ = Math.cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);
|
|
36
|
+
const s_ = Math.cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);
|
|
37
|
+
const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
|
|
38
|
+
const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
|
|
39
|
+
const bb = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
|
|
40
|
+
return { l: L, c: Math.hypot(a, bb), h: Math.atan2(bb, a) };
|
|
41
|
+
}
|
|
42
|
+
function oklchToRgbUnclamped({ l, c, h }) {
|
|
43
|
+
const a = c * Math.cos(h);
|
|
44
|
+
const b = c * Math.sin(h);
|
|
45
|
+
const l_ = (l + 0.3963377774 * a + 0.2158037573 * b) ** 3;
|
|
46
|
+
const m_ = (l - 0.1055613458 * a - 0.0638541728 * b) ** 3;
|
|
47
|
+
const s_ = (l - 0.0894841775 * a - 1.291485548 * b) ** 3;
|
|
48
|
+
return [
|
|
49
|
+
fromLinear(4.0767416621 * l_ - 3.3077115913 * m_ + 0.2309699292 * s_),
|
|
50
|
+
fromLinear(-1.2684380046 * l_ + 2.6097574011 * m_ - 0.3413193965 * s_),
|
|
51
|
+
fromLinear(-0.0041960863 * l_ - 0.7034186147 * m_ + 1.707614701 * s_)
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
var inGamut = (rgb) => rgb.every((v) => v >= -1e-4 && v <= 1 + 1e-4);
|
|
55
|
+
function oklchToRgb(color) {
|
|
56
|
+
const l = Math.min(1, Math.max(0, color.l));
|
|
57
|
+
let rgb = oklchToRgbUnclamped({ ...color, l });
|
|
58
|
+
if (inGamut(rgb)) return rgb;
|
|
59
|
+
let lo = 0;
|
|
60
|
+
let hi = color.c;
|
|
61
|
+
for (let i = 0; i < 20; i++) {
|
|
62
|
+
const mid = (lo + hi) / 2;
|
|
63
|
+
if (inGamut(oklchToRgbUnclamped({ l, c: mid, h: color.h }))) lo = mid;
|
|
64
|
+
else hi = mid;
|
|
65
|
+
}
|
|
66
|
+
rgb = oklchToRgbUnclamped({ l, c: lo, h: color.h });
|
|
67
|
+
return rgb;
|
|
68
|
+
}
|
|
69
|
+
function luminance([r, g, b]) {
|
|
70
|
+
return 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);
|
|
71
|
+
}
|
|
72
|
+
function contrastRatio(a, b) {
|
|
73
|
+
const [la, lb] = [luminance(parseHex(a)), luminance(parseHex(b))];
|
|
74
|
+
return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);
|
|
75
|
+
}
|
|
76
|
+
function blend(fg, alpha, bg) {
|
|
77
|
+
const [f, b] = [parseHex(fg), parseHex(bg)];
|
|
78
|
+
return toHex(f.map((v, i) => v * alpha + b[i] * (1 - alpha)));
|
|
79
|
+
}
|
|
80
|
+
var withL = (base, l, c = base.c) => toHex(oklchToRgb({ l, c, h: base.h }));
|
|
81
|
+
function findReadable(base, startL, step, backgrounds) {
|
|
82
|
+
let l = startL;
|
|
83
|
+
for (let i = 0; i < 40; i++) {
|
|
84
|
+
const hex = withL(base, l);
|
|
85
|
+
if (backgrounds.every((bg) => contrastRatio(hex, bg) >= 4.5)) return hex;
|
|
86
|
+
l = Math.min(1, Math.max(0, l + step));
|
|
87
|
+
}
|
|
88
|
+
return step < 0 ? palette.black : palette.white;
|
|
89
|
+
}
|
|
90
|
+
function hoverFor(base, delta, contrast) {
|
|
91
|
+
const preferred = withL(base, Math.min(1, Math.max(0, base.l + delta)));
|
|
92
|
+
if (contrastRatio(contrast, preferred) >= 4.5) return preferred;
|
|
93
|
+
return withL(base, Math.min(1, Math.max(0, base.l - delta)));
|
|
94
|
+
}
|
|
95
|
+
function solidWithContrast(color) {
|
|
96
|
+
const white = palette.white;
|
|
97
|
+
const dark = palette.gray[900];
|
|
98
|
+
if (contrastRatio(white, color) >= 4.5) return { solid: color, contrast: white };
|
|
99
|
+
if (contrastRatio(dark, color) >= 4.5) return { solid: color, contrast: dark };
|
|
100
|
+
const base = rgbToOklch(parseHex(color));
|
|
101
|
+
for (let delta = 5e-3; delta <= 1; delta += 5e-3) {
|
|
102
|
+
const darker = withL(base, Math.max(0, base.l - delta));
|
|
103
|
+
if (contrastRatio(white, darker) >= 4.5) return { solid: darker, contrast: white };
|
|
104
|
+
const lighter = withL(base, Math.min(1, base.l + delta));
|
|
105
|
+
if (contrastRatio(dark, lighter) >= 4.5) return { solid: lighter, contrast: dark };
|
|
106
|
+
}
|
|
107
|
+
return { solid: palette.black, contrast: white };
|
|
108
|
+
}
|
|
109
|
+
var rgba = (hex, alpha) => {
|
|
110
|
+
const [r, g, b] = parseHex(hex).map((v) => Math.round(v * 255));
|
|
111
|
+
return `rgba(${r}, ${g}, ${b}, ${alpha})`;
|
|
112
|
+
};
|
|
113
|
+
function createIntentColors(intent, color) {
|
|
114
|
+
const input = toHex(parseHex(color));
|
|
115
|
+
const base = rgbToOklch(parseHex(input));
|
|
116
|
+
const lightSubtle = withL(base, 0.97, Math.min(base.c, 0.12) * 0.3);
|
|
117
|
+
const lightSubtleHover = withL(base, 0.93, Math.min(base.c, 0.12) * 0.45);
|
|
118
|
+
const { solid, contrast: lightContrast } = solidWithContrast(input);
|
|
119
|
+
const light = {
|
|
120
|
+
solid,
|
|
121
|
+
solidHover: hoverFor(rgbToOklch(parseHex(solid)), -0.06, lightContrast),
|
|
122
|
+
contrast: lightContrast,
|
|
123
|
+
subtle: lightSubtle,
|
|
124
|
+
subtleHover: lightSubtleHover,
|
|
125
|
+
text: findReadable(base, Math.min(base.l, 0.55), -0.02, [lightColors.bg.default, lightSubtle, lightSubtleHover])
|
|
126
|
+
};
|
|
127
|
+
const darkBg = darkColors.bg.default;
|
|
128
|
+
const { solid: darkSolid, contrast: darkContrast } = solidWithContrast(base.l < 0.5 ? withL(base, 0.55) : input);
|
|
129
|
+
const darkBase = rgbToOklch(parseHex(darkSolid));
|
|
130
|
+
const darkSubtleOnBg = blend(darkSolid, 0.16, darkBg);
|
|
131
|
+
const darkSubtleHoverOnBg = blend(darkSolid, 0.26, darkBg);
|
|
132
|
+
const dark = {
|
|
133
|
+
solid: darkSolid,
|
|
134
|
+
solidHover: hoverFor(darkBase, 0.06, darkContrast),
|
|
135
|
+
contrast: darkContrast,
|
|
136
|
+
subtle: rgba(darkSolid, 0.16),
|
|
137
|
+
subtleHover: rgba(darkSolid, 0.26),
|
|
138
|
+
text: findReadable(darkBase, Math.max(darkBase.l, 0.75), 0.02, [darkBg, darkSubtleOnBg, darkSubtleHoverOnBg])
|
|
139
|
+
};
|
|
140
|
+
const focusOn = (candidate, fallback, bg) => contrastRatio(candidate, bg) >= 3 ? candidate : fallback;
|
|
141
|
+
const focus = intent === "primary" ? {
|
|
142
|
+
light: { border: { focus: focusOn(light.solid, light.text, lightColors.bg.default) } },
|
|
143
|
+
dark: {
|
|
144
|
+
border: { focus: focusOn(withL(darkBase, Math.min(1, darkBase.l + 0.06)), dark.text, darkBg) }
|
|
145
|
+
}
|
|
146
|
+
} : void 0;
|
|
147
|
+
return {
|
|
148
|
+
light: { color: { [intent]: light, ...focus?.light } },
|
|
149
|
+
dark: { color: { [intent]: dark, ...focus?.dark } }
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// src/i18n/en.ts
|
|
154
|
+
var WEEKDAYS_LONG = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
|
|
155
|
+
var MONTHS = [
|
|
156
|
+
"January",
|
|
157
|
+
"February",
|
|
158
|
+
"March",
|
|
159
|
+
"April",
|
|
160
|
+
"May",
|
|
161
|
+
"June",
|
|
162
|
+
"July",
|
|
163
|
+
"August",
|
|
164
|
+
"September",
|
|
165
|
+
"October",
|
|
166
|
+
"November",
|
|
167
|
+
"December"
|
|
168
|
+
];
|
|
169
|
+
var en = {
|
|
170
|
+
close: "Close",
|
|
171
|
+
loading: "Loading",
|
|
172
|
+
notifications: "Notifications",
|
|
173
|
+
breadcrumb: "Breadcrumb",
|
|
174
|
+
pagination: "Pagination",
|
|
175
|
+
paginationPrevious: "Previous page",
|
|
176
|
+
paginationNext: "Next page",
|
|
177
|
+
paginationPage: (page) => `Page ${page}`,
|
|
178
|
+
newWindow: "(opens in a new window)",
|
|
179
|
+
noResults: "No results",
|
|
180
|
+
openList: "Show options",
|
|
181
|
+
clearSelection: "Clear selection",
|
|
182
|
+
skipToContent: "Skip to main content",
|
|
183
|
+
rangeStart: "minimum",
|
|
184
|
+
rangeEnd: "maximum",
|
|
185
|
+
agreeAll: "Agree to all",
|
|
186
|
+
required: "Required",
|
|
187
|
+
optional: "Optional",
|
|
188
|
+
show: "View",
|
|
189
|
+
hide: "Hide",
|
|
190
|
+
verificationCode: "Verification code",
|
|
191
|
+
verificationCodeHint: (length, type) => `Enter the ${length}-${type === "numeric" ? "digit" : "character"} code.`,
|
|
192
|
+
resend: "Resend",
|
|
193
|
+
verificationExpired: "The code has expired. Please request a new one.",
|
|
194
|
+
phoneNumber: "Phone number",
|
|
195
|
+
businessNumber: "Business registration number",
|
|
196
|
+
businessNumberInvalid: "This business registration number is not valid. Please check it again.",
|
|
197
|
+
businessNumberIncomplete: "Enter all 10 digits.",
|
|
198
|
+
amount: "Amount",
|
|
199
|
+
currencyUnit: "KRW",
|
|
200
|
+
address: "Address",
|
|
201
|
+
addressSearch: "Find address",
|
|
202
|
+
addressSearchDescription: "Search by road name, building name, or lot number.",
|
|
203
|
+
postalCode: "Postal code",
|
|
204
|
+
baseAddress: "Address",
|
|
205
|
+
baseAddressPlaceholder: 'Select "Find address" to choose an address',
|
|
206
|
+
detailAddress: "Address line 2",
|
|
207
|
+
detailAddressPlaceholder: "Apartment, suite, unit, etc.",
|
|
208
|
+
addressLoading: "Loading address search",
|
|
209
|
+
addressLoadError: "Could not load address search. Please try again later.",
|
|
210
|
+
previousMonth: "Previous month",
|
|
211
|
+
nextMonth: "Next month",
|
|
212
|
+
monthTitle: (year, month) => `${MONTHS[month - 1]} ${year}`,
|
|
213
|
+
weekdaysShort: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
|
|
214
|
+
weekdaysLong: WEEKDAYS_LONG,
|
|
215
|
+
dayLabel: (date, weekdayLong) => `${date.getDate()}, ${weekdayLong}, ${MONTHS[date.getMonth()]} ${date.getFullYear()}`,
|
|
216
|
+
holiday: "holiday",
|
|
217
|
+
today: "today",
|
|
218
|
+
date: "Date",
|
|
219
|
+
openCalendar: "Choose date",
|
|
220
|
+
calendar: "Calendar",
|
|
221
|
+
dateInvalid: "This date does not exist.",
|
|
222
|
+
dateUnavailable: "This date is not available.",
|
|
223
|
+
dateIncomplete: "Enter the date as YYYY-MM-DD."
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
// src/components/AgreementGroup/agreements.ts
|
|
227
|
+
function hasAllRequiredAgreements(items, value) {
|
|
228
|
+
return items.every((item) => !item.required || value.includes(item.value));
|
|
229
|
+
}
|
|
230
|
+
export {
|
|
231
|
+
composeExtraAddress,
|
|
232
|
+
contrastRatio,
|
|
233
|
+
createIntentColors,
|
|
234
|
+
createTheme,
|
|
235
|
+
en,
|
|
236
|
+
formatBusinessNumber,
|
|
237
|
+
formatKoreanAmount,
|
|
238
|
+
formatKoreanDate,
|
|
239
|
+
formatPhoneNumber,
|
|
240
|
+
hasAllRequiredAgreements,
|
|
241
|
+
isValidBusinessNumber,
|
|
242
|
+
kakaoPostcodeProvider,
|
|
243
|
+
parseISODate,
|
|
244
|
+
themeClass,
|
|
245
|
+
toISODate,
|
|
246
|
+
vars
|
|
247
|
+
};
|
|
248
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme/color.ts","../src/i18n/en.ts","../src/components/AgreementGroup/agreements.ts"],"sourcesContent":["// 대표색 하나로 intent 색 세트를 만드는 색 계산 유틸.\n// OKLCH(사람이 느끼는 밝기에 가까운 색 공간)에서 밝기를 조절하고, WCAG 대비(4.5:1)를 만족하도록 글자색을 찾는다.\nimport { darkColors, lightColors, palette } from '@bestow-ui/tokens';\nimport type { ThemeInput } from './createTheme';\n\ntype Rgb = [number, number, number]; // 0~1, sRGB\ninterface Oklch {\n l: number;\n c: number;\n h: number;\n}\n\nexport function parseHex(hex: string): Rgb {\n const m = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex.trim());\n if (!m) throw new Error(`올바른 hex 색이 아니에요: \"${hex}\" (예: \"#7c3aed\")`);\n let h = m[1]!;\n if (h.length === 3) h = h.replace(/./g, (c) => c + c);\n return [0, 2, 4].map((i) => parseInt(h.slice(i, i + 2), 16) / 255) as Rgb;\n}\n\nexport function toHex(rgb: Rgb): string {\n return `#${rgb\n .map((v) =>\n Math.round(Math.min(1, Math.max(0, v)) * 255)\n .toString(16)\n .padStart(2, '0'),\n )\n .join('')}`;\n}\n\nconst toLinear = (c: number) => (c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4);\nconst fromLinear = (c: number) => (c <= 0.0031308 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - 0.055);\n\nfunction rgbToOklch([r, g, b]: Rgb): Oklch {\n const [lr, lg, lb] = [toLinear(r), toLinear(g), toLinear(b)];\n const l_ = Math.cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);\n const m_ = Math.cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);\n const s_ = Math.cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);\n const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;\n const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;\n const bb = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;\n return { l: L, c: Math.hypot(a, bb), h: Math.atan2(bb, a) };\n}\n\nfunction oklchToRgbUnclamped({ l, c, h }: Oklch): Rgb {\n const a = c * Math.cos(h);\n const b = c * Math.sin(h);\n const l_ = (l + 0.3963377774 * a + 0.2158037573 * b) ** 3;\n const m_ = (l - 0.1055613458 * a - 0.0638541728 * b) ** 3;\n const s_ = (l - 0.0894841775 * a - 1.291485548 * b) ** 3;\n return [\n fromLinear(4.0767416621 * l_ - 3.3077115913 * m_ + 0.2309699292 * s_),\n fromLinear(-1.2684380046 * l_ + 2.6097574011 * m_ - 0.3413193965 * s_),\n fromLinear(-0.0041960863 * l_ - 0.7034186147 * m_ + 1.707614701 * s_),\n ];\n}\n\nconst inGamut = (rgb: Rgb) => rgb.every((v) => v >= -1e-4 && v <= 1 + 1e-4);\n\n/** sRGB 범위를 벗어나면 채도(c)를 줄여 범위 안으로 맞춘다. */\nfunction oklchToRgb(color: Oklch): Rgb {\n const l = Math.min(1, Math.max(0, color.l));\n let rgb = oklchToRgbUnclamped({ ...color, l });\n if (inGamut(rgb)) return rgb;\n let lo = 0;\n let hi = color.c;\n for (let i = 0; i < 20; i++) {\n const mid = (lo + hi) / 2;\n if (inGamut(oklchToRgbUnclamped({ l, c: mid, h: color.h }))) lo = mid;\n else hi = mid;\n }\n rgb = oklchToRgbUnclamped({ l, c: lo, h: color.h });\n return rgb;\n}\n\nfunction luminance([r, g, b]: Rgb): number {\n return 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);\n}\n\n/** WCAG 대비율 (1 ~ 21) */\nexport function contrastRatio(a: string, b: string): number {\n const [la, lb] = [luminance(parseHex(a)), luminance(parseHex(b))];\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n}\n\n/** fg 를 alpha 만큼 bg 위에 겹친 결과 색 */\nfunction blend(fg: string, alpha: number, bg: string): string {\n const [f, b] = [parseHex(fg), parseHex(bg)];\n return toHex(f.map((v, i) => v * alpha + b[i]! * (1 - alpha)) as Rgb);\n}\n\nconst withL = (base: Oklch, l: number, c = base.c) => toHex(oklchToRgb({ l, c, h: base.h }));\n\n/** 대상 배경들 위에서 대비 4.5 를 넘을 때까지 밝기를 step 만큼 옮긴다. */\nfunction findReadable(base: Oklch, startL: number, step: number, backgrounds: string[]): string {\n let l = startL;\n for (let i = 0; i < 40; i++) {\n const hex = withL(base, l);\n if (backgrounds.every((bg) => contrastRatio(hex, bg) >= 4.5)) return hex;\n l = Math.min(1, Math.max(0, l + step));\n }\n return step < 0 ? palette.black : palette.white;\n}\n\n/**\n * solid 의 hover 색: 밝기를 delta 만큼 옮기되, 그 결과에서 글자색(contrast) 대비가 4.5 아래로 떨어지면 반대 방향으로 옮긴다.\n * (예: 다크 모드에서 파란 버튼을 밝게 하면 흰 글자 대비가 떨어지므로 어둡게 한다)\n */\nfunction hoverFor(base: Oklch, delta: number, contrast: string): string {\n const preferred = withL(base, Math.min(1, Math.max(0, base.l + delta)));\n if (contrastRatio(contrast, preferred) >= 4.5) return preferred;\n return withL(base, Math.min(1, Math.max(0, base.l - delta)));\n}\n\n/**\n * solid 배경과 그 위 글자색(contrast). 흰 글자가 4.5 를 넘으면 흰색, 아니면 짙은 글자.\n * 둘 다 4.5 미만인 중간 밝기 색(초록 #059669, 주황 #ea580c 등)은 solid 의 밝기를 가장 적게 옮겨 4.5 를 맞춘다\n * (같은 거리면 어둡게 + 흰 글자를 먼저 고른다).\n */\nfunction solidWithContrast(color: string): { solid: string; contrast: string } {\n const white = palette.white;\n const dark = palette.gray[900];\n if (contrastRatio(white, color) >= 4.5) return { solid: color, contrast: white };\n if (contrastRatio(dark, color) >= 4.5) return { solid: color, contrast: dark };\n const base = rgbToOklch(parseHex(color));\n for (let delta = 0.005; delta <= 1; delta += 0.005) {\n const darker = withL(base, Math.max(0, base.l - delta));\n if (contrastRatio(white, darker) >= 4.5) return { solid: darker, contrast: white };\n const lighter = withL(base, Math.min(1, base.l + delta));\n if (contrastRatio(dark, lighter) >= 4.5) return { solid: lighter, contrast: dark };\n }\n return { solid: palette.black, contrast: white };\n}\n\nconst rgba = (hex: string, alpha: number) => {\n const [r, g, b] = parseHex(hex).map((v) => Math.round(v * 255));\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n};\n\nexport type IntentName = 'primary' | 'neutral' | 'danger' | 'success' | 'warning';\n\n/**\n * 대표색 하나로 intent(primary 등)의 라이트·다크 색 세트를 만든다. 결과는 createTheme 에 넘긴다.\n * - solid 는 넘긴 색을 그대로 쓴다 (다크모드에서 너무 어두우면 조금 밝힌다). 단 흰 글자·짙은 글자 모두\n * 대비 4.5:1 이 안 나오는 중간 밝기 색이면 4.5 가 나올 만큼만 밝기를 옮긴다.\n * - text 와 contrast(solid 위 글자색)는 WCAG AA 대비 4.5:1 을 만족하도록 계산한다.\n * - intent 가 'primary' 면 포커스 링 색(border.focus)도 함께 바꾼다.\n *\n * @example createTheme(createIntentColors('primary', '#7c3aed'))\n */\nexport function createIntentColors(intent: IntentName, color: string): ThemeInput {\n const input = toHex(parseHex(color));\n const base = rgbToOklch(parseHex(input));\n\n // 라이트\n const lightSubtle = withL(base, 0.97, Math.min(base.c, 0.12) * 0.3);\n const lightSubtleHover = withL(base, 0.93, Math.min(base.c, 0.12) * 0.45);\n const { solid, contrast: lightContrast } = solidWithContrast(input);\n const light = {\n solid,\n solidHover: hoverFor(rgbToOklch(parseHex(solid)), -0.06, lightContrast),\n contrast: lightContrast,\n subtle: lightSubtle,\n subtleHover: lightSubtleHover,\n text: findReadable(base, Math.min(base.l, 0.55), -0.02, [lightColors.bg.default, lightSubtle, lightSubtleHover]),\n };\n\n // 다크\n const darkBg = darkColors.bg.default;\n const { solid: darkSolid, contrast: darkContrast } = solidWithContrast(base.l < 0.5 ? withL(base, 0.55) : input);\n const darkBase = rgbToOklch(parseHex(darkSolid));\n const darkSubtleOnBg = blend(darkSolid, 0.16, darkBg);\n const darkSubtleHoverOnBg = blend(darkSolid, 0.26, darkBg);\n const dark = {\n solid: darkSolid,\n solidHover: hoverFor(darkBase, 0.06, darkContrast),\n contrast: darkContrast,\n subtle: rgba(darkSolid, 0.16),\n subtleHover: rgba(darkSolid, 0.26),\n text: findReadable(darkBase, Math.max(darkBase.l, 0.75), 0.02, [darkBg, darkSubtleOnBg, darkSubtleHoverOnBg]),\n };\n\n // primary 는 포커스 링(border.focus)도 브랜드 색을 따라가게 한다. 다크는 어두운 배경에서 잘 보이도록 solid 보다 밝게.\n // 포커스 링은 그래픽이라 배경과 3:1 이상이어야 한다(WCAG 1.4.11). 노랑·하늘색처럼 밝은 색은 라이트에서 미달이므로\n // 그때는 배경 대비 4.5:1 이 보장된 text 색을 쓴다.\n const focusOn = (candidate: string, fallback: string, bg: string) =>\n contrastRatio(candidate, bg) >= 3 ? candidate : fallback;\n const focus =\n intent === 'primary'\n ? {\n light: { border: { focus: focusOn(light.solid, light.text, lightColors.bg.default) } },\n dark: {\n border: { focus: focusOn(withL(darkBase, Math.min(1, darkBase.l + 0.06)), dark.text, darkBg) },\n },\n }\n : undefined;\n\n return {\n light: { color: { [intent]: light, ...focus?.light } },\n dark: { color: { [intent]: dark, ...focus?.dark } },\n } as ThemeInput;\n}\n","import type { BestowMessages } from './LocaleProvider';\n\nconst WEEKDAYS_LONG = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] as const;\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n] as const;\n\n/**\n * 영어 문구. `<LocaleProvider messages={en}>` 로 쓴다. 따로 import 할 때만 번들에 들어간다.\n * 한국 서비스 전용 부품(사업자등록번호 등)의 문구도 영어로 바뀌지만 서식(하이픈 위치 등)은 그대로다.\n */\nexport const en: BestowMessages = {\n close: 'Close',\n loading: 'Loading',\n notifications: 'Notifications',\n breadcrumb: 'Breadcrumb',\n pagination: 'Pagination',\n paginationPrevious: 'Previous page',\n paginationNext: 'Next page',\n paginationPage: (page) => `Page ${page}`,\n newWindow: '(opens in a new window)',\n noResults: 'No results',\n openList: 'Show options',\n clearSelection: 'Clear selection',\n skipToContent: 'Skip to main content',\n rangeStart: 'minimum',\n rangeEnd: 'maximum',\n agreeAll: 'Agree to all',\n required: 'Required',\n optional: 'Optional',\n show: 'View',\n hide: 'Hide',\n verificationCode: 'Verification code',\n verificationCodeHint: (length, type) => `Enter the ${length}-${type === 'numeric' ? 'digit' : 'character'} code.`,\n resend: 'Resend',\n verificationExpired: 'The code has expired. Please request a new one.',\n phoneNumber: 'Phone number',\n businessNumber: 'Business registration number',\n businessNumberInvalid: 'This business registration number is not valid. Please check it again.',\n businessNumberIncomplete: 'Enter all 10 digits.',\n amount: 'Amount',\n currencyUnit: 'KRW',\n address: 'Address',\n addressSearch: 'Find address',\n addressSearchDescription: 'Search by road name, building name, or lot number.',\n postalCode: 'Postal code',\n baseAddress: 'Address',\n baseAddressPlaceholder: 'Select \"Find address\" to choose an address',\n detailAddress: 'Address line 2',\n detailAddressPlaceholder: 'Apartment, suite, unit, etc.',\n addressLoading: 'Loading address search',\n addressLoadError: 'Could not load address search. Please try again later.',\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n monthTitle: (year, month) => `${MONTHS[month - 1]} ${year}`,\n weekdaysShort: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n weekdaysLong: WEEKDAYS_LONG,\n dayLabel: (date, weekdayLong) =>\n `${date.getDate()}, ${weekdayLong}, ${MONTHS[date.getMonth()]} ${date.getFullYear()}`,\n holiday: 'holiday',\n today: 'today',\n date: 'Date',\n openCalendar: 'Choose date',\n calendar: 'Calendar',\n dateInvalid: 'This date does not exist.',\n dateUnavailable: 'This date is not available.',\n dateIncomplete: 'Enter the date as YYYY-MM-DD.',\n};\n","import type { ReactNode } from 'react';\n\n// 서버 컴포넌트에서도 부를 수 있도록 컴포넌트(hook·Radix) 파일과 분리한 순수 타입·함수\n\nexport interface AgreementItem {\n value: string;\n /** 약관 이름 (예: \"서비스 이용약관 동의\") */\n label: ReactNode;\n /** 필수 동의 여부. 이름 앞에 \"필수\"/\"선택\" 이 붙는다 */\n required?: boolean;\n /** 펼쳐서 보여 줄 약관 내용. 있으면 \"보기\" 버튼이 생긴다 */\n content?: ReactNode;\n}\n\n/** 필수 항목에 모두 동의했는지 */\nexport function hasAllRequiredAgreements(items: AgreementItem[], value: string[]): boolean {\n return items.every((item) => !item.required || value.includes(item.value));\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bestow-ui/react",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "React components and theming for BestOW UI — vanilla-extract + Radix, light/dark and brand themes, accessible by default",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bestow-ui",
|
|
@@ -38,11 +38,17 @@
|
|
|
38
38
|
"types": "./dist/index.d.ts",
|
|
39
39
|
"exports": {
|
|
40
40
|
".": {
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
"import": {
|
|
42
|
+
"types": "./dist/index.d.ts",
|
|
43
|
+
"default": "./dist/index.js"
|
|
44
|
+
},
|
|
45
|
+
"require": {
|
|
46
|
+
"types": "./dist/index.d.cts",
|
|
47
|
+
"default": "./dist/index.cjs"
|
|
48
|
+
}
|
|
44
49
|
},
|
|
45
|
-
"./styles.css": "./dist/index.css"
|
|
50
|
+
"./styles.css": "./dist/index.css",
|
|
51
|
+
"./package.json": "./package.json"
|
|
46
52
|
},
|
|
47
53
|
"files": [
|
|
48
54
|
"dist"
|
|
@@ -52,8 +58,8 @@
|
|
|
52
58
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
53
59
|
},
|
|
54
60
|
"dependencies": {
|
|
55
|
-
"@bestow-ui/icons": "^0.1.
|
|
56
|
-
"@bestow-ui/tokens": "^0.
|
|
61
|
+
"@bestow-ui/icons": "^0.1.2",
|
|
62
|
+
"@bestow-ui/tokens": "^1.0.0",
|
|
57
63
|
"@radix-ui/react-accordion": "^1.3.1",
|
|
58
64
|
"@radix-ui/react-avatar": "^1.3.1",
|
|
59
65
|
"@radix-ui/react-dialog": "^1.3.1",
|
|
@@ -89,7 +95,7 @@
|
|
|
89
95
|
"vitest": "^4.0.0"
|
|
90
96
|
},
|
|
91
97
|
"scripts": {
|
|
92
|
-
"build": "tsup",
|
|
98
|
+
"build": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsup",
|
|
93
99
|
"dev": "tsup --watch",
|
|
94
100
|
"test": "vitest run",
|
|
95
101
|
"test:watch": "vitest",
|