woori-product-component 0.1.2 → 0.1.4
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/LICENSE +21 -0
- package/README.md +7 -0
- package/dist/woori-product-component.js +128 -100
- package/dist/woori-product-component.umd.cjs +3 -2
- package/package.json +4 -2
- package/dist/woori-product-component.css +0 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Woori FISA
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
package/README.md
CHANGED
|
@@ -27,3 +27,10 @@ npm install woori-product-component
|
|
|
27
27
|
# or
|
|
28
28
|
yarn add woori-product-component
|
|
29
29
|
```
|
|
30
|
+
|
|
31
|
+
## Disclaimer
|
|
32
|
+
|
|
33
|
+
This project is intended for **educational and demonstration purposes only**.
|
|
34
|
+
|
|
35
|
+
It is **not affiliated with, endorsed by, or sponsored by Woori Bank**.
|
|
36
|
+
All product names, brands, and trademarks are the property of their respective owners.
|
|
@@ -1,38 +1,39 @@
|
|
|
1
|
+
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(":root{--pc-width: 100%;--pc-max-width: 360px;--pc-min-height: 200px;--color-surface: #ffffff;--color-surface-muted: #f8f9f9;--color-border: #dee2e6;--color-text: #3d4248;--color-text-muted: #80888e;--color-accent: #0b71fe;--color-warning: #e5484d;--color-accent-soft-border: #dee2e6;--radius-card: 20px;--radius-inner: 16px;--space-card-padding: 24px;--space-header-gap: 5px;--space-box-padding: 16px;--space-row-padding-y: 9px;--font-title-size: 18px;--font-title-weight: 700;--font-desc-size: 14px;--font-desc-weight: 400;--font-label-size: 15px;--font-label-weight: 500;--font-value-size: 15px;--font-value-weight: 500;--letter-tight: -.2px;--line-height-desc: 1.4}.pc{display:block;box-sizing:border-box;width:var(--pc-width);max-width:var(--pc-max-width);min-height:var(--pc-min-height);padding:var(--space-card-padding);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-card)}.pc--recommend{border-color:var(--color-accent-soft-border)}.pc[role=button]{cursor:pointer}.pc__header{margin-bottom:var(--space-box-padding)}.pc__title{margin:0;font-size:var(--font-title-size);font-weight:var(--font-title-weight);color:var(--color-text);letter-spacing:var(--letter-tight)}.pc__desc,.pc__label{font-size:var(--font-desc-size);color:var(--color-text-muted)}.pc__desc{margin-top:var(--space-header-gap);line-height:var(--line-height-desc)}.pc__box{padding:var(--space-box-padding);background:var(--color-surface-muted);border-radius:var(--radius-inner)}.pc__list{margin:0;padding:0;list-style:none}.pc__row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-row-padding-y);padding:var(--space-row-padding-y) 0}.pc__value{font-size:var(--font-value-size);font-weight:var(--font-value-weight);color:var(--color-text);letter-spacing:var(--letter-tight);text-align:right}.pc__value--highlight{color:var(--color-accent)}.pc__eligibility{display:flex;align-items:center;gap:var(--space-header-gap);margin-top:10px;color:var(--color-warning)}.pc__eligibility-icon{display:inline-flex}.pc__eligibility-text{font-size:var(--font-desc-size);padding-top:2px}")),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
|
|
1
2
|
import ee from "react";
|
|
2
|
-
var T = { exports: {} },
|
|
3
|
+
var T = { exports: {} }, E = {};
|
|
3
4
|
var F;
|
|
4
5
|
function re() {
|
|
5
|
-
if (F) return
|
|
6
|
+
if (F) return E;
|
|
6
7
|
F = 1;
|
|
7
|
-
var c = /* @__PURE__ */ Symbol.for("react.transitional.element"),
|
|
8
|
-
function
|
|
9
|
-
var
|
|
10
|
-
if (
|
|
11
|
-
|
|
12
|
-
for (var
|
|
13
|
-
|
|
14
|
-
} else
|
|
15
|
-
return
|
|
8
|
+
var c = /* @__PURE__ */ Symbol.for("react.transitional.element"), f = /* @__PURE__ */ Symbol.for("react.fragment");
|
|
9
|
+
function d(_, s, l) {
|
|
10
|
+
var i = null;
|
|
11
|
+
if (l !== void 0 && (i = "" + l), s.key !== void 0 && (i = "" + s.key), "key" in s) {
|
|
12
|
+
l = {};
|
|
13
|
+
for (var m in s)
|
|
14
|
+
m !== "key" && (l[m] = s[m]);
|
|
15
|
+
} else l = s;
|
|
16
|
+
return s = l.ref, {
|
|
16
17
|
$$typeof: c,
|
|
17
|
-
type:
|
|
18
|
-
key:
|
|
19
|
-
ref:
|
|
20
|
-
props:
|
|
18
|
+
type: _,
|
|
19
|
+
key: i,
|
|
20
|
+
ref: s !== void 0 ? s : null,
|
|
21
|
+
props: l
|
|
21
22
|
};
|
|
22
23
|
}
|
|
23
|
-
return
|
|
24
|
+
return E.Fragment = f, E.jsx = d, E.jsxs = d, E;
|
|
24
25
|
}
|
|
25
|
-
var
|
|
26
|
-
var
|
|
26
|
+
var v = {};
|
|
27
|
+
var D;
|
|
27
28
|
function te() {
|
|
28
|
-
return
|
|
29
|
+
return D || (D = 1, process.env.NODE_ENV !== "production" && (function() {
|
|
29
30
|
function c(e) {
|
|
30
31
|
if (e == null) return null;
|
|
31
32
|
if (typeof e == "function")
|
|
32
33
|
return e.$$typeof === Z ? null : e.displayName || e.name || null;
|
|
33
34
|
if (typeof e == "string") return e;
|
|
34
35
|
switch (e) {
|
|
35
|
-
case
|
|
36
|
+
case x:
|
|
36
37
|
return "Fragment";
|
|
37
38
|
case q:
|
|
38
39
|
return "Profiler";
|
|
@@ -69,12 +70,12 @@ function te() {
|
|
|
69
70
|
}
|
|
70
71
|
return null;
|
|
71
72
|
}
|
|
72
|
-
function
|
|
73
|
+
function f(e) {
|
|
73
74
|
return "" + e;
|
|
74
75
|
}
|
|
75
|
-
function
|
|
76
|
+
function d(e) {
|
|
76
77
|
try {
|
|
77
|
-
|
|
78
|
+
f(e);
|
|
78
79
|
var r = !1;
|
|
79
80
|
} catch {
|
|
80
81
|
r = !0;
|
|
@@ -86,11 +87,11 @@ function te() {
|
|
|
86
87
|
r,
|
|
87
88
|
"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
|
|
88
89
|
a
|
|
89
|
-
),
|
|
90
|
+
), f(e);
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
|
-
function
|
|
93
|
-
if (e ===
|
|
93
|
+
function _(e) {
|
|
94
|
+
if (e === x) return "<>";
|
|
94
95
|
if (typeof e == "object" && e !== null && e.$$typeof === k)
|
|
95
96
|
return "<...>";
|
|
96
97
|
try {
|
|
@@ -100,23 +101,23 @@ function te() {
|
|
|
100
101
|
return "<...>";
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
|
-
function
|
|
104
|
-
var e =
|
|
104
|
+
function s() {
|
|
105
|
+
var e = j.A;
|
|
105
106
|
return e === null ? null : e.getOwner();
|
|
106
107
|
}
|
|
107
|
-
function
|
|
108
|
+
function l() {
|
|
108
109
|
return Error("react-stack-top-frame");
|
|
109
110
|
}
|
|
110
|
-
function
|
|
111
|
-
if (
|
|
111
|
+
function i(e) {
|
|
112
|
+
if (P.call(e, "key")) {
|
|
112
113
|
var r = Object.getOwnPropertyDescriptor(e, "key").get;
|
|
113
114
|
if (r && r.isReactWarning) return !1;
|
|
114
115
|
}
|
|
115
116
|
return e.key !== void 0;
|
|
116
117
|
}
|
|
117
|
-
function
|
|
118
|
+
function m(e, r) {
|
|
118
119
|
function t() {
|
|
119
|
-
|
|
120
|
+
C || (C = !0, console.error(
|
|
120
121
|
"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
|
|
121
122
|
r
|
|
122
123
|
));
|
|
@@ -126,23 +127,23 @@ function te() {
|
|
|
126
127
|
configurable: !0
|
|
127
128
|
});
|
|
128
129
|
}
|
|
129
|
-
function
|
|
130
|
+
function u() {
|
|
130
131
|
var e = c(this.type);
|
|
131
|
-
return
|
|
132
|
+
return Y[e] || (Y[e] = !0, console.error(
|
|
132
133
|
"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
|
|
133
134
|
)), e = this.props.ref, e !== void 0 ? e : null;
|
|
134
135
|
}
|
|
135
|
-
function
|
|
136
|
+
function b(e, r, t, a, h, O) {
|
|
136
137
|
var n = t.ref;
|
|
137
138
|
return e = {
|
|
138
|
-
$$typeof:
|
|
139
|
+
$$typeof: S,
|
|
139
140
|
type: e,
|
|
140
141
|
key: r,
|
|
141
142
|
props: t,
|
|
142
143
|
_owner: a
|
|
143
144
|
}, (n !== void 0 ? n : null) !== null ? Object.defineProperty(e, "ref", {
|
|
144
145
|
enumerable: !1,
|
|
145
|
-
get:
|
|
146
|
+
get: u
|
|
146
147
|
}) : Object.defineProperty(e, "ref", { enumerable: !1, value: null }), e._store = {}, Object.defineProperty(e._store, "validated", {
|
|
147
148
|
configurable: !1,
|
|
148
149
|
enumerable: !1,
|
|
@@ -157,7 +158,7 @@ function te() {
|
|
|
157
158
|
configurable: !1,
|
|
158
159
|
enumerable: !1,
|
|
159
160
|
writable: !0,
|
|
160
|
-
value:
|
|
161
|
+
value: h
|
|
161
162
|
}), Object.defineProperty(e, "_debugTask", {
|
|
162
163
|
configurable: !1,
|
|
163
164
|
enumerable: !1,
|
|
@@ -165,25 +166,25 @@ function te() {
|
|
|
165
166
|
value: O
|
|
166
167
|
}), Object.freeze && (Object.freeze(e.props), Object.freeze(e)), e;
|
|
167
168
|
}
|
|
168
|
-
function
|
|
169
|
+
function A(e, r, t, a, h, O) {
|
|
169
170
|
var n = r.children;
|
|
170
171
|
if (n !== void 0)
|
|
171
172
|
if (a)
|
|
172
173
|
if (Q(n)) {
|
|
173
174
|
for (a = 0; a < n.length; a++)
|
|
174
|
-
|
|
175
|
+
N(n[a]);
|
|
175
176
|
Object.freeze && Object.freeze(n);
|
|
176
177
|
} else
|
|
177
178
|
console.error(
|
|
178
179
|
"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
|
|
179
180
|
);
|
|
180
|
-
else
|
|
181
|
-
if (
|
|
181
|
+
else N(n);
|
|
182
|
+
if (P.call(r, "key")) {
|
|
182
183
|
n = c(e);
|
|
183
|
-
var
|
|
184
|
+
var p = Object.keys(r).filter(function(K) {
|
|
184
185
|
return K !== "key";
|
|
185
186
|
});
|
|
186
|
-
a = 0 <
|
|
187
|
+
a = 0 < p.length ? "{key: someKey, " + p.join(": ..., ") + ": ...}" : "{key: someKey}", L[n + a] || (p = 0 < p.length ? "{" + p.join(": ..., ") + ": ...}" : "{}", console.error(
|
|
187
188
|
`A props object containing a "key" prop is being spread into JSX:
|
|
188
189
|
let props = %s;
|
|
189
190
|
<%s {...props} />
|
|
@@ -192,107 +193,134 @@ React keys must be passed directly to JSX without using spread:
|
|
|
192
193
|
<%s key={someKey} {...props} />`,
|
|
193
194
|
a,
|
|
194
195
|
n,
|
|
195
|
-
|
|
196
|
+
p,
|
|
196
197
|
n
|
|
197
|
-
),
|
|
198
|
+
), L[n + a] = !0);
|
|
198
199
|
}
|
|
199
|
-
if (n = null, t !== void 0 && (
|
|
200
|
+
if (n = null, t !== void 0 && (d(t), n = "" + t), i(r) && (d(r.key), n = "" + r.key), "key" in r) {
|
|
200
201
|
t = {};
|
|
201
|
-
for (var
|
|
202
|
-
|
|
202
|
+
for (var g in r)
|
|
203
|
+
g !== "key" && (t[g] = r[g]);
|
|
203
204
|
} else t = r;
|
|
204
|
-
return n &&
|
|
205
|
+
return n && m(
|
|
205
206
|
t,
|
|
206
207
|
typeof e == "function" ? e.displayName || e.name || "Unknown" : e
|
|
207
|
-
),
|
|
208
|
+
), b(
|
|
208
209
|
e,
|
|
209
210
|
n,
|
|
210
211
|
t,
|
|
211
|
-
|
|
212
|
-
|
|
212
|
+
s(),
|
|
213
|
+
h,
|
|
213
214
|
O
|
|
214
215
|
);
|
|
215
216
|
}
|
|
216
|
-
function
|
|
217
|
-
|
|
217
|
+
function N(e) {
|
|
218
|
+
w(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === k && (e._payload.status === "fulfilled" ? w(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
|
|
218
219
|
}
|
|
219
|
-
function
|
|
220
|
-
return typeof e == "object" && e !== null && e.$$typeof ===
|
|
220
|
+
function w(e) {
|
|
221
|
+
return typeof e == "object" && e !== null && e.$$typeof === S;
|
|
221
222
|
}
|
|
222
|
-
var
|
|
223
|
+
var R = ee, S = /* @__PURE__ */ Symbol.for("react.transitional.element"), W = /* @__PURE__ */ Symbol.for("react.portal"), x = /* @__PURE__ */ Symbol.for("react.fragment"), U = /* @__PURE__ */ Symbol.for("react.strict_mode"), q = /* @__PURE__ */ Symbol.for("react.profiler"), J = /* @__PURE__ */ Symbol.for("react.consumer"), V = /* @__PURE__ */ Symbol.for("react.context"), z = /* @__PURE__ */ Symbol.for("react.forward_ref"), G = /* @__PURE__ */ Symbol.for("react.suspense"), X = /* @__PURE__ */ Symbol.for("react.suspense_list"), B = /* @__PURE__ */ Symbol.for("react.memo"), k = /* @__PURE__ */ Symbol.for("react.lazy"), H = /* @__PURE__ */ Symbol.for("react.activity"), Z = /* @__PURE__ */ Symbol.for("react.client.reference"), j = R.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, P = Object.prototype.hasOwnProperty, Q = Array.isArray, y = console.createTask ? console.createTask : function() {
|
|
223
224
|
return null;
|
|
224
225
|
};
|
|
225
|
-
|
|
226
|
+
R = {
|
|
226
227
|
react_stack_bottom_frame: function(e) {
|
|
227
228
|
return e();
|
|
228
229
|
}
|
|
229
230
|
};
|
|
230
|
-
var
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
)(),
|
|
234
|
-
|
|
235
|
-
var a = 1e4 >
|
|
236
|
-
return
|
|
231
|
+
var C, Y = {}, $ = R.react_stack_bottom_frame.bind(
|
|
232
|
+
R,
|
|
233
|
+
l
|
|
234
|
+
)(), I = y(_(l)), L = {};
|
|
235
|
+
v.Fragment = x, v.jsx = function(e, r, t) {
|
|
236
|
+
var a = 1e4 > j.recentlyCreatedOwnerStacks++;
|
|
237
|
+
return A(
|
|
237
238
|
e,
|
|
238
239
|
r,
|
|
239
240
|
t,
|
|
240
241
|
!1,
|
|
241
|
-
a ? Error("react-stack-top-frame") :
|
|
242
|
-
a ?
|
|
242
|
+
a ? Error("react-stack-top-frame") : $,
|
|
243
|
+
a ? y(_(e)) : I
|
|
243
244
|
);
|
|
244
|
-
},
|
|
245
|
-
var a = 1e4 >
|
|
246
|
-
return
|
|
245
|
+
}, v.jsxs = function(e, r, t) {
|
|
246
|
+
var a = 1e4 > j.recentlyCreatedOwnerStacks++;
|
|
247
|
+
return A(
|
|
247
248
|
e,
|
|
248
249
|
r,
|
|
249
250
|
t,
|
|
250
251
|
!0,
|
|
251
|
-
a ? Error("react-stack-top-frame") :
|
|
252
|
-
a ?
|
|
252
|
+
a ? Error("react-stack-top-frame") : $,
|
|
253
|
+
a ? y(_(e)) : I
|
|
253
254
|
);
|
|
254
255
|
};
|
|
255
|
-
})()),
|
|
256
|
+
})()), v;
|
|
256
257
|
}
|
|
257
|
-
var
|
|
258
|
+
var M;
|
|
258
259
|
function ae() {
|
|
259
|
-
return
|
|
260
|
+
return M || (M = 1, process.env.NODE_ENV === "production" ? T.exports = re() : T.exports = te()), T.exports;
|
|
260
261
|
}
|
|
261
|
-
var
|
|
262
|
+
var o = ae();
|
|
262
263
|
const ne = ["예상금리", "기간", "금액", "예상이자"];
|
|
263
264
|
function se({
|
|
264
265
|
title: c,
|
|
265
|
-
description:
|
|
266
|
-
items:
|
|
267
|
-
tone:
|
|
268
|
-
|
|
266
|
+
description: f,
|
|
267
|
+
items: d = [],
|
|
268
|
+
tone: _ = "default",
|
|
269
|
+
eligible: s,
|
|
270
|
+
onClick: l
|
|
269
271
|
}) {
|
|
270
|
-
const
|
|
271
|
-
return /* @__PURE__ */
|
|
272
|
+
const i = typeof l == "function" && s, m = new Map(d.map((u) => [u.label, u]));
|
|
273
|
+
return /* @__PURE__ */ o.jsxs(
|
|
272
274
|
"div",
|
|
273
275
|
{
|
|
274
|
-
className: `pc pc--${
|
|
275
|
-
role:
|
|
276
|
-
tabIndex:
|
|
277
|
-
onClick:
|
|
276
|
+
className: `pc pc--${_}`,
|
|
277
|
+
role: i ? "button" : void 0,
|
|
278
|
+
tabIndex: i ? 0 : void 0,
|
|
279
|
+
onClick: i ? l : void 0,
|
|
280
|
+
"aria-disabled": !s,
|
|
278
281
|
children: [
|
|
279
|
-
/* @__PURE__ */
|
|
280
|
-
/* @__PURE__ */
|
|
281
|
-
|
|
282
|
+
/* @__PURE__ */ o.jsxs("header", { className: "pc__header", children: [
|
|
283
|
+
/* @__PURE__ */ o.jsx("h3", { className: "pc__title", children: c }),
|
|
284
|
+
f ? /* @__PURE__ */ o.jsx("p", { className: "pc__desc", children: f }) : null
|
|
282
285
|
] }),
|
|
283
|
-
/* @__PURE__ */
|
|
284
|
-
const
|
|
285
|
-
return /* @__PURE__ */
|
|
286
|
-
/* @__PURE__ */
|
|
287
|
-
/* @__PURE__ */
|
|
286
|
+
/* @__PURE__ */ o.jsx("div", { className: "pc__box", children: /* @__PURE__ */ o.jsx("ul", { className: "pc__list", children: ne.map((u) => {
|
|
287
|
+
const b = m.get(u);
|
|
288
|
+
return /* @__PURE__ */ o.jsxs("li", { className: "pc__row", children: [
|
|
289
|
+
/* @__PURE__ */ o.jsx("span", { className: "pc__label", children: u }),
|
|
290
|
+
/* @__PURE__ */ o.jsx(
|
|
288
291
|
"span",
|
|
289
292
|
{
|
|
290
|
-
className: `pc__value${
|
|
291
|
-
children:
|
|
293
|
+
className: `pc__value${b?.highlight ? " pc__value--highlight" : ""}`,
|
|
294
|
+
children: b?.value ?? "-"
|
|
292
295
|
}
|
|
293
296
|
)
|
|
294
|
-
] },
|
|
295
|
-
}) }) })
|
|
297
|
+
] }, u);
|
|
298
|
+
}) }) }),
|
|
299
|
+
!s && /* @__PURE__ */ o.jsxs("div", { className: "pc__eligibility", children: [
|
|
300
|
+
/* @__PURE__ */ o.jsx("span", { className: "pc__eligibility-icon", "aria-hidden": "true", children: /* @__PURE__ */ o.jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", children: [
|
|
301
|
+
/* @__PURE__ */ o.jsx(
|
|
302
|
+
"circle",
|
|
303
|
+
{
|
|
304
|
+
cx: "12",
|
|
305
|
+
cy: "12",
|
|
306
|
+
r: "10",
|
|
307
|
+
stroke: "currentColor",
|
|
308
|
+
strokeWidth: "2"
|
|
309
|
+
}
|
|
310
|
+
),
|
|
311
|
+
/* @__PURE__ */ o.jsx(
|
|
312
|
+
"path",
|
|
313
|
+
{
|
|
314
|
+
d: "M12 7v6",
|
|
315
|
+
stroke: "currentColor",
|
|
316
|
+
strokeWidth: "2",
|
|
317
|
+
strokeLinecap: "round"
|
|
318
|
+
}
|
|
319
|
+
),
|
|
320
|
+
/* @__PURE__ */ o.jsx("circle", { cx: "12", cy: "17", r: "1.2", fill: "currentColor" })
|
|
321
|
+
] }) }),
|
|
322
|
+
/* @__PURE__ */ o.jsx("span", { className: "pc__eligibility-text", children: "가입 대상이 아니에요" })
|
|
323
|
+
] })
|
|
296
324
|
]
|
|
297
325
|
}
|
|
298
326
|
);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(":root{--pc-width: 100%;--pc-max-width: 360px;--pc-min-height: 200px;--color-surface: #ffffff;--color-surface-muted: #f8f9f9;--color-border: #dee2e6;--color-text: #3d4248;--color-text-muted: #80888e;--color-accent: #0b71fe;--color-warning: #e5484d;--color-accent-soft-border: #dee2e6;--radius-card: 20px;--radius-inner: 16px;--space-card-padding: 24px;--space-header-gap: 5px;--space-box-padding: 16px;--space-row-padding-y: 9px;--font-title-size: 18px;--font-title-weight: 700;--font-desc-size: 14px;--font-desc-weight: 400;--font-label-size: 15px;--font-label-weight: 500;--font-value-size: 15px;--font-value-weight: 500;--letter-tight: -.2px;--line-height-desc: 1.4}.pc{display:block;box-sizing:border-box;width:var(--pc-width);max-width:var(--pc-max-width);min-height:var(--pc-min-height);padding:var(--space-card-padding);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-card)}.pc--recommend{border-color:var(--color-accent-soft-border)}.pc[role=button]{cursor:pointer}.pc__header{margin-bottom:var(--space-box-padding)}.pc__title{margin:0;font-size:var(--font-title-size);font-weight:var(--font-title-weight);color:var(--color-text);letter-spacing:var(--letter-tight)}.pc__desc,.pc__label{font-size:var(--font-desc-size);color:var(--color-text-muted)}.pc__desc{margin-top:var(--space-header-gap);line-height:var(--line-height-desc)}.pc__box{padding:var(--space-box-padding);background:var(--color-surface-muted);border-radius:var(--radius-inner)}.pc__list{margin:0;padding:0;list-style:none}.pc__row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-row-padding-y);padding:var(--space-row-padding-y) 0}.pc__value{font-size:var(--font-value-size);font-weight:var(--font-value-weight);color:var(--color-text);letter-spacing:var(--letter-tight);text-align:right}.pc__value--highlight{color:var(--color-accent)}.pc__eligibility{display:flex;align-items:center;gap:var(--space-header-gap);margin-top:10px;color:var(--color-warning)}.pc__eligibility-icon{display:inline-flex}.pc__eligibility-text{font-size:var(--font-desc-size);padding-top:2px}")),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
|
|
2
|
+
(function(f,E){typeof exports=="object"&&typeof module<"u"?E(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],E):(f=typeof globalThis<"u"?globalThis:f||self,E(f.WooriProductComponent={},f.React))})(this,(function(f,E){"use strict";var h={exports:{}},b={};var A;function q(){if(A)return b;A=1;var c=Symbol.for("react.transitional.element"),d=Symbol.for("react.fragment");function _(m,s,l){var i=null;if(l!==void 0&&(i=""+l),s.key!==void 0&&(i=""+s.key),"key"in s){l={};for(var p in s)p!=="key"&&(l[p]=s[p])}else l=s;return s=l.ref,{$$typeof:c,type:m,key:i,ref:s!==void 0?s:null,props:l}}return b.Fragment=d,b.jsx=_,b.jsxs=_,b}var R={};var N;function J(){return N||(N=1,process.env.NODE_ENV!=="production"&&(function(){function c(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===ae?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case k:return"Fragment";case H:return"Profiler";case B:return"StrictMode";case ee:return"Suspense";case re:return"SuspenseList";case ne:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case X:return"Portal";case Q:return e.displayName||"Context";case Z:return(e._context.displayName||"Context")+".Consumer";case K:var r=e.render;return e=e.displayName,e||(e=r.displayName||r.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case te:return r=e.displayName||null,r!==null?r:c(e.type)||"Memo";case y:r=e._payload,e=e._init;try{return c(e(r))}catch{}}return null}function d(e){return""+e}function _(e){try{d(e);var r=!1}catch{r=!0}if(r){r=console;var t=r.error,n=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return t.call(r,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",n),d(e)}}function m(e){if(e===k)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===y)return"<...>";try{var r=c(e);return r?"<"+r+">":"<...>"}catch{return"<...>"}}function s(){var e=O.A;return e===null?null:e.getOwner()}function l(){return Error("react-stack-top-frame")}function i(e){if(L.call(e,"key")){var r=Object.getOwnPropertyDescriptor(e,"key").get;if(r&&r.isReactWarning)return!1}return e.key!==void 0}function p(e,r){function t(){F||(F=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",r))}t.isReactWarning=!0,Object.defineProperty(e,"key",{get:t,configurable:!0})}function u(){var e=c(this.type);return M[e]||(M[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function T(e,r,t,n,j,P){var a=t.ref;return e={$$typeof:I,type:e,key:r,props:t,_owner:n},(a!==void 0?a:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:u}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:j}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:P}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function C(e,r,t,n,j,P){var a=r.children;if(a!==void 0)if(n)if(oe(a)){for(n=0;n<a.length;n++)Y(a[n]);Object.freeze&&Object.freeze(a)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else Y(a);if(L.call(r,"key")){a=c(e);var v=Object.keys(r).filter(function(se){return se!=="key"});n=0<v.length?"{key: someKey, "+v.join(": ..., ")+": ...}":"{key: someKey}",U[a+n]||(v=0<v.length?"{"+v.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
2
3
|
let props = %s;
|
|
3
4
|
<%s {...props} />
|
|
4
5
|
React keys must be passed directly to JSX without using spread:
|
|
5
6
|
let props = %s;
|
|
6
|
-
<%s key={someKey} {...props} />`,n,a,
|
|
7
|
+
<%s key={someKey} {...props} />`,n,a,v,a),U[a+n]=!0)}if(a=null,t!==void 0&&(_(t),a=""+t),i(r)&&(_(r.key),a=""+r.key),"key"in r){t={};for(var S in r)S!=="key"&&(t[S]=r[S])}else t=r;return a&&p(t,typeof e=="function"?e.displayName||e.name||"Unknown":e),T(e,a,t,s(),j,P)}function Y(e){$(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===y&&(e._payload.status==="fulfilled"?$(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function $(e){return typeof e=="object"&&e!==null&&e.$$typeof===I}var x=E,I=Symbol.for("react.transitional.element"),X=Symbol.for("react.portal"),k=Symbol.for("react.fragment"),B=Symbol.for("react.strict_mode"),H=Symbol.for("react.profiler"),Z=Symbol.for("react.consumer"),Q=Symbol.for("react.context"),K=Symbol.for("react.forward_ref"),ee=Symbol.for("react.suspense"),re=Symbol.for("react.suspense_list"),te=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),ne=Symbol.for("react.activity"),ae=Symbol.for("react.client.reference"),O=x.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,L=Object.prototype.hasOwnProperty,oe=Array.isArray,g=console.createTask?console.createTask:function(){return null};x={react_stack_bottom_frame:function(e){return e()}};var F,M={},W=x.react_stack_bottom_frame.bind(x,l)(),D=g(m(l)),U={};R.Fragment=k,R.jsx=function(e,r,t){var n=1e4>O.recentlyCreatedOwnerStacks++;return C(e,r,t,!1,n?Error("react-stack-top-frame"):W,n?g(m(e)):D)},R.jsxs=function(e,r,t){var n=1e4>O.recentlyCreatedOwnerStacks++;return C(e,r,t,!0,n?Error("react-stack-top-frame"):W,n?g(m(e)):D)}})()),R}var w;function V(){return w||(w=1,process.env.NODE_ENV==="production"?h.exports=q():h.exports=J()),h.exports}var o=V();const z=["예상금리","기간","금액","예상이자"];function G({title:c,description:d,items:_=[],tone:m="default",eligible:s,onClick:l}){const i=typeof l=="function"&&s,p=new Map(_.map(u=>[u.label,u]));return o.jsxs("div",{className:`pc pc--${m}`,role:i?"button":void 0,tabIndex:i?0:void 0,onClick:i?l:void 0,"aria-disabled":!s,children:[o.jsxs("header",{className:"pc__header",children:[o.jsx("h3",{className:"pc__title",children:c}),d?o.jsx("p",{className:"pc__desc",children:d}):null]}),o.jsx("div",{className:"pc__box",children:o.jsx("ul",{className:"pc__list",children:z.map(u=>{const T=p.get(u);return o.jsxs("li",{className:"pc__row",children:[o.jsx("span",{className:"pc__label",children:u}),o.jsx("span",{className:`pc__value${T?.highlight?" pc__value--highlight":""}`,children:T?.value??"-"})]},u)})})}),!s&&o.jsxs("div",{className:"pc__eligibility",children:[o.jsx("span",{className:"pc__eligibility-icon","aria-hidden":"true",children:o.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[o.jsx("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"2"}),o.jsx("path",{d:"M12 7v6",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"}),o.jsx("circle",{cx:"12",cy:"17",r:"1.2",fill:"currentColor"})]})}),o.jsx("span",{className:"pc__eligibility-text",children:"가입 대상이 아니에요"})]})]})}f.ProductCard=G,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})}));
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "woori-product-component",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"private": false,
|
|
5
|
+
"license": "MIT",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"files": [
|
|
7
8
|
"dist"
|
|
@@ -32,6 +33,7 @@
|
|
|
32
33
|
"eslint-plugin-react-hooks": "^7.0.1",
|
|
33
34
|
"eslint-plugin-react-refresh": "^0.4.24",
|
|
34
35
|
"globals": "^16.5.0",
|
|
35
|
-
"vite": "^7.2.4"
|
|
36
|
+
"vite": "^7.2.4",
|
|
37
|
+
"vite-plugin-css-injected-by-js": "^3.5.2"
|
|
36
38
|
}
|
|
37
39
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root{--pc-width: 100%;--pc-max-width: 360px;--pc-min-height: 200px;--color-surface: #ffffff;--color-surface-muted: #f8f9f9;--color-border: #dee2e6;--color-text: #3d4248;--color-text-muted: #80888e;--color-accent: #0b71fe;--color-accent-soft-border: #dee2e6;--radius-card: 20px;--radius-inner: 16px;--space-card-padding: 24px;--space-header-gap: 5px;--space-box-padding: 16px;--space-row-padding-y: 9px;--font-title-size: 17px;--font-title-weight: 600;--font-desc-size: 14px;--font-desc-weight: 400;--font-label-size: 15px;--font-label-weight: 500;--font-value-size: 15px;--font-value-weight: 500;--letter-tight: -.2px;--line-height-desc: 1.4}.pc{display:block;box-sizing:border-box;width:var(--pc-width);max-width:var(--pc-max-width);min-height:var(--pc-min-height);padding:var(--space-card-padding);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-card)}.pc--recommend{border-color:var(--color-accent-soft-border)}.pc[role=button]{cursor:pointer}.pc__header{margin-bottom:var(--space-box-padding)}.pc__title{margin:0;font-size:var(--font-title-size);font-weight:var(--font-title-weight);color:var(--color-text);letter-spacing:var(--letter-tight)}.pc__desc,.pc__label{font-size:var(--font-desc-size);color:var(--color-text-muted)}.pc__desc{margin-top:var(--space-header-gap);line-height:var(--line-height-desc)}.pc__box{padding:var(--space-box-padding);background:var(--color-surface-muted);border-radius:var(--radius-inner)}.pc__list{margin:0;padding:0;list-style:none}.pc__row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-row-padding-y);padding:var(--space-row-padding-y) 0}.pc__value{font-size:var(--font-value-size);font-weight:var(--font-value-weight);color:var(--color-text);letter-spacing:var(--letter-tight);text-align:right}.pc__value--highlight{color:var(--color-accent)}
|