@nurihaus/web-design-system 3.7.0 → 3.9.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.
Files changed (143) hide show
  1. package/README.md +15 -4
  2. package/dist/ai/components.md +658 -12
  3. package/dist/ai/motion.md +431 -0
  4. package/dist/ai/tokens.md +93 -4
  5. package/dist/avatar.js +5 -3
  6. package/dist/bottom-bar.js +261 -0
  7. package/dist/bottom-nav.js +10 -57
  8. package/dist/breadcrumb.js +7 -5
  9. package/dist/callout.js +5 -3
  10. package/dist/card.js +278 -0
  11. package/dist/check-box.js +7 -5
  12. package/dist/chip-group.js +6 -4
  13. package/dist/chunk-1176.js +24 -0
  14. package/dist/chunk-3274.js +71 -0
  15. package/dist/chunk-345.js +72 -0
  16. package/dist/chunk-3547.js +56 -0
  17. package/dist/chunk-6459.js +107 -0
  18. package/dist/{chunk-6364.js → chunk-7335.js} +2 -67
  19. package/dist/chunk-7653.js +4 -0
  20. package/dist/chunk-910.js +26 -13
  21. package/dist/chunk-9497.js +66 -0
  22. package/dist/collapsible-menu.js +6 -4
  23. package/dist/components/badge/badge-props.d.ts +4 -4
  24. package/dist/components/badge/badge.stories.d.ts +1 -1
  25. package/dist/components/bottom-bar/base-bottom-bar.d.ts +4 -0
  26. package/dist/components/bottom-bar/bottom-bar-props.d.ts +1 -0
  27. package/dist/components/bottom-bar/bottom-bar-type.d.ts +3 -0
  28. package/dist/components/bottom-bar/bottom-bar.d.ts +6 -0
  29. package/dist/components/bottom-bar/bottom-bar.stories.d.ts +282 -0
  30. package/dist/components/button/button-type.d.ts +3 -1
  31. package/dist/components/button/button.stories.d.ts +1 -0
  32. package/dist/components/card/base-card.d.ts +3 -0
  33. package/dist/components/card/card-props.d.ts +9 -0
  34. package/dist/components/card/card-type.d.ts +8 -0
  35. package/dist/components/card/card.d.ts +5 -0
  36. package/dist/components/card/card.stories.d.ts +24 -0
  37. package/dist/components/description-list/base-description-list.d.ts +4 -0
  38. package/dist/components/description-list/description-list-props.d.ts +1 -0
  39. package/dist/components/description-list/description-list-type.d.ts +13 -0
  40. package/dist/components/description-list/description-list.d.ts +5 -0
  41. package/dist/components/description-list/description-list.stories.d.ts +20 -0
  42. package/dist/components/empty-state/base-empty-state.d.ts +4 -0
  43. package/dist/components/empty-state/empty-state-props.d.ts +10 -0
  44. package/dist/components/empty-state/empty-state-type.d.ts +14 -0
  45. package/dist/components/empty-state/empty-state.d.ts +5 -0
  46. package/dist/components/empty-state/empty-state.stories.d.ts +300 -0
  47. package/dist/components/icon/icon-paths.d.ts +4 -0
  48. package/dist/components/icon/icon.stories.d.ts +1 -1
  49. package/dist/components/icon-button/base-icon-button.d.ts +3 -0
  50. package/dist/components/icon-button/icon-button-props.d.ts +12 -0
  51. package/dist/components/icon-button/icon-button-type.d.ts +16 -0
  52. package/dist/components/icon-button/icon-button.d.ts +5 -0
  53. package/dist/components/icon-button/icon-button.stories.d.ts +31 -0
  54. package/dist/components/list/base-list.d.ts +7 -0
  55. package/dist/components/list/list-group.d.ts +5 -0
  56. package/dist/components/list/list-group.stories.d.ts +14 -0
  57. package/dist/components/list/list-props.d.ts +2 -0
  58. package/dist/components/list/list-row.d.ts +5 -0
  59. package/dist/components/list/list-row.stories.d.ts +304 -0
  60. package/dist/components/list/list-type.d.ts +25 -0
  61. package/dist/components/media/base-media.d.ts +16 -0
  62. package/dist/components/media/media-props.d.ts +5 -0
  63. package/dist/components/media/media-thumbnail.d.ts +4 -0
  64. package/dist/components/media/media-thumbnail.stories.d.ts +34 -0
  65. package/dist/components/media/media-type.d.ts +43 -0
  66. package/dist/components/media/media-viewer.d.ts +4 -0
  67. package/dist/components/media/media-viewer.stories.d.ts +24 -0
  68. package/dist/components/message/base-message.d.ts +11 -0
  69. package/dist/components/message/message-event.d.ts +6 -0
  70. package/dist/components/message/message-props.d.ts +17 -0
  71. package/dist/components/message/message-thread.d.ts +6 -0
  72. package/dist/components/message/message-type.d.ts +21 -0
  73. package/dist/components/message/message.d.ts +5 -0
  74. package/dist/components/message/message.stories.d.ts +313 -0
  75. package/dist/components/message-composer/base-message-composer.d.ts +11 -0
  76. package/dist/components/message-composer/message-composer-props.d.ts +1 -0
  77. package/dist/components/message-composer/message-composer-type.d.ts +31 -0
  78. package/dist/components/message-composer/message-composer.d.ts +5 -0
  79. package/dist/components/message-composer/message-composer.stories.d.ts +46 -0
  80. package/dist/components/motion/motion-provider.d.ts +5 -0
  81. package/dist/components/motion/motion-type.d.ts +6 -0
  82. package/dist/components/motion/motion.d.ts +2 -0
  83. package/dist/components/motion/motion.stories.d.ts +23 -0
  84. package/dist/components/notice/base-notice.d.ts +4 -0
  85. package/dist/components/notice/notice-props.d.ts +16 -0
  86. package/dist/components/notice/notice-type.d.ts +21 -0
  87. package/dist/components/notice/notice.d.ts +5 -0
  88. package/dist/components/notice/notice.stories.d.ts +304 -0
  89. package/dist/components/radio/base-radio.d.ts +2 -1
  90. package/dist/components/radio/radio-props.d.ts +9 -1
  91. package/dist/components/radio/radio-type.d.ts +9 -0
  92. package/dist/components/radio/radio.stories.d.ts +10 -0
  93. package/dist/components/tag/base-tag.d.ts +8 -0
  94. package/dist/components/tag/tag-props.d.ts +1 -0
  95. package/dist/components/tag/tag-type.d.ts +20 -0
  96. package/dist/components/tag/tag.d.ts +4 -0
  97. package/dist/components/tag/tag.stories.d.ts +14 -0
  98. package/dist/components.css +1330 -171
  99. package/dist/cta-button.js +38 -21
  100. package/dist/data-table.js +5 -3
  101. package/dist/description-list.js +274 -0
  102. package/dist/drawer.js +7 -5
  103. package/dist/drop-down.js +8 -6
  104. package/dist/empty-state.js +300 -0
  105. package/dist/helpers/utils/fillLinkChild.d.ts +6 -0
  106. package/dist/icon-button.js +338 -0
  107. package/dist/icon-text-badge.js +11 -9
  108. package/dist/icon-text-option-badge.js +8 -6
  109. package/dist/icon.js +7 -4
  110. package/dist/index.d.ts +30 -2
  111. package/dist/index.js +2482 -223
  112. package/dist/list-group.js +253 -0
  113. package/dist/list-row.js +308 -0
  114. package/dist/loading.js +6 -4
  115. package/dist/media-thumbnail.js +412 -0
  116. package/dist/media-viewer.js +274 -0
  117. package/dist/message-composer.js +399 -0
  118. package/dist/message-event.js +216 -0
  119. package/dist/message-thread.js +216 -0
  120. package/dist/message.js +271 -0
  121. package/dist/modal-with-double-button.js +15 -11
  122. package/dist/modal.js +9 -7
  123. package/dist/motion.js +52 -0
  124. package/dist/notice.js +346 -0
  125. package/dist/option-badge.js +11 -9
  126. package/dist/pagination.js +8 -6
  127. package/dist/radio.js +114 -30
  128. package/dist/skeleton.js +4 -2
  129. package/dist/step-progress.js +4 -2
  130. package/dist/styles.css +1215 -130
  131. package/dist/switch.js +6 -4
  132. package/dist/tabs.js +5 -3
  133. package/dist/tag.js +311 -0
  134. package/dist/text-area.js +8 -6
  135. package/dist/text-field.js +8 -6
  136. package/dist/text.js +5 -3
  137. package/dist/toast.js +15 -11
  138. package/dist/tokens/generated/index.d.ts +1 -0
  139. package/dist/tokens/generated/motion.d.ts +153 -0
  140. package/dist/tokens.css +122 -2
  141. package/dist/tokens.js +156 -1
  142. package/dist/tooltip.js +6 -4
  143. package/package.json +67 -1
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import * as __WEBPACK_EXTERNAL_MODULE_radix_ui_3bc96d1b__ from "radix-ui";
3
3
  import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
4
4
  import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_179142b8__ from "react/jsx-runtime";
5
+ import { LazyMotion as __WEBPACK_EXTERNAL_MODULE_motion_react_de020c0a_LazyMotion__, MotionConfig as __WEBPACK_EXTERNAL_MODULE_motion_react_de020c0a_MotionConfig__, domMax as __WEBPACK_EXTERNAL_MODULE_motion_react_de020c0a_domMax__ } from "motion/react";
5
6
  /******/ var __webpack_modules__ = ({
6
7
 
7
8
  /***/ 5077
@@ -268,7 +269,7 @@ var __assign = undefined && undefined.__assign || function () {
268
269
  return __assign.apply(this, arguments);
269
270
  };
270
271
 
271
- var variant = ['neutral', 'primary', 'danger', 'outlined'];
272
+ var variant = ['neutral', 'primary', 'danger', 'success', 'warning', 'outlined'];
272
273
  var sizes = ['xs', 's', 'm', 'l', 'xl'];
273
274
  var commonBadgeProps = {
274
275
  variant: {
@@ -529,6 +530,97 @@ OptionBadge.displayName = 'OptionBadge';
529
530
 
530
531
  /***/ },
531
532
 
533
+ /***/ 3577
534
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
535
+
536
+
537
+ // EXPORTS
538
+ __nuri_require__.d(__webpack_exports__, {
539
+ A: () => (/* binding */ bottom_bar)
540
+ });
541
+
542
+ // EXTERNAL MODULE: external {"root":"jsx-runtime","commonjs2":"react/jsx-runtime","commonjs":"react/jsx-runtime","amd":"react/jsx-runtime","module":"react/jsx-runtime"}
543
+ var jsx_runtime_ = __nuri_require__(612);
544
+ // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
545
+ var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
546
+ // EXTERNAL MODULE: ./helpers/utils/classNames.js
547
+ var classNames = __nuri_require__(3274);
548
+ // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
549
+ var getMergedProps = __nuri_require__(7335);
550
+ ;// ./components/bottom-bar/base-bottom-bar.tsx
551
+ var __assign = undefined && undefined.__assign || function () {
552
+ __assign = Object.assign || function (t) {
553
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
554
+ s = arguments[i];
555
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
556
+ }
557
+ return t;
558
+ };
559
+ return __assign.apply(this, arguments);
560
+ };
561
+ var __rest = undefined && undefined.__rest || function (s, e) {
562
+ var t = {};
563
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
564
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
565
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
566
+ }
567
+ return t;
568
+ };
569
+
570
+
571
+
572
+ var BaseBottomBar = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
573
+ var className = props.className,
574
+ restProps = __rest(props, ["className"]);
575
+ return (0,jsx_runtime_.jsx)("div", __assign({
576
+ ref: ref,
577
+ className: (0,classNames/* classNames */.x)('nuri-theme base-bottom-bar', className)
578
+ }, restProps));
579
+ });
580
+ BaseBottomBar.displayName = 'BaseBottomBar';
581
+ /* harmony default export */ const base_bottom_bar = (BaseBottomBar);
582
+ ;// ./components/bottom-bar/bottom-bar-props.ts
583
+ var bottomBarProps = {};
584
+ ;// ./components/bottom-bar/bottom-bar.tsx
585
+ var bottom_bar_assign = undefined && undefined.__assign || function () {
586
+ bottom_bar_assign = Object.assign || function (t) {
587
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
588
+ s = arguments[i];
589
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
590
+ }
591
+ return t;
592
+ };
593
+ return bottom_bar_assign.apply(this, arguments);
594
+ };
595
+ var bottom_bar_rest = undefined && undefined.__rest || function (s, e) {
596
+ var t = {};
597
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
598
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
599
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
600
+ }
601
+ return t;
602
+ };
603
+
604
+
605
+
606
+
607
+
608
+
609
+ /** 화면 아래에 붙는 바. 주 행동 버튼이나 입력 줄을 담는다. 바로 아래 자식들이 폭을 나눠 갖는다 */
610
+ var BottomBar = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
611
+ var _a = (0,getMergedProps/* getMergedProps */.p)(props, bottomBarProps),
612
+ className = _a.className,
613
+ restProps = bottom_bar_rest(_a, ["className"]);
614
+ return (0,jsx_runtime_.jsx)(base_bottom_bar, bottom_bar_assign({
615
+ ref: ref,
616
+ className: (0,classNames/* classNames */.x)(className, 'bottom-bar')
617
+ }, restProps));
618
+ });
619
+ BottomBar.displayName = 'BottomBar';
620
+ /* harmony default export */ const bottom_bar = (BottomBar);
621
+
622
+ /***/ },
623
+
532
624
  /***/ 1768
533
625
  (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
534
626
 
@@ -1013,11 +1105,12 @@ var ctaButtonProps = {
1013
1105
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
1014
1106
  /* harmony import */ var _helpers_hooks_useTrack__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(4560);
1015
1107
  /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(3274);
1016
- /* harmony import */ var _helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_4__ = __nuri_require__(7335);
1017
- /* harmony import */ var _callout_callout__WEBPACK_IMPORTED_MODULE_5__ = __nuri_require__(1163);
1018
- /* harmony import */ var _loading_spinner_spinner__WEBPACK_IMPORTED_MODULE_6__ = __nuri_require__(6302);
1019
- /* harmony import */ var _base_button__WEBPACK_IMPORTED_MODULE_7__ = __nuri_require__(8933);
1020
- /* harmony import */ var _button_props__WEBPACK_IMPORTED_MODULE_8__ = __nuri_require__(9976);
1108
+ /* harmony import */ var _helpers_utils_fillLinkChild__WEBPACK_IMPORTED_MODULE_4__ = __nuri_require__(1176);
1109
+ /* harmony import */ var _helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_5__ = __nuri_require__(7335);
1110
+ /* harmony import */ var _callout_callout__WEBPACK_IMPORTED_MODULE_6__ = __nuri_require__(1163);
1111
+ /* harmony import */ var _loading_spinner_spinner__WEBPACK_IMPORTED_MODULE_7__ = __nuri_require__(6302);
1112
+ /* harmony import */ var _base_button__WEBPACK_IMPORTED_MODULE_8__ = __nuri_require__(8933);
1113
+ /* harmony import */ var _button_props__WEBPACK_IMPORTED_MODULE_9__ = __nuri_require__(9976);
1021
1114
  var __assign = undefined && undefined.__assign || function () {
1022
1115
  __assign = Object.assign || function (t) {
1023
1116
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -1045,34 +1138,46 @@ var __rest = undefined && undefined.__rest || function (s, e) {
1045
1138
 
1046
1139
 
1047
1140
 
1141
+
1048
1142
  var CTAButton = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
1049
- var _a = (0,_helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_4__/* .getMergedProps */ .p)(props, _button_props__WEBPACK_IMPORTED_MODULE_8__/* .ctaButtonProps */ .Lr),
1143
+ var _a = (0,_helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_5__/* .getMergedProps */ .p)(props, _button_props__WEBPACK_IMPORTED_MODULE_9__/* .ctaButtonProps */ .Lr),
1050
1144
  className = _a.className,
1051
1145
  text = _a.text,
1052
1146
  leftIcon = _a.leftIcon,
1053
1147
  rightIcon = _a.rightIcon,
1054
1148
  callout = _a.callout,
1149
+ asChild = _a.asChild,
1150
+ children = _a.children,
1151
+ loading = _a.loading,
1055
1152
  _onClick = _a.onClick,
1056
1153
  track = _a.track,
1057
1154
  trackProps = _a.trackProps,
1058
- restProps = __rest(_a, ["className", "text", "leftIcon", "rightIcon", "callout", "onClick", "track", "trackProps"]);
1155
+ restProps = __rest(_a, ["className", "text", "leftIcon", "rightIcon", "callout", "asChild", "children", "loading", "onClick", "track", "trackProps"]);
1059
1156
  var emit = (0,_helpers_hooks_useTrack__WEBPACK_IMPORTED_MODULE_2__/* .useTrack */ .n)('CTAButton', {
1060
1157
  track: track,
1061
1158
  trackProps: trackProps
1062
1159
  });
1063
- return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_base_button__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A, __assign({
1160
+ var content = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
1161
+ children: [leftIcon, text, rightIcon, callout ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_callout_callout__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A, {
1162
+ className: 'cta-button-callout',
1163
+ text: callout
1164
+ }) : null]
1165
+ });
1166
+ // asChild 면 넘겨받은 링크 요소 안에 버튼 글자를 넣고, 그 요소가 버튼 클래스·핸들러를 받는다
1167
+ var link = (0,_helpers_utils_fillLinkChild__WEBPACK_IMPORTED_MODULE_4__/* .fillLinkChild */ .Q)(asChild, children, content);
1168
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_button__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A, __assign({
1064
1169
  ref: ref,
1065
1170
  className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__/* .classNames */ .x)(className, 'cta-button', callout ? 'with-callout' : undefined),
1066
- loadingComponent: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_loading_spinner_spinner__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A, {}),
1171
+ loadingComponent: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_loading_spinner_spinner__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A, {}),
1172
+ asChild: link !== null,
1173
+ // 링크는 로딩을 그리지 않는다. 그리면 Spinner 가 링크 자리를 차지한다
1174
+ loading: link ? undefined : loading,
1067
1175
  onClick: function onClick(event) {
1068
1176
  emit('click');
1069
1177
  _onClick === null || _onClick === void 0 ? void 0 : _onClick(event);
1070
1178
  }
1071
1179
  }, restProps, {
1072
- children: [leftIcon, text, rightIcon, callout ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_callout_callout__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A, {
1073
- className: 'cta-button-callout',
1074
- text: callout
1075
- }) : null]
1180
+ children: link !== null && link !== void 0 ? link : content
1076
1181
  }));
