@ncds/ui-admin 1.8.22-alpha.2 → 1.8.22

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 (58) hide show
  1. package/dist/cjs/assets/scripts/table/scrollbar/const.js +50 -0
  2. package/dist/cjs/assets/scripts/table/scrollbar/drag.js +75 -0
  3. package/dist/cjs/assets/scripts/table/scrollbar/geometry.js +69 -0
  4. package/dist/cjs/assets/scripts/table/scrollbar/isolate.js +36 -0
  5. package/dist/cjs/src/components/data-display/table/Table.js +1 -0
  6. package/dist/cjs/src/components/data-display/table/__tests__/useTableScrollbars.characterisation.test.js +390 -0
  7. package/dist/cjs/src/components/data-display/table/__tests__/useTableScrollbars.regression.test.js +339 -0
  8. package/dist/cjs/src/components/data-display/table/useTableScrollbars.js +115 -86
  9. package/dist/cjs/src/components/feedback-and-status/badge/Badge.js +1 -1
  10. package/dist/cjs/src/components/overlays/modal/Modal.js +46 -41
  11. package/dist/cjs/src/components/overlays/postcode-search-modal/PostcodeSearchModal.js +2 -2
  12. package/dist/cjs/src/generated/scoped-css.js +1 -1
  13. package/dist/esm/assets/scripts/table/scrollbar/const.js +44 -0
  14. package/dist/esm/assets/scripts/table/scrollbar/drag.js +67 -0
  15. package/dist/esm/assets/scripts/table/scrollbar/geometry.js +60 -0
  16. package/dist/esm/assets/scripts/table/scrollbar/isolate.js +27 -0
  17. package/dist/esm/src/components/data-display/table/Table.js +1 -0
  18. package/dist/esm/src/components/data-display/table/__tests__/useTableScrollbars.characterisation.test.js +387 -0
  19. package/dist/esm/src/components/data-display/table/__tests__/useTableScrollbars.regression.test.js +336 -0
  20. package/dist/esm/src/components/data-display/table/useTableScrollbars.js +85 -86
  21. package/dist/esm/src/components/feedback-and-status/badge/Badge.js +1 -1
  22. package/dist/esm/src/components/overlays/modal/Modal.js +47 -42
  23. package/dist/esm/src/components/overlays/postcode-search-modal/PostcodeSearchModal.js +2 -2
  24. package/dist/esm/src/generated/scoped-css.js +1 -1
  25. package/dist/temp/assets/scripts/table/scrollbar/const.d.ts +46 -0
  26. package/dist/temp/assets/scripts/table/scrollbar/const.js +44 -0
  27. package/dist/temp/assets/scripts/table/scrollbar/drag.d.ts +18 -0
  28. package/dist/temp/assets/scripts/table/scrollbar/drag.js +49 -0
  29. package/dist/temp/assets/scripts/table/scrollbar/geometry.d.ts +47 -0
  30. package/dist/temp/assets/scripts/table/scrollbar/geometry.js +37 -0
  31. package/dist/temp/assets/scripts/table/scrollbar/isolate.d.ts +4 -0
  32. package/dist/temp/assets/scripts/table/scrollbar/isolate.js +30 -0
  33. package/dist/temp/src/components/data-display/table/Table.js +1 -0
  34. package/dist/temp/src/components/data-display/table/__tests__/useTableScrollbars.characterisation.test.d.ts +1 -0
  35. package/dist/temp/src/components/data-display/table/__tests__/useTableScrollbars.characterisation.test.js +282 -0
  36. package/dist/temp/src/components/data-display/table/__tests__/useTableScrollbars.regression.test.d.ts +1 -0
  37. package/dist/temp/src/components/data-display/table/__tests__/useTableScrollbars.regression.test.js +244 -0
  38. package/dist/temp/src/components/data-display/table/useTableScrollbars.d.ts +2 -6
  39. package/dist/temp/src/components/data-display/table/useTableScrollbars.js +100 -72
  40. package/dist/temp/src/components/feedback-and-status/badge/Badge.d.ts +1 -1
  41. package/dist/temp/src/components/feedback-and-status/badge/Badge.js +1 -1
  42. package/dist/temp/src/components/overlays/modal/Modal.d.ts +5 -5
  43. package/dist/temp/src/components/overlays/modal/Modal.js +11 -14
  44. package/dist/temp/src/components/overlays/postcode-search-modal/PostcodeSearchModal.js +1 -1
  45. package/dist/temp/src/generated/scoped-css.js +1 -1
  46. package/dist/temp/src/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  47. package/dist/types/assets/scripts/table/scrollbar/const.d.ts +46 -0
  48. package/dist/types/assets/scripts/table/scrollbar/drag.d.ts +18 -0
  49. package/dist/types/assets/scripts/table/scrollbar/geometry.d.ts +47 -0
  50. package/dist/types/assets/scripts/table/scrollbar/isolate.d.ts +4 -0
  51. package/dist/types/src/components/data-display/table/__tests__/useTableScrollbars.characterisation.test.d.ts +1 -0
  52. package/dist/types/src/components/data-display/table/__tests__/useTableScrollbars.regression.test.d.ts +1 -0
  53. package/dist/types/src/components/data-display/table/useTableScrollbars.d.ts +2 -6
  54. package/dist/types/src/components/feedback-and-status/badge/Badge.d.ts +1 -1
  55. package/dist/types/src/components/overlays/modal/Modal.d.ts +5 -5
  56. package/dist/types/src/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  57. package/dist/ui-admin/assets/styles/style.css +57 -28
  58. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- import { useEffect } from 'react';
