@nurihaus/web-design-system 3.2.0 → 3.4.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 (91) hide show
  1. package/README.md +36 -0
  2. package/dist/ai/components.md +123 -12
  3. package/dist/ai/tokens.md +2 -0
  4. package/dist/avatar.js +5 -5
  5. package/dist/bottom-nav.js +22 -8
  6. package/dist/breadcrumb.js +25 -10
  7. package/dist/check-box.js +24 -8
  8. package/dist/chip-group.js +21 -7
  9. package/dist/{chunk-563.js → chunk-1563.js} +26 -13
  10. package/dist/{chunk-657.js → chunk-1657.js} +2 -2
  11. package/dist/{chunk-777.js → chunk-2777.js} +2 -2
  12. package/dist/{chunk-558.js → chunk-4558.js} +2 -2
  13. package/dist/chunk-4560.js +77 -0
  14. package/dist/{chunk-917.js → chunk-4917.js} +2 -2
  15. package/dist/{chunk-77.js → chunk-5077.js} +2 -2
  16. package/dist/{chunk-149.js → chunk-6149.js} +2 -2
  17. package/dist/{chunk-302.js → chunk-6302.js} +2 -2
  18. package/dist/{chunk-364.js → chunk-6364.js} +2 -2
  19. package/dist/{chunk-713.js → chunk-6713.js} +2 -2
  20. package/dist/{chunk-298.js → chunk-7298.js} +2 -2
  21. package/dist/{chunk-653.js → chunk-7653.js} +7 -3
  22. package/dist/{chunk-739.js → chunk-7739.js} +2 -2
  23. package/dist/{chunk-309.js → chunk-8690.js} +2 -2
  24. package/dist/{chunk-933.js → chunk-8933.js} +2 -2
  25. package/dist/chunk-910.js +23 -10
  26. package/dist/{chunk-387.js → chunk-9387.js} +2 -2
  27. package/dist/{chunk-436.js → chunk-9436.js} +2 -2
  28. package/dist/{chunk-976.js → chunk-9976.js} +3 -3
  29. package/dist/collapsible-menu.js +25 -12
  30. package/dist/components/badge/badge-props.d.ts +4 -4
  31. package/dist/components/badge/badge.stories.d.ts +1 -1
  32. package/dist/components/bottom-nav/bottom-nav-type.d.ts +5 -2
  33. package/dist/components/breadcrumb/breadcrumb-type.d.ts +2 -1
  34. package/dist/components/button/button-props.d.ts +2 -2
  35. package/dist/components/button/button-type.d.ts +2 -1
  36. package/dist/components/button/button.stories.d.ts +1 -1
  37. package/dist/components/check-box/check-box-type.d.ts +2 -1
  38. package/dist/components/chip-group/chip-group-type.d.ts +2 -1
  39. package/dist/components/collapsible-menu/collapsible-menu-type.d.ts +2 -1
  40. package/dist/components/drawer/drawer-type.d.ts +2 -1
  41. package/dist/components/drop-down/drop-down-type.d.ts +2 -1
  42. package/dist/components/icon/icon-paths.d.ts +4 -0
  43. package/dist/components/icon/icon-props.d.ts +2 -2
  44. package/dist/components/icon/icon.stories.d.ts +2 -2
  45. package/dist/components/logging/log-context.d.ts +9 -0
  46. package/dist/components/logging/logging-type.d.ts +25 -0
  47. package/dist/components/logging/logging.d.ts +5 -0
  48. package/dist/components/logging/logging.stories.d.ts +18 -0
  49. package/dist/components/modal/modal-type.d.ts +2 -1
  50. package/dist/components/pagination/pagination-type.d.ts +2 -1
  51. package/dist/components/radio/radio-type.d.ts +3 -1
  52. package/dist/components/radio/radio.d.ts +2 -1
  53. package/dist/components/radio/radio.stories.d.ts +1 -1
  54. package/dist/components/switch/switch-type.d.ts +2 -1
  55. package/dist/components/table/table-type.d.ts +2 -1
  56. package/dist/components/tabs/tabs-type.d.ts +2 -1
  57. package/dist/components/text-area/text-area-type.d.ts +2 -1
  58. package/dist/components/text-field/text-field-type.d.ts +2 -1
  59. package/dist/components/toast/toast-type.d.ts +2 -1
  60. package/dist/components/toast/toast.stories.d.ts +3 -1
  61. package/dist/components/tooltip/tooltip-type.d.ts +2 -1
  62. package/dist/components.css +48 -0
  63. package/dist/cta-button.js +35 -20
  64. package/dist/data-table.js +19 -7
  65. package/dist/drawer.js +23 -9
  66. package/dist/drop-down.js +25 -9
  67. package/dist/helpers/hooks/useTrack.d.ts +3 -0
  68. package/dist/icon-text-badge.js +12 -10
  69. package/dist/icon-text-option-badge.js +6 -6
  70. package/dist/icon.js +5 -5
  71. package/dist/index.d.ts +2 -0
  72. package/dist/index.js +438 -81
  73. package/dist/loading.js +6 -6
  74. package/dist/logging.js +147 -0
  75. package/dist/modal-with-double-button.js +14 -12
  76. package/dist/modal.js +39 -26
  77. package/dist/option-badge.js +12 -10
  78. package/dist/pagination.js +23 -9
  79. package/dist/radio.js +24 -10
  80. package/dist/skeleton.js +4 -4
  81. package/dist/step-progress.js +3 -3
  82. package/dist/styles.css +42 -0
  83. package/dist/switch.js +24 -8
  84. package/dist/tabs.js +22 -6
  85. package/dist/text-area.js +30 -8
  86. package/dist/text-field.js +31 -9
  87. package/dist/text.js +5 -5
  88. package/dist/toast.js +32 -15
  89. package/dist/tokens.css +2 -0
  90. package/dist/tooltip.js +33 -18
  91. package/package.json +5 -1
package/dist/index.js CHANGED
@@ -268,7 +268,7 @@ var __assign = undefined && undefined.__assign || function () {
268
268
  return __assign.apply(this, arguments);
269
269
  };
270
270
 
271
- var variant = ['neutral', 'primary', 'danger', 'outlined'];
271
+ var variant = ['neutral', 'primary', 'danger', 'outlined', 'callout'];
272
272
  var sizes = ['xs', 's', 'm', 'l', 'xl'];
