@sellmate/design-system-vue 1.28.0 → 1.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -183,7 +183,6 @@ sdLoading.show({ message: "처리 중..." });
183
183
  | `SdField` | 폼 필드 래퍼 (label + input + error) |
184
184
  | `SdForm` | 폼 유효성 검사 컨테이너 |
185
185
  | `SdTabs` | 탭 네비게이션 |
186
- | `SdTable` | 데이터 테이블 |
187
186
  | `SdPagination` | 페이지네이션 |
188
187
 
189
188
  ### 모달 / 알림
@@ -203,9 +202,6 @@ sdLoading.show({ message: "처리 중..." });
203
202
 
204
203
  ```ts
205
204
  import type {
206
- // Table
207
- SdTableColumn,
208
- SdTableRow,
209
205
  // Select
210
206
  SelectOption,
211
207
  // Radio
@@ -232,22 +228,6 @@ import type {
232
228
 
233
229
  ---
234
230
 
235
- ## Composables
236
-
237
- ### `useSdTableVirtualScroll`
238
-
239
- ```ts
240
- import { useSdTableVirtualScroll } from "@sellmate/design-system-vue";
241
-
242
- const { virtualRows, totalHeight, scrollToIndex } = useSdTableVirtualScroll({
243
- rowCount: data.length,
244
- rowHeight: 48,
245
- containerHeight: 400,
246
- });
247
- ```
248
-
249
- ---
250
-
251
231
  ## Requirements
252
232
 
253
233
  - Vue 3.0.0 or higher
@@ -46,16 +46,11 @@ export declare const SdSelectListItemSearch: StencilVueComponent<JSX.SdSelectLis
46
46
  export declare const SdSelectListbox: StencilVueComponent<JSX.SdSelectListbox>;
47
47
  export declare const SdSelectTrigger: StencilVueComponent<JSX.SdSelectTrigger>;
48
48
  export declare const SdSwitch: StencilVueComponent<JSX.SdSwitch, JSX.SdSwitch["value"]>;
49
- export declare const SdTable: StencilVueComponent<JSX.SdTable, JSX.SdTable["selected"]>;
50
49
  export declare const SdTabs: StencilVueComponent<JSX.SdTabs, JSX.SdTabs["value"]>;
51
50
  export declare const SdTag: StencilVueComponent<JSX.SdTag>;
52
- export declare const SdTbody: StencilVueComponent<JSX.SdTbody>;
53
- export declare const SdTd: StencilVueComponent<JSX.SdTd>;
54
51
  export declare const SdTextLink: StencilVueComponent<JSX.SdTextLink>;
55
52
  export declare const SdTextarea: StencilVueComponent<JSX.SdTextarea, JSX.SdTextarea["value"]>;
56
- export declare const SdThead: StencilVueComponent<JSX.SdThead>;
57
53
  export declare const SdToast: StencilVueComponent<JSX.SdToast>;
58
54
  export declare const SdToastContainer: StencilVueComponent<JSX.SdToastContainer>;
59
55
  export declare const SdToggle: StencilVueComponent<JSX.SdToggle, JSX.SdToggle["value"]>;
60
56
  export declare const SdTooltip: StencilVueComponent<JSX.SdTooltip>;
61
- export declare const SdTr: StencilVueComponent<JSX.SdTr>;
@@ -166,7 +166,6 @@ export const SdConfirmModal = /*@__PURE__*/ defineContainer('sd-confirm-modal',
166
166
  'tagPreset',
167
167
  'tagLabel',
168
168
  'slotLabel',
169
- 'tagContents',
170
169
  'sdClose',
171
170
  'sdCancel',
172
171
  'sdOk'
@@ -421,6 +420,7 @@ export const SdInput = /*@__PURE__*/ defineContainer('sd-input', undefined, [
421
420
  ], 'value', 'sdUpdate', undefined);
422
421
  export const SdKeyValueTable = /*@__PURE__*/ defineContainer('sd-key-value-table', undefined, [
423
422
  'fields',
423
+ 'values',
424
424
  'search',
425
425
  'radius',
426
426
  'sdChange',
@@ -657,42 +657,6 @@ export const SdSwitch = /*@__PURE__*/ defineContainer('sd-switch', undefined, [
657
657
  ], [
658
658
  'sdUpdate'
659
659
  ], 'value', 'sdUpdate', undefined);
660
- export const SdTable = /*@__PURE__*/ defineContainer('sd-table', undefined, [
661
- 'tableId',
662
- 'columns',
663
- 'rows',
664
- 'selected',
665
- 'rowKey',
666
- 'selectable',
667
- 'resizable',
668
- 'width',
669
- 'height',
670
- 'stickyHeader',
671
- 'stickyColumn',
672
- 'radius',
673
- 'noDataLabel',
674
- 'isLoading',
675
- 'pagination',
676
- 'useInternalPagination',
677
- 'useRowsPerPageSelect',
678
- 'dense',
679
- 'useVirtualScroll',
680
- 'rowHeight',
681
- 'virtualBuffer',
682
- 'virtualEndThreshold',
683
- 'rowsPerPageOption',
684
- 'sdSelectChange',
685
- 'sdPageChange',
686
- 'sdRowsPerPageChange',
687
- 'sdVirtualUpdate',
688
- 'sdVirtualReachEnd'
689
- ], [
690
- 'sdSelectChange',
691
- 'sdPageChange',
692
- 'sdRowsPerPageChange',
693
- 'sdVirtualUpdate',
694
- 'sdVirtualReachEnd'
695
- ], 'selected', 'sdSelectChange', undefined);
696
660
  export const SdTabs = /*@__PURE__*/ defineContainer('sd-tabs', undefined, [
697
661
  'value',
698
662
  'tabs',
@@ -710,20 +674,6 @@ export const SdTag = /*@__PURE__*/ defineContainer('sd-tag', undefined, [
710
674
  'isLeft',
711
675
  'width'
712
676
  ]);
713
- export const SdTbody = /*@__PURE__*/ defineContainer('sd-tbody', undefined, [
714
- 'rows'
715
- ]);
716
- export const SdTd = /*@__PURE__*/ defineContainer('sd-td', undefined, [
717
- 'field',
718
- 'rowKey',
719
- 'align',
720
- 'rowspan',
721
- 'colspan',
722
- 'sdClass',
723
- 'dividerLeft',
724
- 'dividerRight',
725
- 'useFrame'
726
- ]);
727
677
  export const SdTextLink = /*@__PURE__*/ defineContainer('sd-text-link', undefined, [
728
678
  'label',
729
679
  'icon',
@@ -773,20 +723,6 @@ export const SdTextarea = /*@__PURE__*/ defineContainer('sd-textarea', undefined
773
723
  'sdFocus',
774
724
  'sdBlur'
775
725
  ], 'value', 'sdUpdate', undefined);
776
- export const SdThead = /*@__PURE__*/ defineContainer('sd-thead', undefined, [
777
- 'columns',
778
- 'selectable',
779
- 'resizable',
780
- 'stickyColumn',
781
- 'stickyHeader',
782
- 'scrolledLeft',
783
- 'scrolledRight',
784
- 'rows',
785
- 'columnWidths',
786
- 'sdColumnSort'
787
- ], [
788
- 'sdColumnSort'
789
- ]);
790
726
  export const SdToast = /*@__PURE__*/ defineContainer('sd-toast', undefined, [
791
727
  'icon',
792
728
  'message',
@@ -839,11 +775,3 @@ export const SdTooltip = /*@__PURE__*/ defineContainer('sd-tooltip', undefined,
839
775
  'triggerClass',
840
776
  'triggerStyle'
841
777
  ]);
842
- export const SdTr = /*@__PURE__*/ defineContainer('sd-tr', undefined, [
843
- 'columns',
844
- 'selectable',
845
- 'stickyColumn',
846
- 'rowKey',
847
- 'row',
848
- 'separator'
849
- ]);
@@ -3,11 +3,6 @@ import { defineCustomElements as defineLazyCustomElements } from '@sellmate/desi
3
3
  import { defineCustomElement as defineSdCircleProgress } from '@sellmate/design-system/dist/components/sd-circle-progress.js';
4
4
  import { defineCustomElement as defineSdLinearProgress } from '@sellmate/design-system/dist/components/sd-linear-progress.js';
5
5
  import { defineCustomElement as defineSdLoadingModal } from '@sellmate/design-system/dist/components/sd-loading-modal.js';
6
- import { defineCustomElement as defineSdTable } from '@sellmate/design-system/dist/components/sd-table.js';
7
- import { defineCustomElement as defineSdTbody } from '@sellmate/design-system/dist/components/sd-tbody.js';
8
- import { defineCustomElement as defineSdTd } from '@sellmate/design-system/dist/components/sd-td.js';
9
- import { defineCustomElement as defineSdThead } from '@sellmate/design-system/dist/components/sd-thead.js';
10
- import { defineCustomElement as defineSdTr } from '@sellmate/design-system/dist/components/sd-tr.js';
11
6
  import { defineCustomElement as defineSdDivider } from '@sellmate/design-system/dist/components/sd-divider.js';
12
7
  export function defineCustomElements() {
13
8
  if (typeof customElements === 'undefined')
@@ -16,11 +11,6 @@ export function defineCustomElements() {
16
11
  defineSdCircleProgress();
17
12
  defineSdLinearProgress();
18
13
  defineSdLoadingModal();
19
- defineSdTable();
20
- defineSdTbody();
21
- defineSdTd();
22
- defineSdThead();
23
- defineSdTr();
24
14
  defineSdDivider();
25
15
  // 나머지 컴포넌트는 Stencil loader가 lazy 등록
26
16
  defineLazyCustomElements();
package/dist/index.d.ts CHANGED
@@ -1,9 +1,7 @@
1
1
  import '@sellmate/design-system/styles.css';
2
2
  export * from './components';
3
3
  export * from './plugin';
4
- export { useSdTableVirtualScroll } from './composables/useSdTableVirtualScroll';
5
- export type { VirtualRow } from './composables/useSdTableVirtualScroll';
6
4
  export { sdModal, SdModalVuePlugin } from './sdModal';
7
5
  export { sdLoading } from '@sellmate/design-system/utils';
8
6
  export type { SdLoadingShowOptions } from '@sellmate/design-system/utils';
9
- export type { ButtonName, ButtonProps, ButtonType, ButtonSize, GhostButtonIntent, GhostButtonSize, DropdownButtonItem, DropdownButtonName, DropdownButtonSize, DropdownButtonValue, BadgeColor, FieldAddonAlign, FieldSize, Rule, FieldIdentifier, ValidatableField, InputSize, NumberInputSize, BarcodeInputSize, ChipInputSize, SdTooltipProps, TooltipType, CalloutType, CalendarEventGroup, CheckedType, RadioValue, RadioOption, SelectOption, SelectOptionSelectDetail, SelectType, SelectValue, ConfirmModalMainButton, ConfirmModalType, ConfirmModalOptions, TagName, SdModalCreateOptions, ModalDialogRefLike, SdLoadingShowArgs, LoadingModalState, LoadingModalOptions, Type as DateBoxType, DatePickerSize, DateRangeValue, SdKeyValueField, SdKeyValueChangeDetail, LinearProgressType, CircleProgressType, PopoverButton, PopoverLink, PopupType, GuideType, TextLinkSize, TabOption, TabSize, ToastType, ToastPosition, ToastEntry, ToastNotifyOptions, SdTableColumn, Row as SdTableRow, SdTablePagination, SdTableStickyColumn, SdTableConfig, } from '@sellmate/design-system';
7
+ export type { ButtonName, ButtonProps, ButtonType, ButtonSize, GhostButtonIntent, GhostButtonSize, DropdownButtonItem, DropdownButtonName, DropdownButtonSize, DropdownButtonValue, BadgeColor, FieldAddonAlign, FieldSize, Rule, FieldIdentifier, ValidatableField, InputSize, NumberInputSize, BarcodeInputSize, ChipInputSize, SdTooltipProps, TooltipType, CalloutType, CalendarEventGroup, CheckedType, RadioValue, RadioOption, SelectOption, SelectOptionSelectDetail, SelectType, SelectValue, ConfirmModalMainButton, ConfirmModalType, ConfirmModalOptions, TagName, SdModalCreateOptions, ModalDialogRefLike, SdLoadingShowArgs, LoadingModalState, LoadingModalOptions, Type as DateBoxType, DatePickerSize, DateRangeValue, SdKeyValueField, SdKeyValueChangeDetail, LinearProgressType, CircleProgressType, PopoverButton, PopoverLink, PopupType, GuideType, TextLinkSize, TabOption, TabSize, ToastType, ToastPosition, ToastEntry, ToastNotifyOptions, } from '@sellmate/design-system';
package/dist/index.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import '@sellmate/design-system/styles.css';
2
2
  export * from './components';
3
3
  export * from './plugin';
4
- export { useSdTableVirtualScroll } from './composables/useSdTableVirtualScroll';
5
4
  export { sdModal, SdModalVuePlugin } from './sdModal';
6
5
  export { sdLoading } from '@sellmate/design-system/utils';
package/lib/components.ts CHANGED
@@ -199,7 +199,6 @@ export const SdConfirmModal: StencilVueComponent<JSX.SdConfirmModal> = /*@__PURE
199
199
  'tagPreset',
200
200
  'tagLabel',
201
201
  'slotLabel',
202
- 'tagContents',
203
202
  'sdClose',
204
203
  'sdCancel',
205
204
  'sdOk'
@@ -490,6 +489,7 @@ export const SdInput: StencilVueComponent<JSX.SdInput, JSX.SdInput["value"]> = /
490
489
 
491
490
  export const SdKeyValueTable: StencilVueComponent<JSX.SdKeyValueTable> = /*@__PURE__*/ defineContainer<JSX.SdKeyValueTable>('sd-key-value-table', undefined, [
492
491
  'fields',
492
+ 'values',
493
493
  'search',
494
494
  'radius',
495
495
  'sdChange',
@@ -771,45 +771,6 @@ export const SdSwitch: StencilVueComponent<JSX.SdSwitch, JSX.SdSwitch["value"]>
771
771
  'value', 'sdUpdate', undefined);
772
772
 
773
773
 
774
- export const SdTable: StencilVueComponent<JSX.SdTable, JSX.SdTable["selected"]> = /*@__PURE__*/ defineContainer<JSX.SdTable, JSX.SdTable["selected"]>('sd-table', undefined, [
775
- 'tableId',
776
- 'columns',
777
- 'rows',
778
- 'selected',
779
- 'rowKey',
780
- 'selectable',
781
- 'resizable',
782
- 'width',
783
- 'height',
784
- 'stickyHeader',
785
- 'stickyColumn',
786
- 'radius',
787
- 'noDataLabel',
788
- 'isLoading',
789
- 'pagination',
790
- 'useInternalPagination',
791
- 'useRowsPerPageSelect',
792
- 'dense',
793
- 'useVirtualScroll',
794
- 'rowHeight',
795
- 'virtualBuffer',
796
- 'virtualEndThreshold',
797
- 'rowsPerPageOption',
798
- 'sdSelectChange',
799
- 'sdPageChange',
800
- 'sdRowsPerPageChange',
801
- 'sdVirtualUpdate',
802
- 'sdVirtualReachEnd'
803
- ], [
804
- 'sdSelectChange',
805
- 'sdPageChange',
806
- 'sdRowsPerPageChange',
807
- 'sdVirtualUpdate',
808
- 'sdVirtualReachEnd'
809
- ],
810
- 'selected', 'sdSelectChange', undefined);
811
-
812
-
813
774
  export const SdTabs: StencilVueComponent<JSX.SdTabs, JSX.SdTabs["value"]> = /*@__PURE__*/ defineContainer<JSX.SdTabs, JSX.SdTabs["value"]>('sd-tabs', undefined, [
814
775
  'value',
815
776
  'tabs',
@@ -832,24 +793,6 @@ export const SdTag: StencilVueComponent<JSX.SdTag> = /*@__PURE__*/ defineContain
832
793
  ]);
833
794
 
834
795
 
835
- export const SdTbody: StencilVueComponent<JSX.SdTbody> = /*@__PURE__*/ defineContainer<JSX.SdTbody>('sd-tbody', undefined, [
836
- 'rows'
837
- ]);
838
-
839
-
840
- export const SdTd: StencilVueComponent<JSX.SdTd> = /*@__PURE__*/ defineContainer<JSX.SdTd>('sd-td', undefined, [
841
- 'field',
842
- 'rowKey',
843
- 'align',
844
- 'rowspan',
845
- 'colspan',
846
- 'sdClass',
847
- 'dividerLeft',
848
- 'dividerRight',
849
- 'useFrame'
850
- ]);
851
-
852
-
853
796
  export const SdTextLink: StencilVueComponent<JSX.SdTextLink> = /*@__PURE__*/ defineContainer<JSX.SdTextLink>('sd-text-link', undefined, [
854
797
  'label',
855
798
  'icon',
@@ -904,22 +847,6 @@ export const SdTextarea: StencilVueComponent<JSX.SdTextarea, JSX.SdTextarea["val
904
847
  'value', 'sdUpdate', undefined);
905
848
 
906
849
 
907
- export const SdThead: StencilVueComponent<JSX.SdThead> = /*@__PURE__*/ defineContainer<JSX.SdThead>('sd-thead', undefined, [
908
- 'columns',
909
- 'selectable',
910
- 'resizable',
911
- 'stickyColumn',
912
- 'stickyHeader',
913
- 'scrolledLeft',
914
- 'scrolledRight',
915
- 'rows',
916
- 'columnWidths',
917
- 'sdColumnSort'
918
- ], [
919
- 'sdColumnSort'
920
- ]);
921
-
922
-
923
850
  export const SdToast: StencilVueComponent<JSX.SdToast> = /*@__PURE__*/ defineContainer<JSX.SdToast>('sd-toast', undefined, [
924
851
  'icon',
925
852
  'message',
@@ -980,13 +907,3 @@ export const SdTooltip: StencilVueComponent<JSX.SdTooltip> = /*@__PURE__*/ defin
980
907
  'triggerStyle'
981
908
  ]);
982
909
 
983
-
984
- export const SdTr: StencilVueComponent<JSX.SdTr> = /*@__PURE__*/ defineContainer<JSX.SdTr>('sd-tr', undefined, [
985
- 'columns',
986
- 'selectable',
987
- 'stickyColumn',
988
- 'rowKey',
989
- 'row',
990
- 'separator'
991
- ]);
992
-
@@ -4,11 +4,6 @@ import { defineCustomElements as defineLazyCustomElements } from '@sellmate/desi
4
4
  import { defineCustomElement as defineSdCircleProgress } from '@sellmate/design-system/dist/components/sd-circle-progress.js';
5
5
  import { defineCustomElement as defineSdLinearProgress } from '@sellmate/design-system/dist/components/sd-linear-progress.js';
6
6
  import { defineCustomElement as defineSdLoadingModal } from '@sellmate/design-system/dist/components/sd-loading-modal.js';
7
- import { defineCustomElement as defineSdTable } from '@sellmate/design-system/dist/components/sd-table.js';
8
- import { defineCustomElement as defineSdTbody } from '@sellmate/design-system/dist/components/sd-tbody.js';
9
- import { defineCustomElement as defineSdTd } from '@sellmate/design-system/dist/components/sd-td.js';
10
- import { defineCustomElement as defineSdThead } from '@sellmate/design-system/dist/components/sd-thead.js';
11
- import { defineCustomElement as defineSdTr } from '@sellmate/design-system/dist/components/sd-tr.js';
12
7
  import { defineCustomElement as defineSdDivider } from '@sellmate/design-system/dist/components/sd-divider.js';
13
8
 
14
9
  export function defineCustomElements(): void {
@@ -18,11 +13,6 @@ export function defineCustomElements(): void {
18
13
  defineSdCircleProgress();
19
14
  defineSdLinearProgress();
20
15
  defineSdLoadingModal();
21
- defineSdTable();
22
- defineSdTbody();
23
- defineSdTd();
24
- defineSdThead();
25
- defineSdTr();
26
16
  defineSdDivider();
27
17
 
28
18
  // 나머지 컴포넌트는 Stencil loader가 lazy 등록
package/lib/index.ts CHANGED
@@ -2,8 +2,6 @@ import '@sellmate/design-system/styles.css';
2
2
 
3
3
  export * from './components';
4
4
  export * from './plugin';
5
- export { useSdTableVirtualScroll } from './composables/useSdTableVirtualScroll';
6
- export type { VirtualRow } from './composables/useSdTableVirtualScroll';
7
5
  export { sdModal, SdModalVuePlugin } from './sdModal';
8
6
  export { sdLoading } from '@sellmate/design-system/utils';
9
7
  export type { SdLoadingShowOptions } from '@sellmate/design-system/utils';
@@ -92,10 +90,4 @@ export type {
92
90
  ToastPosition,
93
91
  ToastEntry,
94
92
  ToastNotifyOptions,
95
- // Table types
96
- SdTableColumn,
97
- Row as SdTableRow,
98
- SdTablePagination,
99
- SdTableStickyColumn,
100
- SdTableConfig,
101
93
  } from '@sellmate/design-system';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellmate/design-system-vue",
3
- "version": "1.28.0",
3
+ "version": "1.29.0",
4
4
  "description": "Design System - Vue Component Wrappers",
5
5
  "keywords": [
6
6
  "vue",
@@ -47,7 +47,7 @@
47
47
  "vue": "^3.4.38"
48
48
  },
49
49
  "dependencies": {
50
- "@sellmate/design-system": "^1.28.0",
50
+ "@sellmate/design-system": "^1.29.0",
51
51
  "@stencil/vue-output-target": "^0.11.8"
52
52
  },
53
53
  "peerDependencies": {
@@ -1,84 +0,0 @@
1
- import { ref, computed, onMounted, onUnmounted, type Ref } from 'vue';
2
-
3
- export interface VirtualRow<T = Record<string, any>> {
4
- /** 전체 rows 기준 절대 인덱스 — sd-tr의 rowKey로 사용 */
5
- index: number;
6
- row: T;
7
- }
8
-
9
- interface SdVirtualUpdateDetail {
10
- from: number;
11
- to: number;
12
- }
13
-
14
- export function useSdTableVirtualScroll<T extends Record<string, any>>(
15
- tableRef: Ref<any>,
16
- rows: Ref<T[]>,
17
- ) {
18
- const range = ref<{ from: number; to: number } | null>(null);
19
-
20
- let targetEl: HTMLElement | null = null;
21
- let rafId = 0;
22
-
23
- const onVirtualUpdate = (e: Event) => {
24
- const { from, to } = (e as CustomEvent<SdVirtualUpdateDetail>).detail;
25
- range.value = { from, to };
26
- };
27
-
28
- const syncRange = (el: HTMLElement): boolean => {
29
- const currentRange = (el as any).getVirtualScrollRangeSync?.();
30
- if (
31
- currentRange &&
32
- typeof currentRange.from === 'number' &&
33
- typeof currentRange.to === 'number'
34
- ) {
35
- range.value = { from: currentRange.from, to: currentRange.to };
36
- return true;
37
- }
38
- return false;
39
- };
40
-
41
- const attachWhenReady = () => {
42
- // Stencil Vue 래퍼는 expose()를 사용하지 않으므로 $el로 실제 custom element에 접근
43
- const raw = (tableRef.value as any)?.$el ?? tableRef.value;
44
- const el: HTMLElement | null = raw instanceof HTMLElement ? raw : null;
45
- if (!el) {
46
- rafId = requestAnimationFrame(attachWhenReady);
47
- return;
48
- }
49
-
50
- targetEl = el;
51
- targetEl.addEventListener('sdVirtualUpdate', onVirtualUpdate);
52
-
53
- const trySync = () => {
54
- if (!targetEl) return;
55
- if (!syncRange(targetEl)) {
56
- rafId = requestAnimationFrame(trySync);
57
- }
58
- };
59
-
60
- trySync();
61
- };
62
-
63
- onMounted(() => {
64
- attachWhenReady();
65
- });
66
-
67
- onUnmounted(() => {
68
- cancelAnimationFrame(rafId);
69
- targetEl?.removeEventListener('sdVirtualUpdate', onVirtualUpdate);
70
- targetEl = null;
71
- });
72
-
73
- const virtualRows = computed<VirtualRow<T>[]>(() => {
74
- if (!range.value) return [];
75
- const { from, to } = range.value;
76
- return rows.value.slice(from, to).map((row, i) => ({ index: from + i, row }));
77
- });
78
-
79
- return {
80
- virtualRows,
81
- from: computed(() => range.value?.from ?? 0),
82
- to: computed(() => range.value?.to ?? 0),
83
- };
84
- }