2
- export declare const useIsomorphicLayoutEffect: typeof useEffect;
1
+ import { useLayoutEffect } from 'react';
2
+ export declare const useIsomorphicLayoutEffect: typeof useLayoutEffect;
@@ -0,0 +1,46 @@
1
+ /** Table 커스텀 스크롤바의 클래스명·속성명·수치 상수. React 와 CDN 이 함께 참조한다. */
2
+ /** `_table.scss` 의 `--ncua-table-header-height` 와 같은 값 */
3
+ export declare const TABLE_HEADER_HEIGHT = 40;
4
+ /** `.ncua-table__scrollbar-thumb { height }` 와 같은 값 */
5
+ export declare const SCROLLBAR_THUMB_MIN_HEIGHT = 40;
6
+ /** `.ncua-table__h-scrollbar-thumb { width }` 와 같은 값 */
7
+ export declare const H_SCROLLBAR_THUMB_MIN_WIDTH = 40;
8
+ /** `.ncua-table__h-scrollbar { left/right: var(--spacing-s) }` 와 같은 값 */
9
+ export declare const H_SCROLLBAR_SIDE_GAP = 8;
10
+ /** 세로 트랙 상하 여백 합계. 헤더 회피분은 `TABLE_HEADER_HEIGHT` 로 따로 뺀다 */
11
+ export declare const SCROLLBAR_TRACK_OFFSET = 16;
12
+ export declare const SCROLLBAR_CLASS_NAMES: {
13
+ readonly table: "ncua-table";
14
+ readonly tableWrapper: "ncua-table-wrapper";
15
+ readonly dataGrid: "ncua-data-grid";
16
+ readonly scrollArea: "ncua-table__scroll-area";
17
+ readonly scrollContainer: "ncua-table__scroll-container";
18
+ readonly scrollbar: "ncua-table__scrollbar";
19
+ readonly scrollbarThumb: "ncua-table__scrollbar-thumb";
20
+ readonly hScrollContainer: "ncua-table__h-scroll-container";
21
+ readonly hScrollInner: "ncua-table__h-scroll-inner";
22
+ readonly hScrollbar: "ncua-table__h-scrollbar";
23
+ readonly hScrollbarThumb: "ncua-table__h-scrollbar-thumb";
24
+ readonly tableElement: "ncua-table__table";
25
+ };
26
+ /** `optOut` 을 제외한 전부가 런타임에만 부착된다. 마크업에 직접 기재하지 않는다. */
27
+ export declare const SCROLLBAR_ATTRS: {
28
+ readonly ready: "data-scrollbar-ready";
29
+ /** `ready` 와 항상 함께 부착·제거한다 */
30
+ readonly owner: "data-scrollbar-owner";
31
+ readonly generated: "data-scrollbar-generated";
32
+ readonly fallbackArmed: "data-ncua-scrollbar-fallback";
33
+ readonly dragging: "data-dragging";
34
+ readonly optOut: "data-ncua-scrollbar";
35
+ };
36
+ export declare const SCROLLBAR_OWNERS: {
37
+ readonly cdn: "cdn";
38
+ readonly react: "react";
39
+ };
40
+ export type ScrollbarOwner = (typeof SCROLLBAR_OWNERS)[keyof typeof SCROLLBAR_OWNERS];
41
+ export declare const SCROLLBAR_OWNER_VALUES: readonly string[];
42
+ export declare const OPT_OUT_VALUE = "off";
43
+ export declare const AXIS_VALUES: readonly ["both", "x", "y"];
44
+ export type ScrollbarAxisOption = (typeof AXIS_VALUES)[number];
45
+ export declare const DEFAULT_AXIS: ScrollbarAxisOption;
46
+ export declare const LOG_PREFIX = "[ncua.TableScrollbar]";
@@ -0,0 +1,18 @@
1
+ /** React 합성 이벤트와 DOM 이벤트를 함께 받기 위한 최소 표면 */
2
+ export type DragPointerEvent = {
3
+ readonly clientX: number;
4
+ readonly clientY: number;
5
+ preventDefault: () => void;
6
+ };
7
+ export type ThumbDragInput = {
8
+ readonly axis: 'x' | 'y';
9
+ readonly scrollEl: HTMLElement;
10
+ readonly thumbEl: HTMLElement;
11
+ /** `[data-dragging]` 부착 대상 */
12
+ readonly draggingTarget: HTMLElement;
13
+ /** `DRAG_BASIS` 기준 길이. 축별 산출식이 달라 호출자가 넘긴다 */
14
+ readonly measureDragBasisSize: (clientSize: number) => number;
15
+ /** 바인딩 해제 시 진행 중인 드래그를 함께 끊는 신호 */
16
+ readonly releaseSignal?: AbortSignal;
17
+ };
18
+ export declare const startThumbDrag: (event: DragPointerEvent, input: ThumbDragInput) => void;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * 썸 치수·위치 산출. React 훅과 CDN 바인딩이 공유한다.
3
+ * SSR 경로에서도 평가되므로 `document`·`window` 를 참조하지 않는다.
4
+ */
5
+ export type AxisMetrics = {
6
+ readonly scrollOffset: number;
7
+ readonly scrollSize: number;
8
+ readonly clientSize: number;
9
+ readonly trackSize: number;
10
+ readonly thumbMinSize: number;
11
+ };
12
+ export type ThumbGeometry = {
13
+ /** `false` 이면 트랙·썸을 감춘다 */
14
+ readonly visible: boolean;
15
+ readonly size: number;
16
+ /** 트랙 기준 썸 오프셋 (px) */
17
+ readonly offset: number;
18
+ };
19
+ export declare const computeThumbGeometry: (metrics: AxisMetrics) => ThumbGeometry;
20
+ /** 호출자가 넘겨야 하는 축별 `dragBasisSize` 기준 */
21
+ export declare const DRAG_BASIS: {
22
+ readonly y: "clientSize";
23
+ readonly x: "trackSize";
24
+ };
25
+ export type DragScrollDeltaInput = {
26
+ readonly pointerDelta: number;
27
+ readonly scrollSize: number;
28
+ readonly clientSize: number;
29
+ readonly dragBasisSize: number;
30
+ readonly thumbSize: number;
31
+ };
32
+ /**
33
+ * 포인터 이동량(px) → 스크롤 오프셋 변화량(px).
34
+ * 환산 분모 기준이 축마다 다르므로 `dragBasisSize` 는 호출자가 `DRAG_BASIS` 대로 넘긴다.
35
+ */
36
+ export declare const computeDragScrollDelta: (input: DragScrollDeltaInput) => number;
37
+ export type HorizontalTrackBoxInput = {
38
+ readonly clientWidth: number;
39
+ readonly scrollLeft: number;
40
+ readonly sideGap: number;
41
+ };
42
+ export type HorizontalTrackBox = {
43
+ readonly translateX: number;
44
+ readonly width: number;
45
+ };
46
+ /** 가로 트랙은 스크롤 컨테이너 안에 있어 함께 밀리므로, 되돌릴 오프셋과 폭을 산출한다. */
47
+ export declare const computeHorizontalTrackBox: (input: HorizontalTrackBoxInput) => HorizontalTrackBox;
@@ -0,0 +1,4 @@
1
+ /** 스크롤·리사이즈는 초당 수십 회 불리므로 같은 지점의 실패는 1회만 기록한다 */
2
+ export declare const isolate: <A extends readonly unknown[]>(label: string, run: (...args: A) => void) => (...args: A) => void;
3
+ /** 1회성 호출용. 실패해도 나머지 정리·순회가 이어지도록 한다 */
4
+ export declare const runIsolated: (label: string, run: () => void) => void;
@@ -1,9 +1,6 @@
1
1
  import { type MouseEvent, type RefObject } from 'react';
