@ncds/ui-admin 0.0.27 → 0.0.29

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 (30) hide show
  1. package/dist/cjs/src/components/badge/Badge.js +8 -1
  2. package/dist/cjs/src/components/button/Button.js +17 -4
  3. package/dist/cjs/src/components/button/ButtonGroup.js +18 -4
  4. package/dist/cjs/src/components/divider/Divider.js +6 -2
  5. package/dist/cjs/src/components/dot/Dot.js +41 -0
  6. package/dist/cjs/src/components/dot/index.js +16 -0
  7. package/dist/cjs/src/components/index.js +11 -0
  8. package/dist/cjs/src/components/modal/Modal.js +11 -8
  9. package/dist/cjs/src/components/tag/Tag.js +21 -9
  10. package/dist/esm/src/components/badge/Badge.js +8 -1
  11. package/dist/esm/src/components/button/Button.js +16 -3
  12. package/dist/esm/src/components/button/ButtonGroup.js +18 -4
  13. package/dist/esm/src/components/divider/Divider.js +6 -2
  14. package/dist/esm/src/components/dot/Dot.js +34 -0
  15. package/dist/esm/src/components/dot/index.js +1 -0
  16. package/dist/esm/src/components/index.js +1 -0
  17. package/dist/esm/src/components/modal/Modal.js +11 -8
  18. package/dist/esm/src/components/tag/Tag.js +21 -9
  19. package/dist/types/constant/color.d.ts +1 -0
  20. package/dist/types/src/components/badge/Badge.d.ts +3 -2
  21. package/dist/types/src/components/button/Button.d.ts +3 -13
  22. package/dist/types/src/components/button/ButtonGroup.d.ts +15 -26
  23. package/dist/types/src/components/divider/Divider.d.ts +5 -0
  24. package/dist/types/src/components/dot/Dot.d.ts +23 -0
  25. package/dist/types/src/components/dot/index.d.ts +2 -0
  26. package/dist/types/src/components/index.d.ts +1 -0
  27. package/dist/types/src/components/modal/Modal.d.ts +6 -6
  28. package/dist/types/src/components/tag/Tag.d.ts +5 -9
  29. package/dist/ui-admin/assets/styles/style.css +105 -40
  30. package/package.json +1 -1
@@ -9,6 +9,7 @@ var _uiAdminIcon = _interopRequireDefault(require("@ncds/ui-admin-icon"));
9
9
  var _button = require("../button");
10
10
  var _classnames = _interopRequireDefault(require("classnames"));
11
11
  var _color = require("../../../constant/color");