1077
1182
  });
1078
1183
  CTAButton.displayName = 'CTAButton';
@@ -1194,6 +1299,112 @@ Callout.displayName = 'Callout';
1194
1299
 
1195
1300
  /***/ },
1196
1301
 
1302
+ /***/ 329
1303
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
1304
+
1305
+
1306
+ // EXPORTS
1307
+ __nuri_require__.d(__webpack_exports__, {
1308
+ A: () => (/* binding */ card)
1309
+ });
1310
+
1311
+ // EXTERNAL MODULE: external {"root":"jsx-runtime","commonjs2":"react/jsx-runtime","commonjs":"react/jsx-runtime","amd":"react/jsx-runtime","module":"react/jsx-runtime"}
1312
+ var jsx_runtime_ = __nuri_require__(612);
1313
+ // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
1314
+ var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
1315
+ // EXTERNAL MODULE: ./helpers/utils/classNames.js
1316
+ var classNames = __nuri_require__(3274);
1317
+ // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
1318
+ var getMergedProps = __nuri_require__(7335);
1319
+ // EXTERNAL MODULE: ./components/core/composer/index.tsx
1320
+ var composer = __nuri_require__(2777);
1321
+ ;// ./components/card/base-card.tsx
1322
+ var __assign = undefined && undefined.__assign || function () {
1323
+ __assign = Object.assign || function (t) {
1324
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
1325
+ s = arguments[i];
1326
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
1327
+ }
1328
+ return t;
1329
+ };
1330
+ return __assign.apply(this, arguments);
1331
+ };
1332
+ var __rest = undefined && undefined.__rest || function (s, e) {
1333
+ var t = {};
1334
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
1335
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
1336
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
1337
+ }
1338
+ return t;
1339
+ };
1340
+
1341
+
1342
+
1343
+
1344
+ var BaseCard = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
1345
+ var _a = props.asChild,
1346
+ asChild = _a === void 0 ? false : _a,
1347
+ className = props.className,
1348
+ restProps = __rest(props, ["asChild", "className"]);
1349
+ var Comp = asChild ? composer/* default */.A : 'div';
1350
+ return (0,jsx_runtime_.jsx)(Comp, __assign({
1351
+ ref: ref,
1352
+ className: (0,classNames/* classNames */.x)('nuri-theme base-card', className)
1353
+ }, restProps));
1354
+ });
1355
+ BaseCard.displayName = 'BaseCard';
1356
+ /* harmony default export */ const base_card = (BaseCard);
1357
+ ;// ./components/card/card-props.ts
1358
+ // 크기·안쪽 여백 prop 은 두지 않는다. 카드는 한 모양이다(여백 --spacing-16).
1359
+ var variant = ['default', 'tinted'];
1360
+ var cardProps = {
1361
+ variant: {
1362
+ type: 'className',
1363
+ className: 'variant',
1364
+ values: variant,
1365
+ "default": 'default'
1366
+ }
1367
+ };
1368
+ ;// ./components/card/card.tsx
1369
+ var card_assign = undefined && undefined.__assign || function () {
1370
+ card_assign = Object.assign || function (t) {
1371
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
1372
+ s = arguments[i];
1373
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
1374
+ }
1375
+ return t;
1376
+ };
1377
+ return card_assign.apply(this, arguments);
1378
+ };
1379
+ var card_rest = undefined && undefined.__rest || function (s, e) {
1380
+ var t = {};
1381
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
1382
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
1383
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
1384
+ }
1385
+ return t;
1386
+ };
1387
+
1388
+
1389
+
1390
+
1391
+
1392
+
1393
+ /** 목록·홈의 카드 면. 누르는 카드는 asChild 로 링크·버튼 하나를 children 으로 준다 — 그 요소가 카드가 된다 */
1394
+ var Card = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
1395
+ var _a = (0,getMergedProps/* getMergedProps */.p)(props, cardProps),
1396
+ className = _a.className,
1397
+ restProps = card_rest(_a, ["className"]);
1398
+ return (0,jsx_runtime_.jsx)(base_card, card_assign({
1399
+ ref: ref,
1400
+ className: (0,classNames/* classNames */.x)(className, 'card')
1401
+ }, restProps));
1402
+ });
1403
+ Card.displayName = 'Card';
1404
+ /* harmony default export */ const card = (Card);
1405
+
1406
+ /***/ },
1407
+
1197
1408
  /***/ 445
1198
1409
  (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
1199
1410
 
@@ -1863,6 +2074,110 @@ var composeRefs = function composeRefs() {
1863
2074
 
1864
2075
  /***/ },
1865
2076
 
2077
+ /***/ 6143
2078
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
2079
+
2080
+
2081
+ // EXPORTS
2082
+ __nuri_require__.d(__webpack_exports__, {
2083
+ A: () => (/* binding */ description_list)
2084
+ });
2085
+
2086
+ // EXTERNAL MODULE: external {"root":"jsx-runtime","commonjs2":"react/jsx-runtime","commonjs":"react/jsx-runtime","amd":"react/jsx-runtime","module":"react/jsx-runtime"}
2087
+ var jsx_runtime_ = __nuri_require__(612);
2088
+ // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
2089
+ var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
2090
+ // EXTERNAL MODULE: ./helpers/utils/classNames.js
2091
+ var classNames = __nuri_require__(3274);
2092
+ // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
2093
+ var getMergedProps = __nuri_require__(7335);
2094
+ ;// ./components/description-list/base-description-list.tsx
2095
+ var __assign = undefined && undefined.__assign || function () {
2096
+ __assign = Object.assign || function (t) {
2097
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
2098
+ s = arguments[i];
2099
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
2100
+ }
2101
+ return t;
2102
+ };
2103
+ return __assign.apply(this, arguments);
2104
+ };
2105
+ var __rest = undefined && undefined.__rest || function (s, e) {
2106
+ var t = {};
2107
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
2108
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
2109
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
2110
+ }
2111
+ return t;
2112
+ };
2113
+
2114
+
2115
+
2116
+ var BaseDescriptionList = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
2117
+ var className = props.className,
2118
+ restProps = __rest(props, ["className"]);
2119
+ return (0,jsx_runtime_.jsx)("dl", __assign({
2120
+ ref: ref,
2121
+ className: (0,classNames/* classNames */.x)('nuri-theme base-description-list', className)
2122
+ }, restProps));
2123
+ });
2124
+ BaseDescriptionList.displayName = 'BaseDescriptionList';
2125
+ /* harmony default export */ const base_description_list = (BaseDescriptionList);
2126
+ ;// ./components/description-list/description-list-props.ts
2127
+ // 크기·변형이 없다. 이름은 왼쪽, 값은 오른쪽 한 모양이다.
2128
+ var descriptionListProps = {};
2129
+ ;// ./components/description-list/description-list.tsx
2130
+ var description_list_assign = undefined && undefined.__assign || function () {
2131
+ description_list_assign = Object.assign || function (t) {
2132
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
2133
+ s = arguments[i];
2134
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
2135
+ }
2136
+ return t;
2137
+ };
2138
+ return description_list_assign.apply(this, arguments);
2139
+ };
2140
+ var description_list_rest = undefined && undefined.__rest || function (s, e) {
2141
+ var t = {};
2142
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
2143
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
2144
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
2145
+ }
2146
+ return t;
2147
+ };
2148
+
2149
+
2150
+
2151
+
2152
+
2153
+
2154
+ /** 이름–값 요약. 이름은 왼쪽, 값은 오른쪽. total 줄은 구분선 아래 굵게 */
2155
+ var DescriptionList = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
2156
+ var _a = (0,getMergedProps/* getMergedProps */.p)(props, descriptionListProps),
2157
+ className = _a.className,
2158
+ items = _a.items,
2159
+ restProps = description_list_rest(_a, ["className", "items"]);
2160
+ return (0,jsx_runtime_.jsx)(base_description_list, description_list_assign({
2161
+ ref: ref,
2162
+ className: (0,classNames/* classNames */.x)(className, 'description-list')
2163
+ }, restProps, {
2164
+ children: items.map(function (item) {
2165
+ return (0,jsx_runtime_.jsxs)("div", {
2166
+ className: (0,classNames/* classNames */.x)('description-list-item', item.total && 'total'),
2167
+ children: [(0,jsx_runtime_.jsx)("dt", {
2168
+ children: item.label
2169
+ }), (0,jsx_runtime_.jsx)("dd", {
2170
+ children: item.value
2171
+ })]
2172
+ }, item.id);
2173
+ })
2174
+ }));
2175
+ });
2176
+ DescriptionList.displayName = 'DescriptionList';
2177
+ /* harmony default export */ const description_list = (DescriptionList);
2178
+
2179
+ /***/ },
2180
+
1866
2181
  /***/ 6622
1867
2182
  (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
1868
2183
 
@@ -2468,13 +2783,13 @@ Text.displayName = 'Text';
2468
2783
 
2469
2784
  /***/ },
2470
2785
 
