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 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: {} }, p = {};
3
+ var T = { exports: {} }, E = {};
3
4
  var F;
4
5
  function re() {
5
- if (F) return p;
6
+ if (F) return E;
6
7
  F = 1;
7
- var c = /* @__PURE__ */ Symbol.for("react.transitional.element"), i = /* @__PURE__ */ Symbol.for("react.fragment");
8
- function f(d, o, s) {
9
- var _ = null;
10
- if (s !== void 0 && (_ = "" + s), o.key !== void 0 && (_ = "" + o.key), "key" in o) {
11
- s = {};
12
- for (var l in o)
13
- l !== "key" && (s[l] = o[l]);
14
- } else s = o;
15
- return o = s.ref, {
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: d,
18
- key: _,
19
- ref: o !== void 0 ? o : null,
20
- props: s
18
+ type: _,
19
+ key: i,
20
+ ref: s !== void 0 ? s : null,
21
+ props: l
21
22
  };
22
23
  }
23
- return p.Fragment = i, p.jsx = f, p.jsxs = f, p;
24
+ return E.Fragment = f, E.jsx = d, E.jsxs = d, E;
24
25
  }
25
- var E = {};
26
- var L;
26
+ var v = {};
27
+ var D;
27
28
  function te() {
28
- return L || (L = 1, process.env.NODE_ENV !== "production" && (function() {
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 h:
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 i(e) {
73
+ function f(e) {
73
74
  return "" + e;
74
75
  }
75
- function f(e) {
76
+ function d(e) {
76
77
  try {
77
- i(e);
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
- ), i(e);
90
+ ), f(e);
90
91
  }
91
92
  }
92
- function d(e) {
93
- if (e === h) return "<>";
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 o() {
104
- var e = x.A;
104
+ function s() {
105
+ var e = j.A;
105
106
  return e === null ? null : e.getOwner();
106
107
  }
107
- function s() {
108
+ function l() {
108
109
  return Error("react-stack-top-frame");
109
110
  }
110
- function _(e) {
111
- if (y.call(e, "key")) {
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 l(e, r) {
118
+ function m(e, r) {
118
119
  function t() {
119
- N || (N = !0, console.error(
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 v() {
130
+ function u() {
130
131
  var e = c(this.type);
131
- return C[e] || (C[e] = !0, console.error(
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 M(e, r, t, a, R, O) {
136
+ function b(e, r, t, a, h, O) {
136
137
  var n = t.ref;
137
138
  return e = {
138
- $$typeof: w,
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: v
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: R
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 S(e, r, t, a, R, O) {
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
- P(n[a]);
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 P(n);
181
- if (y.call(r, "key")) {
181
+ else N(n);
182
+ if (P.call(r, "key")) {
182
183
  n = c(e);
183
- var m = Object.keys(r).filter(function(K) {
184
+ var p = Object.keys(r).filter(function(K) {
184
185
  return K !== "key";
185
186
  });
186
- a = 0 < m.length ? "{key: someKey, " + m.join(": ..., ") + ": ...}" : "{key: someKey}", I[n + a] || (m = 0 < m.length ? "{" + m.join(": ..., ") + ": ...}" : "{}", console.error(
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
- m,
196
+ p,
196
197
  n
197
- ), I[n + a] = !0);
198
+ ), L[n + a] = !0);
198
199
  }
199
- if (n = null, t !== void 0 && (f(t), n = "" + t), _(r) && (f(r.key), n = "" + r.key), "key" in r) {
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 A in r)
202
- A !== "key" && (t[A] = r[A]);
202
+ for (var g in r)
203
+ g !== "key" && (t[g] = r[g]);
203
204
  } else t = r;
204
- return n && l(
205
+ return n && m(
205
206
  t,
206
207
  typeof e == "function" ? e.displayName || e.name || "Unknown" : e
207
- ), M(
208
+ ), b(
208
209
  e,
209
210
  n,
210
211
  t,
211
- o(),
212
- R,
212
+ s(),
213
+ h,
213
214
  O
214
215
  );
215
216
  }
216
- function P(e) {
217
- g(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === k && (e._payload.status === "fulfilled" ? g(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
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 g(e) {
220
- return typeof e == "object" && e !== null && e.$$typeof === w;
220
+ function w(e) {
221
+ return typeof e == "object" && e !== null && e.$$typeof === S;
221
222
  }
222
- var b = ee, w = /* @__PURE__ */ Symbol.for("react.transitional.element"), W = /* @__PURE__ */ Symbol.for("react.portal"), h = /* @__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"), x = b.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, y = Object.prototype.hasOwnProperty, Q = Array.isArray, j = console.createTask ? console.createTask : function() {
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
- b = {
226
+ R = {
226
227
  react_stack_bottom_frame: function(e) {
227
228
  return e();
228
229
  }
229
230
  };
230
- var N, C = {}, Y = b.react_stack_bottom_frame.bind(
231
- b,
232
- s
233
- )(), $ = j(d(s)), I = {};
234
- E.Fragment = h, E.jsx = function(e, r, t) {
235
- var a = 1e4 > x.recentlyCreatedOwnerStacks++;
236
- return S(
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") : Y,
242
- a ? j(d(e)) : $
242
+ a ? Error("react-stack-top-frame") : $,
243
+ a ? y(_(e)) : I
243
244
  );
244
- }, E.jsxs = function(e, r, t) {
245
- var a = 1e4 > x.recentlyCreatedOwnerStacks++;
246
- return S(
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") : Y,
252
- a ? j(d(e)) : $
252
+ a ? Error("react-stack-top-frame") : $,
253
+ a ? y(_(e)) : I
253
254
  );
254
255
  };
255
- })()), E;
256
+ })()), v;
256
257
  }
257
- var D;
258
+ var M;
258
259
  function ae() {
259
- return D || (D = 1, process.env.NODE_ENV === "production" ? T.exports = re() : T.exports = te()), T.exports;
260
+ return M || (M = 1, process.env.NODE_ENV === "production" ? T.exports = re() : T.exports = te()), T.exports;
260
261
  }
261
- var u = ae();
262
+ var o = ae();
262
263
  const ne = ["예상금리", "기간", "금액", "예상이자"];
263
264
  function se({
264
265
  title: c,
265
- description: i,
266
- items: f = [],
267
- tone: d = "default",
268
- onClick: o
266
+ description: f,
267
+ items: d = [],
268
+ tone: _ = "default",
269
+ eligible: s,
270
+ onClick: l
269
271
  }) {
270
- const s = typeof o == "function", _ = new Map(f.map((l) => [l.label, l]));
271
- return /* @__PURE__ */ u.jsxs(
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--${d}`,
275
- role: s ? "button" : void 0,
276
- tabIndex: s ? 0 : void 0,
277
- onClick: o,
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__ */ u.jsxs("header", { className: "pc__header", children: [
280
- /* @__PURE__ */ u.jsx("h3", { className: "pc__title", children: c }),
281
- i ? /* @__PURE__ */ u.jsx("p", { className: "pc__desc", children: i }) : null
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__ */ u.jsx("div", { className: "pc__box", children: /* @__PURE__ */ u.jsx("ul", { className: "pc__list", children: ne.map((l) => {
284
- const v = _.get(l);
285
- return /* @__PURE__ */ u.jsxs("li", { className: "pc__row", children: [
286
- /* @__PURE__ */ u.jsx("span", { className: "pc__label", children: l }),
287
- /* @__PURE__ */ u.jsx(
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${v?.highlight ? " pc__value--highlight" : ""}`,
291
- children: v?.value ?? "-"
293
+ className: `pc__value${b?.highlight ? " pc__value--highlight" : ""}`,
294
+ children: b?.value ?? "-"
292
295
  }
293
296
  )
294
- ] }, l);
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(i,E){typeof exports=="object"&&typeof module<"u"?E(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],E):(i=typeof globalThis<"u"?globalThis:i||self,E(i.WooriProductComponent={},i.React))})(this,(function(i,E){"use strict";var R={exports:{}},b={};var A;function U(){if(A)return b;A=1;var u=Symbol.for("react.transitional.element"),f=Symbol.for("react.fragment");function d(_,o,s){var m=null;if(s!==void 0&&(m=""+s),o.key!==void 0&&(m=""+o.key),"key"in o){s={};for(var l in o)l!=="key"&&(s[l]=o[l])}else s=o;return o=s.ref,{$$typeof:u,type:_,key:m,ref:o!==void 0?o:null,props:s}}return b.Fragment=f,b.jsx=d,b.jsxs=d,b}var v={};var g;function q(){return g||(g=1,process.env.NODE_ENV!=="production"&&(function(){function u(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:u(e.type)||"Memo";case j:r=e._payload,e=e._init;try{return u(e(r))}catch{}}return null}function f(e){return""+e}function d(e){try{f(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),f(e)}}function _(e){if(e===k)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===j)return"<...>";try{var r=u(e);return r?"<"+r+">":"<...>"}catch{return"<...>"}}function o(){var e=O.A;return e===null?null:e.getOwner()}function s(){return Error("react-stack-top-frame")}function m(e){if(I.call(e,"key")){var r=Object.getOwnPropertyDescriptor(e,"key").get;if(r&&r.isReactWarning)return!1}return e.key!==void 0}function l(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 T(){var e=u(this.type);return L[e]||(L[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 G(e,r,t,n,x,P){var a=t.ref;return e={$$typeof:$,type:e,key:r,props:t,_owner:n},(a!==void 0?a:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:T}):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:x}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:P}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function N(e,r,t,n,x,P){var a=r.children;if(a!==void 0)if(n)if(oe(a)){for(n=0;n<a.length;n++)C(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 C(a);if(I.call(r,"key")){a=u(e);var p=Object.keys(r).filter(function(se){return se!=="key"});n=0<p.length?"{key: someKey, "+p.join(": ..., ")+": ...}":"{key: someKey}",W[a+n]||(p=0<p.length?"{"+p.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
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,p,a),W[a+n]=!0)}if(a=null,t!==void 0&&(d(t),a=""+t),m(r)&&(d(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&&l(t,typeof e=="function"?e.displayName||e.name||"Unknown":e),G(e,a,t,o(),x,P)}function C(e){Y(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===j&&(e._payload.status==="fulfilled"?Y(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function Y(e){return typeof e=="object"&&e!==null&&e.$$typeof===$}var h=E,$=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"),j=Symbol.for("react.lazy"),ne=Symbol.for("react.activity"),ae=Symbol.for("react.client.reference"),O=h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,I=Object.prototype.hasOwnProperty,oe=Array.isArray,y=console.createTask?console.createTask:function(){return null};h={react_stack_bottom_frame:function(e){return e()}};var F,L={},D=h.react_stack_bottom_frame.bind(h,s)(),M=y(_(s)),W={};v.Fragment=k,v.jsx=function(e,r,t){var n=1e4>O.recentlyCreatedOwnerStacks++;return N(e,r,t,!1,n?Error("react-stack-top-frame"):D,n?y(_(e)):M)},v.jsxs=function(e,r,t){var n=1e4>O.recentlyCreatedOwnerStacks++;return N(e,r,t,!0,n?Error("react-stack-top-frame"):D,n?y(_(e)):M)}})()),v}var w;function J(){return w||(w=1,process.env.NODE_ENV==="production"?R.exports=U():R.exports=q()),R.exports}var c=J();const V=["예상금리","기간","금액","예상이자"];function z({title:u,description:f,items:d=[],tone:_="default",onClick:o}){const s=typeof o=="function",m=new Map(d.map(l=>[l.label,l]));return c.jsxs("div",{className:`pc pc--${_}`,role:s?"button":void 0,tabIndex:s?0:void 0,onClick:o,children:[c.jsxs("header",{className:"pc__header",children:[c.jsx("h3",{className:"pc__title",children:u}),f?c.jsx("p",{className:"pc__desc",children:f}):null]}),c.jsx("div",{className:"pc__box",children:c.jsx("ul",{className:"pc__list",children:V.map(l=>{const T=m.get(l);return c.jsxs("li",{className:"pc__row",children:[c.jsx("span",{className:"pc__label",children:l}),c.jsx("span",{className:`pc__value${T?.highlight?" pc__value--highlight":""}`,children:T?.value??"-"})]},l)})})})]})}i.ProductCard=z,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})}));
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.2",
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)}