2
- export declare const TABLE_HEADER_HEIGHT = 40;
3
- export declare const SCROLLBAR_THUMB_MIN_HEIGHT = 40;
4
- export declare const H_SCROLLBAR_THUMB_MIN_WIDTH = 40;
5
- export declare const H_SCROLLBAR_SIDE_GAP = 8;
6
- export declare const SCROLLBAR_TRACK_OFFSET = 16;
2
+ import { H_SCROLLBAR_SIDE_GAP, H_SCROLLBAR_THUMB_MIN_WIDTH, SCROLLBAR_THUMB_MIN_HEIGHT, SCROLLBAR_TRACK_OFFSET, TABLE_HEADER_HEIGHT } from '../../../../assets/scripts/table/scrollbar/const';
3
+ export { H_SCROLLBAR_SIDE_GAP, H_SCROLLBAR_THUMB_MIN_WIDTH, SCROLLBAR_THUMB_MIN_HEIGHT, SCROLLBAR_TRACK_OFFSET, TABLE_HEADER_HEIGHT, };
7
4
  type VerticalScrollbarOptions = {
8
5
  enabled: boolean;
9
6
  layoutKey: unknown;
@@ -24,4 +21,3 @@ type HorizontalScrollbarOptions = {
24
21
  export declare const useTableHorizontalScrollbar: ({ enabled, hScrollContainerRef, hScrollbarRef, hThumbRef, }: HorizontalScrollbarOptions) => {
25
22
  handleHThumbMouseDown: (e: MouseEvent<HTMLDivElement>) => void;
26
23
  };
27
- export {};
@@ -16,4 +16,4 @@ type BadgeProps = {
16
16
  };
17
17
  declare const Badge: ({ label, type, color, className, leadingIcon, trailingIcon, size, }: BadgeProps) => import("react/jsx-runtime").JSX.Element;
18
18
  export { Badge };
19
- export type { BadgeColor, BadgeProps, BadgeSize, BadgeType };
19
+ export type { BadgeType, BadgeColor, BadgeSize, BadgeProps };
@@ -12,14 +12,12 @@ type ModalProps = {
12
12
  children: ReactNode;
13
13
  closeOnBackdropClick?: boolean;
14
14
  closeOnEsc?: boolean;
15
- showHeaderDivider?: boolean;
16
- showActionsDivider?: boolean;
17
15
  className?: string;
18
16
  zIndex?: number;
19
17
  };
20
18
  declare const Modal: {
21
- ({ isOpen, onClose, children, size, closeOnBackdropClick, closeOnEsc, showHeaderDivider, showActionsDivider, className, zIndex, ...restProps }: ModalProps): import("react").ReactPortal | null;
22
- Header({ children, onClose, featuredIcon, title, subtitle, align, hideCloseButton, }: ModalHeaderProps): import("react/jsx-runtime").JSX.Element;
19
+ ({ isOpen, onClose, children, size, closeOnBackdropClick, closeOnEsc, className, zIndex, ...restProps }: ModalProps): import("react").ReactPortal | null;
20
+ Header({ children, onClose, featuredIcon, title, subtitle, align, showDivider, hideCloseButton, }: ModalHeaderProps): import("react/jsx-runtime").JSX.Element;
23
21
  Content({ children, className }: ModalContentProps): import("react/jsx-runtime").JSX.Element;
24
22
  /**
25
23
  * Modal.Actions - The actions area of the modal
@@ -49,7 +47,7 @@ declare const Modal: {
49
47
  * <Button size="sm" label="Confirm" onClick={handleConfirm} hierarchy="primary" />
50
48
  * </Modal.Actions>
51
49
  */
52
- Actions({ children, layout, align, checkboxContent, className, }: ModalActionsProps): import("react/jsx-runtime").JSX.Element;
50
+ Actions({ children, layout, showDivider, align, checkboxContent, className, }: ModalActionsProps): import("react/jsx-runtime").JSX.Element;
53
51
  };
54
52
  type ModalHeaderProps = {
55
53
  children?: ReactNode;
@@ -62,6 +60,7 @@ type ModalHeaderProps = {
62
60
  align?: ModalHeaderAlign;
63
61
  title?: string | ReactNode;
64
62
  subtitle?: string | ReactNode;
63
+ showDivider?: boolean;
65
64
  hideCloseButton?: boolean;
66
65
  };
67
66
  type ModalContentProps = {
@@ -72,6 +71,7 @@ type ModalActionsProps = {
72
71
  className?: string;
73
72
  children: ReactNode;
74
73
  layout?: ModalActionsLayout;
74
+ showDivider?: boolean;
75
75
  align?: ModalActionsAlign;
76
76
  checkboxContent?: ReactNode;
77
77
  };
@@ -1,2 +1,2 @@
1
- import { useEffect } from 'react';
2
- export declare const useIsomorphicLayoutEffect: typeof useEffect;
1
+ import { useLayoutEffect } from 'react';
2
+ export declare const useIsomorphicLayoutEffect: typeof useLayoutEffect;
@@ -67,6 +67,9 @@
67
67
  --shadow-xs-focused-3px-primary-100: 0px 1px 2px 0px #1018280d, 0px 0px 0px 3px #ffeaee;
68
68
  --shadow-xs-focused-3px-gray-100: 0px 1px 2px 0px #1018280d, 0px 0px 0px 3px #f2f4f7;
69
69
  --shadow-xs-focused-3px-error-100: 0px 1px 2px 0px #1018280d, 0px 0px 0px 3px #fee4e2;
70
+ --shadow-xs-focused-4px-primary-100: 0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #ffeaee;
71
+ --shadow-xs-focused-4px-gray-100: 0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #f2f4f7;
72
+ --shadow-xs-focused-4px-error-100: 0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #fee4e2;
70
73
  --shadow-sm: 0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f;
71
74
  --shadow-sm-focused-4px-primary-100: 0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #ffeaee;
72
75
  --shadow-sm-focused-4px-gray-100: 0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #f2f4f7;
@@ -324,7 +327,7 @@ button {
324
327
  background-color: var(--primary-red-450);
325
328
  border: 1px solid var(--primary-red-500);
326
329
  color: var(--base-white);
327
- box-shadow: var(--shadow-sm-focused-4px-primary-100);
330
+ box-shadow: var(--shadow-xs-focused-4px-primary-100);
328
331
  }
329
332
  .ncua-btn--primary:disabled, .ncua-btn--primary.is-disable {
330
333
  background-color: var(--primary-red-100);
@@ -370,7 +373,7 @@ button {
370
373
  background-color: var(--base-white);
371
374
  border: 1px solid var(--gray-200);
372
375
  color: var(--gray-700);
373
- box-shadow: var(--shadow-sm-focused-4px-gray-100);
376
+ box-shadow: var(--shadow-xs-focused-4px-gray-100);
374
377
  }
375
378
  .ncua-btn--secondary-gray:disabled, .ncua-btn--secondary-gray.is-disable {
376
379
  background-color: var(--base-white);
@@ -956,7 +959,7 @@ button {
956
959
  }
957
960
  .ncua-checkbox-input.destructive :where(input):focus {
958
961
  border-color: var(--primary-red-600);
959
- box-shadow: var(--shadow-sm-focused-4px-error-100);
962
+ box-shadow: var(--shadow-xs-focused-4px-error-100);
960
963
  }
961
964
  .ncua-checkbox-input:hover {
962
965
  border-color: var(--gray-600);
@@ -1737,7 +1740,7 @@ button {
1737
1740
  border-color: var(--primary-red-600);
1738
1741
  }
1739
1742
  .ncua-input.destructive:where(:focus-within) .ncua-input__field {
1740
- box-shadow: var(--shadow-sm-focused-4px-error-100);
1743
+ box-shadow: var(--shadow-xs-focused-4px-error-100);
1741
1744
  }
1742
1745
  .ncua-input.is-disabled .ncua-input__content > :not(button) {
1743
1746
  background-color: var(--gray-50);
@@ -1927,7 +1930,7 @@ button {
1927
1930
  border-color: var(--primary-red-600);
1928
1931
  }
1929
1932
  .ncua-input--textarea.destructive textarea:focus {
1930
- box-shadow: var(--shadow-sm-focused-4px-error-100);
1933
+ box-shadow: var(--shadow-xs-focused-4px-error-100);
1931
1934
  }
1932
1935
 
1933
1936
  .ncua-input--textarea--xs textarea {
@@ -2075,20 +2078,6 @@ button {
2075
2078
  }
2076
2079
  }
2077
2080
 
2078
- .ncua-modal--divider-header .ncua-modal__header {
2079
- border-block-end: 1px solid var(--gray-100);
2080
- }
2081
- .ncua-modal--divider-header .ncua-modal__content {
2082
- padding-block-start: 16px;
2083
- }
2084
-
2085
- .ncua-modal--divider-actions .ncua-modal__actions-wrapper {
2086
- border-block-start: 1px solid var(--gray-100);
2087
- }
2088
- .ncua-modal--divider-actions .ncua-modal__content {
2089
- padding-block-end: 16px;
2090
- }
2091
-
2092
2081
  .ncua-modal__header {
2093
2082
  padding: 0px 20px 16px;
2094
2083
  border-bottom: none;
@@ -2097,6 +2086,12 @@ button {
2097
2086
  flex-direction: column;
2098
2087
  gap: 8px;
2099
2088
  }
2089
+ .ncua-modal__header-divider {
2090
+ width: 100%;
2091
+ height: 1px;
2092
+ background-color: var(--gray-100);
2093
+ margin: 0 0 16px;
2094
+ }
2100
2095
  .ncua-modal__header:has(.ncua-modal__close-button) {
2101
2096
  padding-right: 48px;
2102
2097
  }
@@ -2189,6 +2184,12 @@ button {
2189
2184
  display: flex;
2190
2185
  gap: 8px;
2191
2186
  }
2187
+ .ncua-modal__actions-divider {
2188
+ width: 100%;
2189
+ height: 1px;
2190
+ background-color: var(--gray-100);
2191
+ margin: 16px 0 0;
2192
+ }
2192
2193
  .ncua-modal__actions--vertical {
2193
2194
  flex-direction: column;
2194
2195
  }
@@ -2265,8 +2266,8 @@ button {
2265
2266
  }
2266
2267
  }
2267
2268
 
2268
- .ncua-modal--divider-header:has(.ncua-postcode-search-modal) .ncua-modal__content {
2269
- padding-block-start: 0;
2269
+ .ncua-modal:has(.ncua-postcode-search-modal) .ncua-modal__header-divider {
2270
+ margin: 0;
2270
2271
  }
2271
2272
 
2272
2273
  .ncua-modal__content:has(.ncua-postcode-search-modal) {
@@ -3183,7 +3184,7 @@ button {
3183
3184
  }
3184
3185
  .ncua-radio-input.destructive :where(input):focus {
3185
3186
  border-color: var(--primary-red-600);
3186
- box-shadow: var(--shadow-sm-focused-4px-error-100);
3187
+ box-shadow: var(--shadow-xs-focused-4px-error-100);
3187
3188
  }
3188
3189
 
3189
3190
  .ncua-radio-field {
@@ -3685,7 +3686,7 @@ button {
3685
3686
  border-color: var(--primary-red-600);
3686
3687
  }
3687
3688
  .ncua-select.destructive .ncua-select__content:focus-within {
3688
- box-shadow: var(--shadow-sm-focused-4px-error-100);
3689
+ box-shadow: var(--shadow-xs-focused-4px-error-100);
3689
3690
  }
3690
3691
  .ncua-select--xs .ncua-select__content {
3691
3692
  height: var(--select-height-xs);
@@ -4026,7 +4027,7 @@ button {
4026
4027
  border-color: var(--primary-red-600);
4027
4028
  }
4028
4029
  .ncua-selectbox.destructive .ncua-selectbox__content:focus {
4029
- box-shadow: var(--shadow-sm-focused-4px-error-100);
4030
+ box-shadow: var(--shadow-xs-focused-4px-error-100);
4030
4031
  }
4031
4032
  .ncua-selectbox--xs .ncua-selectbox__content {
4032
4033
  height: var(--select-height-xs);
@@ -5319,16 +5320,15 @@ button {
5319
5320
  justify-content: center;
5320
5321
  color: var(--pink-600);
5321
5322
  background-color: var(--pink-200);
5323
+ border-radius: 5px;
5322
5324
  }
5323
5325
  .ncua-badge--new-badge-sm {
5324
5326
  width: 16px;
5325
5327
  height: 16px;
5326
- border-radius: 3px;
5327
5328
  }
5328
5329
  .ncua-badge--new-badge-md {
5329
5330
  width: 20px;
5330
5331
  height: 20px;
5331
- border-radius: 4px;
5332
5332
  }
5333
5333
 
5334
5334
  .ncua-badge-group {
@@ -6590,7 +6590,7 @@ button {
6590
6590
  bottom: 0;
6591
6591
  width: 3px;
6592
6592
  background: var(--base-black);
6593
- z-index: var(--z-index-1);
6593
+ z-index: 1;
6594
6594
  }
6595
6595
  .ncua-table__row--warning.ncua-table__row--selected:nth-child(n) {
6596
6596
  background: var(--orange-50);
@@ -6735,7 +6735,7 @@ button {
6735
6735
  .ncua-table--fixed-header .ncua-table__header-cell {
6736
6736
  position: sticky;
6737
6737
  top: 0;
6738
- z-index: var(--z-index-sticky);
6738
+ z-index: 10;
6739
6739
  padding: 0 var(--spacing-m);
6740
6740
  height: var(--ncua-table-header-height);
6741
6741
  }
@@ -6972,6 +6972,35 @@ button {
6972
6972
  z-index: 2;
6973
6973
  }
6974
6974
 
6975
+ [data-ncua-scrollbar-fallback] .ncua-table__h-scroll-container:not([data-scrollbar-ready]),
6976
+ [data-ncua-scrollbar-fallback] .ncua-table__scroll-container:not([data-scrollbar-ready]) {
6977
+ scrollbar-width: thin;
6978
+ scrollbar-color: var(--gray-300) transparent;
6979
+ }
6980
+ [data-ncua-scrollbar-fallback] .ncua-table__h-scroll-container:not([data-scrollbar-ready])::-webkit-scrollbar,
6981
+ [data-ncua-scrollbar-fallback] .ncua-table__scroll-container:not([data-scrollbar-ready])::-webkit-scrollbar {
6982
+ display: block;
6983
+ width: 8px;
6984
+ height: 8px;
6985
+ }
6986
+ [data-ncua-scrollbar-fallback] .ncua-table__h-scroll-container:not([data-scrollbar-ready])::-webkit-scrollbar-thumb,
6987
+ [data-ncua-scrollbar-fallback] .ncua-table__scroll-container:not([data-scrollbar-ready])::-webkit-scrollbar-thumb {
6988
+ background: var(--gray-300);
6989
+ border-radius: var(--border-radius-md);
6990
+ }
6991
+
6992
+ [data-ncua-scrollbar-fallback] .ncua-table__h-scroll-container:not([data-scrollbar-ready]) > .ncua-table__h-scrollbar {
6993
+ display: none;
6994
+ }
6995
+
6996
+ [data-ncua-scrollbar-fallback] .ncua-table__scroll-area:not(:has(> .ncua-table__scroll-container[data-scrollbar-ready])) > .ncua-table__scrollbar {
6997
+ display: none;
6998
+ }
6999
+
7000
+ [data-ncua-scrollbar-fallback] .ncua-table:not(:has(.ncua-table__scroll-container[data-scrollbar-ready])) > .ncua-table__scrollbar {
7001
+ display: none;
7002
+ }
7003
+
6975
7004
  .ncua-table-dnd-preview {
6976
7005
  position: fixed;
6977
7006
  top: -9999px;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ncds/ui-admin",
3
- "version": "1.8.22-alpha.2",
3
+ "version": "1.8.22",
4
4
  "description": "nhn-commerce의 어드민 디자인 시스템입니다.",
5
5
  "scripts": {
6
6
  "barrel": "node barrel.js",