2471
- /***/ 9896
2786
+ /***/ 5589
2472
2787
  (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
2473
2788
 
2474
2789
 
2475
2790
  // EXPORTS
2476
2791
  __nuri_require__.d(__webpack_exports__, {
2477
- A: () => (/* binding */ base_icon)
2792
+ A: () => (/* binding */ empty_state)
2478
2793
  });
2479
2794
 
2480
2795
  // EXTERNAL MODULE: external {"root":"jsx-runtime","commonjs2":"react/jsx-runtime","commonjs":"react/jsx-runtime","amd":"react/jsx-runtime","module":"react/jsx-runtime"}
@@ -2483,24 +2798,304 @@ var jsx_runtime_ = __nuri_require__(612);
2483
2798
  var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
2484
2799
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
2485
2800
  var classNames = __nuri_require__(3274);
2486
- ;// ./components/icon/icon-paths.ts
2487
- // scripts/build-icons.mjs 가 만든다. 손으로 고치지 않는다.
2488
- // Phosphor Icons (MIT, https://phosphoricons.com) — viewBox 0 0 256 256
2489
- var iconPaths = {
2490
- house: {
2491
- regular: ['M219.31,108.68l-80-80a16,16,0,0,0-22.62,0l-80,80A15.87,15.87,0,0,0,32,120v96a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V160h32v56a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V120A15.87,15.87,0,0,0,219.31,108.68ZM208,208H160V152a8,8,0,0,0-8-8H104a8,8,0,0,0-8,8v56H48V120l80-80,80,80Z'],
2492
- fill: ['M224,120v96a8,8,0,0,1-8,8H160a8,8,0,0,1-8-8V164a4,4,0,0,0-4-4H108a4,4,0,0,0-4,4v52a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V120a16,16,0,0,1,4.69-11.31l80-80a16,16,0,0,1,22.62,0l80,80A16,16,0,0,1,224,120Z']
2493
- },
2494
- 'megaphone-simple': {
2495
- regular: ['M228.54,86.66l-176.06-54A16,16,0,0,0,32,48V192a16,16,0,0,0,16,16,16,16,0,0,0,4.52-.65L136,181.73V192a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16v-29.9l28.54-8.75A16.09,16.09,0,0,0,240,138V102A16.09,16.09,0,0,0,228.54,86.66ZM136,165,48,192V48l88,27Zm48,27H152V176.82L184,167Zm40-54-.11,0L152,160.08V79.92l71.89,22,.11,0v36Z'],
2496
- fill: ['M228.54,86.66l-176.06-54A16,16,0,0,0,32,48V192a16,16,0,0,0,16,16,16,16,0,0,0,4.52-.65L136,181.73V192a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16v-29.9l28.54-8.75A16.09,16.09,0,0,0,240,138V102A16.09,16.09,0,0,0,228.54,86.66ZM184,192H152V176.82L184,167Zm40-54-.11,0L152,160.08V79.91L223.89,102l.11,0v36Z']
2497
- },
2498
- 'chats-circle': {
2499
- regular: ['M232.07,186.76a80,80,0,0,0-62.5-114.17A80,80,0,1,0,23.93,138.76l-7.27,24.71a16,16,0,0,0,19.87,19.87l24.71-7.27a80.39,80.39,0,0,0,25.18,7.35,80,80,0,0,0,108.34,40.65l24.71,7.27a16,16,0,0,0,19.87-19.86ZM62,159.5a8.28,8.28,0,0,0-2.26.32L32,168l8.17-27.76a8,8,0,0,0-.63-6,64,64,0,1,1,26.26,26.26A8,8,0,0,0,62,159.5Zm153.79,28.73L224,216l-27.76-8.17a8,8,0,0,0-6,.63,64.05,64.05,0,0,1-85.87-24.88A79.93,79.93,0,0,0,174.7,89.71a64,64,0,0,1,41.75,92.48A8,8,0,0,0,215.82,188.23Z'],
2500
- fill: ['M232.07,186.76a80,80,0,0,0-62.5-114.17A80,80,0,1,0,23.93,138.76l-7.27,24.71a16,16,0,0,0,19.87,19.87l24.71-7.27a80.39,80.39,0,0,0,25.18,7.35,80,80,0,0,0,108.34,40.65l24.71,7.27a16,16,0,0,0,19.87-19.86Zm-16.25,1.47L224,216l-27.76-8.17a8,8,0,0,0-6,.63,64.05,64.05,0,0,1-85.87-24.88A79.93,79.93,0,0,0,174.7,89.71a64,64,0,0,1,41.75,92.48A8,8,0,0,0,215.82,188.23Z']
2501
- },
2502
- 'user-circle': {
2503
- regular: ['M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24ZM74.08,197.5a64,64,0,0,1,107.84,0,87.83,87.83,0,0,1-107.84,0ZM96,120a32,32,0,1,1,32,32A32,32,0,0,1,96,120Zm97.76,66.41a79.66,79.66,0,0,0-36.06-28.75,48,48,0,1,0-59.4,0,79.66,79.66,0,0,0-36.06,28.75,88,88,0,1,1,131.52,0Z'],
2801
+ // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
2802
+ var getMergedProps = __nuri_require__(7335);
2803
+ // EXTERNAL MODULE: ./components/icon/icon.tsx
2804
+ var icon_icon = __nuri_require__(3547);
2805
+ ;// ./components/empty-state/base-empty-state.tsx
2806
+ var __assign = undefined && undefined.__assign || function () {
2807
+ __assign = Object.assign || function (t) {
2808
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
2809
+ s = arguments[i];
2810
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
2811
+ }
2812
+ return t;
2813
+ };
2814
+ return __assign.apply(this, arguments);
2815
+ };
2816
+ var __rest = undefined && undefined.__rest || function (s, e) {
2817
+ var t = {};
2818
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
2819
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
2820
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
2821
+ }
2822
+ return t;
2823
+ };
2824
+
2825
+
2826
+
2827
+ var BaseEmptyState = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
2828
+ var className = props.className,
2829
+ restProps = __rest(props, ["className"]);
2830
+ return (0,jsx_runtime_.jsx)("div", __assign({
2831
+ ref: ref,
2832
+ className: (0,classNames/* classNames */.x)('nuri-theme base-empty-state', className)
2833
+ }, restProps));
2834
+ });
2835
+ BaseEmptyState.displayName = 'BaseEmptyState';
2836
+ /* harmony default export */ const base_empty_state = (BaseEmptyState);
2837
+ ;// ./components/empty-state/empty-state-props.ts
2838
+ /** 아이콘 원의 색. default 는 연보라, neutral 은 회색(오류·준비 중처럼 힘을 뺄 때) */
2839
+ var variant = ['default', 'neutral'];
2840
+ var emptyStateProps = {
2841
+ variant: {
2842
+ type: 'className',
2843
+ className: 'variant',
2844
+ values: variant,
2845
+ "default": 'default'
2846
+ }
2847
+ };
2848
+ ;// ./components/empty-state/empty-state.tsx
2849
+ var empty_state_assign = undefined && undefined.__assign || function () {
2850
+ empty_state_assign = Object.assign || function (t) {
2851
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
2852
+ s = arguments[i];
2853
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
2854
+ }
2855
+ return t;
2856
+ };
2857
+ return empty_state_assign.apply(this, arguments);
2858
+ };
2859
+ var empty_state_rest = undefined && undefined.__rest || function (s, e) {
2860
+ var t = {};
2861
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
2862
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
2863
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
2864
+ }
2865
+ return t;
2866
+ };
2867
+
2868
+
2869
+
2870
+
2871
+
2872
+
2873
+
2874
+ /** 빈 목록·오류 뒤 다시 시도·찾을 수 없음·준비 중 화면 */
2875
+ var EmptyState = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
2876
+ var _a = (0,getMergedProps/* getMergedProps */.p)(props, emptyStateProps),
2877
+ className = _a.className,
2878
+ icon = _a.icon,
2879
+ title = _a.title,
2880
+ description = _a.description,
2881
+ action = _a.action,
2882
+ restProps = empty_state_rest(_a, ["className", "icon", "title", "description", "action"]);
2883
+ return (0,jsx_runtime_.jsxs)(base_empty_state, empty_state_assign({
2884
+ ref: ref,
2885
+ className: (0,classNames/* classNames */.x)(className, 'empty-state')
2886
+ }, restProps, {
2887
+ children: [(0,jsx_runtime_.jsx)("span", {
2888
+ className: 'empty-state-icon',
2889
+ children: (0,jsx_runtime_.jsx)(icon_icon/* default */.A, {
2890
+ name: icon,
2891
+ size: 'xl'
2892
+ })
2893
+ }), (0,jsx_runtime_.jsx)("p", {
2894
+ className: 'empty-state-title',
2895
+ children: title
2896
+ }), description && (0,jsx_runtime_.jsx)("p", {
2897
+ className: 'empty-state-description',
2898
+ children: description
2899
+ }), action && (0,jsx_runtime_.jsx)("div", {
2900
+ className: 'empty-state-action',
2901
+ children: action
2902
+ })]
2903
+ }));
2904
+ });
2905
+ EmptyState.displayName = 'EmptyState';
2906
+ /* harmony default export */ const empty_state = (EmptyState);
2907
+
2908
+ /***/ },
2909
+
2910
+ /***/ 8173
2911
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
2912
+
2913
+
2914
+ // EXPORTS
2915
+ __nuri_require__.d(__webpack_exports__, {
2916
+ A: () => (/* binding */ icon_button)
2917
+ });
2918
+
2919
+ // EXTERNAL MODULE: external {"root":"jsx-runtime","commonjs2":"react/jsx-runtime","commonjs":"react/jsx-runtime","amd":"react/jsx-runtime","module":"react/jsx-runtime"}
2920
+ var jsx_runtime_ = __nuri_require__(612);
2921
+ // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
2922
+ var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
2923
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
2924
+ var useTrack = __nuri_require__(4560);
2925
+ // EXTERNAL MODULE: ./helpers/utils/classNames.js
2926
+ var classNames = __nuri_require__(3274);
2927
+ // EXTERNAL MODULE: ./helpers/utils/fillLinkChild.ts
2928
+ var fillLinkChild = __nuri_require__(1176);
2929
+ // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
2930
+ var getMergedProps = __nuri_require__(7335);
2931
+ // EXTERNAL MODULE: ./components/icon/icon.tsx
2932
+ var icon_icon = __nuri_require__(3547);
2933
+ // EXTERNAL MODULE: ./components/core/composer/index.tsx
2934
+ var composer = __nuri_require__(2777);
2935
+ ;// ./components/icon-button/base-icon-button.tsx
2936
+ var __assign = undefined && undefined.__assign || function () {
2937
+ __assign = Object.assign || function (t) {
2938
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
2939
+ s = arguments[i];
2940
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
2941
+ }
2942
+ return t;
2943
+ };
2944
+ return __assign.apply(this, arguments);
2945
+ };
2946
+ var __rest = undefined && undefined.__rest || function (s, e) {
2947
+ var t = {};
2948
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
2949
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
2950
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
2951
+ }
2952
+ return t;
2953
+ };
2954
+
2955
+
2956
+
2957
+
2958
+ var BaseIconButton = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
2959
+ var _a = props.asChild,
2960
+ asChild = _a === void 0 ? false : _a,
2961
+ className = props.className,
2962
+ disabled = props.disabled,
2963
+ restProps = __rest(props, ["asChild", "className", "disabled"]);
2964
+ var Comp = asChild ? composer/* default */.A : 'button';
2965
+ return (0,jsx_runtime_.jsx)(Comp, __assign({
2966
+ ref: ref,
2967
+ className: (0,classNames/* classNames */.x)('nuri-theme base-icon-button', className),
2968
+ type: asChild ? undefined : 'button',
2969
+ disabled: disabled,
2970
+ "data-disabled": disabled || undefined
2971
+ }, restProps));
2972
+ });
2973
+ BaseIconButton.displayName = 'BaseIconButton';
2974
+ /* harmony default export */ const base_icon_button = (BaseIconButton);
2975
+ // EXTERNAL MODULE: ./helpers/props/common-props.ts
2976
+ var common_props = __nuri_require__(7298);
2977
+ ;// ./components/icon-button/icon-button-props.ts
2978
+
2979
+ var variant = ['ghost', 'secondary', 'primary'];
2980
+ var sizes = ['s', 'm', 'l'];
2981
+ // 아이콘 크기도 이 값으로 고르므로 기본 크기를 한 곳에 둔다
2982
+ var defaultSize = 'm';
2983
+ var iconButtonProps = {
2984
+ variant: {
2985
+ type: 'className',
2986
+ className: 'variant',
2987
+ values: variant,
2988
+ "default": 'ghost'
2989
+ },
2990
+ size: (0,common_props/* sizeProp */.lw)(sizes, defaultSize)
2991
+ };
2992
+ ;// ./components/icon-button/icon-button.tsx
2993
+ var icon_button_assign = undefined && undefined.__assign || function () {
2994
+ icon_button_assign = Object.assign || function (t) {
2995
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
2996
+ s = arguments[i];
2997
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
2998
+ }
2999
+ return t;
3000
+ };
3001
+ return icon_button_assign.apply(this, arguments);
3002
+ };
3003
+ var icon_button_rest = undefined && undefined.__rest || function (s, e) {
3004
+ var t = {};
3005
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
3006
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
3007
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
3008
+ }
3009
+ return t;
3010
+ };
3011
+
3012
+
3013
+
3014
+
3015
+
3016
+
3017
+
3018
+
3019
+
3020
+ // 버튼 크기마다 아이콘 크기. 버튼 지름은 size.css 의 --icon-button-size-*
3021
+ var ICON_SIZE = {
3022
+ s: 's',
3023
+ m: 'l',
3024
+ l: 'xl'
3025
+ };
3026
+ /** 아이콘 하나뿐인 버튼. 누르는 자리는 늘 터치 44 이상이다 */
3027
+ var IconButton = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
3028
+ var _a;
3029
+ var _b = (0,getMergedProps/* getMergedProps */.p)(props, iconButtonProps),
3030
+ className = _b.className,
3031
+ icon = _b.icon,
3032
+ label = _b.label,
3033
+ asChild = _b.asChild,
3034
+ children = _b.children,
3035
+ _onClick = _b.onClick,
3036
+ track = _b.track,
3037
+ trackProps = _b.trackProps,
3038
+ restProps = icon_button_rest(_b, ["className", "icon", "label", "asChild", "children", "onClick", "track", "trackProps"]);
3039
+ var emit = (0,useTrack/* useTrack */.n)('IconButton', {
3040
+ track: track,
3041
+ trackProps: trackProps
3042
+ });
3043
+ var content = (0,jsx_runtime_.jsx)(icon_icon/* default */.A, {
3044
+ name: icon,
3045
+ size: ICON_SIZE[(_a = props.size) !== null && _a !== void 0 ? _a : defaultSize]
3046
+ });
3047
+ var link = (0,fillLinkChild/* fillLinkChild */.Q)(asChild, children, content);
3048
+ return (0,jsx_runtime_.jsx)(base_icon_button, icon_button_assign({
3049
+ ref: ref,
3050
+ className: (0,classNames/* classNames */.x)(className, 'icon-button'),
3051
+ "aria-label": label,
3052
+ asChild: link !== null,
3053
+ onClick: function onClick(event) {
3054
+ emit('click');
3055
+ _onClick === null || _onClick === void 0 ? void 0 : _onClick(event);
3056
+ }
3057
+ }, restProps, {
3058
+ children: link !== null && link !== void 0 ? link : content
3059
+ }));
3060
+ });
3061
+ IconButton.displayName = 'IconButton';
3062
+ /* harmony default export */ const icon_button = (IconButton);
3063
+
3064
+ /***/ },
3065
+
3066
+ /***/ 9896
3067
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
3068
+
3069
+
3070
+ // EXPORTS
3071
+ __nuri_require__.d(__webpack_exports__, {
3072
+ A: () => (/* binding */ base_icon)
3073
+ });
3074
+
3075
+ // EXTERNAL MODULE: external {"root":"jsx-runtime","commonjs2":"react/jsx-runtime","commonjs":"react/jsx-runtime","amd":"react/jsx-runtime","module":"react/jsx-runtime"}
3076
+ var jsx_runtime_ = __nuri_require__(612);
3077
+ // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
3078
+ var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
3079
+ // EXTERNAL MODULE: ./helpers/utils/classNames.js
3080
+ var classNames = __nuri_require__(3274);
3081
+ ;// ./components/icon/icon-paths.ts
3082
+ // scripts/build-icons.mjs 가 만든다. 손으로 고치지 않는다.
3083
+ // Phosphor Icons (MIT, https://phosphoricons.com) — viewBox 0 0 256 256
3084
+ var iconPaths = {
3085
+ house: {
3086
+ regular: ['M219.31,108.68l-80-80a16,16,0,0,0-22.62,0l-80,80A15.87,15.87,0,0,0,32,120v96a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V160h32v56a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V120A15.87,15.87,0,0,0,219.31,108.68ZM208,208H160V152a8,8,0,0,0-8-8H104a8,8,0,0,0-8,8v56H48V120l80-80,80,80Z'],
3087
+ fill: ['M224,120v96a8,8,0,0,1-8,8H160a8,8,0,0,1-8-8V164a4,4,0,0,0-4-4H108a4,4,0,0,0-4,4v52a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V120a16,16,0,0,1,4.69-11.31l80-80a16,16,0,0,1,22.62,0l80,80A16,16,0,0,1,224,120Z']
3088
+ },
3089
+ 'megaphone-simple': {
3090
+ regular: ['M228.54,86.66l-176.06-54A16,16,0,0,0,32,48V192a16,16,0,0,0,16,16,16,16,0,0,0,4.52-.65L136,181.73V192a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16v-29.9l28.54-8.75A16.09,16.09,0,0,0,240,138V102A16.09,16.09,0,0,0,228.54,86.66ZM136,165,48,192V48l88,27Zm48,27H152V176.82L184,167Zm40-54-.11,0L152,160.08V79.92l71.89,22,.11,0v36Z'],
3091
+ fill: ['M228.54,86.66l-176.06-54A16,16,0,0,0,32,48V192a16,16,0,0,0,16,16,16,16,0,0,0,4.52-.65L136,181.73V192a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16v-29.9l28.54-8.75A16.09,16.09,0,0,0,240,138V102A16.09,16.09,0,0,0,228.54,86.66ZM184,192H152V176.82L184,167Zm40-54-.11,0L152,160.08V79.91L223.89,102l.11,0v36Z']
3092
+ },
3093
+ 'chats-circle': {
3094
+ regular: ['M232.07,186.76a80,80,0,0,0-62.5-114.17A80,80,0,1,0,23.93,138.76l-7.27,24.71a16,16,0,0,0,19.87,19.87l24.71-7.27a80.39,80.39,0,0,0,25.18,7.35,80,80,0,0,0,108.34,40.65l24.71,7.27a16,16,0,0,0,19.87-19.86ZM62,159.5a8.28,8.28,0,0,0-2.26.32L32,168l8.17-27.76a8,8,0,0,0-.63-6,64,64,0,1,1,26.26,26.26A8,8,0,0,0,62,159.5Zm153.79,28.73L224,216l-27.76-8.17a8,8,0,0,0-6,.63,64.05,64.05,0,0,1-85.87-24.88A79.93,79.93,0,0,0,174.7,89.71a64,64,0,0,1,41.75,92.48A8,8,0,0,0,215.82,188.23Z'],
3095
+ fill: ['M232.07,186.76a80,80,0,0,0-62.5-114.17A80,80,0,1,0,23.93,138.76l-7.27,24.71a16,16,0,0,0,19.87,19.87l24.71-7.27a80.39,80.39,0,0,0,25.18,7.35,80,80,0,0,0,108.34,40.65l24.71,7.27a16,16,0,0,0,19.87-19.86Zm-16.25,1.47L224,216l-27.76-8.17a8,8,0,0,0-6,.63,64.05,64.05,0,0,1-85.87-24.88A79.93,79.93,0,0,0,174.7,89.71a64,64,0,0,1,41.75,92.48A8,8,0,0,0,215.82,188.23Z']
3096
+ },
3097
+ 'user-circle': {
3098
+ regular: ['M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24ZM74.08,197.5a64,64,0,0,1,107.84,0,87.83,87.83,0,0,1-107.84,0ZM96,120a32,32,0,1,1,32,32A32,32,0,0,1,96,120Zm97.76,66.41a79.66,79.66,0,0,0-36.06-28.75,48,48,0,1,0-59.4,0,79.66,79.66,0,0,0-36.06,28.75,88,88,0,1,1,131.52,0Z'],
2504
3099
  fill: ['M172,120a44,44,0,1,1-44-44A44.05,44.05,0,0,1,172,120Zm60,8A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88.09,88.09,0,0,0-91.47-87.93C77.43,41.89,39.87,81.12,40,128.25a87.65,87.65,0,0,0,22.24,58.16A79.71,79.71,0,0,1,84,165.1a4,4,0,0,1,4.83.32,59.83,59.83,0,0,0,78.28,0,4,4,0,0,1,4.83-.32,79.71,79.71,0,0,1,21.79,21.31A87.62,87.62,0,0,0,216,128Z']
2505
3100
  },
2506
3101
  bell: {
@@ -2611,6 +3206,10 @@ var iconPaths = {
2611
3206
  regular: ['M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z'],
2612
3207
  fill: ['M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm45.66,85.66-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35a8,8,0,0,1,11.32,11.32Z']
2613
3208
  },
3209
+ circle: {
3210
+ regular: ['M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Z'],
3211
+ fill: ['M232,128A104,104,0,1,1,128,24,104.13,104.13,0,0,1,232,128Z']
3212
+ },
2614
3213
  check: {
2615
3214
  regular: ['M229.66,77.66l-128,128a8,8,0,0,1-11.32,0l-56-56a8,8,0,0,1,11.32-11.32L96,188.69,218.34,66.34a8,8,0,0,1,11.32,11.32Z'],
2616
3215
  fill: ['M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM205.66,85.66l-96,96a8,8,0,0,1-11.32,0l-40-40a8,8,0,0,1,11.32-11.32L104,164.69l90.34-90.35a8,8,0,0,1,11.32,11.32Z']
@@ -2762,7 +3361,1125 @@ var iconProps = {
2762
3361
 
2763
3362
  /***/ },
2764
3363
 
2765
- /***/ 3547
3364
+ /***/ 3547
3365
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
3366
+
3367
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
3368
+ /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
3369
+ /* harmony export */ });
3370
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
3371
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
3372
+ /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(3274);
3373
+ /* harmony import */ var _helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(7335);
3374
+ /* harmony import */ var _base_icon__WEBPACK_IMPORTED_MODULE_4__ = __nuri_require__(9896);
3375
+ /* harmony import */ var _icon_props__WEBPACK_IMPORTED_MODULE_5__ = __nuri_require__(6722);
3376
+ var __assign = undefined && undefined.__assign || function () {
3377
+ __assign = Object.assign || function (t) {
3378
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
3379
+ s = arguments[i];
3380
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
3381
+ }
3382
+ return t;
3383
+ };
3384
+ return __assign.apply(this, arguments);
3385
+ };
3386
+ var __rest = undefined && undefined.__rest || function (s, e) {
3387
+ var t = {};
3388
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
3389
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
3390
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
3391
+ }
3392
+ return t;
3393
+ };
3394
+
3395
+
3396
+
3397
+
3398
+
3399
+
3400
+ var Icon = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
3401
+ var _a = (0,_helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_3__/* .getMergedProps */ .p)(props, _icon_props__WEBPACK_IMPORTED_MODULE_5__/* .iconProps */ .u1),
3402
+ className = _a.className,
3403
+ restProps = __rest(_a, ["className"]);
3404
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_icon__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A, __assign({
3405
+ ref: ref,
3406
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__/* .classNames */ .x)(className, 'icon')
3407
+ }, restProps));
3408
+ });
3409
+ Icon.displayName = 'Icon';
3410
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Icon);
3411
+
3412
+ /***/ },
3413
+
3414
+ /***/ 9497
3415
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
3416
+
3417
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
3418
+ /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
3419
+ /* harmony export */ });
3420
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
3421
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
3422
+ /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(3274);
3423
+ /* harmony import */ var _core_composer__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(2777);
3424
+ var __assign = undefined && undefined.__assign || function () {
3425
+ __assign = Object.assign || function (t) {
3426
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
3427
+ s = arguments[i];
3428
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
3429
+ }
3430
+ return t;
3431
+ };
3432
+ return __assign.apply(this, arguments);
3433
+ };
3434
+ var __rest = undefined && undefined.__rest || function (s, e) {
3435
+ var t = {};
3436
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
3437
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
3438
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
3439
+ }
3440
+ return t;
3441
+ };
3442
+
3443
+
3444
+
3445
+
3446
+ var ListRootBase = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
3447
+ var className = props.className,
3448
+ restProps = __rest(props, ["className"]);
3449
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", __assign({
3450
+ ref: ref,
3451
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__/* .classNames */ .x)('nuri-theme base-list group', className)
3452
+ }, restProps));
3453
+ });
3454
+ ListRootBase.displayName = 'ListRoot';
3455
+ var ListRow = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
3456
+ var _a = props.asChild,
3457
+ asChild = _a === void 0 ? false : _a,
3458
+ className = props.className,
3459
+ restProps = __rest(props, ["asChild", "className"]);
3460
+ var Comp = asChild ? _core_composer__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A : 'div';
3461
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Comp, __assign({
3462
+ ref: ref,
3463
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__/* .classNames */ .x)('nuri-theme base-list row', className)
3464
+ }, restProps));
3465
+ });
3466
+ ListRow.displayName = 'ListRow';
3467
+ var ListRoot = Object.assign(ListRootBase, {
3468
+ Row: ListRow
3469
+ });
3470
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ListRoot);
3471
+
3472
+ /***/ },
3473
+
3474
+ /***/ 2779
3475
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
3476
+
3477
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
3478
+ /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
3479
+ /* harmony export */ });
3480
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
3481
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
3482
+ /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(3274);
3483
+ /* harmony import */ var _helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(7335);
3484
+ /* harmony import */ var _base_list__WEBPACK_IMPORTED_MODULE_4__ = __nuri_require__(9497);
3485
+ /* harmony import */ var _list_props__WEBPACK_IMPORTED_MODULE_5__ = __nuri_require__(1212);
3486
+ var __assign = undefined && undefined.__assign || function () {
3487
+ __assign = Object.assign || function (t) {
3488
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
3489
+ s = arguments[i];
3490
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
3491
+ }
3492
+ return t;
3493
+ };
3494
+ return __assign.apply(this, arguments);
3495
+ };
3496
+ var __rest = undefined && undefined.__rest || function (s, e) {
3497
+ var t = {};
3498
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
3499
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
3500
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
3501
+ }
3502
+ return t;
3503
+ };
3504
+
3505
+
3506
+
3507
+
3508
+
3509
+
3510
+ /** ListRow 를 흰 면 하나에 묶는다. label 을 주면 면 위에 작은 제목을 달고 그룹 이름으로 쓴다 */
3511
+ var ListGroup = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
3512
+ var _a = (0,_helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_3__/* .getMergedProps */ .p)(props, _list_props__WEBPACK_IMPORTED_MODULE_5__/* .listGroupProps */ .e),
3513
+ className = _a.className,
3514
+ label = _a.label,
3515
+ children = _a.children,
3516
+ restProps = __rest(_a, ["className", "label", "children"]);
3517
+ var labelId = (0,react__WEBPACK_IMPORTED_MODULE_1__.useId)();
3518
+ var hasLabel = label !== undefined && label !== null;
3519
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_base_list__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A, __assign({
3520
+ ref: ref,
3521
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__/* .classNames */ .x)(className, 'list-group'),
3522
+ role: hasLabel ? 'group' : undefined,
3523
+ "aria-labelledby": hasLabel ? labelId : undefined
3524
+ }, restProps, {
3525
+ children: [hasLabel ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", {
3526
+ id: labelId,
3527
+ className: 'list-group-label',
3528
+ children: label
3529
+ }) : null, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", {
3530
+ className: 'list-group-surface',
3531
+ children: children
3532
+ })]
3533
+ }));
3534
+ });
3535
+ ListGroup.displayName = 'ListGroup';
3536
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ListGroup);
3537
+
3538
+ /***/ },
3539
+
3540
+ /***/ 1212
3541
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
3542
+
3543
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
3544
+ /* harmony export */ R: () => (/* binding */ listRowProps),
3545
+ /* harmony export */ e: () => (/* binding */ listGroupProps)
3546
+ /* harmony export */ });
3547
+ // 크기·변형이 없다. 행 높이는 --list-row-height 부터, 면은 한 모양이다.
3548
+ var listGroupProps = {};
3549
+ var listRowProps = {};
3550
+
3551
+ /***/ },
3552
+
3553
+ /***/ 2082
3554
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
3555
+
3556
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
3557
+ /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
3558
+ /* harmony export */ });
3559
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
3560
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
3561
+ /* harmony import */ var _helpers_hooks_useTrack__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(4560);
3562
+ /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(3274);
3563
+ /* harmony import */ var _helpers_utils_fillLinkChild__WEBPACK_IMPORTED_MODULE_4__ = __nuri_require__(1176);
3564
+ /* harmony import */ var _helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_5__ = __nuri_require__(7335);
3565
+ /* harmony import */ var _icon_icon__WEBPACK_IMPORTED_MODULE_6__ = __nuri_require__(3547);
3566
+ /* harmony import */ var _base_list__WEBPACK_IMPORTED_MODULE_7__ = __nuri_require__(9497);
3567
+ /* harmony import */ var _list_props__WEBPACK_IMPORTED_MODULE_8__ = __nuri_require__(1212);
3568
+ var __assign = undefined && undefined.__assign || function () {
3569
+ __assign = Object.assign || function (t) {
3570
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
3571
+ s = arguments[i];
3572
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
3573
+ }
3574
+ return t;
3575
+ };
3576
+ return __assign.apply(this, arguments);
3577
+ };
3578
+ var __rest = undefined && undefined.__rest || function (s, e) {
3579
+ var t = {};
3580
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
3581
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
3582
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
3583
+ }
3584
+ return t;
3585
+ };
3586
+
3587
+
3588
+
3589
+
3590
+
3591
+
3592
+
3593
+
3594
+
3595
+ /** 목록 한 줄. onClick 이면 button, asChild 면 넘긴 링크가 행이 된다. 둘 다 없으면 div 다 */
3596
+ var ListRow = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
3597
+ var _a = (0,_helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_5__/* .getMergedProps */ .p)(props, _list_props__WEBPACK_IMPORTED_MODULE_8__/* .listRowProps */ .R),
3598
+ className = _a.className,
3599
+ label = _a.label,
3600
+ description = _a.description,
3601
+ leading = _a.leading,
3602
+ trailing = _a.trailing,
3603
+ chevron = _a.chevron,
3604
+ asChild = _a.asChild,
3605
+ onClick = _a.onClick,
3606
+ children = _a.children,
3607
+ track = _a.track,
3608
+ trackProps = _a.trackProps,
3609
+ restProps = __rest(_a, ["className", "label", "description", "leading", "trailing", "chevron", "asChild", "onClick", "children", "track", "trackProps"]);
3610
+ var emit = (0,_helpers_hooks_useTrack__WEBPACK_IMPORTED_MODULE_2__/* .useTrack */ .n)('ListRow', {
3611
+ track: track,
3612
+ trackProps: trackProps
3613
+ });
3614
+ // 링크 요소를 받았을 때만 링크 행이다. 아니면 div 로 그리고 화살표도 없다
3615
+ var isLink = asChild === true && /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.isValidElement)(children);
3616
+ var showChevron = chevron !== null && chevron !== void 0 ? chevron : isLink || onClick !== undefined;
3617
+ var content = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
3618
+ children: [leading ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", {
3619
+ className: 'list-row-leading',
3620
+ children: leading
3621
+ }) : null, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", {
3622
+ className: 'list-row-text',
3623
+ children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", {
3624
+ className: 'list-row-label',
3625
+ children: label
3626
+ }), description ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", {
3627
+ className: 'list-row-description',
3628
+ children: description
3629
+ }) : null]
3630
+ }), trailing ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", {
3631
+ className: 'list-row-trailing',
3632
+ children: trailing
3633
+ }) : null, showChevron ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_icon_icon__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A, {
3634
+ className: 'list-row-chevron',
3635
+ name: 'caret-right',
3636
+ size: 's'
3637
+ }) : null]
3638
+ });
3639
+ // 넘겨받은 링크가 있으면 그 안에, onClick 이면 button 안에 행 내용을 넣는다. 둘 다 없으면 base 의 div 다
3640
+ var buttonRow = onClick ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", {
3641
+ type: 'button',
3642
+ children: content
3643
+ }) : null;
3644
+ var link = (0,_helpers_utils_fillLinkChild__WEBPACK_IMPORTED_MODULE_4__/* .fillLinkChild */ .Q)(asChild, children, content);
3645
+ var rowElement = link !== null && link !== void 0 ? link : buttonRow;
3646
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_list__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.Row, __assign({
3647
+ ref: ref,
3648
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__/* .classNames */ .x)(className, 'list-row'),
3649
+ asChild: rowElement !== null,
3650
+ // 링크 행은 다른 화면으로 옮기고 버튼 행은 그 자리에서 동작한다. 보기만 하는 행은 보내지 않는다
3651
+ onClick: rowElement ? function (event) {
3652
+ emit(link ? 'navigate' : 'click');
3653
+ onClick === null || onClick === void 0 ? void 0 : onClick(event);
3654
+ } : undefined
3655
+ }, restProps, {
3656
+ children: rowElement !== null && rowElement !== void 0 ? rowElement : content
3657
+ }));
3658
+ });
3659
+ ListRow.displayName = 'ListRow';
3660
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ListRow);
3661
+
3662
+ /***/ },
3663
+
3664
+ /***/ 6302
3665
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
3666
+
3667
+
3668
+ // EXPORTS
3669
+ __nuri_require__.d(__webpack_exports__, {
3670
+ A: () => (/* binding */ spinner)
3671
+ });
3672
+
3673
+ // EXTERNAL MODULE: external {"root":"jsx-runtime","commonjs2":"react/jsx-runtime","commonjs":"react/jsx-runtime","amd":"react/jsx-runtime","module":"react/jsx-runtime"}
3674
+ var jsx_runtime_ = __nuri_require__(612);
3675
+ // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
3676
+ var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
3677
+ // EXTERNAL MODULE: ./helpers/utils/classNames.js
3678
+ var classNames = __nuri_require__(3274);
3679
+ // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
3680
+ var getMergedProps = __nuri_require__(7335);
3681
+ ;// ./components/loading/spinner/base-spinner.tsx
3682
+ var __assign = undefined && undefined.__assign || function () {
3683
+ __assign = Object.assign || function (t) {
3684
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
3685
+ s = arguments[i];
3686
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
3687
+ }
3688
+ return t;
3689
+ };
3690
+ return __assign.apply(this, arguments);
3691
+ };
3692
+ var __rest = undefined && undefined.__rest || function (s, e) {
3693
+ var t = {};
3694
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
3695
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
3696
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
3697
+ }
3698
+ return t;
3699
+ };
3700
+
3701
+
3702
+
3703
+ var BaseSpinner = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
3704
+ var className = props.className,
3705
+ restProps = __rest(props, ["className"]);
3706
+ return (0,jsx_runtime_.jsx)("div", __assign({
3707
+ ref: ref,
3708
+ className: (0,classNames/* classNames */.x)('nuri-theme base-spinner', className)
3709
+ }, restProps, {
3710
+ children: (0,jsx_runtime_.jsx)("div", {
3711
+ className: 'loading-indicator-ring',
3712
+ children: [0, 1, 2, 3].map(function (i) {
3713
+ return (0,jsx_runtime_.jsx)("div", {
3714
+ className: 'loading-indicator-single-ring'
3715
+ }, i);
3716
+ })
3717
+ })
3718
+ }));
3719
+ });
3720
+ BaseSpinner.displayName = 'BaseSpinner';
3721
+ /* harmony default export */ const base_spinner = (BaseSpinner);
3722
+ ;// ./components/loading/spinner/spinner-props.ts
3723
+ var spinnerProps = {};
3724
+ ;// ./components/loading/spinner/spinner.tsx
3725
+ var spinner_assign = undefined && undefined.__assign || function () {
3726
+ spinner_assign = Object.assign || function (t) {
3727
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
3728
+ s = arguments[i];
3729
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
3730
+ }
3731
+ return t;
3732
+ };
3733
+ return spinner_assign.apply(this, arguments);
3734
+ };
3735
+ var spinner_rest = undefined && undefined.__rest || function (s, e) {
3736
+ var t = {};
3737
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
3738
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
3739
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
3740
+ }
3741
+ return t;
3742
+ };
3743
+
3744
+
3745
+
3746
+
3747
+
3748
+
3749
+ var Spinner = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
3750
+ var _a = (0,getMergedProps/* getMergedProps */.p)(props, spinnerProps),
3751
+ className = _a.className,
3752
+ restProps = spinner_rest(_a, ["className"]);
3753
+ return (0,jsx_runtime_.jsx)(base_spinner, spinner_assign({
3754
+ ref: ref,
3755
+ className: (0,classNames/* classNames */.x)(className, 'component-loading-container')
3756
+ }, restProps));
3757
+ });
3758
+ Spinner.displayName = 'Spinner';
3759
+ /* harmony default export */ const spinner = (Spinner);
3760
+
3761
+ /***/ },
3762
+
3763
+ /***/ 4804
3764
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
3765
+
3766
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
3767
+ /* harmony export */ _: () => (/* binding */ LogProvider),
3768
+ /* harmony export */ e: () => (/* binding */ useLogEmitter)
3769
+ /* harmony export */ });
3770
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
3771
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
3772
+ var _a;
3773
+
3774
+
3775
+ // 진입점(`/logging`, `/cta-button`, 루트)마다 이 파일이 따로 들어가므로 context 는 전역 키 하나에 둔다.
3776
+ var CONTEXT_KEY = Symbol["for"]('@nurihaus/web-design-system/log-provider');
3777
+ var registry = globalThis;
3778
+ var LogContext = (_a = registry[CONTEXT_KEY]) !== null && _a !== void 0 ? _a : registry[CONTEXT_KEY] = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)(null);
3779
+ var LogProvider = function LogProvider(props) {
3780
+ var onEvent = props.onEvent,
3781
+ children = props.children;
3782
+ // context 값이 Provider 렌더마다 바뀌면 track 을 단 컴포넌트가 모두 다시 그려진다. 최신 onEvent 는 ref 로 읽는다.
3783
+ var onEventRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(onEvent);
3784
+ onEventRef.current = onEvent;
3785
+ var emit = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function (event) {
3786
+ // 로그 수집기가 던져도 클릭·열기 같은 UI 동작은 이어져야 한다.
3787
+ try {
3788
+ onEventRef.current(event);
3789
+ } catch (error) {
3790
+ console.error('[LogProvider] onEvent threw', error);
3791
+ }
3792
+ }, []);
3793
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(LogContext.Provider, {
3794
+ value: emit,
3795
+ children: children
3796
+ });
3797
+ };
3798
+ LogProvider.displayName = 'LogProvider';
3799
+ /** LogProvider 가 둔 emit 함수. Provider 밖이면 null 이다. */
3800
+ var useLogEmitter = function useLogEmitter() {
3801
+ return (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(LogContext);
3802
+ };
3803
+
3804
+ /***/ },
3805
+
3806
+ /***/ 7111
3807
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
3808
+
3809
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
3810
+ /* harmony export */ e: () => (/* binding */ useLog)
3811
+ /* harmony export */ });
3812
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(1041);
3813
+ /* harmony import */ var _log_context__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(4804);
3814
+ var __assign = undefined && undefined.__assign || function () {
3815
+ __assign = Object.assign || function (t) {
3816
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
3817
+ s = arguments[i];
3818
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
3819
+ }
3820
+ return t;
3821
+ };
3822
+ return __assign.apply(this, arguments);
3823
+ };
3824
+
3825
+
3826
+
3827
+ /** 컴포넌트 밖의 사용 로그를 남긴다. LogProvider 밖이면 아무것도 하지 않는다. */
3828
+ var useLog = function useLog() {
3829
+ var emit = (0,_log_context__WEBPACK_IMPORTED_MODULE_1__/* .useLogEmitter */ .e)();
3830
+ return (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function (event) {
3831
+ return emit === null || emit === void 0 ? void 0 : emit(__assign(__assign({}, event), {
3832
+ timestamp: Date.now()
3833
+ }));
3834
+ }, [emit]);
3835
+ };
3836
+
3837
+ /***/ },
3838
+
3839
+ /***/ 6459
3840
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
3841
+
3842
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
3843
+ /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
3844
+ /* harmony export */ });
3845
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
3846
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
3847
+ /* harmony import */ var radix_ui__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(0);
3848
+ /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(3274);
3849
+ var __assign = undefined && undefined.__assign || function () {
3850
+ __assign = Object.assign || function (t) {
3851
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
3852
+ s = arguments[i];
3853
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
3854
+ }
3855
+ return t;
3856
+ };
3857
+ return __assign.apply(this, arguments);
3858
+ };
3859
+ var __rest = undefined && undefined.__rest || function (s, e) {
3860
+ var t = {};
3861
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
3862
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
3863
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
3864
+ }
3865
+ return t;
3866
+ };
3867
+
3868
+
3869
+
3870
+
3871
+ // Dialog.Root 는 DOM 을 그리지 않아 ref 를 받을 곳이 없다.
3872
+ var MediaViewerRootBase = function MediaViewerRootBase(props) {
3873
+ var children = props.children,
3874
+ open = props.open,
3875
+ defaultOpen = props.defaultOpen,
3876
+ onOpenChange = props.onOpenChange;
3877
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_2__.Dialog.Root, {
3878
+ open: open,
3879
+ defaultOpen: defaultOpen,
3880
+ onOpenChange: onOpenChange,
3881
+ children: children
3882
+ });
3883
+ };
3884
+ MediaViewerRootBase.displayName = 'MediaViewerRoot';
3885
+ var MediaViewerTrigger = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
3886
+ var className = props.className,
3887
+ restProps = __rest(props, ["className"]);
3888
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_2__.Dialog.Trigger, __assign({
3889
+ ref: ref,
3890
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__/* .classNames */ .x)('nuri-theme base-media trigger', className)
3891
+ }, restProps));
3892
+ });
3893
+ MediaViewerTrigger.displayName = 'MediaViewerTrigger';
3894
+ // Portal 과 Overlay 를 같이 그린다. 화면 전체를 덮는 Dialog.Content 가 ref 를 받는다.
3895
+ var MediaViewerContent = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
3896
+ var className = props.className,
3897
+ restProps = __rest(props, ["className"]);
3898
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(radix_ui__WEBPACK_IMPORTED_MODULE_2__.Dialog.Portal, {
3899
+ children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_2__.Dialog.Overlay, {
3900
+ className: 'nuri-theme base-media overlay'
3901
+ }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_2__.Dialog.Content, __assign({
3902
+ ref: ref,
3903
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__/* .classNames */ .x)('nuri-theme base-media content', className)
3904
+ }, restProps))]
3905
+ });
3906
+ });
3907
+ MediaViewerContent.displayName = 'MediaViewerContent';
3908
+ // 접근성 이름만 준다. 화면에는 사진만 보인다.
3909
+ var MediaViewerTitle = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
3910
+ var className = props.className,
3911
+ restProps = __rest(props, ["className"]);
3912
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_2__.VisuallyHidden.Root, {
3913
+ asChild: true,
3914
+ children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_2__.Dialog.Title, __assign({
3915
+ ref: ref,
3916
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__/* .classNames */ .x)('nuri-theme base-media title', className)
3917
+ }, restProps))
3918
+ });
3919
+ });
3920
+ MediaViewerTitle.displayName = 'MediaViewerTitle';
3921
+ var MediaViewerClose = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
3922
+ var className = props.className,
3923
+ restProps = __rest(props, ["className"]);
3924
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(radix_ui__WEBPACK_IMPORTED_MODULE_2__.Dialog.Close, __assign({
3925
+ ref: ref,
3926
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__/* .classNames */ .x)('nuri-theme base-media close', className)
3927
+ }, restProps));
3928
+ });
3929
+ MediaViewerClose.displayName = 'MediaViewerClose';
3930
+ var MediaViewerRoot = Object.assign(MediaViewerRootBase, {
3931
+ Trigger: MediaViewerTrigger,
3932
+ Content: MediaViewerContent,
3933
+ Title: MediaViewerTitle,
3934
+ Close: MediaViewerClose
3935
+ });
3936
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MediaViewerRoot);
3937
+
3938
+ /***/ },
3939
+
3940
+ /***/ 946
3941
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
3942
+
3943
+
3944
+ // EXPORTS
3945
+ __nuri_require__.d(__webpack_exports__, {
3946
+ A: () => (/* binding */ media_thumbnail)
3947
+ });
3948
+
3949
+ // EXTERNAL MODULE: external {"root":"jsx-runtime","commonjs2":"react/jsx-runtime","commonjs":"react/jsx-runtime","amd":"react/jsx-runtime","module":"react/jsx-runtime"}
3950
+ var jsx_runtime_ = __nuri_require__(612);
3951
+ // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
3952
+ var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
3953
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
3954
+ var useTrack = __nuri_require__(4560);
3955
+ // EXTERNAL MODULE: ./helpers/utils/classNames.js
3956
+ var classNames = __nuri_require__(3274);
3957
+ // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
3958
+ var getMergedProps = __nuri_require__(7335);
3959
+ // EXTERNAL MODULE: ./components/button/base-button.tsx
3960
+ var base_button = __nuri_require__(8933);
3961
+ // EXTERNAL MODULE: ./components/icon/icon.tsx
3962
+ var icon = __nuri_require__(3547);
3963
+ // EXTERNAL MODULE: ./components/loading/spinner/spinner.tsx + 2 modules
3964
+ var spinner = __nuri_require__(6302);
3965
+ // EXTERNAL MODULE: ./helpers/props/common-props.ts
3966
+ var common_props = __nuri_require__(7298);
3967
+ ;// ./components/media/media-props.ts
3968
+
3969
+ var sizes = ['s', 'm', 'l'];
3970
+ var mediaTypes = (/* unused pure expression or super */ null && (['image', 'video']));
3971
+ var mediaThumbnailProps = {
3972
+ size: (0,common_props/* sizeProp */.lw)(sizes, 'm')
3973
+ };
3974
+ // EXTERNAL MODULE: ./components/media/media-viewer.tsx
3975
+ var media_viewer = __nuri_require__(4268);
3976
+ ;// ./components/media/media-thumbnail.tsx
3977
+
3978
+
3979
+
3980
+
3981
+
3982
+
3983
+
3984
+
3985
+
3986
+
3987
+ // 버튼 안에 버튼을 둘 수 없어 여는 버튼과 지우기 버튼을 형제로 두고 div 로 감싼다. ref 는 그 div 다.
3988
+ var MediaThumbnail = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
3989
+ var _a = (0,getMergedProps/* getMergedProps */.p)(props, mediaThumbnailProps),
3990
+ src = _a.src,
3991
+ _b = _a.type,
3992
+ type = _b === void 0 ? 'image' : _b,
3993
+ alt = _a.alt,
3994
+ viewLabel = _a.viewLabel,
3995
+ closeLabel = _a.closeLabel,
3996
+ loading = _a.loading,
3997
+ invalid = _a.invalid,
3998
+ onRemove = _a.onRemove,
3999
+ removeLabel = _a.removeLabel,
4000
+ className = _a.className,
4001
+ style = _a.style,
4002
+ track = _a.track,
4003
+ trackProps = _a.trackProps;
4004
+ var emit = (0,useTrack/* useTrack */.n)('MediaThumbnail', {
4005
+ track: track,
4006
+ trackProps: trackProps
4007
+ });
4008
+ return (0,jsx_runtime_.jsxs)("div", {
4009
+ ref: ref,
4010
+ className: (0,classNames/* classNames */.x)('nuri-theme base-media', className, 'media-thumbnail'),
4011
+ style: style,
4012
+ children: [(0,jsx_runtime_.jsx)(media_viewer/* default */.A, {
4013
+ src: src,
4014
+ type: type,
4015
+ alt: alt,
4016
+ title: alt !== null && alt !== void 0 ? alt : viewLabel,
4017
+ closeLabel: closeLabel,
4018
+ onOpenChange: function onOpenChange(next) {
4019
+ return next && emit('open');
4020
+ },
4021
+ trigger: (0,jsx_runtime_.jsxs)(base_button/* default */.A, {
4022
+ className: 'media-thumbnail-open',
4023
+ "aria-label": alt !== null && alt !== void 0 ? alt : viewLabel,
4024
+ "aria-busy": loading || undefined,
4025
+ disabled: loading || invalid,
4026
+ "data-invalid": invalid || undefined,
4027
+ children: [type === 'video' ? (0,jsx_runtime_.jsxs)(jsx_runtime_.Fragment, {
4028
+ children: [(0,jsx_runtime_.jsx)("video", {
4029
+ className: 'media-thumbnail-media',
4030
+ src: "".concat(src, "#t=0.001"),
4031
+ preload: 'metadata',
4032
+ muted: true,
4033
+ playsInline: true
4034
+ }), (0,jsx_runtime_.jsx)("span", {
4035
+ className: 'media-thumbnail-play',
4036
+ children: (0,jsx_runtime_.jsx)(icon/* default */.A, {
4037
+ name: 'play',
4038
+ weight: 'fill',
4039
+ size: 's'
4040
+ })
4041
+ })]
4042
+ }) : (0,jsx_runtime_.jsx)("img", {
4043
+ className: 'media-thumbnail-media',
4044
+ src: src,
4045
+ alt: '',
4046
+ loading: 'lazy'
4047
+ }), loading && (0,jsx_runtime_.jsx)("span", {
4048
+ className: 'media-thumbnail-loading',
4049
+ children: (0,jsx_runtime_.jsx)(spinner/* default */.A, {
4050
+ className: 'media-thumbnail-spinner'
4051
+ })
4052
+ })]
4053
+ })
4054
+ }), onRemove && (0,jsx_runtime_.jsx)(base_button/* default */.A, {
4055
+ className: 'media-thumbnail-remove',
4056
+ type: 'button',
4057
+ "aria-label": removeLabel,
4058
+ onClick: onRemove,
4059
+ children: (0,jsx_runtime_.jsx)(icon/* default */.A, {
4060
+ name: 'x',
4061
+ size: 'xs'
4062
+ })
4063
+ })]
4064
+ });
4065
+ });
4066
+ MediaThumbnail.displayName = 'MediaThumbnail';
4067
+ /* harmony default export */ const media_thumbnail = (MediaThumbnail);
4068
+
4069
+ /***/ },
4070
+
4071
+ /***/ 4268
4072
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
4073
+
4074
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
4075
+ /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
4076
+ /* harmony export */ });
4077
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
4078
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
4079
+ /* harmony import */ var _helpers_hooks_useTrack__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(4560);
4080
+ /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(3274);
4081
+ /* harmony import */ var _icon_icon__WEBPACK_IMPORTED_MODULE_4__ = __nuri_require__(3547);
4082
+ /* harmony import */ var _base_media__WEBPACK_IMPORTED_MODULE_5__ = __nuri_require__(6459);
4083
+
4084
+
4085
+
4086
+
4087
+
4088
+
4089
+ // ref 는 화면 전체를 덮는 Dialog.Content div 에 붙는다. Root 는 DOM 을 그리지 않는다.
4090
+ // 닫히면 Content 가 빠지므로 영상도 함께 빠져 재생이 멈춘다.
4091
+ var MediaViewer = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
4092
+ var trigger = props.trigger,
4093
+ open = props.open,
4094
+ defaultOpen = props.defaultOpen,
4095
+ _onOpenChange = props.onOpenChange,
4096
+ src = props.src,
4097
+ _a = props.type,
4098
+ type = _a === void 0 ? 'image' : _a,
4099
+ alt = props.alt,
4100
+ title = props.title,
4101
+ closeLabel = props.closeLabel,
4102
+ className = props.className,
4103
+ style = props.style,
4104
+ track = props.track,
4105
+ trackProps = props.trackProps;
4106
+ var emit = (0,_helpers_hooks_useTrack__WEBPACK_IMPORTED_MODULE_2__/* .useTrack */ .n)('MediaViewer', {
4107
+ track: track,
4108
+ trackProps: trackProps
4109
+ });
4110
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_base_media__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A, {
4111
+ open: open,
4112
+ defaultOpen: defaultOpen,
4113
+ onOpenChange: function onOpenChange(next) {
4114
+ emit(next ? 'open' : 'close');
4115
+ _onOpenChange === null || _onOpenChange === void 0 ? void 0 : _onOpenChange(next);
4116
+ },
4117
+ children: [trigger && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_media__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A.Trigger, {
4118
+ asChild: true,
4119
+ children: trigger
4120
+ }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_base_media__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A.Content, {
4121
+ ref: ref,
4122
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__/* .classNames */ .x)(className, 'media-viewer'),
4123
+ style: style,
4124
+ "aria-describedby": undefined,
4125
+ children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_media__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A.Title, {
4126
+ children: title !== null && title !== void 0 ? title : alt
4127
+ }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_media__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A.Close, {
4128
+ className: 'media-viewer-close',
4129
+ "aria-label": closeLabel,
4130
+ children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_icon_icon__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A, {
4131
+ name: 'x',
4132
+ size: 'l'
4133
+ })
4134
+ }), type === 'video' ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("video", {
4135
+ className: 'media-viewer-media',
4136
+ src: src,
4137
+ controls: true,
4138
+ autoPlay: true,
4139
+ playsInline: true
4140
+ }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("img", {
4141
+ className: 'media-viewer-media',
4142
+ src: src,
4143
+ alt: alt !== null && alt !== void 0 ? alt : ''
4144
+ })]
4145
+ })]
4146
+ });
4147
+ });
4148
+ MediaViewer.displayName = 'MediaViewer';
4149
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MediaViewer);
4150
+
4151
+ /***/ },
4152
+
4153
+ /***/ 2045
4154
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
4155
+
4156
+
4157
+ // EXPORTS
4158
+ __nuri_require__.d(__webpack_exports__, {
4159
+ A: () => (/* binding */ message_composer)
4160
+ });
4161
+
4162
+ // EXTERNAL MODULE: external {"root":"jsx-runtime","commonjs2":"react/jsx-runtime","commonjs":"react/jsx-runtime","amd":"react/jsx-runtime","module":"react/jsx-runtime"}
4163
+ var jsx_runtime_ = __nuri_require__(612);
4164
+ // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
4165
+ var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
4166
+ // EXTERNAL MODULE: ./helpers/hooks/useExternalState.ts
4167
+ var useExternalState = __nuri_require__(9387);
4168
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
4169
+ var useTrack = __nuri_require__(4560);
4170
+ // EXTERNAL MODULE: ./helpers/utils/classNames.js
4171
+ var classNames = __nuri_require__(3274);
4172
+ // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
4173
+ var getMergedProps = __nuri_require__(7335);
4174
+ // EXTERNAL MODULE: ./components/icon/icon.tsx
4175
+ var icon = __nuri_require__(3547);
4176
+ // EXTERNAL MODULE: ./components/loading/spinner/spinner.tsx + 2 modules
4177
+ var spinner = __nuri_require__(6302);
4178
+ ;// ./components/message-composer/base-message-composer.tsx
4179
+ var __assign = undefined && undefined.__assign || function () {
4180
+ __assign = Object.assign || function (t) {
4181
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4182
+ s = arguments[i];
4183
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
4184
+ }
4185
+ return t;
4186
+ };
4187
+ return __assign.apply(this, arguments);
4188
+ };
4189
+ var __rest = undefined && undefined.__rest || function (s, e) {
4190
+ var t = {};
4191
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
4192
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
4193
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
4194
+ }
4195
+ return t;
4196
+ };
4197
+
4198
+
4199
+
4200
+ var MessageComposerRootBase = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
4201
+ var className = props.className,
4202
+ restProps = __rest(props, ["className"]);
4203
+ return (0,jsx_runtime_.jsx)("div", __assign({
4204
+ ref: ref,
4205
+ className: (0,classNames/* classNames */.x)('nuri-theme base-message-composer root', className)
4206
+ }, restProps));
4207
+ });
4208
+ MessageComposerRootBase.displayName = 'MessageComposerRoot';
4209
+ var MessageComposerTextarea = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
4210
+ var className = props.className,
4211
+ disabled = props.disabled,
4212
+ restProps = __rest(props, ["className", "disabled"]);
4213
+ return (0,jsx_runtime_.jsx)("textarea", __assign({
4214
+ ref: ref,
4215
+ className: (0,classNames/* classNames */.x)('nuri-theme base-message-composer textarea', className),
4216
+ rows: 1,
4217
+ disabled: disabled,
4218
+ "data-disabled": disabled || undefined
4219
+ }, restProps));
4220
+ });
4221
+ MessageComposerTextarea.displayName = 'MessageComposerTextarea';
4222
+ var MessageComposerSend = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
4223
+ var className = props.className,
4224
+ _onMouseDown = props.onMouseDown,
4225
+ restProps = __rest(props, ["className", "onMouseDown"]);
4226
+ return (0,jsx_runtime_.jsx)("button", __assign({
4227
+ ref: ref,
4228
+ className: (0,classNames/* classNames */.x)('nuri-theme base-message-composer send', className),
4229
+ type: 'button'
4230
+ }, restProps, {
4231
+ // 눌러도 입력 칸 포커스를 빼앗지 않는다(휴대폰 자판이 닫히지 않게). 넘겨받은 onMouseDown 이 덮지 않게 spread 뒤에 둔다.
4232
+ onMouseDown: function onMouseDown(e) {
4233
+ e.preventDefault();
4234
+ _onMouseDown === null || _onMouseDown === void 0 ? void 0 : _onMouseDown(e);
4235
+ }
4236
+ }));
4237
+ });
4238
+ MessageComposerSend.displayName = 'MessageComposerSend';
4239
+ var MessageComposerRoot = Object.assign(MessageComposerRootBase, {
4240
+ Textarea: MessageComposerTextarea,
4241
+ Send: MessageComposerSend
4242
+ });
4243
+ /* harmony default export */ const base_message_composer = (MessageComposerRoot);
4244
+ ;// ./components/message-composer/message-composer-props.ts
4245
+ var messageComposerProps = {};
4246
+ ;// ./components/message-composer/message-composer.tsx
4247
+ var message_composer_assign = undefined && undefined.__assign || function () {
4248
+ message_composer_assign = Object.assign || function (t) {
4249
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4250
+ s = arguments[i];
4251
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
4252
+ }
4253
+ return t;
4254
+ };
4255
+ return message_composer_assign.apply(this, arguments);
4256
+ };
4257
+ var message_composer_rest = undefined && undefined.__rest || function (s, e) {
4258
+ var t = {};
4259
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
4260
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
4261
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
4262
+ }
4263
+ return t;
4264
+ };
4265
+
4266
+
4267
+
4268
+
4269
+
4270
+
4271
+
4272
+
4273
+
4274
+
4275
+ /** 대화 입력 줄. Enter 는 줄바꿈이고 보내기는 버튼으로만 한다. 보낸 뒤 값을 비우는 것은 쓰는 쪽이다 */
4276
+ var MessageComposer = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
4277
+ var _a = (0,getMergedProps/* getMergedProps */.p)(props, messageComposerProps),
4278
+ className = _a.className,
4279
+ valueProp = _a.value,
4280
+ defaultValue = _a.defaultValue,
4281
+ onValueChange = _a.onValueChange,
4282
+ onSend = _a.onSend,
4283
+ canSend = _a.canSend,
4284
+ loading = _a.loading,
4285
+ placeholder = _a.placeholder,
4286
+ label = _a.label,
4287
+ sendLabel = _a.sendLabel,
4288
+ leading = _a.leading,
4289
+ attachments = _a.attachments,
4290
+ disabled = _a.disabled,
4291
+ autoFocus = _a.autoFocus,
4292
+ maxLength = _a.maxLength,
4293
+ track = _a.track,
4294
+ trackProps = _a.trackProps,
4295
+ restProps = message_composer_rest(_a, ["className", "value", "defaultValue", "onValueChange", "onSend", "canSend", "loading", "placeholder", "label", "sendLabel", "leading", "attachments", "disabled", "autoFocus", "maxLength", "track", "trackProps"]);
4296
+ var _b = (0,useExternalState/* useExternalState */.C)({
4297
+ prop: valueProp,
4298
+ handler: onValueChange,
4299
+ defaultProp: defaultValue !== null && defaultValue !== void 0 ? defaultValue : ''
4300
+ }),
4301
+ value = _b[0],
4302
+ setValue = _b[1];
4303
+ var emit = (0,useTrack/* useTrack */.n)('MessageComposer', {
4304
+ track: track,
4305
+ trackProps: trackProps
4306
+ });
4307
+ var _c = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.useState)(false),
4308
+ rejecting = _c[0],
4309
+ setRejecting = _c[1];
4310
+ var blocked = disabled || !(canSend !== null && canSend !== void 0 ? canSend : value.trim() !== '');
4311
+ var handleSend = function handleSend() {
4312
+ if (loading) return;
4313
+ if (blocked) {
4314
+ setRejecting(true);
4315
+ return;
4316
+ }
4317
+ emit('click');
4318
+ onSend(value);
4319
+ };
4320
+ return (0,jsx_runtime_.jsxs)(base_message_composer, message_composer_assign({
4321
+ ref: ref,
4322
+ className: (0,classNames/* classNames */.x)(className, 'message-composer')
4323
+ }, restProps, {
4324
+ children: [attachments && (0,jsx_runtime_.jsx)("div", {
4325
+ className: 'message-composer-attachments',
4326
+ children: attachments
4327
+ }), (0,jsx_runtime_.jsxs)("div", {
4328
+ className: 'message-composer-row',
4329
+ children: [leading, (0,jsx_runtime_.jsx)(base_message_composer.Textarea, {
4330
+ className: 'message-composer-textarea',
4331
+ "aria-label": label,
4332
+ placeholder: placeholder,
4333
+ disabled: disabled,
4334
+ autoFocus: autoFocus,
4335
+ maxLength: maxLength,
4336
+ value: value,
4337
+ onChange: function onChange(e) {
4338
+ return setValue(e.target.value);
4339
+ }
4340
+ }), (0,jsx_runtime_.jsx)(base_message_composer.Send, {
4341
+ className: 'message-composer-send',
4342
+ "aria-label": sendLabel,
4343
+ "aria-disabled": blocked || undefined,
4344
+ "aria-busy": loading || undefined,
4345
+ "data-rejecting": rejecting || undefined,
4346
+ onClick: handleSend,
4347
+ // 막힌 누름마다 흔들림을 처음부터 다시 돌리려고, 끝나면 표시를 지운다
4348
+ onAnimationEnd: function onAnimationEnd() {
4349
+ return setRejecting(false);
4350
+ },
4351
+ children: (0,jsx_runtime_.jsx)("span", {
4352
+ className: 'message-composer-send-circle',
4353
+ children: loading ? (0,jsx_runtime_.jsx)(spinner/* default */.A, {
4354
+ className: 'message-composer-spinner'
4355
+ }) : (0,jsx_runtime_.jsx)(icon/* default */.A, {
4356
+ name: 'paper-plane-tilt',
4357
+ weight: 'fill',
4358
+ size: 's'
4359
+ })
4360
+ })
4361
+ })]
4362
+ })]
4363
+ }));
4364
+ });
4365
+ MessageComposer.displayName = 'MessageComposer';
4366
+ /* harmony default export */ const message_composer = (MessageComposer);
4367
+
4368
+ /***/ },
4369
+
4370
+ /***/ 345
4371
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
4372
+
4373
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
4374
+ /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
4375
+ /* harmony export */ });
4376
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
4377
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
4378
+ /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(3274);
4379
+ var __assign = undefined && undefined.__assign || function () {
4380
+ __assign = Object.assign || function (t) {
4381
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4382
+ s = arguments[i];
4383
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
4384
+ }
4385
+ return t;
4386
+ };
4387
+ return __assign.apply(this, arguments);
4388
+ };
4389
+ var __rest = undefined && undefined.__rest || function (s, e) {
4390
+ var t = {};
4391
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
4392
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
4393
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
4394
+ }
4395
+ return t;
4396
+ };
4397
+
4398
+
4399
+
4400
+ var MessageRootBase = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
4401
+ var className = props.className,
4402
+ restProps = __rest(props, ["className"]);
4403
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("ol", __assign({
4404
+ ref: ref,
4405
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__/* .classNames */ .x)('nuri-theme base-message root', className)
4406
+ }, restProps));
4407
+ });
4408
+ MessageRootBase.displayName = 'MessageRoot';
4409
+ /** 대화 한 줄. 메시지와 상태 줄이 모두 이것이다 */
4410
+ var MessageItem = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
4411
+ var className = props.className,
4412
+ restProps = __rest(props, ["className"]);
4413
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("li", __assign({
4414
+ ref: ref,
4415
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__/* .classNames */ .x)('nuri-theme base-message item', className)
4416
+ }, restProps));
4417
+ });
4418
+ MessageItem.displayName = 'MessageItem';
4419
+ var MessageBubble = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
4420
+ var className = props.className,
4421
+ restProps = __rest(props, ["className"]);
4422
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", __assign({
4423
+ ref: ref,
4424
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__/* .classNames */ .x)('nuri-theme base-message bubble', className)
4425
+ }, restProps));
4426
+ });
4427
+ MessageBubble.displayName = 'MessageBubble';
4428
+ var MessageRoot = Object.assign(MessageRootBase, {
4429
+ Item: MessageItem,
4430
+ Bubble: MessageBubble
4431
+ });
4432
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MessageRoot);
4433
+
4434
+ /***/ },
4435
+
4436
+ /***/ 6524
4437
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
4438
+
4439
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
4440
+ /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
4441
+ /* harmony export */ });
4442
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
4443
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
4444
+ /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(3274);
4445
+ /* harmony import */ var _base_message__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(345);
4446
+ var __assign = undefined && undefined.__assign || function () {
4447
+ __assign = Object.assign || function (t) {
4448
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4449
+ s = arguments[i];
4450
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
4451
+ }
4452
+ return t;
4453
+ };
4454
+ return __assign.apply(this, arguments);
4455
+ };
4456
+ var __rest = undefined && undefined.__rest || function (s, e) {
4457
+ var t = {};
4458
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
4459
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
4460
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
4461
+ }
4462
+ return t;
4463
+ };
4464
+
4465
+
4466
+
4467
+
4468
+ /** 대화 가운데 상태·날짜 줄. MessageThread 안에 둔다 */
4469
+ var MessageEvent = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
4470
+ var className = props.className,
4471
+ restProps = __rest(props, ["className"]);
4472
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_message__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.Item, __assign({
4473
+ ref: ref,
4474
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__/* .classNames */ .x)(className, 'message-event')
4475
+ }, restProps));
4476
+ });
4477
+ MessageEvent.displayName = 'MessageEvent';
4478
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MessageEvent);
4479
+
4480
+ /***/ },
4481
+
4482
+ /***/ 6178
2766
4483
  (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
2767
4484
 
2768
4485
  /* harmony export */ __nuri_require__.d(__webpack_exports__, {
@@ -2771,9 +4488,7 @@ var iconProps = {
2771
4488
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
2772
4489
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
2773
4490
  /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(3274);
2774
- /* harmony import */ var _helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(7335);
2775
- /* harmony import */ var _base_icon__WEBPACK_IMPORTED_MODULE_4__ = __nuri_require__(9896);
2776
- /* harmony import */ var _icon_props__WEBPACK_IMPORTED_MODULE_5__ = __nuri_require__(6722);
4491
+ /* harmony import */ var _base_message__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(345);
2777
4492
  var __assign = undefined && undefined.__assign || function () {
2778
4493
  __assign = Object.assign || function (t) {
2779
4494
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -2796,29 +4511,27 @@ var __rest = undefined && undefined.__rest || function (s, e) {
2796
4511
 
2797
4512
 
2798
4513
 
2799
-
2800
-
2801
- var Icon = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
2802
- var _a = (0,_helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_3__/* .getMergedProps */ .p)(props, _icon_props__WEBPACK_IMPORTED_MODULE_5__/* .iconProps */ .u1),
2803
- className = _a.className,
2804
- restProps = __rest(_a, ["className"]);
2805
- return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_icon__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A, __assign({
4514
+ /** 대화 목록. children 은 Message · MessageEvent 다 */
4515
+ var MessageThread = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
4516
+ var className = props.className,
4517
+ restProps = __rest(props, ["className"]);
4518
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_message__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A, __assign({
2806
4519
  ref: ref,
2807
- className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__/* .classNames */ .x)(className, 'icon')
4520
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__/* .classNames */ .x)(className, 'message-thread')
2808
4521
  }, restProps));
2809
4522
  });
2810
- Icon.displayName = 'Icon';
2811
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Icon);
4523
+ MessageThread.displayName = 'MessageThread';
4524
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MessageThread);
2812
4525
 
2813
4526
  /***/ },
2814
4527
 
2815
- /***/ 6302
4528
+ /***/ 8154
2816
4529
  (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
2817
4530
 
2818
4531
 
2819
4532
  // EXPORTS
2820
4533
  __nuri_require__.d(__webpack_exports__, {
2821
- A: () => (/* binding */ spinner)
4534
+ A: () => (/* binding */ message)
2822
4535
  });
2823
4536
 
2824
4537
  // EXTERNAL MODULE: external {"root":"jsx-runtime","commonjs2":"react/jsx-runtime","commonjs":"react/jsx-runtime","amd":"react/jsx-runtime","module":"react/jsx-runtime"}
@@ -2829,7 +4542,27 @@ var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ =
2829
4542
  var classNames = __nuri_require__(3274);
2830
4543
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
2831
4544
  var getMergedProps = __nuri_require__(7335);
2832
- ;// ./components/loading/spinner/base-spinner.tsx
4545
+ // EXTERNAL MODULE: ./components/message/base-message.tsx
4546
+ var base_message = __nuri_require__(345);
4547
+ ;// ./components/message/message-props.ts
4548
+ /** 말풍선 자리. `end` 는 내가 보낸 메시지다 */
4549
+ var side = ['start', 'end'];
4550
+ /** 등장 모션 세기(ADR 0008). 방금 보내거나 받은 메시지에만 준다 */
4551
+ var motion = ['weak', 'strong'];
4552
+ var messageProps = {
4553
+ side: {
4554
+ type: 'className',
4555
+ className: 'side',
4556
+ values: side,
4557
+ "default": 'start'
4558
+ },
4559
+ motion: {
4560
+ type: 'className',
4561
+ className: 'motion',
4562
+ values: motion
4563
+ }
4564
+ };
4565
+ ;// ./components/message/message.tsx
2833
4566
  var __assign = undefined && undefined.__assign || function () {
2834
4567
  __assign = Object.assign || function (t) {
2835
4568
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -2851,139 +4584,43 @@ var __rest = undefined && undefined.__rest || function (s, e) {
2851
4584
 
2852
4585
 
2853
4586
 
2854
- var BaseSpinner = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
2855
- var className = props.className,
2856
- restProps = __rest(props, ["className"]);
2857
- return (0,jsx_runtime_.jsx)("div", __assign({
2858
- ref: ref,
2859
- className: (0,classNames/* classNames */.x)('nuri-theme base-spinner', className)
2860
- }, restProps, {
2861
- children: (0,jsx_runtime_.jsx)("div", {
2862
- className: 'loading-indicator-ring',
2863
- children: [0, 1, 2, 3].map(function (i) {
2864
- return (0,jsx_runtime_.jsx)("div", {
2865
- className: 'loading-indicator-single-ring'
2866
- }, i);
2867
- })
2868
- })
2869
- }));
2870
- });
2871
- BaseSpinner.displayName = 'BaseSpinner';
2872
- /* harmony default export */ const base_spinner = (BaseSpinner);
2873
- ;// ./components/loading/spinner/spinner-props.ts
2874
- var spinnerProps = {};
2875
- ;// ./components/loading/spinner/spinner.tsx
2876
- var spinner_assign = undefined && undefined.__assign || function () {
2877
- spinner_assign = Object.assign || function (t) {
2878
- for (var s, i = 1, n = arguments.length; i < n; i++) {
2879
- s = arguments[i];
2880
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
2881
- }
2882
- return t;
2883
- };
2884
- return spinner_assign.apply(this, arguments);
2885
- };
2886
- var spinner_rest = undefined && undefined.__rest || function (s, e) {
2887
- var t = {};
2888
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
2889
- if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
2890
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
2891
- }
2892
- return t;
2893
- };
2894
-
2895
-
2896
-
2897
4587
 
2898
4588
 
2899
4589
 
2900
- var Spinner = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
2901
- var _a = (0,getMergedProps/* getMergedProps */.p)(props, spinnerProps),
4590
+ /** 말풍선 하나. MessageThread 안에 둔다 */
4591
+ var Message = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
4592
+ var _a = (0,getMergedProps/* getMergedProps */.p)(props, messageProps),
2902
4593
  className = _a.className,
2903
- restProps = spinner_rest(_a, ["className"]);
2904
- return (0,jsx_runtime_.jsx)(base_spinner, spinner_assign({
4594
+ name = _a.name,
4595
+ time = _a.time,
4596
+ dateTime = _a.dateTime,
4597
+ media = _a.media,
4598
+ children = _a.children,
4599
+ restProps = __rest(_a, ["className", "name", "time", "dateTime", "media", "children"]);
4600
+ // 글 없이 썸네일만 있으면 안쪽 여백을 줄인다
4601
+ var mediaOnly = Boolean(media) && !children;
4602
+ return (0,jsx_runtime_.jsxs)(base_message/* default */.A.Item, __assign({
2905
4603
  ref: ref,
2906
- className: (0,classNames/* classNames */.x)(className, 'component-loading-container')
2907
- }, restProps));
4604
+ className: (0,classNames/* classNames */.x)(className, 'message')
4605
+ }, restProps, {
4606
+ children: [name && (0,jsx_runtime_.jsx)("span", {
4607
+ className: 'message-name',
4608
+ children: name
4609
+ }), (0,jsx_runtime_.jsxs)("div", {
4610
+ className: 'message-row',
4611
+ children: [(0,jsx_runtime_.jsxs)(base_message/* default */.A.Bubble, {
4612
+ className: (0,classNames/* classNames */.x)('message-bubble', mediaOnly && 'media-only'),
4613
+ children: [children, media]
4614
+ }), time && (0,jsx_runtime_.jsx)("time", {
4615
+ className: 'message-time',
4616
+ dateTime: dateTime,
4617
+ children: time
4618
+ })]
4619
+ })]
4620
+ }));
2908
4621
  });