12
+ var _dot = require("../dot");
12
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
14
  var __assign = void 0 && (void 0).__assign || function () {
14
15
  __assign = Object.assign || function (t) {
@@ -32,7 +33,7 @@ var Badge = function (_a) {
32
33
  _d = _a.size,
33
34
  size = _d === void 0 ? 'sm' : _d;
34
35
  var sideSlotRender = function (slot) {
35
- var _a, _b;
36
+ var _a, _b, _c, _d;
36
37
  if (slot.type === 'icon') {
37
38
  return (0, _jsxRuntime.jsx)(_uiAdminIcon.default, {
38
39
  name: slot.icon,
@@ -41,6 +42,12 @@ var Badge = function (_a) {
41
42
  color: slot.color ? _color.COLOR[slot.color] : undefined
42
43
  });
43
44
  }
45
+ if (slot.type === 'dot') {
46
+ return (0, _jsxRuntime.jsx)(_dot.Dot, {
47
+ color: (_c = slot.color) !== null && _c !== void 0 ? _c : color,
48
+ size: (_d = slot.size) !== null && _d !== void 0 ? _d : 'sm'
49
+ });
50
+ }
44
51
  return slot.children;
45
52
  };
46
53
  return (0, _jsxRuntime.jsxs)("span", __assign({
@@ -3,12 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.svgSize = exports.iconOnlySvgSize = exports.Button = void 0;
6
+ exports.svgSize = exports.iconOnlySvgSize = exports.dotSize = exports.Button = void 0;
7
7
  var _jsxRuntime = require("react/jsx-runtime");
8
- var _classnames = _interopRequireDefault(require("classnames"));
9
8
  var _react = require("react");
10
- var _color = require("../../../constant/color");
9
+ var _classnames = _interopRequireDefault(require("classnames"));
11
10
  var _uiAdminIcon = _interopRequireDefault(require("@ncds/ui-admin-icon"));
11
+ var _color = require("../../../constant/color");
12
+ var _dot = require("../dot");
12
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
14
  var __assign = void 0 && (void 0).__assign || function () {
14
15
  __assign = Object.assign || function (t) {
@@ -40,6 +41,12 @@ var iconOnlySvgSize = exports.iconOnlySvgSize = {
40
41
  sm: 20,
41
42
  md: 20
42
43
  };
44
+ var dotSize = exports.dotSize = {
45
+ xxs: 'sm',
46
+ xs: 'sm',
47
+ sm: 'md',
48
+ md: 'md'
49
+ };
43
50
  var Button = exports.Button = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
44
51
  // NOTE: 엘리먼트 종류에 따라 props의 타입이 달라지므로 분리
45
52
  var _a = props.as,
@@ -78,7 +85,7 @@ var Button = exports.Button = /*#__PURE__*/(0, _react.forwardRef)(function (prop
78
85
  }
79
86
  };
80
87
  var sideSlotRender = function (slot) {
81
- var _a, _b;
88
+ var _a, _b, _c;
82
89
  if (slot.type === 'icon') {
83
90
  var iconSize = onlyIcon ? iconOnlySvgSize[size] : svgSize[size];
84
91
  return (0, _jsxRuntime.jsx)(_uiAdminIcon.default, {
@@ -88,6 +95,12 @@ var Button = exports.Button = /*#__PURE__*/(0, _react.forwardRef)(function (prop
88
95
  color: slot.color ? _color.COLOR[slot.color] : undefined
89
96
  });
90
97
  }
98
+ if (slot.type === 'dot') {
99
+ return (0, _jsxRuntime.jsx)(_dot.Dot, {
100
+ color: slot.color,
101
+ size: (_c = slot.size) !== null && _c !== void 0 ? _c : dotSize[size]
102
+ });
103
+ }
91
104
  return slot.children;
92
105
  };
93
106
  (0, _react.useEffect)(function () {
@@ -9,6 +9,7 @@ var _uiAdminIcon = _interopRequireDefault(require("@ncds/ui-admin-icon"));
9
9
  var _classnames = _interopRequireDefault(require("classnames"));
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var _color = require("../../../constant/color");
12
+ var _dot = require("../dot");
12
13
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
13
14
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -36,6 +37,12 @@ var svgSize = {
36
37
  md: 16,
37
38
  lg: 20
38
39
  };
40
+ var dotSize = {
41
+ xs: 'sm',
42
+ sm: 'sm',
43
+ md: 'md',
44
+ lg: 'md'
45
+ };
39
46
  var ButtonGroup = function (_a) {
40
47
  var children = _a.children,
41
48
  className = _a.className,
@@ -70,7 +77,8 @@ ButtonGroup.Item = function (_a) {
70
77
  var _c = _a.as,
71
78
  as = _c === void 0 ? 'button' : _c,
72
79
  label = _a.label,
73
- size = _a.size,
80
+ _d = _a.size,
81
+ size = _d === void 0 ? 'md' : _d,
74
82
  onlyIcon = _a.onlyIcon,
75
83
  icon = _a.icon,
76
84
  disabled = _a.disabled,
@@ -78,16 +86,22 @@ ButtonGroup.Item = function (_a) {
78
86
  isCurrent = _a.isCurrent,
79
87
  props = __rest(_a, ["as", "label", "size", "onlyIcon", "icon", "disabled", "children", "isCurrent"]);
80
88
  var renderIcon = function () {
81
- var _a, _b;
89
+ var _a, _b, _c;
82
90
  if (!icon) return null;
83
91
  if (icon.type === 'icon') {
84
92
  return (0, _jsxRuntime.jsx)(_uiAdminIcon.default, {
85
93
  name: icon.icon,
86
- width: (_a = icon.size) !== null && _a !== void 0 ? _a : svgSize[size !== null && size !== void 0 ? size : 'md'],
87
- height: (_b = icon.size) !== null && _b !== void 0 ? _b : svgSize[size !== null && size !== void 0 ? size : 'md'],
94
+ width: (_a = icon.size) !== null && _a !== void 0 ? _a : svgSize[size],
95
+ height: (_b = icon.size) !== null && _b !== void 0 ? _b : svgSize[size],
88
96
  color: icon.color ? _color.COLOR[icon.color] : 'currentColor'
89
97
  });
90
98
  }
99
+ if (icon.type === 'dot') {
100
+ return (0, _jsxRuntime.jsx)(_dot.Dot, {
101
+ color: icon.color,
102
+ size: (_c = icon.size) !== null && _c !== void 0 ? _c : dotSize[size]
103
+ });
104
+ }
91
105
  return icon.children;
92
106
  };
93
107
  var position = (_b = icon === null || icon === void 0 ? void 0 : icon.position) !== null && _b !== void 0 ? _b : 'leading';
@@ -18,15 +18,19 @@ var __assign = void 0 && (void 0).__assign || function () {
18
18
  };
19
19
  return __assign.apply(this, arguments);
20
20
  };
21
+ /**
22
+ * @param {DividerProps} props
23
+ * @param {ReactNode} props.children Button 컴포넌트는 xs로 ButtonGroup은 sm 사이즈로 추가하는 것이 권장됩니다.
24
+ * @returns {ReactNode}
25
+ */
21
26
  var Divider = exports.Divider = /*#__PURE__*/(0, _react.forwardRef)(function (_a, ref) {
22
27
  var className = _a.className,
23
28
  type = _a.type,
24
29
  _b = _a.style,
25
30
  style = _b === void 0 ? 'single-line' : _b,
26
31
  children = _a.children;
27
- var componentClassName = (0, _classnames.default)('ncua-divider', "ncua-divider--".concat(type), "ncua-divider--".concat(style), className);
28
32
  return (0, _jsxRuntime.jsxs)("div", __assign({
29
- className: componentClassName,
33
+ className: (0, _classnames.default)('ncua-divider', "ncua-divider--".concat(type), "ncua-divider--".concat(style), className),
30
34
  ref: ref
31
35
  }, {
32
36
  children: [style === 'single-line' && (0, _jsxRuntime.jsx)("div", {
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Dot = void 0;
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ var _react = require("react");
9
+ var _classnames = _interopRequireDefault(require("classnames"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ var __assign = void 0 && (void 0).__assign || function () {
12
+ __assign = Object.assign || function (t) {
13
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
14
+ s = arguments[i];
15
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
16
+ }
17
+ return t;
18
+ };
19
+ return __assign.apply(this, arguments);
20
+ };
21
+ var __rest = void 0 && (void 0).__rest || function (s, e) {
22
+ var t = {};
23
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
24
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
25
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
26
+ }
27
+ return t;
28
+ };
29
+ var Dot = exports.Dot = /*#__PURE__*/(0, _react.forwardRef)(function (_a, ref) {
30
+ var _b = _a.color,
31
+ color = _b === void 0 ? 'success' : _b,
32
+ _c = _a.size,
33
+ size = _c === void 0 ? 'md' : _c,
34
+ className = _a.className,
35
+ props = __rest(_a, ["color", "size", "className"]);
36
+ return (0, _jsxRuntime.jsx)("span", __assign({
37
+ ref: ref,
38
+ className: (0, _classnames.default)('ncua-dot', "ncua-dot--".concat(color), "ncua-dot--".concat(size), className)
39
+ }, props));
40
+ });
41
+ Dot.displayName = 'Dot';
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _Dot = require("./Dot");
7
+ Object.keys(_Dot).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _Dot[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _Dot[key];
14
+ }
15
+ });
16
+ });
@@ -80,6 +80,17 @@ Object.keys(_divider).forEach(function (key) {
80
80
  }
81
81
  });
82
82
  });
83
+ var _dot = require("./dot");
84
+ Object.keys(_dot).forEach(function (key) {
85
+ if (key === "default" || key === "__esModule") return;
86
+ if (key in exports && exports[key] === _dot[key]) return;
87
+ Object.defineProperty(exports, key, {
88
+ enumerable: true,
89
+ get: function () {
90
+ return _dot[key];
91
+ }
92
+ });
93
+ });
83
94
  var _dropdown = require("./dropdown");
84
95
  Object.keys(_dropdown).forEach(function (key) {
85
96
  if (key === "default" || key === "__esModule") return;
@@ -91,12 +91,15 @@ Modal.Header = function (_a) {
91
91
  hideCloseButton = _d === void 0 ? false : _d;
92
92
  return (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
93
93
  children: [(0, _jsxRuntime.jsxs)("header", __assign({
94
- className: (0, _classnames.default)('ncua-modal__header', "ncua-modal__header--".concat(align))
94
+ className: (0, _classnames.default)('ncua-modal__header', "ncua-modal__header--".concat(align), {
95
+ 'ncua-modal__header--close-button': !hideCloseButton
96
+ })
95
97
  }, {
96
98
  children: [featuredIcon && (0, _jsxRuntime.jsx)(_featuredIcon.FeaturedIcon, {
97
99
  name: featuredIcon.name,
98
100
  color: featuredIcon.color,
99
- theme: featuredIcon.theme
101
+ theme: featuredIcon.theme,
102
+ size: "sm"
100
103
  }), (0, _jsxRuntime.jsxs)("div", __assign({
101
104
  className: "ncua-modal__title"
102
105
  }, {
@@ -137,14 +140,14 @@ Modal.Content = function (_a) {
137
140
  *
138
141
  * 1. Vertical layout (buttons stacked):
139
142
  * <Modal.Actions layout="vertical" align="stretch">
140
- * <Button label="Confirm" onClick={handleConfirm} hierarchy="primary" />
141
- * <Button label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
143
+ * <Button size="sm" label="Confirm" onClick={handleConfirm} hierarchy="primary" />
144
+ * <Button size="sm" label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
142
145
  * </Modal.Actions>
143
146
  *
144
147
  * 2. Horizontal layout (buttons side by side):
145
148
  * <Modal.Actions layout="horizontal" align="stretch">
146
- * <Button label="Confirm" onClick={handleConfirm} hierarchy="primary" />
147
- * <Button label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
149
+ * <Button size="sm" label="Confirm" onClick={handleConfirm} hierarchy="primary" />
150
+ * <Button size="sm" label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
148
151
  * </Modal.Actions>
149
152
  *
150
153
  * 3. Checkbox layout (checkbox on left, buttons on right):
@@ -154,8 +157,8 @@ Modal.Content = function (_a) {
154
157
  * <a href="#">Settings</a>
155
158
  * </>
156
159
  * }>
157
- * <Button label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
158
- * <Button label="Confirm" onClick={handleConfirm} hierarchy="primary" />
160
+ * <Button size="sm" label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
161
+ * <Button size="sm" label="Confirm" onClick={handleConfirm} hierarchy="primary" />
159
162
  * </Modal.Actions>
160
163
  */
161
164
  Modal.Actions = function (_a) {
@@ -8,6 +8,7 @@ var _jsxRuntime = require("react/jsx-runtime");
8
8
  var _uiAdminIcon = _interopRequireDefault(require("@ncds/ui-admin-icon"));
9
9
  var _classnames = _interopRequireDefault(require("classnames"));
10
10
  var _color = require("../../../constant/color");
11
+ var _dot = require("../dot");
11
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
13
  var __assign = void 0 && (void 0).__assign || function () {
13
14
  __assign = Object.assign || function (t) {
@@ -31,17 +32,28 @@ var Tag = function (_a) {
31
32
  sm: 14,
32
33
  md: 16
33
34
  };
35
+ var sideSlotRender = function (slot) {
36
+ var _a;
37
+ if (slot.type === 'icon') {
38
+ return (0, _jsxRuntime.jsx)(_uiAdminIcon.default, {
39
+ name: slot.icon,
40
+ width: iconSize[size],
41
+ height: iconSize[size],
42
+ color: slot.color
43
+ });
44
+ }
45
+ if (slot.type === 'dot') {
46
+ return (0, _jsxRuntime.jsx)(_dot.Dot, {
47
+ color: slot.color,
48
+ size: (_a = slot.size) !== null && _a !== void 0 ? _a : 'sm'
49
+ });
50
+ }
51
+ return slot.children;
52
+ };
34
53
  return (0, _jsxRuntime.jsxs)("span", __assign({
35
- className: (0, _classnames.default)('ncua-tag', "ncua-tag--".concat(size), {
36
- 'ncua-tag--dot': (icon === null || icon === void 0 ? void 0 : icon.name) === 'dot'
37
- })
54
+ className: (0, _classnames.default)('ncua-tag', "ncua-tag--".concat(size))
38
55
  }, {
39
- children: [icon && icon.name !== 'dot' && (0, _jsxRuntime.jsx)(_uiAdminIcon.default, {
40
- name: icon.name,
41
- width: iconSize[size],
42
- height: iconSize[size],
43
- color: icon.color
44
- }), (0, _jsxRuntime.jsx)("span", __assign({
56
+ children: [icon && sideSlotRender(icon), (0, _jsxRuntime.jsx)("span", __assign({
45
57
  className: "ncua-tag__text"
46
58
  }, {
47
59
  children: text
@@ -13,6 +13,7 @@ import Icon from '@ncds/ui-admin-icon';
13
13
  import { svgSize } from '../button';
14
14
  import classNames from 'classnames';
15
15
  import { COLOR } from '../../../constant/color';
16
+ import { Dot } from '../dot';
16
17
  export var Badge = function (_a) {
17
18
  var label = _a.label,
18
19
  _b = _a.type,
@@ -25,7 +26,7 @@ export var Badge = function (_a) {
25
26
  _d = _a.size,
26
27
  size = _d === void 0 ? 'sm' : _d;
27
28
  var sideSlotRender = function (slot) {
28
- var _a, _b;
29
+ var _a, _b, _c, _d;
29
30
  if (slot.type === 'icon') {
30
31
  return _jsx(Icon, {
31
32
  name: slot.icon,
@@ -34,6 +35,12 @@ export var Badge = function (_a) {
34
35
  color: slot.color ? COLOR[slot.color] : undefined
35
36
  });
36
37
  }
38
+ if (slot.type === 'dot') {
39
+ return _jsx(Dot, {
40
+ color: (_c = slot.color) !== null && _c !== void 0 ? _c : color,
41
+ size: (_d = slot.size) !== null && _d !== void 0 ? _d : 'sm'
42
+ });
43
+ }
37
44
  return slot.children;
38
45
  };
39
46
  return _jsxs("span", __assign({
@@ -17,10 +17,11 @@ var __rest = this && this.__rest || function (s, e) {
17
17
  return t;
18
18
  };
19
19
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
20
- import classnames from 'classnames';
21
20
  import { createElement, forwardRef, useEffect, useState } from 'react';
22
- import { COLOR } from '../../../constant/color';
21
+ import classnames from 'classnames';
23
22
  import Icon from '@ncds/ui-admin-icon';
23
+ import { COLOR } from '../../../constant/color';
24
+ import { Dot } from '../dot';
24
25
  export var svgSize = {
25
26
  xxs: 12,
26
27
  xs: 14,
@@ -33,6 +34,12 @@ export var iconOnlySvgSize = {
33
34
  sm: 20,
34
35
  md: 20
35
36
  };
37
+ export var dotSize = {
38
+ xxs: 'sm',
39
+ xs: 'sm',
40
+ sm: 'md',
41
+ md: 'md'
42
+ };
36
43
  export var Button = /*#__PURE__*/forwardRef(function (props, ref) {
37
44
  // NOTE: 엘리먼트 종류에 따라 props의 타입이 달라지므로 분리
38
45
  var _a = props.as,
@@ -71,7 +78,7 @@ export var Button = /*#__PURE__*/forwardRef(function (props, ref) {
71
78
  }
72
79
  };
73
80
  var sideSlotRender = function (slot) {
74
- var _a, _b;
81
+ var _a, _b, _c;
75
82
  if (slot.type === 'icon') {
76
83
  var iconSize = onlyIcon ? iconOnlySvgSize[size] : svgSize[size];
77
84
  return _jsx(Icon, {
@@ -81,6 +88,12 @@ export var Button = /*#__PURE__*/forwardRef(function (props, ref) {
81
88
  color: slot.color ? COLOR[slot.color] : undefined
82
89
  });
83
90
  }
91
+ if (slot.type === 'dot') {
92
+ return _jsx(Dot, {
93
+ color: slot.color,
94
+ size: (_c = slot.size) !== null && _c !== void 0 ? _c : dotSize[size]
95
+ });
96
+ }
84
97
  return slot.children;
85
98
  };
86
99
  useEffect(function () {
@@ -21,12 +21,19 @@ import Icon from '@ncds/ui-admin-icon';
21
21
  import classNames from 'classnames';
22
22
  import React, { createElement } from 'react';
23
23
  import { COLOR } from '../../../constant/color';
24
+ import { Dot } from '../dot';
24
25
  var svgSize = {
25
26
  xs: 12,
26
27
  sm: 16,
27
28
  md: 16,
28
29
  lg: 20
29
30
  };
31
+ var dotSize = {
32
+ xs: 'sm',
33
+ sm: 'sm',
34
+ md: 'md',
35
+ lg: 'md'
36
+ };
30
37
  export var ButtonGroup = function (_a) {
31
38
  var children = _a.children,
32
39
  className = _a.className,
@@ -60,7 +67,8 @@ ButtonGroup.Item = function (_a) {
60
67
  var _c = _a.as,
61
68
  as = _c === void 0 ? 'button' : _c,
62
69
  label = _a.label,
63
- size = _a.size,
70
+ _d = _a.size,
71
+ size = _d === void 0 ? 'md' : _d,
64
72
  onlyIcon = _a.onlyIcon,
65
73
  icon = _a.icon,
66
74
  disabled = _a.disabled,
@@ -68,16 +76,22 @@ ButtonGroup.Item = function (_a) {
68
76
  isCurrent = _a.isCurrent,
69
77
  props = __rest(_a, ["as", "label", "size", "onlyIcon", "icon", "disabled", "children", "isCurrent"]);
70
78
  var renderIcon = function () {
71
- var _a, _b;
79
+ var _a, _b, _c;
72
80
  if (!icon) return null;
73
81
  if (icon.type === 'icon') {
74
82
  return _jsx(Icon, {
75
83
  name: icon.icon,
76
- width: (_a = icon.size) !== null && _a !== void 0 ? _a : svgSize[size !== null && size !== void 0 ? size : 'md'],
77
- height: (_b = icon.size) !== null && _b !== void 0 ? _b : svgSize[size !== null && size !== void 0 ? size : 'md'],
84
+ width: (_a = icon.size) !== null && _a !== void 0 ? _a : svgSize[size],
85
+ height: (_b = icon.size) !== null && _b !== void 0 ? _b : svgSize[size],
78
86
  color: icon.color ? COLOR[icon.color] : 'currentColor'
79
87
  });
80
88
  }
89
+ if (icon.type === 'dot') {
90
+ return _jsx(Dot, {
91
+ color: icon.color,
92
+ size: (_c = icon.size) !== null && _c !== void 0 ? _c : dotSize[size]
93
+ });
94
+ }
81
95
  return icon.children;
82
96
  };
83
97
  var position = (_b = icon === null || icon === void 0 ? void 0 : icon.position) !== null && _b !== void 0 ? _b : 'leading';
@@ -11,15 +11,19 @@ var __assign = this && this.__assign || function () {
11
11
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
12
  import { forwardRef } from 'react';
13
13
  import classNames from 'classnames';
14
+ /**
15
+ * @param {DividerProps} props
16
+ * @param {ReactNode} props.children Button 컴포넌트는 xs로 ButtonGroup은 sm 사이즈로 추가하는 것이 권장됩니다.
17
+ * @returns {ReactNode}
18
+ */
14
19
  export var Divider = /*#__PURE__*/forwardRef(function (_a, ref) {
15
20
  var className = _a.className,
16
21
  type = _a.type,
17
22
  _b = _a.style,
18
23
  style = _b === void 0 ? 'single-line' : _b,
19
24
  children = _a.children;
20
- var componentClassName = classNames('ncua-divider', "ncua-divider--".concat(type), "ncua-divider--".concat(style), className);
21
25
  return _jsxs("div", __assign({
22
- className: componentClassName,
26
+ className: classNames('ncua-divider', "ncua-divider--".concat(type), "ncua-divider--".concat(style), className),
23
27
  ref: ref
24
28
  }, {
25
29
  children: [style === 'single-line' && _jsx("div", {
@@ -0,0 +1,34 @@
1
+ var __assign = this && this.__assign || function () {
2
+ __assign = Object.assign || function (t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
6
+ }
7
+ return t;
8
+ };
9
+ return __assign.apply(this, arguments);
10
+ };
11
+ var __rest = this && this.__rest || function (s, e) {
12
+ var t = {};
13
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
14
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
15
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
16
+ }
17
+ return t;
18
+ };
19
+ import { jsx as _jsx } from "react/jsx-runtime";
20
+ import { forwardRef } from 'react';
21
+ import classNames from 'classnames';
22
+ export var Dot = /*#__PURE__*/forwardRef(function (_a, ref) {
23
+ var _b = _a.color,
24
+ color = _b === void 0 ? 'success' : _b,
25
+ _c = _a.size,
26
+ size = _c === void 0 ? 'md' : _c,
27
+ className = _a.className,
28
+ props = __rest(_a, ["color", "size", "className"]);
29
+ return _jsx("span", __assign({
30
+ ref: ref,
31
+ className: classNames('ncua-dot', "ncua-dot--".concat(color), "ncua-dot--".concat(size), className)
32
+ }, props));
33
+ });
34
+ Dot.displayName = 'Dot';
@@ -0,0 +1 @@
1
+ export * from './Dot';
@@ -5,6 +5,7 @@ export * from './carousel';
5
5
  export * from './checkbox';
6
6
  export * from './date-picker';
7
7
  export * from './divider';
8
+ export * from './dot';
8
9
  export * from './dropdown';
9
10
  export * from './empty-state';
10
11
  export * from './featured-icon';
@@ -83,12 +83,15 @@ Modal.Header = function (_a) {
83
83
  hideCloseButton = _d === void 0 ? false : _d;
84
84
  return _jsxs(_Fragment, {
85
85
  children: [_jsxs("header", __assign({
86
- className: classnames('ncua-modal__header', "ncua-modal__header--".concat(align))
86
+ className: classnames('ncua-modal__header', "ncua-modal__header--".concat(align), {
87
+ 'ncua-modal__header--close-button': !hideCloseButton
88
+ })
87
89
  }, {
88
90
  children: [featuredIcon && _jsx(FeaturedIcon, {
89
91
  name: featuredIcon.name,
90
92
  color: featuredIcon.color,
91
- theme: featuredIcon.theme
93
+ theme: featuredIcon.theme,
94
+ size: "sm"
92
95
  }), _jsxs("div", __assign({
93
96
  className: "ncua-modal__title"
94
97
  }, {
@@ -129,14 +132,14 @@ Modal.Content = function (_a) {
129
132
  *
130
133
  * 1. Vertical layout (buttons stacked):
131
134
  * <Modal.Actions layout="vertical" align="stretch">
132
- * <Button label="Confirm" onClick={handleConfirm} hierarchy="primary" />
133
- * <Button label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
135
+ * <Button size="sm" label="Confirm" onClick={handleConfirm} hierarchy="primary" />
136
+ * <Button size="sm" label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
134
137
  * </Modal.Actions>
135
138
  *
136
139
  * 2. Horizontal layout (buttons side by side):
137
140
  * <Modal.Actions layout="horizontal" align="stretch">
138
- * <Button label="Confirm" onClick={handleConfirm} hierarchy="primary" />
139
- * <Button label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
141
+ * <Button size="sm" label="Confirm" onClick={handleConfirm} hierarchy="primary" />
142
+ * <Button size="sm" label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
140
143
  * </Modal.Actions>
141
144
  *
142
145
  * 3. Checkbox layout (checkbox on left, buttons on right):
@@ -146,8 +149,8 @@ Modal.Content = function (_a) {
146
149
  * <a href="#">Settings</a>
147
150
  * </>
148
151
  * }>
149
- * <Button label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
150
- * <Button label="Confirm" onClick={handleConfirm} hierarchy="primary" />
152
+ * <Button size="sm" label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
153
+ * <Button size="sm" label="Confirm" onClick={handleConfirm} hierarchy="primary" />
151
154
  * </Modal.Actions>
152
155
  */
153
156
  Modal.Actions = function (_a) {
@@ -12,6 +12,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
12
  import Icon from '@ncds/ui-admin-icon';
13
13
  import classNames from 'classnames';
14
14
  import { COLOR } from '../../../constant/color';
15
+ import { Dot } from '../dot';
15
16
  export var Tag = function (_a) {
16
17
  var _b = _a.size,
17
18
  size = _b === void 0 ? 'sm' : _b,
@@ -24,17 +25,28 @@ export var Tag = function (_a) {
24
25
  sm: 14,
25
26
  md: 16
26
27
  };
28
+ var sideSlotRender = function (slot) {
29
+ var _a;
30
+ if (slot.type === 'icon') {
31
+ return _jsx(Icon, {
32
+ name: slot.icon,
33
+ width: iconSize[size],
34
+ height: iconSize[size],
35
+ color: slot.color
36
+ });
37
+ }
38
+ if (slot.type === 'dot') {
39
+ return _jsx(Dot, {
40
+ color: slot.color,
41
+ size: (_a = slot.size) !== null && _a !== void 0 ? _a : 'sm'
42
+ });
43
+ }
44
+ return slot.children;
45
+ };
27
46
  return _jsxs("span", __assign({
28
- className: classNames('ncua-tag', "ncua-tag--".concat(size), {
29
- 'ncua-tag--dot': (icon === null || icon === void 0 ? void 0 : icon.name) === 'dot'
30
- })
47
+ className: classNames('ncua-tag', "ncua-tag--".concat(size))
31
48
  }, {
32
- children: [icon && icon.name !== 'dot' && _jsx(Icon, {
33
- name: icon.name,
34
- width: iconSize[size],
35
- height: iconSize[size],
36
- color: icon.color
37
- }), _jsx("span", __assign({
49
+ children: [icon && sideSlotRender(icon), _jsx("span", __assign({
38
50
  className: "ncua-tag__text"
39
51
  }, {
40
52
  children: text
@@ -31,4 +31,5 @@ export declare const COLOR: {
31
31
  'secondary-gray-blue-700': string;
32
32
  };
33
33
  export type ColorKeyType = keyof typeof COLOR;
34
+ export type ColorTone = 'neutral' | 'error' | 'warning' | 'success' | 'blue' | 'pink' | 'violet' | 'disabled';
34
35
  //# sourceMappingURL=color.d.ts.map
@@ -1,7 +1,8 @@
1
- import { SideSlotType } from '../button';
1
+ import { ColorTone } from '../../../constant/color';
2
2
  import { Size } from '../../../constant/size';
3
+ import { SideSlotType } from '../../types/side-slot';
3
4
  export type BadgeType = 'pill-outline' | 'pill-dark-color';
4
- export type BadgeColor = 'neutral' | 'error' | 'warning' | 'success' | 'blue' | 'pink' | 'disabled';
5
+ export type BadgeColor = Extract<ColorTone, 'neutral' | 'error' | 'warning' | 'success' | 'blue' | 'pink' | 'disabled'>;
5
6
  export type BadgeSize = Extract<Size, 'xs' | 'sm' | 'md'>;
6
7
  export type BadgeProps = {
7
8
  label: string;
@@ -1,19 +1,8 @@
1
1
  import { ComponentProps, ReactNode } from 'react';
2
- import { COLOR } from '../../../constant/color';
3
2
  import { Size } from '../../../constant/size';
4
- import { IconName } from '@ncds/ui-admin-icon';
3
+ import { SideSlotType } from '../../types/side-slot';
4
+ import { DotProps } from '../dot';
5
5
  export type ButtonTheme = 'primary' | 'secondary' | 'secondary-gray' | 'tertiary-gray' | 'tertiary' | 'link' | 'destructive';
6
- export type IconSlotType = {
7
- type: 'icon';
8
- icon: IconName;
9
- color?: keyof typeof COLOR;
10
- size?: number | string;
11
- };
12
- export type CustomSlotType = {
13
- type: 'custom';
14
- children: ReactNode;
15
- };
16
- export type SideSlotType = IconSlotType | CustomSlotType;
17
6
  export type ButtonSize = Extract<Size, 'xxs' | 'xs' | 'sm' | 'md'>;
18
7
  type CommonButtonProps<T extends keyof HTMLElementTagNameMap> = Omit<ComponentProps<T>, 'ref'> & {
19
8
  label: string;
@@ -39,6 +28,7 @@ type AnchorElementProps = CommonButtonProps<'a'> & {
39
28
  export type ButtonProps = ButtonElementProps | AnchorElementProps;
40
29
  export declare const svgSize: Record<ButtonSize, number>;
41
30
  export declare const iconOnlySvgSize: Record<ButtonSize, number>;
31
+ export declare const dotSize: Record<ButtonSize, DotProps['size']>;
42
32
  export declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
43
33
  export {};
44
34
  //# sourceMappingURL=Button.d.ts.map
@@ -1,26 +1,15 @@
1
- import { IconName } from '@ncds/ui-admin-icon';
2
1
  import React, { ComponentProps } from 'react';
3
- import { ColorKeyType } from '../../../constant/color';
4
2
  import { Size } from '../../../constant/size';
3
+ import { SideSlotType } from 'ui-admin/src/types/side-slot';
5
4
  export type ButtonGroupSize = Extract<Size, 'xs' | 'sm' | 'md' | 'lg'>;
6
5
  interface SideCommon {
7
6
  position?: 'leading' | 'trailing';
8
7
  }
9
- interface SideIcon {
10
- type: 'icon';
11
- icon: IconName;
12
- size?: number;
13
- color?: ColorKeyType;
14
- }
15
- interface SideCustom {
16
- type: 'custom';
17
- children: React.ReactNode;
18
- }
19
- type SideSlotType = SideCommon & (SideIcon | SideCustom);
8
+ type SideSlot = SideCommon & SideSlotType;
20
9
  interface ButtonGroupItemCommonProps {
21
10
  label?: string;
22
11
  size?: ButtonGroupSize;
23
- icon?: SideSlotType;
12
+ icon?: SideSlot;
24
13
  children?: React.ReactNode;
25
14
  onlyIcon?: boolean;
26
15
  disabled?: boolean;
@@ -68,7 +57,7 @@ export declare const ButtonGroup: {
68
57
  contextMenu?: string | undefined;
69
58
  dir?: string | undefined;
70
59
  draggable?: (boolean | "true" | "false") | undefined;
71
- enterKeyHint?: "search" | "enter" | "done" | "go" | "next" | "previous" | "send" | undefined;
60
+ enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
72
61
  hidden?: boolean | undefined;
73
62
  id?: string | undefined;
74
63
  lang?: string | undefined;
@@ -103,13 +92,13 @@ export declare const ButtonGroup: {
103
92
  results?: number | undefined;
104
93
  security?: string | undefined;
105
94
  unselectable?: "off" | "on" | undefined;
106
- inputMode?: "search" | "text" | "none" | "tel" | "url" | "email" | "numeric" | "decimal" | undefined;
95
+ inputMode?: "none" | "search" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | undefined;
107
96
  is?: string | undefined;
108
97
  exportparts?: string | undefined;
109
98
  part?: string | undefined;
110
99
  "aria-activedescendant"?: string | undefined;
111
100
  "aria-atomic"?: (boolean | "true" | "false") | undefined;
112
- "aria-autocomplete"?: "list" | "none" | "inline" | "both" | undefined;
101
+ "aria-autocomplete"?: "none" | "list" | "inline" | "both" | undefined;
113
102
  "aria-braillelabel"?: string | undefined;
114
103
  "aria-brailleroledescription"?: string | undefined;
115
104
  "aria-busy"?: (boolean | "true" | "false") | undefined;
@@ -119,17 +108,17 @@ export declare const ButtonGroup: {
119
108
  "aria-colindextext"?: string | undefined;
120
109
  "aria-colspan"?: number | undefined;
121
110
  "aria-controls"?: string | undefined;
122
- "aria-current"?: boolean | "time" | "step" | "true" | "false" | "page" | "location" | "date" | undefined;
111
+ "aria-current"?: boolean | "true" | "false" | "time" | "step" | "date" | "page" | "location" | undefined;
123
112
  "aria-describedby"?: string | undefined;
124
113
  "aria-description"?: string | undefined;
125
114
  "aria-details"?: string | undefined;
126
115
  "aria-disabled"?: (boolean | "true" | "false") | undefined;
127
- "aria-dropeffect"?: "link" | "move" | "none" | "copy" | "execute" | "popup" | undefined;
116
+ "aria-dropeffect"?: "none" | "link" | "move" | "copy" | "execute" | "popup" | undefined;
128
117
  "aria-errormessage"?: string | undefined;
129
118
  "aria-expanded"?: (boolean | "true" | "false") | undefined;
130
119
  "aria-flowto"?: string | undefined;
131
120
  "aria-grabbed"?: (boolean | "true" | "false") | undefined;
132
- "aria-haspopup"?: boolean | "dialog" | "menu" | "true" | "false" | "grid" | "listbox" | "tree" | undefined;
121
+ "aria-haspopup"?: boolean | "true" | "false" | "dialog" | "grid" | "listbox" | "menu" | "tree" | undefined;
133
122
  "aria-hidden"?: (boolean | "true" | "false") | undefined;
134
123
  "aria-invalid"?: boolean | "true" | "false" | "grammar" | "spelling" | undefined;
135
124
  "aria-keyshortcuts"?: string | undefined;
@@ -347,7 +336,7 @@ export declare const ButtonGroup: {
347
336
  contextMenu?: string | undefined;
348
337
  dir?: string | undefined;
349
338
  draggable?: (boolean | "true" | "false") | undefined;
350
- enterKeyHint?: "search" | "enter" | "done" | "go" | "next" | "previous" | "send" | undefined;
339
+ enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
351
340
  hidden?: boolean | undefined;
352
341
  id?: string | undefined;
353
342
  lang?: string | undefined;
@@ -382,13 +371,13 @@ export declare const ButtonGroup: {
382
371
  results?: number | undefined;
383
372
  security?: string | undefined;
384
373
  unselectable?: "off" | "on" | undefined;
385
- inputMode?: "search" | "text" | "none" | "tel" | "url" | "email" | "numeric" | "decimal" | undefined;
374
+ inputMode?: "none" | "search" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | undefined;
386
375
  is?: string | undefined;
387
376
  exportparts?: string | undefined;
388
377
  part?: string | undefined;
389
378
  "aria-activedescendant"?: string | undefined;
390
379
  "aria-atomic"?: (boolean | "true" | "false") | undefined;
391
- "aria-autocomplete"?: "list" | "none" | "inline" | "both" | undefined;
380
+ "aria-autocomplete"?: "none" | "list" | "inline" | "both" | undefined;
392
381
  "aria-braillelabel"?: string | undefined;
393
382
  "aria-brailleroledescription"?: string | undefined;
394
383
  "aria-busy"?: (boolean | "true" | "false") | undefined;
@@ -398,17 +387,17 @@ export declare const ButtonGroup: {
398
387
  "aria-colindextext"?: string | undefined;
399
388
  "aria-colspan"?: number | undefined;
400
389
  "aria-controls"?: string | undefined;
401
- "aria-current"?: boolean | "time" | "step" | "true" | "false" | "page" | "location" | "date" | undefined;
390
+ "aria-current"?: boolean | "true" | "false" | "time" | "step" | "date" | "page" | "location" | undefined;
402
391
  "aria-describedby"?: string | undefined;
403
392
  "aria-description"?: string | undefined;
404
393
  "aria-details"?: string | undefined;
405
394
  "aria-disabled"?: (boolean | "true" | "false") | undefined;
406
- "aria-dropeffect"?: "link" | "move" | "none" | "copy" | "execute" | "popup" | undefined;
395
+ "aria-dropeffect"?: "none" | "link" | "move" | "copy" | "execute" | "popup" | undefined;
407
396
  "aria-errormessage"?: string | undefined;
408
397
  "aria-expanded"?: (boolean | "true" | "false") | undefined;
409
398
  "aria-flowto"?: string | undefined;
410
399
  "aria-grabbed"?: (boolean | "true" | "false") | undefined;
411
- "aria-haspopup"?: boolean | "dialog" | "menu" | "true" | "false" | "grid" | "listbox" | "tree" | undefined;
400
+ "aria-haspopup"?: boolean | "true" | "false" | "dialog" | "grid" | "listbox" | "menu" | "tree" | undefined;
412
401
  "aria-hidden"?: (boolean | "true" | "false") | undefined;
413
402
  "aria-invalid"?: boolean | "true" | "false" | "grammar" | "spelling" | undefined;
414
403
  "aria-keyshortcuts"?: string | undefined;
@@ -7,5 +7,10 @@ export interface DividerProps {
7
7
  style?: DividerStyle;
8
8
  children: ReactNode;
9
9
  }
10
+ /**
11
+ * @param {DividerProps} props
12
+ * @param {ReactNode} props.children Button 컴포넌트는 xs로 ButtonGroup은 sm 사이즈로 추가하는 것이 권장됩니다.
13
+ * @returns {ReactNode}
14
+ */
10
15
  export declare const Divider: import("react").ForwardRefExoticComponent<DividerProps & import("react").RefAttributes<HTMLDivElement>>;
11
16
  //# sourceMappingURL=Divider.d.ts.map
@@ -0,0 +1,23 @@
1
+ import { HTMLAttributes } from 'react';
2
+ import { Size } from '../../../constant/size';
3
+ import { ColorTone } from '../../../constant/color';
4
+ export type DotColor = ColorTone;
5
+ export type DotSize = Extract<Size, 'sm' | 'md' | 'lg'>;
6
+ export interface DotProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {
7
+ /**
8
+ * The color of the dot
9
+ * @default 'success'
10
+ */
11
+ color?: DotColor;
12
+ /**
13
+ * The size of the dot
14
+ * @default 'md'
15
+ */
16
+ size?: DotSize;
17
+ /**
18
+ * Additional class names
19
+ */
20
+ className?: string;
21
+ }
22
+ export declare const Dot: import("react").ForwardRefExoticComponent<DotProps & import("react").RefAttributes<HTMLSpanElement>>;
23
+ //# sourceMappingURL=Dot.d.ts.map
@@ -0,0 +1,2 @@
1
+ export * from './Dot';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -5,6 +5,7 @@ export * from './carousel';
5
5
  export * from './checkbox';
6
6
  export * from './date-picker';
7
7
  export * from './divider';
8
+ export * from './dot';
8
9
  export * from './dropdown';
9
10
  export * from './empty-state';
10
11
  export * from './featured-icon';
@@ -25,14 +25,14 @@ export declare const Modal: {
25
25
  *
26
26
  * 1. Vertical layout (buttons stacked):
27
27
  * <Modal.Actions layout="vertical" align="stretch">
28
- * <Button label="Confirm" onClick={handleConfirm} hierarchy="primary" />
29
- * <Button label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
28
+ * <Button size="sm" label="Confirm" onClick={handleConfirm} hierarchy="primary" />
29
+ * <Button size="sm" label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
30
30
  * </Modal.Actions>
31
31
  *
32
32
  * 2. Horizontal layout (buttons side by side):
33
33
  * <Modal.Actions layout="horizontal" align="stretch">
34
- * <Button label="Confirm" onClick={handleConfirm} hierarchy="primary" />
35
- * <Button label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
34
+ * <Button size="sm" label="Confirm" onClick={handleConfirm} hierarchy="primary" />
35
+ * <Button size="sm" label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
36
36
  * </Modal.Actions>
37
37
  *
38
38
  * 3. Checkbox layout (checkbox on left, buttons on right):
@@ -42,8 +42,8 @@ export declare const Modal: {
42
42
  * <a href="#">Settings</a>
43
43
  * </>
44
44
  * }>
45
- * <Button label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
46
- * <Button label="Confirm" onClick={handleConfirm} hierarchy="primary" />
45
+ * <Button size="sm" label="Cancel" onClick={handleCancel} hierarchy="secondary-gray" />
46
+ * <Button size="sm" label="Confirm" onClick={handleConfirm} hierarchy="primary" />
47
47
  * </Modal.Actions>
48
48
  */
49
49
  Actions({ children, layout, showDivider, align, checkboxContent, }: ModalActionsProps): import("react/jsx-runtime").JSX.Element;
@@ -1,19 +1,15 @@
1
- import { IconName } from '@ncds/ui-admin-icon';
2
- import { FC, MouseEventHandler } from 'react';
3
- import { COLOR } from '../../../constant/color';
1
+ import { MouseEventHandler } from 'react';
4
2
  import { Size } from '../../../constant/size';
5
- type TagIcon = {
6
- name: IconName | 'dot';
7
- color?: keyof typeof COLOR;
8
- };
3
+ import { SideSlotType } from '../../types/side-slot';
9
4
  interface TagProps {
10
5
  size?: Extract<Size, 'sm' | 'md'>;
11
- icon?: TagIcon;
6
+ icon?: SideSlotType;
12
7
  text: string;
13
8
  count?: string;
14
9
  close?: boolean;
10
+ children?: React.ReactNode;
15
11
  onButtonClick?: MouseEventHandler<HTMLButtonElement>;
16
12
  }
17
- export declare const Tag: FC<TagProps>;
13
+ export declare const Tag: ({ size, icon, text, count, close, onButtonClick }: TagProps) => import("react/jsx-runtime").JSX.Element;
18
14
  export {};
19
15
  //# sourceMappingURL=Tag.d.ts.map
@@ -51,6 +51,14 @@
51
51
  --orange-500: #e4501e;
52
52
  --orange-600: #b93815;
53
53
  --orange-700: #772917;
54
+ --violet-50: #fbfaff;
55
+ --violet-100: #ece9fe;
56
+ --violet-200: #ddd6fe;
57
+ --violet-300: #c3b5fd;
58
+ --violet-400: #a48afb;
59
+ --violet-500: #6927da;
60
+ --violet-600: #5720b7;
61
+ --violet-700: #3e1486;
54
62
  --focus-ring-4px-primary-100: 0px 0px 0px 3px #ffeaee;
55
63
  --focus-ring-4px-gray-100: 0px 0px 0px 3px #f2f4f7;
56
64
  --focus-ring-4px-error-100: 0px 0px 0px 3px #fee4e2;
@@ -532,9 +540,11 @@ button {
532
540
  color: var(--gray-600);
533
541
  }
534
542
  :where(.ncua-button-group.has-border) {
535
- outline: 1px solid var(--gray-200);
536
543
  box-shadow: var(--shadow-xs);
537
544
  }
545
+ :where(.ncua-button-group.has-border) .ncua-button-group__item {
546
+ border: 1px solid var(--gray-200);
547
+ }
538
548
  :where(.ncua-button-group.has-border) .ncua-button-group__item:hover {
539
549
  background-color: var(--gray-50);
540
550
  }
@@ -546,7 +556,7 @@ button {
546
556
  background-color: var(--gray-50);
547
557
  }
548
558
  :where(.ncua-button-group.has-border) .ncua-button-group__item:nth-child(n+2) {
549
- border-left: 1px solid var(--gray-200);
559
+ border-inline-start-width: 0;
550
560
  }
551
561
  :where(.ncua-button-group.has-border) .ncua-button-group__item svg {
552
562
  display: block;
@@ -567,7 +577,7 @@ button {
567
577
  background-color: var(--gray-200);
568
578
  }
569
579
  .ncua-button-group--xs .ncua-button-group__item {
570
- padding: 5px 12px;
580
+ padding: 4px 12px;
571
581
  font-size: var(--font-size-xxxs);
572
582
  line-height: var(--line-heights-xxxs);
573
583
  font-weight: var(--font-weights-commerce-sans-1);
@@ -575,12 +585,17 @@ button {
575
585
  .ncua-button-group--xs .ncua-button-group__item.is-only-icon {
576
586
  padding: 6px;
577
587
  }
578
- :where(.ncua-button-group--xs.has-border) {
579
- border-radius: 4px;
588
+ :where(.ncua-button-group--xs.has-border) .ncua-button-group__item:first-child {
589
+ border-top-left-radius: 4px;
590
+ border-bottom-left-radius: 4px;
591
+ }
592
+ :where(.ncua-button-group--xs.has-border) .ncua-button-group__item:last-child {
593
+ border-top-right-radius: 4px;
594
+ border-bottom-right-radius: 4px;
580
595
  }
581
596
 
582
597
  .ncua-button-group--sm .ncua-button-group__item {
583
- padding: 5px 16px;
598
+ padding: 4px 16px;
584
599
  font-size: var(--font-size-xs);
585
600
  line-height: var(--line-heights-xs);
586
601
  font-weight: var(--font-weights-commerce-sans-1);
@@ -588,8 +603,13 @@ button {
588
603
  .ncua-button-group--sm .ncua-button-group__item.is-only-icon {
589
604
  padding: 6px;
590
605
  }
591
- :where(.ncua-button-group--sm.has-border) {
592
- border-radius: 6px;
606
+ :where(.ncua-button-group--sm.has-border) .ncua-button-group__item:first-child {
607
+ border-top-left-radius: 6px;
608
+ border-bottom-left-radius: 6px;
609
+ }
610
+ :where(.ncua-button-group--sm.has-border) .ncua-button-group__item:last-child {
611
+ border-top-right-radius: 6px;
612
+ border-bottom-right-radius: 6px;
593
613
  }
594
614
 
595
615
  .ncua-button-group--md .ncua-button-group__item {
@@ -601,12 +621,17 @@ button {
601
621
  .ncua-button-group--md .ncua-button-group__item.is-only-icon {
602
622
  padding: 10px;
603
623
  }
604
- :where(.ncua-button-group--md.has-border) {
605
- border-radius: 6px;
624
+ :where(.ncua-button-group--md.has-border) .ncua-button-group__item:first-child {
625
+ border-top-left-radius: 6px;
626
+ border-bottom-left-radius: 6px;
627
+ }
628
+ :where(.ncua-button-group--md.has-border) .ncua-button-group__item:last-child {
629
+ border-top-right-radius: 6px;
630
+ border-bottom-right-radius: 6px;
606
631
  }
607
632
 
608
633
  .ncua-button-group--lg .ncua-button-group__item {
609
- padding: 9px 16px;
634
+ padding: 8px 16px;
610
635
  font-size: var(--font-size-sm);
611
636
  line-height: var(--line-heights-sm);
612
637
  font-weight: var(--font-weights-commerce-sans-2);
@@ -614,8 +639,13 @@ button {
614
639
  .ncua-button-group--lg .ncua-button-group__item.is-only-icon {
615
640
  padding: 10px;
616
641
  }
617
- :where(.ncua-button-group--lg.has-border) {
618
- border-radius: 8px;
642
+ :where(.ncua-button-group--lg.has-border) .ncua-button-group__item:first-child {
643
+ border-top-left-radius: 8px;
644
+ border-bottom-left-radius: 8px;
645
+ }
646
+ :where(.ncua-button-group--lg.has-border) .ncua-button-group__item:last-child {
647
+ border-top-right-radius: 8px;
648
+ border-bottom-right-radius: 8px;
619
649
  }
620
650
 
621
651
  .ncua-btn-close {
@@ -917,9 +947,9 @@ button {
917
947
  border-radius: 8px;
918
948
  }
919
949
  .ncua-divider--text {
920
- font-size: var(--font-size-sm);
950
+ font-size: var(--font-size-xs);
921
951
  font-weight: var(--font-weights-commerce-sans-1);
922
- line-height: var(--line-heights-sm);
952
+ line-height: var(--line-heights-xs);
923
953
  color: var(--gray-500);
924
954
  }
925
955
  .ncua-divider--heading {
@@ -929,6 +959,48 @@ button {
929
959
  color: var(--gray-700);
930
960
  }
931
961
 
962
+ .ncua-dot {
963
+ display: inline-block;
964
+ border-radius: 50%;
965
+ margin: 1px;
966
+ }
967
+ .ncua-dot--sm {
968
+ width: 6px;
969
+ height: 6px;
970
+ }
971
+ .ncua-dot--md {
972
+ width: 8px;
973
+ height: 8px;
974
+ }
975
+ .ncua-dot--lg {
976
+ width: 10px;
977
+ height: 10px;
978
+ }
979
+ .ncua-dot--neutral {
980
+ background-color: var(--gray-500);
981
+ }
982
+ .ncua-dot--error {
983
+ background-color: var(--primary-red-500);
984
+ }
985
+ .ncua-dot--warning {
986
+ background-color: var(--orange-500);
987
+ }
988
+ .ncua-dot--success {
989
+ background-color: var(--green-500);
990
+ }
991
+ .ncua-dot--blue {
992
+ background-color: var(--blue-500);
993
+ }
994
+ .ncua-dot--pink {
995
+ background-color: var(--pink-500);
996
+ }
997
+ .ncua-dot--violet {
998
+ background-color: var(--violet-500);
999
+ }
1000
+ .ncua-dot--disabled {
1001
+ background-color: var(--gray-300);
1002
+ }
1003
+
932
1004
  .ncua-dropdown {
933
1005
  position: relative;
934
1006
  display: inline-block;
@@ -1512,6 +1584,9 @@ button {
1512
1584
  .ncua-modal__header--horizontal .ncua-modal__title {
1513
1585
  flex: 1;
1514
1586
  }
1587
+ .ncua-modal__header--close-button.ncua-modal__header--left {
1588
+ padding: 20px 56px 20px 16px;
1589
+ }
1515
1590
 
1516
1591
  .ncua-modal__title {
1517
1592
  display: flex;
@@ -1534,22 +1609,21 @@ button {
1534
1609
 
1535
1610
  .ncua-modal__close-button {
1536
1611
  position: absolute;
1537
- top: 16px;
1538
- right: 20px;
1539
- width: 24px;
1540
- height: 24px;
1612
+ top: 10px;
1613
+ right: 16px;
1541
1614
  display: flex;
1542
1615
  align-items: center;
1543
1616
  justify-content: center;
1544
1617
  background: transparent;
1545
1618
  border: none;
1546
1619
  cursor: pointer;
1547
- padding: 0;
1620
+ padding: 8px;
1548
1621
  color: var(--gray-400);
1549
1622
  border-radius: 8px;
1550
1623
  }
1551
- .ncua-modal__close-button:hover {
1552
- background-color: var(--gray-50);
1624
+ .ncua-modal__close-button svg {
1625
+ width: 20px;
1626
+ height: 20px;
1553
1627
  }
1554
1628
 
1555
1629
  .ncua-modal__content {
@@ -2093,24 +2167,9 @@ button {
2093
2167
  white-space: nowrap;
2094
2168
  word-wrap: break-word;
2095
2169
  }
2096
- .ncua-tag > svg {
2170
+ .ncua-tag > svg, .ncua-tag > .ncua-dot {
2097
2171
  margin-right: 4px;
2098
2172
  }
2099
- .ncua-tag--dot .ncua-tag__text {
2100
- position: relative;
2101
- padding-left: 12px;
2102
- }
2103
- .ncua-tag--dot .ncua-tag__text::before {
2104
- position: absolute;
2105
- top: 50%;
2106
- left: 0;
2107
- content: "";
2108
- transform: translateY(-50%);
2109
- width: 6px;
2110
- height: 6px;
2111
- background-color: var(--primary-red-500);
2112
- border-radius: 50%;
2113
- }
2114
2173
  .ncua-tag__count {
2115
2174
  display: inline-flex;
2116
2175
  align-items: center;
@@ -2891,15 +2950,21 @@ button {
2891
2950
  .ncua-date-picker .flatpickr-day.today {
2892
2951
  border-color: var(--gray-600);
2893
2952
  }
2894
- .ncua-date-picker--sm .flatpickr-wrapper {
2953
+ .ncua-date-picker--sm {
2895
2954
  width: 138px;
2896
2955
  height: 28px;
2956
+ }
2957
+ .ncua-date-picker--sm .flatpickr-wrapper {
2958
+ height: 100%;
2897
2959
  padding: 5px 10px;
2898
2960
  font-size: var(--font-size-xs);
2899
2961
  }
2900
- .ncua-date-picker--md .flatpickr-wrapper {
2962
+ .ncua-date-picker--md {
2901
2963
  width: 156px;
2902
2964
  height: 36px;
2965
+ }
2966
+ .ncua-date-picker--md .flatpickr-wrapper {
2967
+ height: 100%;
2903
2968
  padding: 7px 12px;
2904
2969
  font-size: var(--font-size-sm);
2905
2970
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ncds/ui-admin",
3
- "version": "0.0.27",
3
+ "version": "0.0.29",
4
4
  "description": "nhn-commerce의 어드민 디자인 시스템입니다.",
5
5
  "scripts": {
6
6
  "barrel": "node barrel.js",