@yeongseoksong/framework 1.0.1 → 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/dist/ui/index.mjs CHANGED
@@ -35,6 +35,16 @@ var __objRest = (source, exclude) => {
35
35
  import Image from "next/image";
36
36
  import Link from "next/link";
37
37
  import { rem, useProps, useMantineTheme } from "@mantine/core";
38
+
39
+ // util/env.util.ts
40
+ var _a;
41
+ var COMPANY_NAME = (_a = process.env.NEXT_PUBLIC_COMPANY_NAME) != null ? _a : "";
42
+ var _a2;
43
+ var LOGO_SRC = (_a2 = process.env.NEXT_PUBLIC_LOGO_SRC) != null ? _a2 : "/logo.svg";
44
+ var _a3;
45
+ var LOGO_ALT = (_a3 = process.env.NEXT_PUBLIC_LOGO_ALT) != null ? _a3 : "\uB85C\uACE0";
46
+
47
+ // ui/atom/Logo.tsx
38
48
  import { jsx } from "react/jsx-runtime";
39
49
  function Logo(_props) {
40
50
  const { size } = useProps("Logo", { size: "md" }, _props);
@@ -43,8 +53,8 @@ function Logo(_props) {
43
53
  return /* @__PURE__ */ jsx(Link, { href: "/", style: { display: "inline-flex", alignItems: "center" }, children: /* @__PURE__ */ jsx(
44
54
  Image,
45
55
  {
46
- src: "/logo.svg",
47
- alt: "\uB85C\uACE0",
56
+ src: LOGO_SRC,
57
+ alt: LOGO_ALT,
48
58
  width: resolved.width,
49
59
  height: resolved.height,
50
60
  style: {
@@ -63,19 +73,19 @@ import { Box, Tabs } from "@mantine/core";
63
73
  // ui/atom/Container.tsx
64
74
  import { Container } from "@mantine/core";
65
75
  import { jsx as jsx2 } from "react/jsx-runtime";
66
- function SdContainer(_a) {
67
- var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
76
+ function SdContainer(_a4) {
77
+ var _b = _a4, { children } = _b, props = __objRest(_b, ["children"]);
68
78
  return /* @__PURE__ */ jsx2(Container, __spreadProps(__spreadValues({ px: { base: "md", sm: "xl" } }, props), { children }));
69
79
  }
70
80
 
71
81
  // ui/atom/Tabs.tsx
72
82
  import { jsx as jsx3 } from "react/jsx-runtime";
73
- function SdPanel(_a) {
74
- var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
83
+ function SdPanel(_a4) {
84
+ var _b = _a4, { children } = _b, props = __objRest(_b, ["children"]);
75
85
  return /* @__PURE__ */ jsx3(Tabs.Panel, __spreadProps(__spreadValues({}, props), { children: /* @__PURE__ */ jsx3(SdContainer, { py: "xl", children }) }));
76
86
  }
77
- function SdScrollableList(_a) {
78
- var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
87
+ function SdScrollableList(_a4) {
88
+ var _b = _a4, { children } = _b, props = __objRest(_b, ["children"]);
79
89
  return /* @__PURE__ */ jsx3(Box, { style: { overflowX: "auto", width: "100%" }, children: /* @__PURE__ */ jsx3(Tabs.List, __spreadProps(__spreadValues({}, props), { children })) });
80
90
  }
81
91
  function createTabs(defaults, scrollable = false) {
@@ -134,16 +144,15 @@ import { Title as MantineTitle } from "@mantine/core";
134
144
 
135
145
  // util/text.util.ts
136
146
  var COMPANY_TOKEN = "%c";
137
- var companyName = "UKNOWN";
138
147
  function t(text) {
139
- return text.replaceAll(COMPANY_TOKEN, companyName);
148
+ return text.replaceAll(COMPANY_TOKEN, COMPANY_NAME);
140
149
  }
141
150
 
142
151
  // ui/atom/Title.tsx
143
152
  import { jsx as jsx4 } from "react/jsx-runtime";
144
153
  function createTitle(defaults) {
145
- return function SdTitle2(_a) {
146
- var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
154
+ return function SdTitle2(_a4) {
155
+ var _b = _a4, { children } = _b, props = __objRest(_b, ["children"]);
147
156
  const resolved = typeof children === "string" ? t(children) : children;
148
157
  return /* @__PURE__ */ jsx4(MantineTitle, __spreadProps(__spreadValues(__spreadValues({}, defaults), props), { children: resolved }));
149
158
  };
@@ -163,8 +172,8 @@ var SdTitle = {
163
172
  import { Text as MantineText } from "@mantine/core";
164
173
  import { jsx as jsx5 } from "react/jsx-runtime";
165
174
  function createText(defaults) {
166
- return function SdText2(_a) {
167
- var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
175
+ return function SdText2(_a4) {
176
+ var _b = _a4, { children } = _b, props = __objRest(_b, ["children"]);
168
177
  const resolved = typeof children === "string" ? t(children) : children;
169
178
  return /* @__PURE__ */ jsx5(MantineText, __spreadProps(__spreadValues(__spreadValues({}, defaults), props), { children: resolved }));
170
179
  };
@@ -184,8 +193,8 @@ import { Button as MantineButton } from "@mantine/core";
184
193
  import { IconTrash, IconX } from "@tabler/icons-react";
185
194
  import { jsx as jsx6 } from "react/jsx-runtime";
186
195
  function createButton(defaults) {
187
- return function SdButton2(_a) {
188
- var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
196
+ return function SdButton2(_a4) {
197
+ var _b = _a4, { children } = _b, props = __objRest(_b, ["children"]);
189
198
  return /* @__PURE__ */ jsx6(MantineButton, __spreadProps(__spreadValues(__spreadValues({}, defaults), props), { children }));
190
199
  };
191
200
  }
@@ -228,12 +237,12 @@ function QuoteInner({ lines, name, role }) {
228
237
  ] })
229
238
  ] });
230
239
  }
231
- function Plain(_a) {
232
- var _b = _a, { lines, name, role } = _b, boxProps = __objRest(_b, ["lines", "name", "role"]);
240
+ function Plain(_a4) {
241
+ var _b = _a4, { lines, name, role } = _b, boxProps = __objRest(_b, ["lines", "name", "role"]);
233
242
  return /* @__PURE__ */ jsx7(Center, { children: /* @__PURE__ */ jsx7(Box2, __spreadProps(__spreadValues({ w: "fit-content" }, boxProps), { children: /* @__PURE__ */ jsx7(QuoteInner, { lines, name, role }) })) });
234
243
  }
235
- function CardQuote(_a) {
236
- var _b = _a, { lines, name, role } = _b, boxProps = __objRest(_b, ["lines", "name", "role"]);
244
+ function CardQuote(_a4) {
245
+ var _b = _a4, { lines, name, role } = _b, boxProps = __objRest(_b, ["lines", "name", "role"]);
237
246
  return /* @__PURE__ */ jsx7(Center, { children: /* @__PURE__ */ jsx7(Card, __spreadProps(__spreadValues({ w: "fit-content" }, boxProps), { children: /* @__PURE__ */ jsx7(QuoteInner, { lines, name, role }) })) });
238
247
  }
239
248
  var SdQuote = {
@@ -264,12 +273,12 @@ var base = {
264
273
  verticalSpacing: "sm",
265
274
  horizontalSpacing: "md"
266
275
  };
267
- function SpecTh(_a) {
268
- var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
276
+ function SpecTh(_a4) {
277
+ var _b = _a4, { children } = _b, props = __objRest(_b, ["children"]);
269
278
  return /* @__PURE__ */ jsx8(Table.Th, __spreadProps(__spreadValues({}, props), { children: /* @__PURE__ */ jsx8(SdText.Strong, { c: "white", children }) }));
270
279
  }
271
- function SpecTd(_a) {
272
- var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
280
+ function SpecTd(_a4) {
281
+ var _b = _a4, { children } = _b, props = __objRest(_b, ["children"]);
273
282
  return /* @__PURE__ */ jsx8(Table.Td, __spreadProps(__spreadValues({}, props), { children: /* @__PURE__ */ jsx8(SdText.Body, { children }) }));
274
283
  }
275
284
  var Spec = createTable(__spreadProps(__spreadValues({}, base), {
@@ -309,8 +318,8 @@ var SdModal = createModal({
309
318
  // ui/atom/NumberIcon.tsx
310
319
  import { ThemeIcon } from "@mantine/core";
311
320
  import { jsx as jsx10 } from "react/jsx-runtime";
312
- function SdNumberIcon(_a) {
313
- var _b = _a, { value, size = 48, radius = "xl", color = "primary" } = _b, props = __objRest(_b, ["value", "size", "radius", "color"]);
321
+ function SdNumberIcon(_a4) {
322
+ var _b = _a4, { value, size = 48, radius = "xl", color = "primary" } = _b, props = __objRest(_b, ["value", "size", "radius", "color"]);
314
323
  return /* @__PURE__ */ jsx10(ThemeIcon, __spreadProps(__spreadValues({ size, radius, color }, props), { children: /* @__PURE__ */ jsx10(SdText.Strong, { c: "white", children: value }) }));
315
324
  }
316
325
 
@@ -318,8 +327,8 @@ function SdNumberIcon(_a) {
318
327
  import { Badge as MantineBadge } from "@mantine/core";
319
328
  import { jsx as jsx11 } from "react/jsx-runtime";
320
329
  function createBadge(defaults) {
321
- return function SdBadge2(_a) {
322
- var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
330
+ return function SdBadge2(_a4) {
331
+ var _b = _a4, { children } = _b, props = __objRest(_b, ["children"]);
323
332
  return /* @__PURE__ */ jsx11(MantineBadge, __spreadProps(__spreadValues(__spreadValues({}, defaults), props), { children }));
324
333
  };
325
334
  }
@@ -343,26 +352,26 @@ import {
343
352
  } from "@mantine/core";
344
353
  import { jsx as jsx12 } from "react/jsx-runtime";
345
354
  function createTextInput(defaults) {
346
- return function SdInput2(_a) {
347
- var props = __objRest(_a, []);
355
+ return function SdInput2(_a4) {
356
+ var props = __objRest(_a4, []);
348
357
  return /* @__PURE__ */ jsx12(TextInput, __spreadValues(__spreadValues({}, defaults), props));
349
358
  };
350
359
  }
351
360
  function createTextarea(defaults) {
352
- return function SdInputTextarea(_a) {
353
- var props = __objRest(_a, []);
361
+ return function SdInputTextarea(_a4) {
362
+ var props = __objRest(_a4, []);
354
363
  return /* @__PURE__ */ jsx12(Textarea, __spreadValues(__spreadValues({}, defaults), props));
355
364
  };
356
365
  }
357
366
  function createPasswordInput(defaults) {
358
- return function SdInputPassword(_a) {
359
- var props = __objRest(_a, []);
367
+ return function SdInputPassword(_a4) {
368
+ var props = __objRest(_a4, []);
360
369
  return /* @__PURE__ */ jsx12(PasswordInput, __spreadValues(__spreadValues({}, defaults), props));
361
370
  };
362
371
  }
363
372
  function createSelect(defaults) {
364
- return function SdInputSelect(_a) {
365
- var props = __objRest(_a, []);
373
+ return function SdInputSelect(_a4) {
374
+ var props = __objRest(_a4, []);
366
375
  return /* @__PURE__ */ jsx12(Select, __spreadValues(__spreadValues({}, defaults), props));
367
376
  };
368
377
  }
@@ -382,20 +391,20 @@ var SdInput = {
382
391
  // ui/atom/Skeleton.tsx
383
392
  import { Box as Box3, Skeleton as MantineSkeleton, Stack as Stack2 } from "@mantine/core";
384
393
  import { jsx as jsx13, jsxs as jsxs2 } from "react/jsx-runtime";
385
- function SkeletonText(_a) {
386
- var _b = _a, { width = "100%" } = _b, props = __objRest(_b, ["width"]);
394
+ function SkeletonText(_a4) {
395
+ var _b = _a4, { width = "100%" } = _b, props = __objRest(_b, ["width"]);
387
396
  return /* @__PURE__ */ jsx13(MantineSkeleton, __spreadValues({ height: 14, width, radius: "sm" }, props));
388
397
  }
389
- function SkeletonTitle(_a) {
390
- var _b = _a, { width = "60%" } = _b, props = __objRest(_b, ["width"]);
398
+ function SkeletonTitle(_a4) {
399
+ var _b = _a4, { width = "60%" } = _b, props = __objRest(_b, ["width"]);
391
400
  return /* @__PURE__ */ jsx13(MantineSkeleton, __spreadValues({ height: 20, width, radius: "sm" }, props));
392
401
  }
393
- function SkeletonImage(_a) {
394
- var _b = _a, { height = 200 } = _b, props = __objRest(_b, ["height"]);
402
+ function SkeletonImage(_a4) {
403
+ var _b = _a4, { height = 200 } = _b, props = __objRest(_b, ["height"]);
395
404
  return /* @__PURE__ */ jsx13(MantineSkeleton, __spreadValues({ height, radius: "md" }, props));
396
405
  }
397
- function SkeletonAvatar(_a) {
398
- var _b = _a, { size = 40 } = _b, props = __objRest(_b, ["size"]);
406
+ function SkeletonAvatar(_a4) {
407
+ var _b = _a4, { size = 40 } = _b, props = __objRest(_b, ["size"]);
399
408
  return /* @__PURE__ */ jsx13(MantineSkeleton, __spreadValues({ height: size, width: size, circle: true }, props));
400
409
  }
401
410
  function SkeletonCard({ height, lines = 3 }) {
@@ -436,8 +445,8 @@ var SdSkeletonAvatar = SkeletonAvatar;
436
445
  import { Stack as Stack3 } from "@mantine/core";
437
446
  import { jsx as jsx14, jsxs as jsxs3 } from "react/jsx-runtime";
438
447
  function createTextBox(titleVariant, defaultGap = "xs", descVariant = "Body", color_ = void 0) {
439
- return function SdTextBox2(_a) {
440
- var _b = _a, {
448
+ return function SdTextBox2(_a4) {
449
+ var _b = _a4, {
441
450
  label,
442
451
  title,
443
452
  description,
@@ -513,8 +522,8 @@ import { Group as Group2, Stack as Stack5, Timeline as MantineTimeline } from "@
513
522
  import { jsx as jsx16, jsxs as jsxs5 } from "react/jsx-runtime";
514
523
  function SdTimeline({ items }) {
515
524
  const grouped = items.filter((item) => item.isShow).sort((a, b) => b.year - a.year || b.month - a.month).reduce((acc, item) => {
516
- var _a, _b;
517
- ((_b = acc[_a = item.year]) != null ? _b : acc[_a] = []).push(item);
525
+ var _a4, _b;
526
+ ((_b = acc[_a4 = item.year]) != null ? _b : acc[_a4] = []).push(item);
518
527
  return acc;
519
528
  }, {});
520
529
  const years = Object.keys(grouped).map(Number).sort((a, b) => b - a);
@@ -627,8 +636,8 @@ function AuthorRow({ item }) {
627
636
  ] })
628
637
  ] });
629
638
  }
630
- function CardTestimonial(_a) {
631
- var _b = _a, { item } = _b, boxProps = __objRest(_b, ["item"]);
639
+ function CardTestimonial(_a4) {
640
+ var _b = _a4, { item } = _b, boxProps = __objRest(_b, ["item"]);
632
641
  return /* @__PURE__ */ jsx18(Card4, __spreadProps(__spreadValues({ h: "100%" }, boxProps), { children: /* @__PURE__ */ jsxs7(Stack7, { gap: "md", h: "100%", children: [
633
642
  item.rating && /* @__PURE__ */ jsx18(Rating, { value: item.rating, readOnly: true, size: "sm", color: "primary" }),
634
643
  /* @__PURE__ */ jsxs7(Stack7, { gap: "xs", style: { flex: 1 }, children: [
@@ -638,8 +647,8 @@ function CardTestimonial(_a) {
638
647
  /* @__PURE__ */ jsx18(AuthorRow, { item })
639
648
  ] }) }));
640
649
  }
641
- function Strip2(_a) {
642
- var _b = _a, { item } = _b, boxProps = __objRest(_b, ["item"]);
650
+ function Strip2(_a4) {
651
+ var _b = _a4, { item } = _b, boxProps = __objRest(_b, ["item"]);
643
652
  return /* @__PURE__ */ jsx18(Box5, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ jsxs7(Stack7, { gap: "md", children: [
644
653
  item.rating && /* @__PURE__ */ jsx18(Rating, { value: item.rating, readOnly: true, size: "sm", color: "primary" }),
645
654
  /* @__PURE__ */ jsxs7(Group4, { gap: 4, align: "flex-start", children: [
@@ -672,9 +681,9 @@ import {
672
681
  } from "@mantine/core";
673
682
  import { IconCheck, IconX as IconX2 } from "@tabler/icons-react";
674
683
  import { jsx as jsx19, jsxs as jsxs8 } from "react/jsx-runtime";
675
- function Default(_a) {
676
- var _b = _a, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
677
- var _a2;
684
+ function Default(_a4) {
685
+ var _b = _a4, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
686
+ var _a5;
678
687
  return /* @__PURE__ */ jsx19(
679
688
  Card5,
680
689
  __spreadProps(__spreadValues({
@@ -717,14 +726,14 @@ function Default(_a) {
717
726
  }
718
727
  )
719
728
  ] }, i)) }),
720
- /* @__PURE__ */ jsx19(SdButton.Outline, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a2 = item.ctaLabel) != null ? _a2 : "\uC2DC\uC791\uD558\uAE30" })
729
+ /* @__PURE__ */ jsx19(SdButton.Outline, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a5 = item.ctaLabel) != null ? _a5 : "\uC2DC\uC791\uD558\uAE30" })
721
730
  ] })
722
731
  })
723
732
  );
724
733
  }
725
- function Featured(_a) {
726
- var _b = _a, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
727
- var _a2;
734
+ function Featured(_a4) {
735
+ var _b = _a4, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
736
+ var _a5;
728
737
  return /* @__PURE__ */ jsx19(
729
738
  Card5,
730
739
  __spreadProps(__spreadValues({
@@ -767,7 +776,7 @@ function Featured(_a) {
767
776
  }
768
777
  )
769
778
  ] }, i)) }),
770
- /* @__PURE__ */ jsx19(SdButton.White, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a2 = item.ctaLabel) != null ? _a2 : "\uC2DC\uC791\uD558\uAE30" })
779
+ /* @__PURE__ */ jsx19(SdButton.White, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a5 = item.ctaLabel) != null ? _a5 : "\uC2DC\uC791\uD558\uAE30" })
771
780
  ] })
772
781
  })
773
782
  );
@@ -789,22 +798,22 @@ var SdPricingCard = {
789
798
  // ui/molecule/Faq.tsx
790
799
  import { Accordion, Box as Box7, Stack as Stack9 } from "@mantine/core";
791
800
  import { jsx as jsx20, jsxs as jsxs9 } from "react/jsx-runtime";
792
- function Default2(_a) {
793
- var _b = _a, { items } = _b, boxProps = __objRest(_b, ["items"]);
801
+ function Default2(_a4) {
802
+ var _b = _a4, { items } = _b, boxProps = __objRest(_b, ["items"]);
794
803
  return /* @__PURE__ */ jsx20(Box7, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ jsx20(Accordion, { variant: "separated", radius: "md", children: items.map((item, i) => /* @__PURE__ */ jsxs9(Accordion.Item, { value: String(i), children: [
795
804
  /* @__PURE__ */ jsx20(Accordion.Control, { children: /* @__PURE__ */ jsx20(SdText.Strong, { fz: "sm", children: item.question }) }),
796
805
  /* @__PURE__ */ jsx20(Accordion.Panel, { children: /* @__PURE__ */ jsx20(SdText.Body, { fz: "sm", children: item.answer }) })
797
806
  ] }, i)) }) }));
798
807
  }
799
- function Filled(_a) {
800
- var _b = _a, { items } = _b, boxProps = __objRest(_b, ["items"]);
808
+ function Filled(_a4) {
809
+ var _b = _a4, { items } = _b, boxProps = __objRest(_b, ["items"]);
801
810
  return /* @__PURE__ */ jsx20(Box7, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ jsx20(Accordion, { variant: "filled", radius: "md", children: items.map((item, i) => /* @__PURE__ */ jsxs9(Accordion.Item, { value: String(i), children: [
802
811
  /* @__PURE__ */ jsx20(Accordion.Control, { children: /* @__PURE__ */ jsx20(SdText.Strong, { fz: "sm", children: item.question }) }),
803
812
  /* @__PURE__ */ jsx20(Accordion.Panel, { children: /* @__PURE__ */ jsx20(SdText.Body, { fz: "sm", children: item.answer }) })
804
813
  ] }, i)) }) }));
805
814
  }
806
- function WithHeader(_a) {
807
- var _b = _a, { label, title, description, items } = _b, boxProps = __objRest(_b, ["label", "title", "description", "items"]);
815
+ function WithHeader(_a4) {
816
+ var _b = _a4, { label, title, description, items } = _b, boxProps = __objRest(_b, ["label", "title", "description", "items"]);
808
817
  return /* @__PURE__ */ jsxs9(Stack9, __spreadProps(__spreadValues({ gap: "xl" }, boxProps), { children: [
809
818
  /* @__PURE__ */ jsxs9(Stack9, { gap: "xs", children: [
810
819
  label && /* @__PURE__ */ jsx20(SdText.Eyebrow, { children: label }),
@@ -826,8 +835,8 @@ var SdFaq = {
826
835
  // ui/molecule/Cta.tsx
827
836
  import { Box as Box8, Center as Center2, Group as Group6, Stack as Stack10 } from "@mantine/core";
828
837
  import { jsx as jsx21, jsxs as jsxs10 } from "react/jsx-runtime";
829
- function Banner(_a) {
830
- var _b = _a, {
838
+ function Banner(_a4) {
839
+ var _b = _a4, {
831
840
  label,
832
841
  title,
833
842
  description,
@@ -873,8 +882,8 @@ function Banner(_a) {
873
882
  })
874
883
  );
875
884
  }
876
- function Subtle(_a) {
877
- var _b = _a, {
885
+ function Subtle(_a4) {
886
+ var _b = _a4, {
878
887
  label,
879
888
  title,
880
889
  description,
@@ -913,8 +922,8 @@ function Subtle(_a) {
913
922
  })
914
923
  );
915
924
  }
916
- function Inline(_a) {
917
- var _b = _a, {
925
+ function Inline(_a4) {
926
+ var _b = _a4, {
918
927
  label,
919
928
  title,
920
929
  description,
@@ -984,16 +993,16 @@ import {
984
993
  } from "@mantine/core";
985
994
  import Link2 from "next/link";
986
995
  import { jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
987
- function SolutionCardItem(_a) {
988
- var _b = _a, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
989
- var _a2, _b2;
996
+ function SolutionCardItem(_a4) {
997
+ var _b = _a4, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
998
+ var _a5, _b2;
990
999
  return /* @__PURE__ */ jsx22(Card6, __spreadProps(__spreadValues({ withBorder: true }, cardProps), { children: /* @__PURE__ */ jsxs11(Stack11, { gap: "md", children: [
991
1000
  item.icon,
992
1001
  /* @__PURE__ */ jsx22(SdBadge.Primary, { children: item.category }),
993
1002
  /* @__PURE__ */ jsx22(SdTitle.Card, { children: item.title }),
994
1003
  /* @__PURE__ */ jsx22(SdText.Body, { children: item.description }),
995
1004
  item.href ? /* @__PURE__ */ jsxs11(Button, { variant: "subtle", color: "slate", component: Link2, href: item.href, children: [
996
- (_a2 = item.ctaLabel) != null ? _a2 : "\uC790\uC138\uD788 \uBCF4\uAE30",
1005
+ (_a5 = item.ctaLabel) != null ? _a5 : "\uC790\uC138\uD788 \uBCF4\uAE30",
997
1006
  " \u2192"
998
1007
  ] }) : /* @__PURE__ */ jsxs11(SdButton.Ghost, { onClick: () => onSelect == null ? void 0 : onSelect(item), children: [
999
1008
  (_b2 = item.ctaLabel) != null ? _b2 : "\uC790\uC138\uD788 \uBCF4\uAE30",
@@ -1024,7 +1033,7 @@ function Filtered({ items, allLabel = "\uC804\uCCB4", cols, onSelect }) {
1024
1033
  }
1025
1034
  function List({ items, onSelect }) {
1026
1035
  return /* @__PURE__ */ jsx23(Stack12, { gap: 0, children: items.map((item, i) => {
1027
- var _a, _b;
1036
+ var _a4, _b;
1028
1037
  return /* @__PURE__ */ jsxs12("div", { children: [
1029
1038
  i > 0 && /* @__PURE__ */ jsx23(Divider2, {}),
1030
1039
  /* @__PURE__ */ jsxs12(Group7, { align: "flex-start", py: "lg", gap: "lg", children: [
@@ -1042,7 +1051,7 @@ function List({ items, onSelect }) {
1042
1051
  href: item.href,
1043
1052
  style: { alignSelf: "flex-start", paddingInline: 0 },
1044
1053
  children: [
1045
- (_a = item.ctaLabel) != null ? _a : "\uC790\uC138\uD788 \uBCF4\uAE30",
1054
+ (_a4 = item.ctaLabel) != null ? _a4 : "\uC790\uC138\uD788 \uBCF4\uAE30",
1046
1055
  " \u2192"
1047
1056
  ]
1048
1057
  }
@@ -1160,15 +1169,15 @@ function MapFrame({ address, height }) {
1160
1169
  ] })
1161
1170
  ] });
1162
1171
  }
1163
- function Single(_a) {
1164
- var _b = _a, { address, height = 400 } = _b, boxProps = __objRest(_b, ["address", "height"]);
1172
+ function Single(_a4) {
1173
+ var _b = _a4, { address, height = 400 } = _b, boxProps = __objRest(_b, ["address", "height"]);
1165
1174
  if (!address.embbedUrl) return null;
1166
1175
  return /* @__PURE__ */ jsx25(Box10, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ jsx25(MapFrame, { address, height }) }));
1167
1176
  }
1168
1177
  function Tabs2({ addresses, height = 400 }) {
1169
- var _a, _b, _c;
1178
+ var _a4, _b, _c;
1170
1179
  const mapped = addresses.filter((a) => a.embbedUrl);
1171
- const [active, setActive] = useState2((_b = (_a = mapped[0]) == null ? void 0 : _a.label) != null ? _b : "");
1180
+ const [active, setActive] = useState2((_b = (_a4 = mapped[0]) == null ? void 0 : _a4.label) != null ? _b : "");
1172
1181
  if (mapped.length === 0) return null;
1173
1182
  if (mapped.length === 1) return /* @__PURE__ */ jsx25(MapFrame, { address: mapped[0], height });
1174
1183
  const current = (_c = mapped.find((a) => a.label === active)) != null ? _c : mapped[0];
@@ -1198,8 +1207,8 @@ var variantMap = {
1198
1207
  white: SdButton.White
1199
1208
  };
1200
1209
  function CtaButton({ cta }) {
1201
- var _a;
1202
- const Button3 = variantMap[(_a = cta.variant) != null ? _a : "primary"];
1210
+ var _a4;
1211
+ const Button3 = variantMap[(_a4 = cta.variant) != null ? _a4 : "primary"];
1203
1212
  return /* @__PURE__ */ jsx26(Anchor2, { href: cta.href, underline: "never", children: cta.icon ? /* @__PURE__ */ jsx26(Button3, { size: "md", rightSection: /* @__PURE__ */ jsx26(IconArrowNarrowRight, {}), children: cta.label }) : /* @__PURE__ */ jsx26(Button3, { size: "md", children: cta.label }) });
1204
1213
  }
1205
1214
  function HeroCarousel({ slides, children }) {
@@ -1358,8 +1367,8 @@ function SdFooter({ company, navItems, policyLinks, description }) {
1358
1367
  // ui/organism/FeatureSection.tsx
1359
1368
  import { Stack as Stack17 } from "@mantine/core";
1360
1369
  import { jsx as jsx29, jsxs as jsxs18 } from "react/jsx-runtime";
1361
- function SdFeatureSection(_a) {
1362
- var _b = _a, {
1370
+ function SdFeatureSection(_a4) {
1371
+ var _b = _a4, {
1363
1372
  label,
1364
1373
  title,
1365
1374
  description,
@@ -1393,8 +1402,8 @@ function SdFeatureSection(_a) {
1393
1402
  // ui/organism/TimelineSection.tsx
1394
1403
  import { Center as Center3, Stack as Stack18 } from "@mantine/core";
1395
1404
  import { jsx as jsx30, jsxs as jsxs19 } from "react/jsx-runtime";
1396
- function SdTimelineSection(_a) {
1397
- var _b = _a, {
1405
+ function SdTimelineSection(_a4) {
1406
+ var _b = _a4, {
1398
1407
  label,
1399
1408
  title,
1400
1409
  description,
@@ -1423,8 +1432,8 @@ function SdTimelineSection(_a) {
1423
1432
  // ui/organism/StepsSection.tsx
1424
1433
  import { Stack as Stack19 } from "@mantine/core";
1425
1434
  import { jsx as jsx31, jsxs as jsxs20 } from "react/jsx-runtime";
1426
- function SdStepsSection(_a) {
1427
- var _b = _a, {
1435
+ function SdStepsSection(_a4) {
1436
+ var _b = _a4, {
1428
1437
  label,
1429
1438
  title,
1430
1439
  description,
@@ -20,22 +20,41 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // util/index.ts
21
21
  var util_exports = {};
22
22
  __export(util_exports, {
23
+ COMPANY_NAME: () => COMPANY_NAME,
24
+ LOGO_ALT: () => LOGO_ALT,
25
+ LOGO_SRC: () => LOGO_SRC,
23
26
  setCompanyName: () => setCompanyName,
24
27
  t: () => t
25
28
  });
26
29
  module.exports = __toCommonJS(util_exports);
27
30
 
31
+ // util/env.util.ts
32
+ var _a;
33
+ var COMPANY_NAME = (_a = process.env.NEXT_PUBLIC_COMPANY_NAME) != null ? _a : "";
34
+ var _a2;
35
+ var LOGO_SRC = (_a2 = process.env.NEXT_PUBLIC_LOGO_SRC) != null ? _a2 : "/logo.svg";
36
+ var _a3;
37
+ var LOGO_ALT = (_a3 = process.env.NEXT_PUBLIC_LOGO_ALT) != null ? _a3 : "\uB85C\uACE0";
38
+
28
39
  // util/text.util.ts
29
40
  var COMPANY_TOKEN = "%c";
30
- var companyName = "UKNOWN";
31
- function setCompanyName(name) {
32
- companyName = name;
41
+ var warned = false;
42
+ function setCompanyName(_name) {
43
+ if (!warned) {
44
+ warned = true;
45
+ console.warn(
46
+ "[@yeongseoksong/framework] setCompanyName()\uC740 \uB3D9\uC791\uD558\uC9C0 \uC54A\uC73C\uBA70 2.0.0\uC5D0\uC11C \uC81C\uAC70\uB429\uB2C8\uB2E4. NEXT_PUBLIC_COMPANY_NAME \uD658\uACBD\uBCC0\uC218\uB97C \uC0AC\uC6A9\uD558\uC138\uC694."
47
+ );
48
+ }
33
49
  }
34
50
  function t(text) {
35
- return text.replaceAll(COMPANY_TOKEN, companyName);
51
+ return text.replaceAll(COMPANY_TOKEN, COMPANY_NAME);
36
52
  }
37
53
  // Annotate the CommonJS export names for ESM import in node:
38
54
  0 && (module.exports = {
55
+ COMPANY_NAME,
56
+ LOGO_ALT,
57
+ LOGO_SRC,
39
58
  setCompanyName,
40
59
  t
41
60
  });
@@ -1,4 +1,28 @@
1
- declare function setCompanyName(name: string): void;
1
+ /**
2
+ * 소비자 앱이 주입하는 상수들.
3
+ *
4
+ * 값은 소비자 앱의 `NEXT_PUBLIC_*` 환경변수에서 온다. 번들러가 빌드 시점에
5
+ * 리터럴로 치환하므로, tsup이 ui/util 번들을 나눠도 양쪽에 같은 값이 박힌다.
6
+ * (모듈 전역 변수로 주입하던 이전 방식은 번들이 갈리면서 값이 공유되지 않았다.)
7
+ *
8
+ * `process.env.X` 형태로 통째로 접근해야 한다. 구조분해(`const { X } = process.env`)는
9
+ * 번들러의 정적 치환 대상이 아니라서 undefined가 된다.
10
+ */
11
+ /** `%c` 토큰이 치환될 회사명. 소비자 앱에서 필수. */
12
+ declare const COMPANY_NAME: string;
13
+ /** 헤더 로고 이미지 경로. */
14
+ declare const LOGO_SRC: string;
15
+ /** 헤더 로고 대체 텍스트. */
16
+ declare const LOGO_ALT: string;
17
+
18
+ /**
19
+ * @deprecated 동작하지 않는다. tsup이 ui/util을 별개 번들로 빌드하면서 이 모듈이
20
+ * `dist/ui`에 인라인 복사되기 때문에, 여기서 값을 바꿔도 `t()`를 실제로 호출하는
21
+ * `SdText`/`SdTitle`은 다른 사본을 읽는다. 대신 `NEXT_PUBLIC_COMPANY_NAME`을 사용할 것.
22
+ * 2.0.0에서 제거한다.
23
+ */
24
+ declare function setCompanyName(_name: string): void;
25
+ /** 문자열 안의 `%c`를 회사명으로 치환한다. 서버/클라이언트 양쪽에서 안전하다. */
2
26
  declare function t(text: string): string;
3
27
 
4
- export { setCompanyName, t };
28
+ export { COMPANY_NAME, LOGO_ALT, LOGO_SRC, setCompanyName, t };
@@ -1,4 +1,28 @@
1
- declare function setCompanyName(name: string): void;
1
+ /**
2
+ * 소비자 앱이 주입하는 상수들.
3
+ *
4
+ * 값은 소비자 앱의 `NEXT_PUBLIC_*` 환경변수에서 온다. 번들러가 빌드 시점에
5
+ * 리터럴로 치환하므로, tsup이 ui/util 번들을 나눠도 양쪽에 같은 값이 박힌다.
6
+ * (모듈 전역 변수로 주입하던 이전 방식은 번들이 갈리면서 값이 공유되지 않았다.)
7
+ *
8
+ * `process.env.X` 형태로 통째로 접근해야 한다. 구조분해(`const { X } = process.env`)는
9
+ * 번들러의 정적 치환 대상이 아니라서 undefined가 된다.
10
+ */
11
+ /** `%c` 토큰이 치환될 회사명. 소비자 앱에서 필수. */
12
+ declare const COMPANY_NAME: string;
13
+ /** 헤더 로고 이미지 경로. */
14
+ declare const LOGO_SRC: string;
15
+ /** 헤더 로고 대체 텍스트. */
16
+ declare const LOGO_ALT: string;
17
+
18
+ /**
19
+ * @deprecated 동작하지 않는다. tsup이 ui/util을 별개 번들로 빌드하면서 이 모듈이
20
+ * `dist/ui`에 인라인 복사되기 때문에, 여기서 값을 바꿔도 `t()`를 실제로 호출하는
21
+ * `SdText`/`SdTitle`은 다른 사본을 읽는다. 대신 `NEXT_PUBLIC_COMPANY_NAME`을 사용할 것.
22
+ * 2.0.0에서 제거한다.
23
+ */
24
+ declare function setCompanyName(_name: string): void;
25
+ /** 문자열 안의 `%c`를 회사명으로 치환한다. 서버/클라이언트 양쪽에서 안전하다. */
2
26
  declare function t(text: string): string;
3
27
 
4
- export { setCompanyName, t };
28
+ export { COMPANY_NAME, LOGO_ALT, LOGO_SRC, setCompanyName, t };
@@ -1,13 +1,29 @@
1
+ // util/env.util.ts
2
+ var _a;
3
+ var COMPANY_NAME = (_a = process.env.NEXT_PUBLIC_COMPANY_NAME) != null ? _a : "";
4
+ var _a2;
5
+ var LOGO_SRC = (_a2 = process.env.NEXT_PUBLIC_LOGO_SRC) != null ? _a2 : "/logo.svg";
6
+ var _a3;
7
+ var LOGO_ALT = (_a3 = process.env.NEXT_PUBLIC_LOGO_ALT) != null ? _a3 : "\uB85C\uACE0";
8
+
1
9
  // util/text.util.ts
2
10
  var COMPANY_TOKEN = "%c";
3
- var companyName = "UKNOWN";
4
- function setCompanyName(name) {
5
- companyName = name;
11
+ var warned = false;
12
+ function setCompanyName(_name) {
13
+ if (!warned) {
14
+ warned = true;
15
+ console.warn(
16
+ "[@yeongseoksong/framework] setCompanyName()\uC740 \uB3D9\uC791\uD558\uC9C0 \uC54A\uC73C\uBA70 2.0.0\uC5D0\uC11C \uC81C\uAC70\uB429\uB2C8\uB2E4. NEXT_PUBLIC_COMPANY_NAME \uD658\uACBD\uBCC0\uC218\uB97C \uC0AC\uC6A9\uD558\uC138\uC694."
17
+ );
18
+ }
6
19
  }
7
20
  function t(text) {
8
- return text.replaceAll(COMPANY_TOKEN, companyName);
21
+ return text.replaceAll(COMPANY_TOKEN, COMPANY_NAME);
9
22
  }
10
23
  export {
24
+ COMPANY_NAME,
25
+ LOGO_ALT,
26
+ LOGO_SRC,
11
27
  setCompanyName,
12
28
  t
13
29
  };