2909
- Spinner.displayName = 'Spinner';
2910
- /* harmony default export */ const spinner = (Spinner);
2911
-
2912
- /***/ },
2913
-
2914
- /***/ 4804
2915
- (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
2916
-
2917
- /* harmony export */ __nuri_require__.d(__webpack_exports__, {
2918
- /* harmony export */ _: () => (/* binding */ LogProvider),
2919
- /* harmony export */ e: () => (/* binding */ useLogEmitter)
2920
- /* harmony export */ });
2921
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
2922
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
2923
- var _a;
2924
-
2925
-
2926
- // 진입점(`/logging`, `/cta-button`, 루트)마다 이 파일이 따로 들어가므로 context 는 전역 키 하나에 둔다.
2927
- var CONTEXT_KEY = Symbol["for"]('@nurihaus/web-design-system/log-provider');
2928
- var registry = globalThis;
2929
- var LogContext = (_a = registry[CONTEXT_KEY]) !== null && _a !== void 0 ? _a : registry[CONTEXT_KEY] = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)(null);
2930
- var LogProvider = function LogProvider(props) {
2931
- var onEvent = props.onEvent,
2932
- children = props.children;
2933
- // context 값이 Provider 렌더마다 바뀌면 track 을 단 컴포넌트가 모두 다시 그려진다. 최신 onEvent 는 ref 로 읽는다.
2934
- var onEventRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(onEvent);
2935
- onEventRef.current = onEvent;
2936
- var emit = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function (event) {
2937
- // 로그 수집기가 던져도 클릭·열기 같은 UI 동작은 이어져야 한다.
2938
- try {
2939
- onEventRef.current(event);
2940
- } catch (error) {
2941
- console.error('[LogProvider] onEvent threw', error);
2942
- }
2943
- }, []);
2944
- return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(LogContext.Provider, {
2945
- value: emit,
2946
- children: children
2947
- });
2948
- };
2949
- LogProvider.displayName = 'LogProvider';
2950
- /** LogProvider 가 둔 emit 함수. Provider 밖이면 null 이다. */
2951
- var useLogEmitter = function useLogEmitter() {
2952
- return (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(LogContext);
2953
- };
2954
-
2955
- /***/ },
2956
-
2957
- /***/ 7111
2958
- (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
2959
-
2960
- /* harmony export */ __nuri_require__.d(__webpack_exports__, {
2961
- /* harmony export */ e: () => (/* binding */ useLog)
2962
- /* harmony export */ });
2963
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(1041);
2964
- /* harmony import */ var _log_context__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(4804);
2965
- var __assign = undefined && undefined.__assign || function () {
2966
- __assign = Object.assign || function (t) {
2967
- for (var s, i = 1, n = arguments.length; i < n; i++) {
2968
- s = arguments[i];
2969
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
2970
- }
2971
- return t;
2972
- };
2973
- return __assign.apply(this, arguments);
2974
- };
2975
-
2976
-
2977
-
2978
- /** 컴포넌트 밖의 사용 로그를 남긴다. LogProvider 밖이면 아무것도 하지 않는다. */
2979
- var useLog = function useLog() {
2980
- var emit = (0,_log_context__WEBPACK_IMPORTED_MODULE_1__/* .useLogEmitter */ .e)();
2981
- return (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function (event) {
2982
- return emit === null || emit === void 0 ? void 0 : emit(__assign(__assign({}, event), {
2983
- timestamp: Date.now()
2984
- }));
2985
- }, [emit]);
2986
- };
4622
+ Message.displayName = 'Message';
4623
+ /* harmony default export */ const message = (Message);
2987
4624
 
2988
4625
  /***/ },