273
273
  var commonBadgeProps = {
274
274
  variant: {
@@ -542,6 +542,8 @@ __nuri_require__.d(__webpack_exports__, {
542
542
  var jsx_runtime_ = __nuri_require__(612);
543
543
  // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
544
544
  var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
545
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
546
+ var useTrack = __nuri_require__(4560);
545
547
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
546
548
  var classNames = __nuri_require__(3274);
547
549
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -643,6 +645,7 @@ var bottom_nav_assign = undefined && undefined.__assign || function () {
643
645
 
644
646
 
645
647
 
648
+
646
649
  var Anchor = function Anchor(props) {
647
650
  return (0,jsx_runtime_.jsx)("a", bottom_nav_assign({}, props));
648
651
  };
@@ -655,7 +658,13 @@ var BottomNav = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_rea
655
658
  items = _a.items,
656
659
  value = _a.value,
657
660
  label = _a.label,
658
- linkComponent = _a.linkComponent;
661
+ linkComponent = _a.linkComponent,
662
+ track = _a.track,
663
+ trackProps = _a.trackProps;
664
+ var emit = (0,useTrack/* useTrack */.n)('BottomNav', {
665
+ track: track,
666
+ trackProps: trackProps
667
+ });
659
668
  var Link = linkComponent !== null && linkComponent !== void 0 ? linkComponent : Anchor;
660
669
  var activeIndex = items.findIndex(function (item) {
661
670
  return item.id === value;
@@ -678,6 +687,9 @@ var BottomNav = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_rea
678
687
  className: itemClassName,
679
688
  href: item.href,
680
689
  "aria-current": isActive ? 'page' : undefined,
690
+ onClick: function onClick() {
691
+ return emit('navigate', item.id);
692
+ },
681
693
  children: [(0,jsx_runtime_.jsx)("span", {
682
694
  className: 'bottom-nav-label',
683
695
  children: item.label
@@ -716,6 +728,8 @@ var jsx_runtime_ = __nuri_require__(612);
716
728
  var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
717
729
  // EXTERNAL MODULE: ./assets/icons/chevronDown.svg
718
730
  var chevronDown = __nuri_require__(9436);
731
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
732
+ var useTrack = __nuri_require__(4560);
719
733
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
720
734
  var classNames = __nuri_require__(3274);
721
735
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -830,6 +844,7 @@ var breadcrumbProps = {
830
844
 
831
845
 
832
846
 
847
+
833
848
  var Breadcrumb = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
834
849
  var _a = (0,getMergedProps/* getMergedProps */.p)(props, breadcrumbProps),
835
850
  className = _a.className,
@@ -837,11 +852,21 @@ var Breadcrumb = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_re
837
852
  items = _a.items,
838
853
  onItemClick = _a.onItemClick,
839
854
  separator = _a.separator,
840
- LinkComponent = _a.linkComponent;
855
+ LinkComponent = _a.linkComponent,
856
+ track = _a.track,
857
+ trackProps = _a.trackProps;
858
+ var emit = (0,useTrack/* useTrack */.n)('Breadcrumb', {
859
+ track: track,
860
+ trackProps: trackProps
861
+ });
841
862
  var lastIndex = items.length - 1;
842
863
  var separatorNode = separator !== null && separator !== void 0 ? separator : (0,jsx_runtime_.jsx)(chevronDown/* default */.A, {
843
864
  className: 'breadcrumb-chevron'
844
865
  });
866
+ var selectItem = function selectItem(id) {
867
+ emit('navigate', id);
868
+ onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(id);
869
+ };
845
870
  return (0,jsx_runtime_.jsx)(base_breadcrumb, {
846
871
  ref: ref,
847
872
  className: (0,classNames/* classNames */.x)(className, 'breadcrumb'),
@@ -860,7 +885,7 @@ var Breadcrumb = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_re
860
885
  asChild: true,
861
886
  className: 'breadcrumb-link',
862
887
  onClick: function onClick() {
863
- return onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item.id);
888
+ return selectItem(item.id);
864
889
  },
865
890
  children: (0,jsx_runtime_.jsx)(LinkComponent, {
866
891
  href: item.href,
@@ -870,7 +895,7 @@ var Breadcrumb = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_re
870
895
  className: 'breadcrumb-link',
871
896
  href: item.href,
872
897
  onClick: function onClick() {
873
- return onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item.id);
898
+ return selectItem(item.id);
874
899
  },
875
900
  children: item.label
876
901
  }) : (0,jsx_runtime_.jsx)("span", {
@@ -964,7 +989,7 @@ BaseButton.displayName = 'BaseButton';
964
989
  /* unused harmony exports variant, sizes */
965
990
  /* harmony import */ var _helpers_props_common_props__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(7298);
966
991
 
967
- var variant = ['primary', 'secondary', 'ghost', 'neutral', 'confirm', 'outlined'];
992
+ var variant = ['primary', 'secondary', 'ghost', 'neutral', 'confirm', 'outlined', 'social'];
968
993
  var sizes = ['xs', 's', 'm', 'l', 'xl'];
969
994
  var ctaButtonProps = {
970
995
  variant: {
@@ -986,11 +1011,12 @@ var ctaButtonProps = {
986
1011
  /* harmony export */ });
987
1012
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
988
1013
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
989
- /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(3274);
990
- /* harmony import */ var _helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(7335);
991
- /* harmony import */ var _loading_spinner_spinner__WEBPACK_IMPORTED_MODULE_4__ = __nuri_require__(6302);
992
- /* harmony import */ var _base_button__WEBPACK_IMPORTED_MODULE_5__ = __nuri_require__(8933);
993
- /* harmony import */ var _button_props__WEBPACK_IMPORTED_MODULE_6__ = __nuri_require__(9976);
1014
+ /* harmony import */ var _helpers_hooks_useTrack__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(4560);
1015
+ /* 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 _loading_spinner_spinner__WEBPACK_IMPORTED_MODULE_5__ = __nuri_require__(6302);
1018
+ /* harmony import */ var _base_button__WEBPACK_IMPORTED_MODULE_6__ = __nuri_require__(8933);
1019
+ /* harmony import */ var _button_props__WEBPACK_IMPORTED_MODULE_7__ = __nuri_require__(9976);
994
1020
  var __assign = undefined && undefined.__assign || function () {
995
1021
  __assign = Object.assign || function (t) {
996
1022
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -1016,17 +1042,29 @@ var __rest = undefined && undefined.__rest || function (s, e) {
1016
1042
 
1017
1043
 
1018
1044
 
1045
+
1019
1046
  var CTAButton = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
1020
- var _a = (0,_helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_3__/* .getMergedProps */ .p)(props, _button_props__WEBPACK_IMPORTED_MODULE_6__/* .ctaButtonProps */ .Lr),
1047
+ var _a = (0,_helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_4__/* .getMergedProps */ .p)(props, _button_props__WEBPACK_IMPORTED_MODULE_7__/* .ctaButtonProps */ .Lr),
1021
1048
  className = _a.className,
1022
1049
  text = _a.text,
1023
1050
  leftIcon = _a.leftIcon,
1024
1051
  rightIcon = _a.rightIcon,
1025
- restProps = __rest(_a, ["className", "text", "leftIcon", "rightIcon"]);
1026
- return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_base_button__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A, __assign({
1052
+ _onClick = _a.onClick,
1053
+ track = _a.track,
1054
+ trackProps = _a.trackProps,
1055
+ restProps = __rest(_a, ["className", "text", "leftIcon", "rightIcon", "onClick", "track", "trackProps"]);
1056
+ var emit = (0,_helpers_hooks_useTrack__WEBPACK_IMPORTED_MODULE_2__/* .useTrack */ .n)('CTAButton', {
1057
+ track: track,
1058
+ trackProps: trackProps
1059
+ });
1060
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_base_button__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A, __assign({
1027
1061
  ref: ref,
1028
- className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__/* .classNames */ .x)(className, 'cta-button'),
1029
- loadingComponent: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_loading_spinner_spinner__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A, {})
1062
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__/* .classNames */ .x)(className, 'cta-button'),
1063
+ loadingComponent: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_loading_spinner_spinner__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A, {}),
1064
+ onClick: function onClick(event) {
1065
+ emit('click');
1066
+ _onClick === null || _onClick === void 0 ? void 0 : _onClick(event);
1067
+ }
1030
1068
  }, restProps, {
1031
1069
  children: [leftIcon, text, rightIcon]
1032
1070
  }));
@@ -1051,6 +1089,8 @@ var jsx_runtime_ = __nuri_require__(612);
1051
1089
  var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
1052
1090
  // EXTERNAL MODULE: ./assets/icons/check.svg
1053
1091
  var check = __nuri_require__(5077);
1092
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
1093
+ var useTrack = __nuri_require__(4560);
1054
1094
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
1055
1095
  var classNames = __nuri_require__(3274);
1056
1096
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -1183,15 +1223,27 @@ var check_box_rest = undefined && undefined.__rest || function (s, e) {
1183
1223
 
1184
1224
 
1185
1225
 
1226
+
1186
1227
  var CheckBox = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
1187
1228
  var rootClassName = (0,getMergedProps/* getMergedProps */.p)(props, {}).className;
1188
1229
  var _a = (0,getMergedProps/* getMergedProps */.p)(props, checkBoxIndicatorProps),
1189
1230
  label = _a.label,
1190
1231
  indicatorClassName = _a.className,
1191
- restProps = check_box_rest(_a, ["label", "className"]);
1232
+ _onChange = _a.onChange,
1233
+ track = _a.track,
1234
+ trackProps = _a.trackProps,
1235
+ restProps = check_box_rest(_a, ["label", "className", "onChange", "track", "trackProps"]);
1236
+ var emit = (0,useTrack/* useTrack */.n)('CheckBox', {
1237
+ track: track,
1238
+ trackProps: trackProps
1239
+ });
1192
1240
  return (0,jsx_runtime_.jsxs)(base_check_box, check_box_assign({
1193
1241
  ref: ref,
1194
- className: (0,classNames/* classNames */.x)(rootClassName, 'check-box')
1242
+ className: (0,classNames/* classNames */.x)(rootClassName, 'check-box'),
1243
+ onChange: function onChange(checked) {
1244
+ emit('change', checked ? 'on' : 'off');
1245
+ _onChange === null || _onChange === void 0 ? void 0 : _onChange(checked);
1246
+ }
1195
1247
  }, restProps, {
1196
1248
  children: [(0,jsx_runtime_.jsx)("div", {
1197
1249
  className: (0,classNames/* classNames */.x)(indicatorClassName, 'check-box-indicator wrapper'),
@@ -1225,6 +1277,8 @@ var jsx_runtime_ = __nuri_require__(612);
1225
1277
  var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
1226
1278
  // EXTERNAL MODULE: ./helpers/hooks/useExternalState.ts
1227
1279
  var useExternalState = __nuri_require__(9387);
1280
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
1281
+ var useTrack = __nuri_require__(4560);
1228
1282
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
1229
1283
  var classNames = __nuri_require__(3274);
1230
1284
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -1303,6 +1357,7 @@ var chipGroupProps = {};
1303
1357
 
1304
1358
 
1305
1359
 
1360
+
1306
1361
  var ChipGroup = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
1307
1362
  var _a, _b;
1308
1363
  var _c = (0,getMergedProps/* getMergedProps */.p)(props, chipGroupProps),
@@ -1312,10 +1367,19 @@ var ChipGroup = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_rea
1312
1367
  value = _c.value,
1313
1368
  defaultValue = _c.defaultValue,
1314
1369
  onValueChange = _c.onValueChange,
1315
- label = _c.label;
1370
+ label = _c.label,
1371
+ track = _c.track,
1372
+ trackProps = _c.trackProps;
1373
+ var emit = (0,useTrack/* useTrack */.n)('ChipGroup', {
1374
+ track: track,
1375
+ trackProps: trackProps
1376
+ });
1316
1377
  var _d = (0,useExternalState/* useExternalState */.C)({
1317
1378
  prop: value,
1318
- handler: onValueChange,
1379
+ handler: function handler(id) {
1380
+ emit('change', id);
1381
+ onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(id);
1382
+ },
1319
1383
  defaultProp: (_b = defaultValue !== null && defaultValue !== void 0 ? defaultValue : (_a = items[0]) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : ''
1320
1384
  }),
1321
1385
  selected = _d[0],
@@ -1358,6 +1422,8 @@ __nuri_require__.d(__webpack_exports__, {
1358
1422
  var jsx_runtime_ = __nuri_require__(612);
1359
1423
  // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
1360
1424
  var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
1425
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
1426
+ var useTrack = __nuri_require__(4560);
1361
1427
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
1362
1428
  var classNames = __nuri_require__(3274);
1363
1429
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -1458,6 +1524,7 @@ var collapsible_menu_assign = undefined && undefined.__assign || function () {
1458
1524
 
1459
1525
 
1460
1526
 
1527
+
1461
1528
  var Anchor = function Anchor(props) {
1462
1529
  return (0,jsx_runtime_.jsx)("a", collapsible_menu_assign({}, props));
1463
1530
  };
@@ -1471,7 +1538,13 @@ var CollapsibleMenu = /*#__PURE__*/(0,external_root_React_commonjs2_react_common
1471
1538
  onActiveKeyChange = _a.onActiveKeyChange,
1472
1539
  _b = _a.indent,
1473
1540
  indent = _b === void 0 ? 12 : _b,
1474
- linkComponent = _a.linkComponent;
1541
+ linkComponent = _a.linkComponent,
1542
+ track = _a.track,
1543
+ trackProps = _a.trackProps;
1544
+ var emit = (0,useTrack/* useTrack */.n)('CollapsibleMenu', {
1545
+ track: track,
1546
+ trackProps: trackProps
1547
+ });
1475
1548
  var Link = linkComponent !== null && linkComponent !== void 0 ? linkComponent : Anchor;
1476
1549
  var rootClassName = (0,classNames/* classNames */.x)(className, 'collapsible-menu');
1477
1550
  var _hasActiveDescendant = function hasActiveDescendant(item) {
@@ -1480,6 +1553,12 @@ var CollapsibleMenu = /*#__PURE__*/(0,external_root_React_commonjs2_react_common
1480
1553
  if (item.key === activeKey) return true;
1481
1554
  return (_b = (_a = item.children) === null || _a === void 0 ? void 0 : _a.some(_hasActiveDescendant)) !== null && _b !== void 0 ? _b : false;
1482
1555
  };
1556
+ var selectItem = function selectItem(item) {
1557
+ var _a;
1558
+ emit('navigate', item.key);
1559
+ onActiveKeyChange === null || onActiveKeyChange === void 0 ? void 0 : onActiveKeyChange(item.key);
1560
+ (_a = item.onSelect) === null || _a === void 0 ? void 0 : _a.call(item);
1561
+ };
1483
1562
  var _renderItems = function renderItems(targetItems, depth) {
1484
1563
  var indentStyle = {
1485
1564
  paddingLeft: "".concat(depth * indent, "px")
@@ -1520,13 +1599,11 @@ var CollapsibleMenu = /*#__PURE__*/(0,external_root_React_commonjs2_react_common
1520
1599
  "aria-current": isActive ? 'page' : undefined,
1521
1600
  "aria-disabled": item.disabled ? 'true' : undefined,
1522
1601
  onClick: function onClick(e) {
1523
- var _a;
1524
1602
  if (item.disabled) {
1525
1603
  e.preventDefault();
1526
1604
  return;
1527
1605
  }
1528
- onActiveKeyChange === null || onActiveKeyChange === void 0 ? void 0 : onActiveKeyChange(item.key);
1529
- (_a = item.onSelect) === null || _a === void 0 ? void 0 : _a.call(item);
1606
+ selectItem(item);
1530
1607
  },
1531
1608
  children: left
1532
1609
  }, item.key);
@@ -1536,9 +1613,7 @@ var CollapsibleMenu = /*#__PURE__*/(0,external_root_React_commonjs2_react_common
1536
1613
  className: itemClassName,
1537
1614
  disabled: item.disabled,
1538
1615
  onClick: function onClick() {
1539
- var _a;
1540
- onActiveKeyChange === null || onActiveKeyChange === void 0 ? void 0 : onActiveKeyChange(item.key);
1541
- (_a = item.onSelect) === null || _a === void 0 ? void 0 : _a.call(item);
1616
+ return selectItem(item);
1542
1617
  },
1543
1618
  children: left
1544
1619
  }, item.key);
@@ -1683,6 +1758,8 @@ var jsx_runtime_ = __nuri_require__(612);
1683
1758
  var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
1684
1759
  // EXTERNAL MODULE: ./assets/icons/multifly.svg
1685
1760
  var multifly = __nuri_require__(6713);
1761
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
1762
+ var useTrack = __nuri_require__(4560);
1686
1763
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
1687
1764
  var classNames = __nuri_require__(3274);
1688
1765
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -1817,6 +1894,7 @@ var drawer_assign = undefined && undefined.__assign || function () {
1817
1894
 
1818
1895
 
1819
1896
 
1897
+
1820
1898
  // ref 는 패널(Dialog.Content) div 에 붙는다. Root 는 DOM 을 그리지 않는다.
1821
1899
  var Drawer = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
1822
1900
  var _a = (0,getMergedProps/* getMergedProps */.p)(props, drawerContentProps),
@@ -1829,13 +1907,22 @@ var Drawer = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_
1829
1907
  showCloseIcon = _b === void 0 ? true : _b,
1830
1908
  open = _a.open,
1831
1909
  defaultOpen = _a.defaultOpen,
1832
- onOpenChange = _a.onOpenChange,
1910
+ _onOpenChange = _a.onOpenChange,
1833
1911
  className = _a.className,
1834
- style = _a.style;
1912
+ style = _a.style,
1913
+ track = _a.track,
1914
+ trackProps = _a.trackProps;
1915
+ var emit = (0,useTrack/* useTrack */.n)('Drawer', {
1916
+ track: track,
1917
+ trackProps: trackProps
1918
+ });
1835
1919
  return (0,jsx_runtime_.jsxs)(base_drawer, {
1836
1920
  open: open,
1837
1921
  defaultOpen: defaultOpen,
1838
- onOpenChange: onOpenChange,
1922
+ onOpenChange: function onOpenChange(next) {
1923
+ emit(next ? 'open' : 'close');
1924
+ _onOpenChange === null || _onOpenChange === void 0 ? void 0 : _onOpenChange(next);
1925
+ },
1839
1926
  children: [trigger && (0,jsx_runtime_.jsx)(base_drawer.Trigger, {
1840
1927
  asChild: true,
1841
1928
  children: trigger
@@ -1891,6 +1978,8 @@ var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ =
1891
1978
  var chevronDown = __nuri_require__(9436);
1892
1979
  // EXTERNAL MODULE: ./helpers/hooks/useExternalState.ts
1893
1980
  var useExternalState = __nuri_require__(9387);
1981
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
1982
+ var useTrack = __nuri_require__(4560);
1894
1983
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
1895
1984
  var classNames = __nuri_require__(3274);
1896
1985
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -2034,6 +2123,7 @@ var drop_down_rest = undefined && undefined.__rest || function (s, e) {
2034
2123
 
2035
2124
 
2036
2125
 
2126
+
2037
2127
  var DropDown = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
2038
2128
  var _a = (0,getMergedProps/* getMergedProps */.p)(props, dropDownSingleProps),
2039
2129
  className = _a.className,
@@ -2052,7 +2142,14 @@ var DropDown = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_reac
2052
2142
  openProp = _a.open,
2053
2143
  onOpenChangeProp = _a.onOpenChange,
2054
2144
  defaultOpen = _a.defaultOpen,
2055
- restProps = drop_down_rest(_a, ["className", "renderValue", "placeholder", "options", "value", "disabled", "leftIcon", "rightIcon", "style", "renderOption", "side", "align", "position", "open", "onOpenChange", "defaultOpen"]);
2145
+ _onValueChange = _a.onValueChange,
2146
+ track = _a.track,
2147
+ trackProps = _a.trackProps,
2148
+ restProps = drop_down_rest(_a, ["className", "renderValue", "placeholder", "options", "value", "disabled", "leftIcon", "rightIcon", "style", "renderOption", "side", "align", "position", "open", "onOpenChange", "defaultOpen", "onValueChange", "track", "trackProps"]);
2149
+ var emit = (0,useTrack/* useTrack */.n)('DropDown', {
2150
+ track: track,
2151
+ trackProps: trackProps
2152
+ });
2056
2153
  var _b = (0,useExternalState/* useExternalState */.C)({
2057
2154
  prop: openProp,
2058
2155
  handler: onOpenChangeProp,
@@ -2067,7 +2164,11 @@ var DropDown = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_reac
2067
2164
  value: value,
2068
2165
  disabled: disabled,
2069
2166
  open: open,
2070
- onOpenChange: setOpen
2167
+ onOpenChange: setOpen,
2168
+ onValueChange: function onValueChange(next) {
2169
+ emit('change', next);
2170
+ _onValueChange === null || _onValueChange === void 0 ? void 0 : _onValueChange(next);
2171
+ }
2071
2172
  }, restProps, {
2072
2173
  children: [(0,jsx_runtime_.jsxs)(base_drop_down.Trigger, {
2073
2174
  className: (0,classNames/* classNames */.x)(className, 'drop-down-single-trigger'),
@@ -2330,6 +2431,10 @@ var iconPaths = {
2330
2431
  regular: ['M251.77,73a8,8,0,0,0-8.21.39L208,97.05V72a16,16,0,0,0-16-16H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V159l35.56,23.71A8,8,0,0,0,248,184a8,8,0,0,0,8-8V80A8,8,0,0,0,251.77,73ZM192,184H32V72H192V184Zm48-22.95-32-21.33V116.28L240,95Z'],
2331
2432
  fill: ['M192,72V184a16,16,0,0,1-16,16H32a16,16,0,0,1-16-16V72A16,16,0,0,1,32,56H176A16,16,0,0,1,192,72Zm58,.25a8.23,8.23,0,0,0-6.63,1.22L209.78,95.86A4,4,0,0,0,208,99.19v57.62a4,4,0,0,0,1.78,3.33l33.78,22.52a8,8,0,0,0,8.58.19,8.33,8.33,0,0,0,3.86-7.17V80A8,8,0,0,0,250,72.25Z']
2332
2433
  },
2434
+ play: {
2435
+ regular: ['M232.4,114.49,88.32,26.35a16,16,0,0,0-16.2-.3A15.86,15.86,0,0,0,64,39.87V216.13A15.94,15.94,0,0,0,80,232a16.07,16.07,0,0,0,8.36-2.35L232.4,141.51a15.81,15.81,0,0,0,0-27ZM80,215.94V40l143.83,88Z'],
2436
+ fill: ['M240,128a15.74,15.74,0,0,1-7.6,13.51L88.32,229.65a16,16,0,0,1-16.2.3A15.86,15.86,0,0,1,64,216.13V39.87a15.86,15.86,0,0,1,8.12-13.82,16,16,0,0,1,16.2.3L232.4,114.49A15.74,15.74,0,0,1,240,128Z']
2437
+ },
2333
2438
  link: {
2334
2439
  regular: ['M240,88.23a54.43,54.43,0,0,1-16,37L189.25,160a54.27,54.27,0,0,1-38.63,16h-.05A54.63,54.63,0,0,1,96,119.84a8,8,0,0,1,16,.45A38.62,38.62,0,0,0,150.58,160h0a38.39,38.39,0,0,0,27.31-11.31l34.75-34.75a38.63,38.63,0,0,0-54.63-54.63l-11,11A8,8,0,0,1,135.7,59l11-11A54.65,54.65,0,0,1,224,48,54.86,54.86,0,0,1,240,88.23ZM109,185.66l-11,11A38.41,38.41,0,0,1,70.6,208h0a38.63,38.63,0,0,1-27.29-65.94L78,107.31A38.63,38.63,0,0,1,144,135.71a8,8,0,0,0,16,.45A54.86,54.86,0,0,0,144,96a54.65,54.65,0,0,0-77.27,0L32,130.75A54.62,54.62,0,0,0,70.56,224h0a54.28,54.28,0,0,0,38.64-16l11-11A8,8,0,0,0,109,185.66Z'],
2335
2440
  fill: ['M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM115.7,192.49a43.31,43.31,0,0,1-55-66.43l25.37-25.37a43.35,43.35,0,0,1,61.25,0,42.9,42.9,0,0,1,9.95,15.43,8,8,0,1,1-15,5.6A27.33,27.33,0,0,0,97.37,112L72,137.37a27.32,27.32,0,0,0,34.68,41.91,8,8,0,1,1,9,13.21Zm79.61-62.55-25.37,25.37A43,43,0,0,1,139.32,168h0a43.35,43.35,0,0,1-40.53-28.12,8,8,0,1,1,15-5.6A27.35,27.35,0,0,0,139.28,152h0a27.14,27.14,0,0,0,19.32-8L184,118.63a27.32,27.32,0,0,0-34.68-41.91,8,8,0,1,1-9-13.21,43.32,43.32,0,0,1,55,66.43Z']
@@ -2530,7 +2635,7 @@ BaseIcon.displayName = 'BaseIcon';
2530
2635
 
2531
2636
  /** 꺼짐은 선(regular), 켜짐·강조는 채움(fill) */
2532
2637
  var weight = (/* unused pure expression or super */ null && (['regular', 'fill']));
2533
- var sizes = ['s', 'm', 'l'];
2638
+ var sizes = ['xs', 's', 'm', 'l', 'xl'];
2534
2639
  var iconProps = {
2535
2640
  size: (0,_helpers_props_common_props__WEBPACK_IMPORTED_MODULE_0__/* .sizeProp */ .lw)(sizes, 'l')
2536
2641
  };
@@ -2686,6 +2791,82 @@ Spinner.displayName = 'Spinner';
2686
2791
 
2687
2792
  /***/ },
2688
2793
 
2794
+ /***/ 4804
2795
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
2796
+
2797
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
2798
+ /* harmony export */ _: () => (/* binding */ LogProvider),
2799
+ /* harmony export */ e: () => (/* binding */ useLogEmitter)
2800
+ /* harmony export */ });
2801
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
2802
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
2803
+ var _a;
2804
+
2805
+
2806
+ // 진입점(`/logging`, `/cta-button`, 루트)마다 이 파일이 따로 들어가므로 context 는 전역 키 하나에 둔다.
2807
+ var CONTEXT_KEY = Symbol["for"]('@nurihaus/web-design-system/log-provider');
2808
+ var registry = globalThis;
2809
+ var LogContext = (_a = registry[CONTEXT_KEY]) !== null && _a !== void 0 ? _a : registry[CONTEXT_KEY] = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)(null);
2810
+ var LogProvider = function LogProvider(props) {
2811
+ var onEvent = props.onEvent,
2812
+ children = props.children;
2813
+ // context 값이 Provider 렌더마다 바뀌면 track 을 단 컴포넌트가 모두 다시 그려진다. 최신 onEvent 는 ref 로 읽는다.
2814
+ var onEventRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(onEvent);
2815
+ onEventRef.current = onEvent;
2816
+ var emit = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function (event) {
2817
+ // 로그 수집기가 던져도 클릭·열기 같은 UI 동작은 이어져야 한다.
2818
+ try {
2819
+ onEventRef.current(event);
2820
+ } catch (error) {
2821
+ console.error('[LogProvider] onEvent threw', error);
2822
+ }
2823
+ }, []);
2824
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(LogContext.Provider, {
2825
+ value: emit,
2826
+ children: children
2827
+ });
2828
+ };
2829
+ LogProvider.displayName = 'LogProvider';
2830
+ /** LogProvider 가 둔 emit 함수. Provider 밖이면 null 이다. */
2831
+ var useLogEmitter = function useLogEmitter() {
2832
+ return (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(LogContext);
2833
+ };
2834
+
2835
+ /***/ },
2836
+
2837
+ /***/ 7111
2838
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
2839
+
2840
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
2841
+ /* harmony export */ e: () => (/* binding */ useLog)
2842
+ /* harmony export */ });
2843
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(1041);
2844
+ /* harmony import */ var _log_context__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(4804);
2845
+ var __assign = undefined && undefined.__assign || function () {
2846
+ __assign = Object.assign || function (t) {
2847
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
2848
+ s = arguments[i];
2849
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
2850
+ }
2851
+ return t;
2852
+ };
2853
+ return __assign.apply(this, arguments);
2854
+ };
2855
+
2856
+
2857
+
2858
+ /** 컴포넌트 밖의 사용 로그를 남긴다. LogProvider 밖이면 아무것도 하지 않는다. */
2859
+ var useLog = function useLog() {
2860
+ var emit = (0,_log_context__WEBPACK_IMPORTED_MODULE_1__/* .useLogEmitter */ .e)();
2861
+ return (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function (event) {
2862
+ return emit === null || emit === void 0 ? void 0 : emit(__assign(__assign({}, event), {
2863
+ timestamp: Date.now()
2864
+ }));
2865
+ }, [emit]);
2866
+ };
2867
+
2868
+ /***/ },
2869
+
2689
2870
  /***/ 1657
2690
2871
  (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
2691
2872
 
@@ -2969,11 +3150,13 @@ var ModalWithDoubleButton = {
2969
3150
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
2970
3151
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
2971
3152
  /* harmony import */ var _assets_icons_multifly_svg__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(6713);
2972
- /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(3274);
2973
- /* harmony import */ var _helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_4__ = __nuri_require__(7335);
2974
- /* harmony import */ var _button_base_button__WEBPACK_IMPORTED_MODULE_5__ = __nuri_require__(8933);
2975
- /* harmony import */ var _base_modal__WEBPACK_IMPORTED_MODULE_6__ = __nuri_require__(1657);
2976
- /* harmony import */ var _modal_props__WEBPACK_IMPORTED_MODULE_7__ = __nuri_require__(5214);
3153
+ /* harmony import */ var _helpers_hooks_useTrack__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(4560);
3154
+ /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_4__ = __nuri_require__(3274);
3155
+ /* harmony import */ var _helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_5__ = __nuri_require__(7335);
3156
+ /* harmony import */ var _button_base_button__WEBPACK_IMPORTED_MODULE_6__ = __nuri_require__(8933);
3157
+ /* harmony import */ var _base_modal__WEBPACK_IMPORTED_MODULE_7__ = __nuri_require__(1657);
3158
+ /* harmony import */ var _modal_props__WEBPACK_IMPORTED_MODULE_8__ = __nuri_require__(5214);
3159
+
2977
3160
 
2978
3161
 
2979
3162
 
@@ -2984,10 +3167,10 @@ var ModalWithDoubleButton = {
2984
3167
 
2985
3168
  // Title·Description 은 Text 로 감싸지 않는다. Text 가 id 를 버려 Radix 의 aria-labelledby 연결이 끊긴다.
2986
3169
  var Modal = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
2987
- var _a = (0,_helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_4__/* .getMergedProps */ .p)(props, _modal_props__WEBPACK_IMPORTED_MODULE_7__/* .modalProps */ .y_),
3170
+ var _a = (0,_helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_5__/* .getMergedProps */ .p)(props, _modal_props__WEBPACK_IMPORTED_MODULE_8__/* .modalProps */ .y_),
2988
3171
  open = _a.open,
2989
3172
  defaultOpen = _a.defaultOpen,
2990
- onOpenChange = _a.onOpenChange,
3173
+ _onOpenChange = _a.onOpenChange,
2991
3174
  trigger = _a.trigger,
2992
3175
  title = _a.title,
2993
3176
  description = _a.description,
@@ -2996,32 +3179,41 @@ var Modal = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(funct
2996
3179
  _b = _a.showCloseIcon,
2997
3180
  showCloseIcon = _b === void 0 ? true : _b,
2998
3181
  className = _a.className,
2999
- style = _a.style;
3000
- return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_base_modal__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A, {
3182
+ style = _a.style,
3183
+ track = _a.track,
3184
+ trackProps = _a.trackProps;
3185
+ var emit = (0,_helpers_hooks_useTrack__WEBPACK_IMPORTED_MODULE_3__/* .useTrack */ .n)('Modal', {
3186
+ track: track,
3187
+ trackProps: trackProps
3188
+ });
3189
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_base_modal__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A, {
3001
3190
  open: open,
3002
3191
  defaultOpen: defaultOpen,
3003
- onOpenChange: onOpenChange,
3004
- children: [trigger && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_modal__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A.Trigger, {
3192
+ onOpenChange: function onOpenChange(next) {
3193
+ emit(next ? 'open' : 'close');
3194
+ _onOpenChange === null || _onOpenChange === void 0 ? void 0 : _onOpenChange(next);
3195
+ },
3196
+ children: [trigger && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_modal__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.Trigger, {
3005
3197
  asChild: true,
3006
3198
  children: trigger
3007
- }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_base_modal__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A.Container, {
3199
+ }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_base_modal__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.Container, {
3008
3200
  ref: ref,
3009
- className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__/* .classNames */ .x)(className, 'modal'),
3201
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_4__/* .classNames */ .x)(className, 'modal'),
3010
3202
  style: style,
3011
3203
  children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
3012
3204
  className: 'modal-header',
3013
- children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_modal__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A.Title, {
3205
+ children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_modal__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.Title, {
3014
3206
  className: 'modal-title',
3015
3207
  children: title
3016
- }), showCloseIcon && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_modal__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A.Close, {
3208
+ }), showCloseIcon && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_modal__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.Close, {
3017
3209
  className: 'modal-close-icon',
3018
3210
  "aria-label": "\uB2EB\uAE30",
3019
3211
  asChild: true,
3020
- children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_button_base_button__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A, {
3212
+ children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_button_base_button__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A, {
3021
3213
  children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_assets_icons_multifly_svg__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A, {})
3022
3214
  })
3023
3215
  })]
3024
- }), description && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_modal__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A.Description, {
3216
+ }), description && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_modal__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.Description, {
3025
3217
  className: 'modal-description',
3026
3218
  children: description
3027
3219
  }), children && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", {
@@ -3056,6 +3248,8 @@ var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ =
3056
3248
  var chevronDown = __nuri_require__(9436);
3057
3249
  // EXTERNAL MODULE: ./helpers/hooks/useExternalState.ts
3058
3250
  var useExternalState = __nuri_require__(9387);
3251
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
3252
+ var useTrack = __nuri_require__(4560);
3059
3253
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
3060
3254
  var classNames = __nuri_require__(3274);
3061
3255
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -3180,6 +3374,7 @@ var __spreadArray = undefined && undefined.__spreadArray || function (to, from,
3180
3374
 
3181
3375
 
3182
3376
 
3377
+
3183
3378
  var ELLIPSIS = 'ellipsis';
3184
3379
  var range = function range(start, end) {
3185
3380
  return Array.from({
@@ -3217,11 +3412,20 @@ var Pagination = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_re
3217
3412
  _b = _a.siblingCount,
3218
3413
  siblingCount = _b === void 0 ? 1 : _b,
3219
3414
  disabled = _a.disabled,
3220
- restProps = pagination_rest(_a, ["className", "totalPages", "page", "defaultPage", "onPageChange", "siblingCount", "disabled"]);
3415
+ track = _a.track,
3416
+ trackProps = _a.trackProps,
3417
+ restProps = pagination_rest(_a, ["className", "totalPages", "page", "defaultPage", "onPageChange", "siblingCount", "disabled", "track", "trackProps"]);
3418
+ var emit = (0,useTrack/* useTrack */.n)('Pagination', {
3419
+ track: track,
3420
+ trackProps: trackProps
3421
+ });
3221
3422
  var lastPage = Math.max(totalPages, 1);
3222
3423
  var _c = (0,useExternalState/* useExternalState */.C)({
3223
3424
  prop: pageProp,
3224
- handler: onPageChange,
3425
+ handler: function handler(next) {
3426
+ emit('change', String(next));
3427
+ onPageChange === null || onPageChange === void 0 ? void 0 : onPageChange(next);
3428
+ },
3225
3429
  defaultProp: defaultPage !== null && defaultPage !== void 0 ? defaultPage : 1
3226
3430
  }),
3227
3431
  pageValue = _c[0],
@@ -3290,6 +3494,8 @@ __nuri_require__.d(__webpack_exports__, {
3290
3494
  var jsx_runtime_ = __nuri_require__(612);
3291
3495
  // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
3292
3496
  var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
3497
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
3498
+ var useTrack = __nuri_require__(4560);
3293
3499
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
3294
3500
  var classNames = __nuri_require__(3274);
3295
3501
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -3424,16 +3630,26 @@ var radioProps = {};
3424
3630
 
3425
3631
 
3426
3632
 
3633
+
3427
3634
  var Radio = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
3428
3635
  var _a = (0,getMergedProps/* getMergedProps */.p)(props, radioProps),
3429
3636
  className = _a.className,
3430
3637
  selected = _a.selected,
3431
- onChange = _a.onChange,
3432
- options = _a.options;
3638
+ _onChange = _a.onChange,
3639
+ options = _a.options,
3640
+ track = _a.track,
3641
+ trackProps = _a.trackProps;
3642
+ var emit = (0,useTrack/* useTrack */.n)('Radio', {
3643
+ track: track,
3644
+ trackProps: trackProps
3645
+ });
3433
3646
  return (0,jsx_runtime_.jsx)(base_radio, {
3434
3647
  options: options,
3435
3648
  selected: selected,
3436
- onChange: onChange,
3649
+ onChange: function onChange(id) {
3650
+ emit('change', id !== null && id !== void 0 ? id : undefined);
3651
+ _onChange === null || _onChange === void 0 ? void 0 : _onChange(id);
3652
+ },
3437
3653
  children: (0,jsx_runtime_.jsx)(base_radio.OptionGroup, {
3438
3654
  ref: ref,
3439
3655
  className: (0,classNames/* classNames */.x)(className, 'radio radio-group'),
@@ -3754,6 +3970,8 @@ __nuri_require__.d(__webpack_exports__, {
3754
3970
  var jsx_runtime_ = __nuri_require__(612);
3755
3971
  // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
3756
3972
  var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
3973
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
3974
+ var useTrack = __nuri_require__(4560);
3757
3975
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
3758
3976
  var classNames = __nuri_require__(3274);
3759
3977
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -3878,17 +4096,29 @@ var switch_rest = undefined && undefined.__rest || function (s, e) {
3878
4096
 
3879
4097
 
3880
4098
 
4099
+
3881
4100
  var Switch = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
3882
4101
  var className = props.className,
3883
4102
  label = props.label,
3884
4103
  size = props.size,
3885
- restProps = switch_rest(props, ["className", "label", "size"]);
4104
+ _onChange = props.onChange,
4105
+ track = props.track,
4106
+ trackProps = props.trackProps,
4107
+ restProps = switch_rest(props, ["className", "label", "size", "onChange", "track", "trackProps"]);
4108
+ var emit = (0,useTrack/* useTrack */.n)('Switch', {
4109
+ track: track,
4110
+ trackProps: trackProps
4111
+ });
3886
4112
  var trackClassName = (0,getMergedProps/* getMergedProps */.p)({
3887
4113
  size: size
3888
4114
  }, switchTrackProps).className;
3889
4115
  return (0,jsx_runtime_.jsxs)(base_switch, switch_assign({
3890
4116
  ref: ref,
3891
- className: (0,classNames/* classNames */.x)(className, 'switch')
4117
+ className: (0,classNames/* classNames */.x)(className, 'switch'),
4118
+ onChange: function onChange(checked) {
4119
+ emit('change', checked ? 'on' : 'off');
4120
+ _onChange === null || _onChange === void 0 ? void 0 : _onChange(checked);
4121
+ }
3892
4122
  }, restProps, {
3893
4123
  children: [(0,jsx_runtime_.jsx)("span", {
3894
4124
  className: (0,classNames/* classNames */.x)(trackClassName, 'switch-track'),
@@ -3919,6 +4149,8 @@ __nuri_require__.d(__webpack_exports__, {
3919
4149
  var jsx_runtime_ = __nuri_require__(612);
3920
4150
  // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
3921
4151
  var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
4152
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
4153
+ var useTrack = __nuri_require__(4560);
3922
4154
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
3923
4155
  var classNames = __nuri_require__(3274);
3924
4156
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -4036,12 +4268,19 @@ var dataTableCellProps = table_props_assign(table_props_assign({}, dataTableComm
4036
4268
 
4037
4269
 
4038
4270
 
4271
+
4039
4272
  var DataTableBase = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
4040
4273
  var rows = props.rows,
4041
4274
  columns = props.columns,
4042
4275
  _a = props.fixedRowsIndex,
4043
4276
  fixedRowsIndex = _a === void 0 ? 0 : _a,
4044
- className = props.className;
4277
+ className = props.className,
4278
+ track = props.track,
4279
+ trackProps = props.trackProps;
4280
+ var emit = (0,useTrack/* useTrack */.n)('DataTable', {
4281
+ track: track,
4282
+ trackProps: trackProps
4283
+ });
4045
4284
  var headerStyle = (0,getMergedProps/* getMergedProps */.p)(props, dataTableHeaderProps).style;
4046
4285
  var rowStyle = (0,getMergedProps/* getMergedProps */.p)(props, dataTableRowProps).style;
4047
4286
  var cellStyle = (0,getMergedProps/* getMergedProps */.p)(props, dataTableCellProps).style;
@@ -4071,8 +4310,9 @@ var DataTableBase = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs
4071
4310
  },
4072
4311
  className: (0,classNames/* classNames */.x)(index < fixedRowsIndex && 'fixed'),
4073
4312
  onClick: function onClick() {
4074
- var _a;
4075
- return (_a = item.onClickRow) === null || _a === void 0 ? void 0 : _a.call(item, item.id);
4313
+ if (!item.onClickRow) return;
4314
+ emit('click', item.id);
4315
+ item.onClickRow(item.id);
4076
4316
  },
4077
4317
  children: item.value
4078
4318
  }, item.id);
@@ -4137,6 +4377,8 @@ __nuri_require__.d(__webpack_exports__, {
4137
4377
  var jsx_runtime_ = __nuri_require__(612);
4138
4378
  // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
4139
4379
  var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
4380
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
4381
+ var useTrack = __nuri_require__(4560);
4140
4382
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
4141
4383
  var classNames = __nuri_require__(3274);
4142
4384
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -4319,17 +4561,29 @@ var tabs_rest = undefined && undefined.__rest || function (s, e) {
4319
4561
 
4320
4562
 
4321
4563
 
4564
+
4322
4565
  var Tabs = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
4323
4566
  var rootClassName = (0,getMergedProps/* getMergedProps */.p)(props, {}).className;
4324
4567
  var _a = (0,getMergedProps/* getMergedProps */.p)(props, tabsProps),
4325
4568
  items = _a.items,
4326
4569
  tabClassName = _a.className,
4327
- restProps = tabs_rest(_a, ["items", "className"]);
4570
+ _onValueChange = _a.onValueChange,
4571
+ track = _a.track,
4572
+ trackProps = _a.trackProps,
4573
+ restProps = tabs_rest(_a, ["items", "className", "onValueChange", "track", "trackProps"]);
4574
+ var emit = (0,useTrack/* useTrack */.n)('Tabs', {
4575
+ track: track,
4576
+ trackProps: trackProps
4577
+ });
4328
4578
  var tabsTriggerClassName = (0,classNames/* classNames */.x)(tabClassName, 'tabs-trigger');
4329
4579
  var tabsContentClassName = (0,classNames/* classNames */.x)(tabClassName, 'tabs-content');
4330
4580
  return (0,jsx_runtime_.jsxs)(base_tabs, tabs_assign({
4331
4581
  ref: ref,
4332
- className: (0,classNames/* classNames */.x)(rootClassName, 'tabs-root')
4582
+ className: (0,classNames/* classNames */.x)(rootClassName, 'tabs-root'),
4583
+ onValueChange: function onValueChange(id) {
4584
+ emit('change', id !== null && id !== void 0 ? id : undefined);
4585
+ _onValueChange === null || _onValueChange === void 0 ? void 0 : _onValueChange(id);
4586
+ }
4333
4587
  }, restProps, {
4334
4588
  children: [(0,jsx_runtime_.jsxs)(base_tabs.List, {
4335
4589
  className: (0,classNames/* classNames */.x)(tabClassName, 'tabs-list'),
@@ -4378,6 +4632,8 @@ __nuri_require__.d(__webpack_exports__, {
4378
4632
  var jsx_runtime_ = __nuri_require__(612);
4379
4633
  // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
4380
4634
  var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
4635
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
4636
+ var useTrack = __nuri_require__(4560);
4381
4637
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
4382
4638
  var classNames = __nuri_require__(3274);
4383
4639
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -4527,6 +4783,7 @@ var text_area_rest = undefined && undefined.__rest || function (s, e) {
4527
4783
 
4528
4784
 
4529
4785
 
4786
+
4530
4787
  var TextArea = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
4531
4788
  var _a = (0,getMergedProps/* getMergedProps */.p)(props, textAreaProps),
4532
4789
  className = _a.className,
@@ -4537,7 +4794,16 @@ var TextArea = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_reac
4537
4794
  defaultValue = _a.defaultValue,
4538
4795
  helperText = _a.helperText,
4539
4796
  isError = _a.isError,
4540
- restProps = text_area_rest(_a, ["className", "style", "title", "value", "onChange", "defaultValue", "helperText", "isError"]);
4797
+ _onFocus = _a.onFocus,
4798
+ _onBlur = _a.onBlur,
4799
+ track = _a.track,
4800
+ trackProps = _a.trackProps,
4801
+ restProps = text_area_rest(_a, ["className", "style", "title", "value", "onChange", "defaultValue", "helperText", "isError", "onFocus", "onBlur", "track", "trackProps"]);
4802
+ var emit = (0,useTrack/* useTrack */.n)('TextArea', {
4803
+ track: track,
4804
+ trackProps: trackProps
4805
+ });
4806
+ var focusedValueRef = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.useRef)('');
4541
4807
  return (0,jsx_runtime_.jsx)(base_text_area, {
4542
4808
  value: value,
4543
4809
  onChange: onChange,
@@ -4551,7 +4817,15 @@ var TextArea = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_reac
4551
4817
  className: (0,classNames/* classNames */.x)('nuri-theme text-area-input-wrapper', className),
4552
4818
  style: style,
4553
4819
  children: (0,jsx_runtime_.jsx)(base_text_area.Textarea, text_area_assign({
4554
- ref: ref
4820
+ ref: ref,
4821
+ onFocus: function onFocus(e) {
4822
+ focusedValueRef.current = e.target.value;
4823
+ _onFocus === null || _onFocus === void 0 ? void 0 : _onFocus(e);
4824
+ },
4825
+ onBlur: function onBlur(e) {
4826
+ if (e.target.value !== focusedValueRef.current) emit('change');
4827
+ _onBlur === null || _onBlur === void 0 ? void 0 : _onBlur(e);
4828
+ }
4555
4829
  }, restProps))
4556
4830
  }), helperText && (0,jsx_runtime_.jsx)(base_text_area.HelperText, {
4557
4831
  className: (0,classNames/* classNames */.x)('text-area-helper-text', isError && 'error'),
@@ -4578,6 +4852,8 @@ __nuri_require__.d(__webpack_exports__, {
4578
4852
  var jsx_runtime_ = __nuri_require__(612);
4579
4853
  // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react","module":"react"}
4580
4854
  var external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_ = __nuri_require__(1041);
4855
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
4856
+ var useTrack = __nuri_require__(4560);
4581
4857
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
4582
4858
  var classNames = __nuri_require__(3274);
4583
4859
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -4720,6 +4996,7 @@ var text_field_rest = undefined && undefined.__rest || function (s, e) {
4720
4996
 
4721
4997
 
4722
4998
 
4999
+
4723
5000
  var TextField = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
4724
5001
  var _a = (0,getMergedProps/* getMergedProps */.p)(props, textFieldProps),
4725
5002
  className = _a.className,
@@ -4732,7 +5009,16 @@ var TextField = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_rea
4732
5009
  defaultValue = _a.defaultValue,
4733
5010
  helperText = _a.helperText,
4734
5011
  isError = _a.isError,
4735
- restProps = text_field_rest(_a, ["className", "style", "leftIcon", "rightIcon", "title", "value", "onChange", "defaultValue", "helperText", "isError"]);
5012
+ _onFocus = _a.onFocus,
5013
+ _onBlur = _a.onBlur,
5014
+ track = _a.track,
5015
+ trackProps = _a.trackProps,
5016
+ restProps = text_field_rest(_a, ["className", "style", "leftIcon", "rightIcon", "title", "value", "onChange", "defaultValue", "helperText", "isError", "onFocus", "onBlur", "track", "trackProps"]);
5017
+ var emit = (0,useTrack/* useTrack */.n)('TextField', {
5018
+ track: track,
5019
+ trackProps: trackProps
5020
+ });
5021
+ var focusedValueRef = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.useRef)('');
4736
5022
  return (0,jsx_runtime_.jsx)(base_text_field, {
4737
5023
  value: value,
4738
5024
  onChange: onChange,
@@ -4746,7 +5032,15 @@ var TextField = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_rea
4746
5032
  className: (0,classNames/* classNames */.x)('nuri-theme text-field-input-wrapper', className),
4747
5033
  style: style,
4748
5034
  children: [leftIcon, (0,jsx_runtime_.jsx)(base_text_field.Input, text_field_assign({
4749
- ref: ref
5035
+ ref: ref,
5036
+ onFocus: function onFocus(e) {
5037
+ focusedValueRef.current = e.target.value;
5038
+ _onFocus === null || _onFocus === void 0 ? void 0 : _onFocus(e);
5039
+ },
5040
+ onBlur: function onBlur(e) {
5041
+ if (e.target.value !== focusedValueRef.current) emit('change');
5042
+ _onBlur === null || _onBlur === void 0 ? void 0 : _onBlur(e);
5043
+ }
4750
5044
  }, restProps)), rightIcon]
4751
5045
  }), helperText && (0,jsx_runtime_.jsx)(base_text_field.HelperText, {
4752
5046
  className: (0,classNames/* classNames */.x)('text-field-helper-text', isError && 'error'),
@@ -4963,6 +5257,8 @@ var SvgExclamation = function SvgExclamation(props) {
4963
5257
  /* harmony default export */ const exclamation = (SvgExclamation);
4964
5258
  // EXTERNAL MODULE: ./assets/icons/multifly.svg
4965
5259
  var multifly = __nuri_require__(6713);
5260
+ // EXTERNAL MODULE: ./helpers/hooks/useTrack.ts
5261
+ var useTrack = __nuri_require__(4560);
4966
5262
  // EXTERNAL MODULE: ./helpers/utils/classNames.js
4967
5263
  var classNames = __nuri_require__(3274);
4968
5264
  // EXTERNAL MODULE: ./helpers/utils/getMergedProps.ts
@@ -5003,6 +5299,7 @@ var __rest = undefined && undefined.__rest || function (s, e) {
5003
5299
 
5004
5300
 
5005
5301
 
5302
+
5006
5303
  // 상태를 뜻하는 variant 는 앞에 아이콘을 둔다. error 는 닫기와 같은 X 를 쓴다
5007
5304
  var VARIANT_ICON = {
5008
5305
  success: check/* default */.A,
@@ -5010,14 +5307,26 @@ var VARIANT_ICON = {
5010
5307
  error: multifly/* default */.A
5011
5308
  };
5012
5309
  var Toast = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
5310
+ var _a, _b;
5013
5311
  var className = props.className,
5014
5312
  title = props.title,
5015
5313
  description = props.description,
5016
5314
  variant = props.variant,
5017
5315
  action = props.action,
5018
- _a = props.showClose,
5019
- showClose = _a === void 0 ? true : _a,
5020
- restProps = __rest(props, ["className", "title", "description", "variant", "action", "showClose"]);
5316
+ _c = props.showClose,
5317
+ showClose = _c === void 0 ? true : _c,
5318
+ track = props.track,
5319
+ trackProps = props.trackProps,
5320
+ restProps = __rest(props, ["className", "title", "description", "variant", "action", "showClose", "track", "trackProps"]);
5321
+ var emit = (0,useTrack/* useTrack */.n)('Toast', {
5322
+ track: track,
5323
+ trackProps: trackProps
5324
+ });
5325
+ // Radix 는 open·defaultOpen 이 없으면 연 채로 시작한다. Radix 가 스스로 닫는 것은 이 값에 보이지 않아 다시 보내지 않는다.
5326
+ var shown = (_b = (_a = restProps.open) !== null && _a !== void 0 ? _a : restProps.defaultOpen) !== null && _b !== void 0 ? _b : true;
5327
+ (0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.useEffect)(function () {
5328
+ if (shown) emit('show');
5329
+ }, [shown]);
5021
5330
  var variantClassName = (0,getMergedProps/* getMergedProps */.p)({
5022
5331
  className: className,
5023
5332
  variant: variant
@@ -5203,10 +5512,11 @@ var tooltipContentProps = __assign(__assign({}, commonTooltipProps), {
5203
5512
  /* harmony export */ });
5204
5513
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(612);
5205
5514
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nuri_require__(1041);
5206
- /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(3274);
5207
- /* harmony import */ var _helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(7335);
5208
- /* harmony import */ var _base_tooltip__WEBPACK_IMPORTED_MODULE_4__ = __nuri_require__(909);
5209
- /* harmony import */ var _tooltip_props__WEBPACK_IMPORTED_MODULE_5__ = __nuri_require__(8690);
5515
+ /* harmony import */ var _helpers_hooks_useTrack__WEBPACK_IMPORTED_MODULE_2__ = __nuri_require__(4560);
5516
+ /* harmony import */ var _helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__ = __nuri_require__(3274);
5517
+ /* harmony import */ var _helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_4__ = __nuri_require__(7335);
5518
+ /* harmony import */ var _base_tooltip__WEBPACK_IMPORTED_MODULE_5__ = __nuri_require__(909);
5519
+ /* harmony import */ var _tooltip_props__WEBPACK_IMPORTED_MODULE_6__ = __nuri_require__(8690);
5210
5520
  var __assign = undefined && undefined.__assign || function () {
5211
5521
  __assign = Object.assign || function (t) {
5212
5522
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -5232,6 +5542,7 @@ var __rest = undefined && undefined.__rest || function (s, e) {
5232
5542
 
5233
5543
 
5234
5544
 
5545
+
5235
5546
  // ref 는 Trigger 를 거쳐 trigger 로 넘긴 요소에 붙는다.
5236
5547
  var Tooltip = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) {
5237
5548
  var trigger = props.trigger,
@@ -5240,22 +5551,33 @@ var Tooltip = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(fun
5240
5551
  direction = _a === void 0 ? 'bottom' : _a,
5241
5552
  _b = props.disabled,
5242
5553
  disabled = _b === void 0 ? false : _b,
5243
- restProps = __rest(props, ["trigger", "content", "direction", "disabled"]);
5244
- var contentClassName = (0,_helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_3__/* .getMergedProps */ .p)(props, _tooltip_props__WEBPACK_IMPORTED_MODULE_5__/* .tooltipContentProps */ .bZ).className;
5554
+ _onOpenChange = props.onOpenChange,
5555
+ track = props.track,
5556
+ trackProps = props.trackProps,
5557
+ restProps = __rest(props, ["trigger", "content", "direction", "disabled", "onOpenChange", "track", "trackProps"]);
5558
+ var contentClassName = (0,_helpers_utils_getMergedProps__WEBPACK_IMPORTED_MODULE_4__/* .getMergedProps */ .p)(props, _tooltip_props__WEBPACK_IMPORTED_MODULE_6__/* .tooltipContentProps */ .bZ).className;
5559
+ var emit = (0,_helpers_hooks_useTrack__WEBPACK_IMPORTED_MODULE_2__/* .useTrack */ .n)('Tooltip', {
5560
+ track: track,
5561
+ trackProps: trackProps
5562
+ });
5245
5563
  // radix 트리를 아예 그리지 않는다. open 으로 막으면 열린 채 남는 경우가 있다.
5246
5564
  if (disabled) return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
5247
5565
  children: trigger
5248
5566
  });
5249
5567
  // delayDuration 을 넘기지 않으면 Provider 의 값(기본 100ms)을 따른다.
5250
- return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_base_tooltip__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A, __assign({
5251
- disableHoverableContent: true
5568
+ return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_base_tooltip__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A, __assign({
5569
+ disableHoverableContent: true,
5570
+ onOpenChange: function onOpenChange(open) {
5571
+ if (open) emit('show');
5572
+ _onOpenChange === null || _onOpenChange === void 0 ? void 0 : _onOpenChange(open);
5573
+ }
5252
5574
  }, restProps, {
5253
- children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_tooltip__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A.Trigger, {
5575
+ children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_tooltip__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A.Trigger, {
5254
5576
  ref: ref,
5255
5577
  asChild: true,
5256
5578
  children: trigger
5257
- }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_tooltip__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A.Content, {
5258
- className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_2__/* .classNames */ .x)(contentClassName, 'tooltip-content'),
5579
+ }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_base_tooltip__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A.Content, {
5580
+ className: (0,_helpers_utils_classNames__WEBPACK_IMPORTED_MODULE_3__/* .classNames */ .x)(contentClassName, 'tooltip-content'),
5259
5581
  direction: direction,
5260
5582
  children: content
5261
5583
  })]
@@ -5316,6 +5638,34 @@ var useExternalState = function useExternalState(_a) {
5316
5638
 
5317
5639
  /***/ },
5318
5640
 
5641
+ /***/ 4560
5642
+ (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
5643
+
5644
+ /* harmony export */ __nuri_require__.d(__webpack_exports__, {
5645
+ /* harmony export */ n: () => (/* binding */ useTrack)
5646
+ /* harmony export */ });
5647
+ /* harmony import */ var _components_logging_log_context__WEBPACK_IMPORTED_MODULE_0__ = __nuri_require__(4804);
5648
+
5649
+ /** 컴포넌트 하나가 쓸 emit 함수. Provider 가 없거나 track 이 없으면 아무것도 보내지 않는다. */
5650
+ var useTrack = function useTrack(component, props) {
5651
+ var track = props.track,
5652
+ trackProps = props.trackProps;
5653
+ var emit = (0,_components_logging_log_context__WEBPACK_IMPORTED_MODULE_0__/* .useLogEmitter */ .e)();
5654
+ return function (action, value) {
5655
+ if (!track) return;
5656
+ emit === null || emit === void 0 ? void 0 : emit({
5657
+ component: component,
5658
+ action: action,
5659
+ track: track,
5660
+ value: value,
5661
+ props: trackProps,
5662
+ timestamp: Date.now()
5663
+ });
5664
+ };
5665
+ };
5666
+
5667
+ /***/ },
5668
+
5319
5669
  /***/ 7298
5320
5670
  (__unused_webpack_module, __webpack_exports__, __nuri_require__) {
5321
5671
 
@@ -5534,7 +5884,7 @@ var x = (y) => {
5534
5884
  var x = {}; __nuri_require__.d(x, y); return x
5535
5885
  }
5536
5886
  var y = (x) => (() => (x))
5537
- 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), ["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) });
5887
+ 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) });
5538
5888
 
5539
5889
  /***/ },
5540
5890
 
@@ -5905,6 +6255,10 @@ var bottom_nav = __nuri_require__(1768);
5905
6255
  var step_progress = __nuri_require__(7131);
5906
6256
  // EXTERNAL MODULE: ./components/chip-group/chip-group.tsx + 2 modules
5907
6257
  var chip_group = __nuri_require__(3894);
6258
+ // EXTERNAL MODULE: ./components/logging/logging.tsx
6259
+ var logging = __nuri_require__(7111);
6260
+ // EXTERNAL MODULE: ./components/logging/log-context.tsx
6261
+ var log_context = __nuri_require__(4804);
5908
6262
  ;// ./tokens/generated/primitive.ts
5909
6263
  // tokens/figma.json 에서 생성됨 — 손으로 고치지 않는다. `npm run tokens`
5910
6264
  var primitive = {
@@ -6313,6 +6667,7 @@ var colors = __nuri_require__(7232);
6313
6667
 
6314
6668
 
6315
6669
 
6670
+
6316
6671
 
6317
6672
 
6318
6673
  const __webpack_exports__colors = colors/* colors */.T;
@@ -6330,6 +6685,7 @@ export const DropDown = drop_down/* default */.A;
6330
6685
  export const Icon = icon/* default */.A;
6331
6686
  export const IconTextBadge = icon_text_badge/* default */.A;
6332
6687
  export const IconTextOptionBadge = icon_text_option_badge/* default */.A;
6688
+ export const LogProvider = log_context/* LogProvider */._;
6333
6689
  export const Modal = modal/* default */.A;
6334
6690
  export const ModalWithDoubleButton = modal_with_double_button/* default */.A;
6335
6691
  export const OptionBadge = option_badge/* default */.A;
@@ -6347,3 +6703,4 @@ export const Toast = toast/* default */.A;
6347
6703
  export const ToastProvider = base_toast/* ToastProvider */.t;
6348
6704
  export const Tooltip = tooltip/* default */.A;
6349
6705
  export const TooltipProvider = base_tooltip/* TooltipProvider */.B;
6706
+ export const useLog = logging/* useLog */.e;