2989
4626
 
@@ -3360,29 +4997,183 @@ var Modal = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(funct
3360
4997
  children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_modal__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.Title, {
3361
4998
  className: 'modal-title',
3362
4999
  children: title
3363
- }), showCloseIcon && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_modal__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.Close, {
3364
- className: 'modal-close-icon',
3365
- "aria-label": "\uB2EB\uAE30",
3366
- asChild: true,
3367
- children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_button_base_button__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A, {
3368
- children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_assets_icons_multifly_svg__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A, {})
3369
- })
5000
+ }), showCloseIcon && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_modal__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.Close, {
5001
+ className: 'modal-close-icon',
5002
+ "aria-label": "\uB2EB\uAE30",
5003
+ asChild: true,
5004
+ children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_button_base_button__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A, {
5005
+ children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_assets_icons_multifly_svg__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A, {})
5006
+ })
5007
+ })]
5008
+ }), description && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_modal__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.Description, {
5009
+ className: 'modal-description',
5010
+ children: description
5011
+ }), children && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", {
5012
+ className: 'modal-body',
5013
+ children: children
5014
+ }), footer && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", {
5015
+ className: 'modal-footer',
5016
+ children: footer
5017
+ })]
5018
+ })]
5019
+ });
5020
+ });
5021
+ Modal.displayName = 'Modal';
5022
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Modal);
5023
+
5024
+ /***/ },
5025
+
5026
+ /***/ 2980
5027
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
5028
+
5029
+
5030
+ // EXPORTS
5031
+ __nuri_require__.d(__webpack_exports__, {
5032
+ A: () => (/* binding */ notice)
5033
+ });
5034
+
5035
+ // EXTERNAL MODULE: external {"root":"jsx-runtime","commonjs2":"react/jsx-runtime","commonjs":"react/jsx-runtime","amd":"react/jsx-runtime","module":"react/jsx-runtime"}
5036
+ var jsx_runtime_ = __nuri_require__(612);
5037
+ // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
5038
+ var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
5039
+ // EXTERNAL MODULE: ./helpers/utils/classNames.js
5040
+ var classNames = __nuri_require__(3274);
5041
+ // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
5042
+ var getMergedProps = __nuri_require__(7335);
5043
+ // EXTERNAL MODULE: ./components/button/cta-button.tsx
5044
+ var cta_button = __nuri_require__(910);
5045
+ // EXTERNAL MODULE: ./components/icon/icon.tsx
5046
+ var icon = __nuri_require__(3547);
5047
+ ;// ./components/notice/base-notice.tsx
5048
+ var __assign = undefined && undefined.__assign || function () {
5049
+ __assign = Object.assign || function (t) {
5050
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5051
+ s = arguments[i];
5052
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
5053
+ }
5054
+ return t;
5055
+ };
5056
+ return __assign.apply(this, arguments);
5057
+ };
5058
+ var __rest = undefined && undefined.__rest || function (s, e) {
5059
+ var t = {};
5060
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
5061
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
5062
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
5063
+ }
5064
+ return t;
5065
+ };
5066
+
5067
+
5068
+
5069
+ var BaseNotice = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
5070
+ var className = props.className,
5071
+ restProps = __rest(props, ["className"]);
5072
+ return (0,jsx_runtime_.jsx)("div", __assign({
5073
+ ref: ref,
5074
+ className: (0,classNames/* classNames */.x)('nuri-theme base-notice', className)
5075
+ }, restProps));
5076
+ });
5077
+ BaseNotice.displayName = 'BaseNotice';
5078
+ /* harmony default export */ const base_notice = (BaseNotice);
5079
+ ;// ./components/notice/notice-props.ts
5080
+ var variant = ['neutral', 'success', 'warning', 'danger'];
5081
+ /** 나타날 때 모션 세기. 주지 않으면 움직이지 않는다 (ADR 0008) */
5082
+ var motion = ['weak', 'strong'];
5083
+ var noticeProps = {
5084
+ variant: {
5085
+ type: 'className',
5086
+ className: 'variant',
5087
+ values: variant,
5088
+ "default": 'neutral'
5089
+ },
5090
+ motion: {
5091
+ type: 'className',
5092
+ className: 'motion',
5093
+ values: motion
5094
+ }
5095
+ };
5096
+ ;// ./components/notice/notice.tsx
5097
+ var notice_assign = undefined && undefined.__assign || function () {
5098
+ notice_assign = Object.assign || function (t) {
5099
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5100
+ s = arguments[i];
5101
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
5102
+ }
5103
+ return t;
5104
+ };
5105
+ return notice_assign.apply(this, arguments);
5106
+ };
5107
+ var notice_rest = undefined && undefined.__rest || function (s, e) {
5108
+ var t = {};
5109
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
5110
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
5111
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
5112
+ }
5113
+ return t;
5114
+ };
5115
+
5116
+
5117
+
5118
+
5119
+
5120
+
5121
+
5122
+
5123
+ var VARIANT_ICON = {
5124
+ neutral: 'info',
5125
+ success: 'check-circle',
5126
+ warning: 'warning',
5127
+ danger: 'warning'
5128
+ };
5129
+ /** 카드·시트 안에 머무는 안내. 스스로 사라지는 알림은 Toast 다 */
5130
+ var Notice = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
5131
+ var _a;
5132
+ var _b = (0,getMergedProps/* getMergedProps */.p)(props, noticeProps),
5133
+ className = _b.className,
5134
+ title = _b.title,
5135
+ children = _b.children,
5136
+ action = _b.action,
5137
+ restProps = notice_rest(_b, ["className", "title", "children", "action"]);
5138
+ var variant = (_a = props.variant) !== null && _a !== void 0 ? _a : 'neutral';
5139
+ return (0,jsx_runtime_.jsxs)(base_notice, notice_assign({
5140
+ ref: ref,
5141
+ className: (0,classNames/* classNames */.x)(className, 'notice'),
5142
+ // danger 는 바로 읽어 준다. 쓰는 쪽이 role 을 주면 그 값이 앞선다
5143
+ role: variant === 'danger' ? 'alert' : undefined
5144
+ }, restProps, {
5145
+ children: [(0,jsx_runtime_.jsx)(icon/* default */.A, {
5146
+ className: 'notice-icon',
5147
+ name: VARIANT_ICON[variant],
5148
+ size: 's',
5149
+ weight: 'fill'
5150
+ }), (0,jsx_runtime_.jsxs)("div", {
5151
+ className: 'notice-body',
5152
+ children: [(0,jsx_runtime_.jsxs)("div", {
5153
+ className: 'notice-text',
5154
+ children: [title && (0,jsx_runtime_.jsx)("div", {
5155
+ className: 'notice-title',
5156
+ children: title
5157
+ }), (0,jsx_runtime_.jsx)("div", {
5158
+ className: 'notice-description',
5159
+ children: children
3370
5160
  })]
3371
- }), description && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_modal__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.Description, {
3372
- className: 'modal-description',
3373
- children: description
3374
- }), children && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", {
3375
- className: 'modal-body',
3376
- children: children
3377
- }), footer && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", {
3378
- className: 'modal-footer',
3379
- children: footer
5161
+ }), action && (0,jsx_runtime_.jsx)(cta_button/* default */.A, {
5162
+ className: 'notice-action',
5163
+ size: 'xs',
5164
+ variant: 'neutral',
5165
+ text: action.label,
5166
+ // CTAButton 은 loading 중에도 누름을 받으므로 처리 중에는 다시 부르지 않는다
5167
+ onClick: action.loading ? undefined : action.onClick,
5168
+ loading: action.loading,
5169
+ track: action.track,
5170
+ trackProps: action.trackProps
3380
5171
  })]
3381
5172
  })]
3382
- });
5173
+ }));
3383
5174
  });
3384
- Modal.displayName = 'Modal';
3385
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Modal);
5175
+ Notice.displayName = 'Notice';
5176
+ /* harmony default export */ const notice = (Notice);
3386
5177
 
3387
5178
  /***/ },
3388
5179
 
@@ -3662,6 +5453,24 @@ var base_button = __nuri_require__(8933);
3662
5453
  // EXTERNAL MODULE: ./components/core/composer/index.tsx
3663
5454
  var composer = __nuri_require__(2777);
3664
5455
  ;// ./components/radio/base-radio.tsx
5456
+ var __assign = undefined && undefined.__assign || function () {
5457
+ __assign = Object.assign || function (t) {
5458
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5459
+ s = arguments[i];
5460
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
5461
+ }
5462
+ return t;
5463
+ };
5464
+ return __assign.apply(this, arguments);
5465
+ };
5466
+ var __rest = undefined && undefined.__rest || function (s, e) {
5467
+ var t = {};
5468
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
5469
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
5470
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
5471
+ }
5472
+ return t;
5473
+ };
3665
5474
 
3666
5475
 
3667
5476
 
@@ -3703,13 +5512,15 @@ RadioRootBase.displayName = 'RadioRoot';
3703
5512
  var RadioOptionGroup = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
3704
5513
  var children = props.children,
3705
5514
  asChild = props.asChild,
3706
- className = props.className;
5515
+ className = props.className,
5516
+ restProps = __rest(props, ["children", "asChild", "className"]);
3707
5517
  var Comp = asChild ? composer/* default */.A : 'ul';
3708
- return (0,jsx_runtime_.jsx)(Comp, {
5518
+ return (0,jsx_runtime_.jsx)(Comp, __assign({
3709
5519
  ref: ref,
3710
- className: (0,classNames/* classNames */.x)('nuri-theme base-radio option-group', className),
5520
+ className: (0,classNames/* classNames */.x)('nuri-theme base-radio option-group', className)
5521
+ }, restProps, {
3711
5522
  children: children
3712
- });
5523
+ }));
3713
5524
  });
3714
5525
  RadioOptionGroup.displayName = 'RadioOptionGroup';
3715
5526
  var RadioButton = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
@@ -3733,6 +5544,31 @@ var RadioButton = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_r
3733
5544
  });
3734
5545
  });
3735
5546
  RadioButton.displayName = 'RadioButton';
5547
+ // 칩 전체가 라디오 하나다. 점 없이 라벨만 그리고 role·aria-checked 로 선택을 알린다.
5548
+ var RadioChip = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
5549
+ var className = props.className,
5550
+ id = props.id,
5551
+ disabled = props.disabled,
5552
+ restProps = __rest(props, ["className", "id", "disabled"]);
5553
+ var _a = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.useContext)(RadioContext),
5554
+ selected = _a.selected,
5555
+ onChange = _a.onChange;
5556
+ var checked = id === selected;
5557
+ return (0,jsx_runtime_.jsx)(base_button/* default */.A, __assign({
5558
+ ref: ref,
5559
+ className: (0,classNames/* classNames */.x)('nuri-theme base-radio chip', className),
5560
+ type: 'button',
5561
+ role: 'radio',
5562
+ "aria-checked": checked,
5563
+ "data-state": checked ? 'checked' : 'unchecked',
5564
+ disabled: disabled,
5565
+ "data-disabled": disabled || undefined,
5566
+ onClick: function onClick() {
5567
+ return onChange(id);
5568
+ }
5569
+ }, restProps));
5570
+ });
5571
+ RadioChip.displayName = 'RadioChip';
3736
5572
  var RadioIndicator = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
3737
5573
  var children = props.children,
3738
5574
  asChild = props.asChild,
@@ -3771,13 +5607,21 @@ RadioLabel.displayName = 'RadioLabel';
3771
5607
  var RadioRoot = Object.assign(RadioRootBase, {
3772
5608
  OptionGroup: RadioOptionGroup,
3773
5609
  Button: RadioButton,
5610
+ Chip: RadioChip,
3774
5611
  Indicator: RadioIndicator,
3775
5612
  Label: RadioLabel
3776
5613
  });
3777
5614
  /* harmony default export */ const base_radio = (RadioRoot);
3778
5615
  ;// ./components/radio/radio-props.ts
3779
- // CSS 가 아직 크기·방향을 나누지 않아 className 으로 바뀌는 prop 이 없다.
3780
- var radioProps = {};
5616
+ var variant = ['default', 'chip'];
5617
+ var radioProps = {
5618
+ variant: {
5619
+ type: 'className',
5620
+ className: 'variant',
5621
+ values: variant,
5622
+ "default": 'default'
5623
+ }
5624
+ };
3781
5625
  ;// ./components/radio/radio.tsx
3782
5626
 
3783
5627
 
@@ -3786,18 +5630,60 @@ var radioProps = {};
3786
5630
 
3787
5631
 
3788
5632
 
5633
+ // 칩은 버튼 자체가 role='radio' 라 li 는 목록 의미를 빼고 자리만 잡는다.
5634
+ var ChipOption = function ChipOption(props) {
5635
+ var option = props.option;
5636
+ return (0,jsx_runtime_.jsx)("li", {
5637
+ className: 'radio radio-option',
5638
+ role: 'none',
5639
+ children: (0,jsx_runtime_.jsx)(base_radio.Chip, {
5640
+ className: 'radio radio-chip',
5641
+ id: option.id,
5642
+ disabled: option.disabled,
5643
+ children: option.label
5644
+ })
5645
+ });
5646
+ };
5647
+ ChipOption.displayName = 'RadioChipOption';
5648
+ var DefaultOption = function DefaultOption(props) {
5649
+ var option = props.option;
5650
+ return (0,jsx_runtime_.jsxs)("li", {
5651
+ className: 'radio radio-option',
5652
+ children: [(0,jsx_runtime_.jsx)(base_radio.Button, {
5653
+ className: 'radio radio-button',
5654
+ id: option.id,
5655
+ disabled: option.disabled,
5656
+ children: (0,jsx_runtime_.jsx)(base_radio.Indicator, {
5657
+ className: 'radio radio-indicator',
5658
+ id: option.id,
5659
+ asChild: true,
5660
+ children: (0,jsx_runtime_.jsx)("div", {})
5661
+ })
5662
+ }), (0,jsx_runtime_.jsx)(base_radio.Label, {
5663
+ className: 'radio radio-label',
5664
+ id: option.id,
5665
+ disabled: option.disabled,
5666
+ children: option.label
5667
+ })]
5668
+ });
5669
+ };
5670
+ DefaultOption.displayName = 'RadioDefaultOption';
3789
5671
  var Radio = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
3790
5672
  var _a = (0,getMergedProps/* getMergedProps */.p)(props, radioProps),
3791
5673
  className = _a.className,
3792
5674
  selected = _a.selected,
3793
5675
  _onChange = _a.onChange,
3794
5676
  options = _a.options,
5677
+ label = _a.label,
3795
5678
  track = _a.track,
3796
5679
  trackProps = _a.trackProps;
5680
+ // getMergedProps 가 variant 를 클래스로 바꾸며 지우므로 원래 props 에서 읽는다.
5681
+ var isChip = props.variant === 'chip';
3797
5682
  var emit = (0,useTrack/* useTrack */.n)('Radio', {
3798
5683
  track: track,
3799
5684
  trackProps: trackProps
3800
5685
  });
5686
+ var Option = isChip ? ChipOption : DefaultOption;
3801
5687
  return (0,jsx_runtime_.jsx)(base_radio, {
3802
5688
  options: options,
3803
5689
  selected: selected,
@@ -3808,25 +5694,12 @@ var Radio = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_a
3808
5694
  children: (0,jsx_runtime_.jsx)(base_radio.OptionGroup, {
3809
5695
  ref: ref,
3810
5696
  className: (0,classNames/* classNames */.x)(className, 'radio radio-group'),
5697
+ // 칩은 버튼마다 role='radio' 라 묶음도 radiogroup 이다. 기본형은 목록 그대로 둔다.
5698
+ role: isChip ? 'radiogroup' : undefined,
5699
+ "aria-label": label,
3811
5700
  children: options.map(function (option) {
3812
- return (0,jsx_runtime_.jsxs)("li", {
3813
- className: 'radio radio-option',
3814
- children: [(0,jsx_runtime_.jsx)(base_radio.Button, {
3815
- className: 'radio radio-button',
3816
- id: option.id,
3817
- disabled: option.disabled,
3818
- children: (0,jsx_runtime_.jsx)(base_radio.Indicator, {
3819
- className: 'radio radio-indicator',
3820
- id: option.id,
3821
- asChild: true,
3822
- children: (0,jsx_runtime_.jsx)("div", {})
3823
- })
3824
- }), (0,jsx_runtime_.jsx)(base_radio.Label, {
3825
- className: 'radio radio-label',
3826
- id: option.id,
3827
- disabled: option.disabled,
3828
- children: option.label
3829
- })]
5701
+ return (0,jsx_runtime_.jsx)(Option, {
5702
+ option: option
3830
5703
  }, option.id);
3831
5704
  })
3832
5705
  })
@@ -4774,6 +6647,139 @@ Tabs.displayName = 'Tabs';
4774
6647
 
4775
6648
  /***/ },
4776
6649
 
6650
+ /***/ 8205
6651
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
6652
+
6653
+
6654
+ // EXPORTS
6655
+ __nuri_require__.d(__webpack_exports__, {
6656
+ A: () => (/* binding */ tag)
6657
+ });
6658
+
6659
+ // EXTERNAL MODULE: external {"root":"jsx-runtime","commonjs2":"react/jsx-runtime","commonjs":"react/jsx-runtime","amd":"react/jsx-runtime","module":"react/jsx-runtime"}
6660
+ var jsx_runtime_ = __nuri_require__(612);
6661
+ // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
6662
+ var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
6663
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
6664
+ var useTrack = __nuri_require__(4560);
6665
+ // EXTERNAL MODULE: ./helpers/utils/classNames.js
6666
+ var classNames = __nuri_require__(3274);
6667
+ // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
6668
+ var getMergedProps = __nuri_require__(7335);
6669
+ // EXTERNAL MODULE: ./components/icon/icon.tsx
6670
+ var icon = __nuri_require__(3547);
6671
+ ;// ./components/tag/base-tag.tsx
6672
+ var __assign = undefined && undefined.__assign || function () {
6673
+ __assign = Object.assign || function (t) {
6674
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
6675
+ s = arguments[i];
6676
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
6677
+ }
6678
+ return t;
6679
+ };
6680
+ return __assign.apply(this, arguments);
6681
+ };
6682
+ var __rest = undefined && undefined.__rest || function (s, e) {
6683
+ var t = {};
6684
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
6685
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
6686
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
6687
+ }
6688
+ return t;
6689
+ };
6690
+
6691
+
6692
+
6693
+ var TagRootBase = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
6694
+ var className = props.className,
6695
+ restProps = __rest(props, ["className"]);
6696
+ return (0,jsx_runtime_.jsx)("span", __assign({
6697
+ ref: ref,
6698
+ className: (0,classNames/* classNames */.x)('nuri-theme base-tag', className)
6699
+ }, restProps));
6700
+ });
6701
+ TagRootBase.displayName = 'TagRoot';
6702
+ var TagRemove = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
6703
+ var className = props.className,
6704
+ restProps = __rest(props, ["className"]);
6705
+ return (0,jsx_runtime_.jsx)("button", __assign({
6706
+ ref: ref,
6707
+ className: (0,classNames/* classNames */.x)('nuri-theme base-tag remove', className),
6708
+ type: 'button'
6709
+ }, restProps));
6710
+ });
6711
+ TagRemove.displayName = 'TagRemove';
6712
+ var TagRoot = Object.assign(TagRootBase, {
6713
+ Remove: TagRemove
6714
+ });
6715
+ /* harmony default export */ const base_tag = (TagRoot);
6716
+ ;// ./components/tag/tag-props.ts
6717
+ // 크기·변형이 없다. 태그는 한 모양이다(높이 --label-height-s).
6718
+ var tagProps = {};
6719
+ ;// ./components/tag/tag.tsx
6720
+ var tag_assign = undefined && undefined.__assign || function () {
6721
+ tag_assign = Object.assign || function (t) {
6722
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
6723
+ s = arguments[i];
6724
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
6725
+ }
6726
+ return t;
6727
+ };
6728
+ return tag_assign.apply(this, arguments);
6729
+ };
6730
+ var tag_rest = undefined && undefined.__rest || function (s, e) {
6731
+ var t = {};
6732
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
6733
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
6734
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
6735
+ }
6736
+ return t;
6737
+ };
6738
+
6739
+
6740
+
6741
+
6742
+
6743
+
6744
+
6745
+
6746
+ /** 고른 값 하나. onRemove 를 주면 지우기 버튼이 붙는다 */
6747
+ var Tag = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
6748
+ var _a = (0,getMergedProps/* getMergedProps */.p)(props, tagProps),
6749
+ className = _a.className,
6750
+ text = _a.text,
6751
+ onRemove = _a.onRemove,
6752
+ removeLabel = _a.removeLabel,
6753
+ track = _a.track,
6754
+ trackProps = _a.trackProps,
6755
+ restProps = tag_rest(_a, ["className", "text", "onRemove", "removeLabel", "track", "trackProps"]);
6756
+ var emit = (0,useTrack/* useTrack */.n)('Tag', {
6757
+ track: track,
6758
+ trackProps: trackProps
6759
+ });
6760
+ return (0,jsx_runtime_.jsxs)(base_tag, tag_assign({
6761
+ ref: ref,
6762
+ className: (0,classNames/* classNames */.x)(className, 'tag', onRemove ? 'removable' : undefined)
6763
+ }, restProps, {
6764
+ children: [text, onRemove && (0,jsx_runtime_.jsx)(base_tag.Remove, {
6765
+ className: 'tag-remove',
6766
+ "aria-label": removeLabel,
6767
+ onClick: function onClick() {
6768
+ emit('click');
6769
+ onRemove();
6770
+ },
6771
+ children: (0,jsx_runtime_.jsx)(icon/* default */.A, {
6772
+ name: 'x',
6773
+ size: 'xs'
6774
+ })
6775
+ })]
6776
+ }));
6777
+ });
6778
+ Tag.displayName = 'Tag';
6779
+ /* harmony default export */ const tag = (Tag);
6780
+
6781
+ /***/ },
6782
+
4777
6783
  /***/ 4794
4778
6784
  (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
4779
6785
 
@@ -5850,6 +7856,24 @@ var widthProp = function widthProp(defaultValue) {
5850
7856
 
5851
7857
  /***/ },
5852
7858
 
7859
+ /***/ 1176
7860
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
7861
+
7862
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
7863
+ /* harmony export */ Q: () => (/* binding */ fillLinkChild)
7864
+ /* harmony export */ });
7865
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(1041);
7866
+
7867
+ /**
7868
+ * asChild 로 받은 요소 하나(`<a>`·라우터 Link)에 컴포넌트의 내용을 채운다.
7869
+ * 요소가 아니면 null — 쓰는 쪽은 null 이면 자기 기본 요소를 그린다.
7870
+ */
7871
+ var fillLinkChild = function fillLinkChild(asChild, children, content) {
7872
+ return asChild && /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.isValidElement)(children) ? /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.cloneElement)(children, undefined, content) : null;
7873
+ };
7874
+
7875
+ /***/ },
7876
+
5853
7877
  /***/ 7335
5854
7878
  (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
5855
7879
 
@@ -6039,7 +8063,7 @@ var x = (y) => {
6039
8063
  var x = {}; __nuri_require__.d(x, y); return x
6040
8064
  }
6041
8065
  var y = (x) => (() => (x))
6042
- module.exports = x({ ["Children"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.Children), ["Fragment"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.Fragment), ["cloneElement"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.cloneElement), ["createContext"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.createContext), ["createElement"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.createElement), ["forwardRef"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.forwardRef), ["isValidElement"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.isValidElement), ["useCallback"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useCallback), ["useContext"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useContext), ["useEffect"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useEffect), ["useImperativeHandle"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useImperativeHandle), ["useLayoutEffect"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useLayoutEffect), ["useRef"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useRef), ["useState"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useState) });
8066
+ module.exports = x({ ["Children"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.Children), ["Fragment"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.Fragment), ["cloneElement"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.cloneElement), ["createContext"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.createContext), ["createElement"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.createElement), ["forwardRef"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.forwardRef), ["isValidElement"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.isValidElement), ["useCallback"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useCallback), ["useContext"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useContext), ["useEffect"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useEffect), ["useId"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useId), ["useImperativeHandle"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useImperativeHandle), ["useLayoutEffect"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useLayoutEffect), ["useRef"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useRef), ["useState"]: () => (__WEBPACK_EXTERNAL_MODULE_react__.useState) });
6043
8067
 
6044
8068
  /***/ },
6045
8069
 
@@ -6170,6 +8194,8 @@ var __webpack_exports__ = {};
6170
8194
  var avatar = __nuri_require__(5468);
6171
8195
  // EXTERNAL MODULE: ./components/button/cta-button.tsx
6172
8196
  var cta_button = __nuri_require__(910);
8197
+ // EXTERNAL MODULE: ./components/icon-button/icon-button.tsx + 2 modules
8198
+ var icon_button = __nuri_require__(8173);
6173
8199
  // EXTERNAL MODULE: ./components/callout/callout.tsx
6174
8200
  var callout = __nuri_require__(1163);
6175
8201
  // EXTERNAL MODULE: ./components/badge/option-badge.tsx
@@ -6412,10 +8438,58 @@ var bottom_nav = __nuri_require__(1768);
6412
8438
  var step_progress = __nuri_require__(7131);
6413
8439
  // EXTERNAL MODULE: ./components/chip-group/chip-group.tsx + 2 modules
6414
8440
  var chip_group = __nuri_require__(3894);
8441
+ // EXTERNAL MODULE: ./components/card/card.tsx + 2 modules
8442
+ var card = __nuri_require__(329);
8443
+ // EXTERNAL MODULE: ./components/list/list-group.tsx
8444
+ var list_group = __nuri_require__(2779);
8445
+ // EXTERNAL MODULE: ./components/list/list-row.tsx
8446
+ var list_row = __nuri_require__(2082);
8447
+ // EXTERNAL MODULE: ./components/description-list/description-list.tsx + 2 modules
8448
+ var description_list = __nuri_require__(6143);
8449
+ // EXTERNAL MODULE: ./components/notice/notice.tsx + 2 modules
8450
+ var notice = __nuri_require__(2980);
8451
+ // EXTERNAL MODULE: ./components/empty-state/empty-state.tsx + 2 modules
8452
+ var empty_state = __nuri_require__(5589);
8453
+ // EXTERNAL MODULE: ./components/tag/tag.tsx + 2 modules
8454
+ var tag = __nuri_require__(8205);
8455
+ // EXTERNAL MODULE: ./components/message/message-thread.tsx
8456
+ var message_thread = __nuri_require__(6178);
8457
+ // EXTERNAL MODULE: ./components/message/message.tsx + 1 modules
8458
+ var message = __nuri_require__(8154);
8459
+ // EXTERNAL MODULE: ./components/message/message-event.tsx
8460
+ var message_event = __nuri_require__(6524);
8461
+ // EXTERNAL MODULE: ./components/message-composer/message-composer.tsx + 2 modules
8462
+ var message_composer = __nuri_require__(2045);
8463
+ // EXTERNAL MODULE: ./components/bottom-bar/bottom-bar.tsx + 2 modules
8464
+ var bottom_bar = __nuri_require__(3577);
8465
+ // EXTERNAL MODULE: ./components/media/media-thumbnail.tsx + 1 modules
8466
+ var media_thumbnail = __nuri_require__(946);
8467
+ // EXTERNAL MODULE: ./components/media/media-viewer.tsx
8468
+ var media_viewer = __nuri_require__(4268);
6415
8469
  // EXTERNAL MODULE: ./components/logging/logging.tsx
6416
8470
  var logging = __nuri_require__(7111);
6417
8471
  // EXTERNAL MODULE: ./components/logging/log-context.tsx
6418
8472
  var log_context = __nuri_require__(4804);
8473
+ ;// external "motion/react"
8474
+
8475
+ ;// ./components/motion/motion-provider.tsx
8476
+
8477
+
8478
+ // DOM 을 그리지 않아 base- 로 짓지 않는다. base-*.tsx 는 forwardRef 가 있어야 빌드를 통과한다(R2). log-context.tsx 와 같다.
8479
+ var MotionProvider = function MotionProvider(props) {
8480
+ var _a = props.reducedMotion,
8481
+ reducedMotion = _a === void 0 ? 'user' : _a,
8482
+ children = props.children;
8483
+ return (0,jsx_runtime_.jsx)(__WEBPACK_EXTERNAL_MODULE_motion_react_de020c0a_LazyMotion__, {
8484
+ features: __WEBPACK_EXTERNAL_MODULE_motion_react_de020c0a_domMax__,
8485
+ strict: true,
8486
+ children: (0,jsx_runtime_.jsx)(__WEBPACK_EXTERNAL_MODULE_motion_react_de020c0a_MotionConfig__, {
8487
+ reducedMotion: reducedMotion,
8488
+ children: children
8489
+ })
8490
+ });
8491
+ };
8492
+ MotionProvider.displayName = 'MotionProvider';
6419
8493
  ;// ./tokens/generated/primitive.ts
6420
8494
  // tokens/figma.json 에서 생성됨 — 손으로 고치지 않는다. `npm run tokens`
6421
8495
  var primitive = {
@@ -6788,6 +8862,160 @@ var semanticAdmin = {
6788
8862
  }
6789
8863
  }
6790
8864
  };
8865
+ ;// ./tokens/generated/motion.ts
8866
+ // tokens/motion.json 에서 생성됨 — 손으로 고치지 않는다. `yarn tokens`
8867
+ /** 원시값. 컴포넌트는 motionTokens 만 쓴다(빌드 R17). 시간은 초다(motion 의 transition 단위). */
8868
+ var motionPresets = {
8869
+ "duration": {
8870
+ "xs": 0.12,
8871
+ "s": 0.16,
8872
+ "m": 0.24,
8873
+ "l": 0.35,
8874
+ "xl": 0.5
8875
+ },
8876
+ "ease": {
8877
+ "out": [0.25, 0.1, 0.25, 1],
8878
+ "in": [0.4, 0, 1, 1],
8879
+ "in-out": [0.4, 0, 0.1, 1],
8880
+ "back": [0.34, 1.56, 0.64, 1],
8881
+ "symmetric": [0.5, 0, 0.5, 1],
8882
+ "linear": "linear"
8883
+ },
8884
+ "spring": {
8885
+ "rapid": {
8886
+ "type": "spring",
8887
+ "stiffness": 1000,
8888
+ "damping": 55,
8889
+ "mass": 1
8890
+ },
8891
+ "quick": {
8892
+ "type": "spring",
8893
+ "stiffness": 800,
8894
+ "damping": 55,
8895
+ "mass": 1
8896
+ },
8897
+ "small": {
8898
+ "type": "spring",
8899
+ "stiffness": 480,
8900
+ "damping": 50,
8901
+ "mass": 1
8902
+ },
8903
+ "medium": {
8904
+ "type": "spring",
8905
+ "stiffness": 270,
8906
+ "damping": 25,
8907
+ "mass": 1
8908
+ },
8909
+ "basic": {
8910
+ "type": "spring",
8911
+ "stiffness": 200,
8912
+ "damping": 30,
8913
+ "mass": 1
8914
+ },
8915
+ "large": {
8916
+ "type": "spring",
8917
+ "stiffness": 100,
8918
+ "damping": 15,
8919
+ "mass": 1
8920
+ },
8921
+ "bounce": {
8922
+ "type": "spring",
8923
+ "stiffness": 300,
8924
+ "damping": 15,
8925
+ "mass": 1
8926
+ },
8927
+ "slow": {
8928
+ "type": "spring",
8929
+ "stiffness": 70,
8930
+ "damping": 20,
8931
+ "mass": 1
8932
+ }
8933
+ }
8934
+ };
8935
+ /** 의미 토큰. 참조를 실제 값으로 풀었다. 시간은 초라 motion 의 transition 에 그대로 넣는다. */
8936
+ var motionTokens = {
8937
+ "press": {
8938
+ "duration": 0.12,
8939
+ "ease": [0.25, 0.1, 0.25, 1],
8940
+ "scale": 0.98,
8941
+ "dim": 0.12
8942
+ },
8943
+ "confirm": {
8944
+ "weak": {
8945
+ "type": "spring",
8946
+ "stiffness": 480,
8947
+ "damping": 50,
8948
+ "mass": 1
8949
+ },
8950
+ "strong": {
8951
+ "type": "spring",
8952
+ "stiffness": 300,
8953
+ "damping": 15,
8954
+ "mass": 1
8955
+ }
8956
+ },
8957
+ "reject": {
8958
+ "duration": 0.35,
8959
+ "ease": "linear",
8960
+ "distance": "2px"
8961
+ },
8962
+ "enter": {
8963
+ "duration": 0.24,
8964
+ "ease": [0.25, 0.1, 0.25, 1],
8965
+ "strong": {
8966
+ "type": "spring",
8967
+ "stiffness": 300,
8968
+ "damping": 15,
8969
+ "mass": 1
8970
+ },
8971
+ "scale-from": 0.96,
8972
+ "offset": "16px",
8973
+ "pop-scale": 0.6
8974
+ },
8975
+ "exit": {
8976
+ "duration": 0.16,
8977
+ "ease": [0.4, 0, 1, 1]
8978
+ },
8979
+ "appear": {
8980
+ "duration": 0.24,
8981
+ "ease": [0.25, 0.1, 0.25, 1]
8982
+ },
8983
+ "reveal": {
8984
+ "duration": 0.24,
8985
+ "ease": [0.25, 0.1, 0.25, 1],
8986
+ "gap": 0.08
8987
+ },
8988
+ "progress": {
8989
+ "duration": 0.24,
8990
+ "spring": {
8991
+ "type": "spring",
8992
+ "stiffness": 200,
8993
+ "damping": 30,
8994
+ "mass": 1
8995
+ }
8996
+ },
8997
+ "expand": {
8998
+ "duration": 0.24,
8999
+ "ease": [0.25, 0.1, 0.25, 1],
9000
+ "rotate": "180deg"
9001
+ },
9002
+ "dismiss-on-scroll": {
9003
+ "duration": 0.24,
9004
+ "ease": [0.25, 0.1, 0.25, 1],
9005
+ "threshold": "1px"
9006
+ },
9007
+ "attention": {
9008
+ "shine": 2.5,
9009
+ "blink": 0.3,
9010
+ "float-distance": "3px"
9011
+ },
9012
+ "busy": {
9013
+ "ring": 1.2,
9014
+ "ring-ease": [0.5, 0, 0.5, 1],
9015
+ "shimmer": 1.5,
9016
+ "dots": 0.6
9017
+ }
9018
+ };
6791
9019
  // EXTERNAL MODULE: ./tokens/generated/colors.ts
6792
9020
  var colors = __nuri_require__(7232);
6793
9021
  ;// ./index.tsx
@@ -6817,6 +9045,22 @@ var colors = __nuri_require__(7232);
6817
9045
 
6818
9046
 
6819
9047
 
9048
+
9049
+
9050
+
9051
+
9052
+
9053
+
9054
+
9055
+
9056
+
9057
+
9058
+
9059
+
9060
+
9061
+
9062
+
9063
+
6820
9064
 
6821
9065
 
6822
9066
 
@@ -6829,24 +9073,38 @@ var colors = __nuri_require__(7232);
6829
9073
 
6830
9074
 
6831
9075
  const __webpack_exports__colors = colors/* colors */.T;
6832
- export { inline_loading as InlineLoading, overlay_loading as OverlayLoading, __webpack_exports__colors as colors, primitive, semanticAdmin, semanticApp };
9076
+ export { inline_loading as InlineLoading, MotionProvider, overlay_loading as OverlayLoading, __webpack_exports__colors as colors, motionPresets, motionTokens, primitive, semanticAdmin, semanticApp };
6833
9077
  export const Avatar = avatar/* default */.A;
9078
+ export const BottomBar = bottom_bar/* default */.A;
6834
9079
  export const BottomNav = bottom_nav/* default */.A;
6835
9080
  export const Breadcrumb = breadcrumb/* default */.A;
6836
9081
  export const CTAButton = cta_button/* default */.A;
6837
9082
  export const Callout = callout/* default */.A;
9083
+ export const Card = card/* default */.A;
6838
9084
  export const Checkbox = check_box/* default */.A;
6839
9085
  export const ChipGroup = chip_group/* default */.A;
6840
9086
  export const CollapsibleMenu = collapsible_menu/* default */.A;
6841
9087
  export const DataTable = data_table/* default */.A;
9088
+ export const DescriptionList = description_list/* default */.A;
6842
9089
  export const Drawer = drawer/* default */.A;
6843
9090
  export const DropDown = drop_down/* default */.A;
9091
+ export const EmptyState = empty_state/* default */.A;
6844
9092
  export const Icon = icon/* default */.A;
9093
+ export const IconButton = icon_button/* default */.A;
6845
9094
  export const IconTextBadge = icon_text_badge/* default */.A;
6846
9095
  export const IconTextOptionBadge = icon_text_option_badge/* default */.A;
9096
+ export const ListGroup = list_group/* default */.A;
9097
+ export const ListRow = list_row/* default */.A;
6847
9098
  export const LogProvider = log_context/* LogProvider */._;
9099
+ export const MediaThumbnail = media_thumbnail/* default */.A;
9100
+ export const MediaViewer = media_viewer/* default */.A;
9101
+ export const Message = message/* default */.A;
9102
+ export const MessageComposer = message_composer/* default */.A;
9103
+ export const MessageEvent = message_event/* default */.A;
9104
+ export const MessageThread = message_thread/* default */.A;
6848
9105
  export const Modal = modal/* default */.A;
6849
9106
  export const ModalWithDoubleButton = modal_with_double_button/* default */.A;
9107
+ export const Notice = notice/* default */.A;
6850
9108
  export const OptionBadge = option_badge/* default */.A;
6851
9109
  export const Pagination = pagination/* default */.A;
6852
9110
  export const Radio = radio_radio/* default */.A;
@@ -6855,6 +9113,7 @@ export const Spinner = spinner/* default */.A;
6855
9113
  export const StepProgress = step_progress/* default */.A;
6856
9114
  export const Switch = switch_switch/* default */.A;
6857
9115
  export const Tabs = tabs/* default */.A;
9116
+ export const Tag = tag/* default */.A;
6858
9117
  export const Text = text_text/* default */.A;
6859
9118
  export const TextArea = text_area/* default */.A;
6860
9119
  export const TextField = text_field/* default */.A;