sellmate-design-system-react 9.0.0-beta.3 → 9.0.0-beta.31
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/AGENTS.md +616 -98
- package/README.md +111 -9
- package/dist/components/SBadge/README.md +24 -0
- package/dist/components/SBadge/SBadge.d.ts +1 -1
- package/dist/components/SBarcodeInput/README.md +9 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +7 -1
- package/dist/components/SButton/README.md +36 -0
- package/dist/components/SCalendar/README.md +13 -0
- package/dist/components/SCallout/README.md +15 -0
- package/dist/components/SCard/README.md +16 -0
- package/dist/components/SCard/SCard.d.ts +17 -2
- package/dist/components/SCheckbox/README.md +8 -0
- package/dist/components/SChipFilter/README.md +335 -13
- package/dist/components/SChipFilter/SChipFilter.d.ts +146 -58
- package/dist/components/SChipFilter/index.d.ts +1 -1
- package/dist/components/SChipInput/README.md +15 -1
- package/dist/components/SChipInput/SChipInput.d.ts +7 -1
- package/dist/components/SChipInput/index.d.ts +1 -1
- package/dist/components/SCircleProgress/README.md +8 -0
- package/dist/components/SConfirmModal/README.md +17 -1
- package/dist/components/SConfirmModal/SConfirmModal.d.ts +2 -2
- package/dist/components/SConfirmModal/index.d.ts +1 -1
- package/dist/components/SDatePicker/README.md +57 -2
- package/dist/components/SDatePicker/SDatePicker.d.ts +57 -4
- package/dist/components/SDatePicker/index.d.ts +1 -1
- package/dist/components/SDateRangePicker/README.md +17 -2
- package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +16 -3
- package/dist/components/SDivider/README.md +5 -0
- package/dist/components/SDivider/SDivider.d.ts +11 -0
- package/dist/components/SDraggableItem/README.md +37 -0
- package/dist/components/SDraggableItem/SDraggableItem.d.ts +2 -0
- package/dist/components/SDraggableItem/index.d.ts +1 -1
- package/dist/components/SDraggableList/README.md +30 -0
- package/dist/components/SDraggableList/SDraggableList.d.ts +11 -0
- package/dist/components/SDraggableList/index.d.ts +1 -1
- package/dist/components/SDrawer/README.md +8 -0
- package/dist/components/SDropdownButton/README.md +19 -0
- package/dist/components/SEditor/EditorBody.d.ts +36 -0
- package/dist/components/SEditor/EditorToolbar.d.ts +93 -0
- package/dist/components/SEditor/README.md +203 -0
- package/dist/components/SEditor/SEditor.d.ts +114 -0
- package/dist/components/SEditor/editor-icons.d.ts +63 -0
- package/dist/components/SEditor/editor.config.d.ts +119 -0
- package/dist/components/SEditor/index.d.ts +8 -0
- package/dist/components/SEditor/tiptap-api.d.ts +29 -0
- package/dist/components/SEditor/use-is-mobile.d.ts +14 -0
- package/dist/components/SExpansionItem/README.md +36 -0
- package/dist/components/SExpansionItem/index.d.ts +1 -1
- package/dist/components/SField/README.md +27 -2
- package/dist/components/SField/SField.d.ts +22 -4
- package/dist/components/SFilePicker/README.md +15 -1
- package/dist/components/SFilePicker/SFilePicker.d.ts +7 -1
- package/dist/components/SFooter/README.md +25 -0
- package/dist/components/SFooter/SFooter.d.ts +4 -3
- package/dist/components/SForm/README.md +11 -0
- package/dist/components/SGhostButton/README.md +20 -4
- package/dist/components/SGnb/README.md +51 -0
- package/dist/components/SGnb/SGnb.d.ts +32 -0
- package/dist/components/SGnb/gnb.config.d.ts +7 -0
- package/dist/components/SGnb/index.d.ts +1 -1
- package/dist/components/SGnbSystem/README.md +139 -0
- package/dist/components/SGnbSystem/SGnbSystem.d.ts +114 -0
- package/dist/components/SGnbSystem/gnbSystem.config.d.ts +122 -0
- package/dist/components/SGnbSystem/index.d.ts +2 -0
- package/dist/components/SGuide/README.md +15 -0
- package/dist/components/SIcon/README.md +8 -0
- package/dist/components/SIcon/SIcon.d.ts +1 -1
- package/dist/components/SIcon/icons.gen.d.ts +2 -0
- package/dist/components/SImage/README.md +14 -0
- package/dist/components/SInput/README.md +3 -1
- package/dist/components/SInput/SInput.d.ts +7 -1
- package/dist/components/SKeyValueTable/README.md +87 -0
- package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +14 -3
- package/dist/components/SKeyValueTable/index.d.ts +1 -1
- package/dist/components/SLayout/README.md +16 -0
- package/dist/components/SLayout/index.d.ts +1 -1
- package/dist/components/SLinearProgress/README.md +15 -0
- package/dist/components/SLinearProgress/SLinearProgress.d.ts +3 -0
- package/dist/components/SLinearProgress/index.d.ts +1 -1
- package/dist/components/SList/README.md +5 -1
- package/dist/components/SList/SList.d.ts +0 -2
- package/dist/components/SListItem/README.md +41 -0
- package/dist/components/SListItem/index.d.ts +1 -1
- package/dist/components/SLoadingModal/README.md +9 -1
- package/dist/components/SLoadingModal/SLoadingModal.d.ts +2 -2
- package/dist/components/SLoadingModal/index.d.ts +1 -1
- package/dist/components/SNumberInput/README.md +9 -1
- package/dist/components/SNumberInput/SNumberInput.d.ts +7 -1
- package/dist/components/SPage/README.md +41 -1
- package/dist/components/SPage/SPage.d.ts +24 -2
- package/dist/components/SPage/index.d.ts +1 -1
- package/dist/components/SPage/page.config.d.ts +8 -0
- package/dist/components/SPopover/README.md +15 -0
- package/dist/components/SPopup/README.md +19 -0
- package/dist/components/SPortal/README.md +14 -0
- package/dist/components/SRadio/README.md +20 -0
- package/dist/components/SRadioButton/README.md +18 -0
- package/dist/components/SRadioButton/SRadioButton.d.ts +1 -1
- package/dist/components/SRadioCard/README.md +78 -0
- package/dist/components/SRadioCard/SRadioCard.d.ts +29 -0
- package/dist/components/SRadioCard/SRadioCardGroup.d.ts +36 -0
- package/dist/components/SRadioCard/index.d.ts +2 -0
- package/dist/components/SScrollArea/README.md +14 -0
- package/dist/components/SSearchInput/README.md +63 -0
- package/dist/components/SSearchInput/SSearchInput.d.ts +52 -0
- package/dist/components/SSearchInput/index.d.ts +1 -0
- package/dist/components/SSectionHeaderCard/README.md +44 -20
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.d.ts +31 -14
- package/dist/components/SSectionHeaderCard/index.d.ts +1 -1
- package/dist/components/SSelect/README.md +24 -4
- package/dist/components/SSelect/SSelect.d.ts +14 -2
- package/dist/components/SSplitter/README.md +15 -0
- package/dist/components/SStepper/README.md +26 -0
- package/dist/components/SSwitch/README.md +13 -0
- package/dist/components/SSystemActionButton/README.md +134 -0
- package/dist/components/SSystemActionButton/SSystemActionButton.d.ts +79 -0
- package/dist/components/SSystemActionButton/index.d.ts +2 -0
- package/dist/components/SSystemActionButton/systemActionButton.config.d.ts +87 -0
- package/dist/components/STable/README.md +87 -1
- package/dist/components/STable/STable.d.ts +141 -11
- package/dist/components/STable/index.d.ts +1 -1
- package/dist/components/STabs/README.md +12 -1
- package/dist/components/STabs/STabs.d.ts +2 -4
- package/dist/components/STabs/index.d.ts +1 -1
- package/dist/components/STabs/tabs.config.d.ts +3 -4
- package/dist/components/STag/README.md +52 -0
- package/dist/components/STag/STag.d.ts +3 -1
- package/dist/components/STextLink/README.md +17 -0
- package/dist/components/STextLink/STextLink.d.ts +2 -0
- package/dist/components/STextarea/README.md +1 -1
- package/dist/components/STextarea/STextarea.d.ts +7 -1
- package/dist/components/STimePicker/README.md +15 -1
- package/dist/components/STimePicker/STimePicker.d.ts +7 -1
- package/dist/components/STimePicker/timepicker.config.d.ts +7 -0
- package/dist/components/STimeRangePicker/README.md +27 -1
- package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +7 -1
- package/dist/components/SToast/README.md +24 -0
- package/dist/components/SToggle/README.md +8 -0
- package/dist/components/SToggle/index.d.ts +1 -1
- package/dist/components/STooltip/README.md +22 -0
- package/dist/components/STree/README.md +41 -0
- package/dist/components/STree/STree.d.ts +8 -0
- package/dist/components/STree/index.d.ts +1 -1
- package/dist/index.cjs +5568 -1119
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +5542 -1119
- package/dist/index.js.map +1 -1
- package/dist/lib/field-width.d.ts +31 -0
- package/dist/lib/floating-height.d.ts +15 -0
- package/dist/lib/story-docs.d.ts +19 -3
- package/dist/lib/truncated-value-tooltip.d.ts +18 -0
- package/dist/llms-full.txt +2827 -167
- package/dist/llms.txt +621 -100
- package/dist/styles.css +1265 -139
- package/dist/theme.css +142 -16
- package/eslint/index.mjs +14 -0
- package/eslint/lib/table-column.mjs +26 -0
- package/eslint/rules/divider-vertical-height.mjs +137 -0
- package/eslint/rules/field-width-grade.d.mts +41 -0
- package/eslint/rules/field-width-grade.mjs +311 -0
- package/eslint/rules/table-column-width.mjs +110 -0
- package/eslint/scale.gen.mjs +5 -2
- package/package.json +11 -1
package/dist/theme.css
CHANGED
|
@@ -208,6 +208,7 @@
|
|
|
208
208
|
--color-field-icon-default: #888888;
|
|
209
209
|
--color-control-bg-inverseHover: #0075FF;
|
|
210
210
|
--color-navigation-gnb-bg-dark: #001B39;
|
|
211
|
+
--color-navigation-gnb-bg-system: #004177;
|
|
211
212
|
--color-primary-10: #EFF6FF;
|
|
212
213
|
--color-primary-20: #E6F1FF;
|
|
213
214
|
--color-primary-25: #D9EAFF;
|
|
@@ -328,15 +329,15 @@
|
|
|
328
329
|
--opacity-040: 40%;
|
|
329
330
|
--opacity-060: 60%;
|
|
330
331
|
--z-raised: 1;
|
|
331
|
-
--shadow-normal-xs: 0px 0px 16px -4px rgba(34,34,34,0.12), 2px
|
|
332
|
-
--shadow-normal-sm: 0px 0px 24px -6px rgba(34,34,34,0.12), 4px
|
|
333
|
-
--shadow-normal-md: 0px 8px 36px -6px rgba(34,34,34,0.16), 4px 12px
|
|
332
|
+
--shadow-normal-xs: 0px 0px 16px -4px rgba(34,34,34,0.12), 2px 2px 6px -2px rgba(34,34,34,0.16);
|
|
333
|
+
--shadow-normal-sm: 0px 0px 24px -6px rgba(34,34,34,0.12), 4px 4px 16px -4px rgba(34,34,34,0.2);
|
|
334
|
+
--shadow-normal-md: 0px 8px 36px -6px rgba(34,34,34,0.16), 4px 8px 12px -4px rgba(34,34,34,0.16);
|
|
334
335
|
--shadow-spread-sm: 0px 0px 8px 0px rgba(34,34,34,0.1);
|
|
335
336
|
--shadow-spread-md: 0px 0px 24px 0px rgba(34,34,34,0.2);
|
|
336
337
|
--shadow-focus: 0px 0px 8px 0px rgba(0,117,255,0.25);
|
|
337
|
-
--shadow-overlay: 0px 0px 16px -4px rgba(34,34,34,0.12), 2px
|
|
338
|
-
--shadow-floating: 0px 0px 24px -6px rgba(34,34,34,0.12), 4px
|
|
339
|
-
--shadow-dialog: 0px 8px 36px -6px rgba(34,34,34,0.16), 4px 12px
|
|
338
|
+
--shadow-overlay: 0px 0px 16px -4px rgba(34,34,34,0.12), 2px 2px 6px -2px rgba(34,34,34,0.16);
|
|
339
|
+
--shadow-floating: 0px 0px 24px -6px rgba(34,34,34,0.12), 4px 4px 16px -4px rgba(34,34,34,0.2);
|
|
340
|
+
--shadow-dialog: 0px 8px 36px -6px rgba(34,34,34,0.16), 4px 8px 12px -4px rgba(34,34,34,0.16);
|
|
340
341
|
}
|
|
341
342
|
|
|
342
343
|
/* 시맨틱 토큰 (별칭 해석값) — var()로 참조 */
|
|
@@ -497,6 +498,7 @@
|
|
|
497
498
|
--sys-color-field-icon-default: #888888;
|
|
498
499
|
--sys-color-control-bg-inverseHover: #0075FF;
|
|
499
500
|
--sys-color-navigation-gnb-bg-dark: #001B39;
|
|
501
|
+
--sys-color-navigation-gnb-bg-system: #004177;
|
|
500
502
|
|
|
501
503
|
/* 컴포넌트 토큰 */
|
|
502
504
|
--cmp-button-xs-height: 24px;
|
|
@@ -671,7 +673,10 @@
|
|
|
671
673
|
--cmp-radioButton-xs-paddingX: 8px;
|
|
672
674
|
--cmp-radioButton-sm-height: 28px;
|
|
673
675
|
--cmp-radioButton-sm-paddingX: 12px;
|
|
674
|
-
--cmp-radioButton-
|
|
676
|
+
--cmp-radioButton-md-height: 36px;
|
|
677
|
+
--cmp-radioButton-md-paddingX: 20px;
|
|
678
|
+
--cmp-radioButton-radius-sm: 4px;
|
|
679
|
+
--cmp-radioButton-radius-md: 6px;
|
|
675
680
|
--cmp-radioButton-border-width: 1px;
|
|
676
681
|
--cmp-radioButton-border-default: #CCCCCC;
|
|
677
682
|
--cmp-radioButton-border-select: #0075FF;
|
|
@@ -685,6 +690,22 @@
|
|
|
685
690
|
--cmp-radioButton-content-select: #0075FF;
|
|
686
691
|
--cmp-radioButton-content-disabled: #888888;
|
|
687
692
|
--cmp-radioButton-group-gap: -1px;
|
|
693
|
+
--cmp-radioCard-radius: 8px;
|
|
694
|
+
--cmp-radioCard-paddingX: 16px;
|
|
695
|
+
--cmp-radioCard-paddingY: 8px;
|
|
696
|
+
--cmp-radioCard-border-width: 1px;
|
|
697
|
+
--cmp-radioCard-border-default: #E1E1E1;
|
|
698
|
+
--cmp-radioCard-border-selected: #93C4FF;
|
|
699
|
+
--cmp-radioCard-border-hover: #AAAAAA;
|
|
700
|
+
--cmp-radioCard-bg-default: #FFFFFF;
|
|
701
|
+
--cmp-radioCard-bg-selected: #EFF6FF;
|
|
702
|
+
--cmp-radioCard-bg-hover: #F9F9F9;
|
|
703
|
+
--cmp-radioCard-bg-disabled: #EEEEEE;
|
|
704
|
+
--cmp-radioCard-gap: 8px;
|
|
705
|
+
--cmp-radioCard-label-color: #222222;
|
|
706
|
+
--cmp-radioCard-subtitle-paddingLeft: 24px;
|
|
707
|
+
--cmp-radioCard-subtitle-color: #555555;
|
|
708
|
+
--cmp-radioCard-group-gap: 8px;
|
|
688
709
|
--cmp-listBoxItem-paddingY: 4px;
|
|
689
710
|
--cmp-listBoxItem-paddingRight: 12px;
|
|
690
711
|
--cmp-listBoxItem-gap: 8px;
|
|
@@ -746,6 +767,11 @@
|
|
|
746
767
|
--cmp-field-errorMessage-color: #E30000;
|
|
747
768
|
--cmp-field-contents-gap: 4px;
|
|
748
769
|
--cmp-field-message-paddingX: 8px;
|
|
770
|
+
--cmp-field-width-xs: 80px;
|
|
771
|
+
--cmp-field-width-sm: 120px;
|
|
772
|
+
--cmp-field-width-md: 160px;
|
|
773
|
+
--cmp-field-width-lg: 240px;
|
|
774
|
+
--cmp-field-width-xl: 480px;
|
|
749
775
|
--cmp-textinput-sm-height: 28px;
|
|
750
776
|
--cmp-textinput-sm-paddingX: 12px;
|
|
751
777
|
--cmp-textinput-sm-paddingY: 4px;
|
|
@@ -971,20 +997,30 @@
|
|
|
971
997
|
--cmp-tag-md-radius: 8px;
|
|
972
998
|
--cmp-tag-red-content: #FB4444;
|
|
973
999
|
--cmp-tag-red-bg: #FCEFEF;
|
|
1000
|
+
--cmp-tag-red-deep-bg: #FB4444;
|
|
974
1001
|
--cmp-tag-orange-content: #FF6B00;
|
|
975
1002
|
--cmp-tag-orange-bg: #FEF1EA;
|
|
1003
|
+
--cmp-tag-orange-deep-bg: #FF6B00;
|
|
976
1004
|
--cmp-tag-yellow-content: #916C0D;
|
|
977
1005
|
--cmp-tag-yellow-bg: #FFF7DD;
|
|
1006
|
+
--cmp-tag-yellow-deep-bg: #FFC700;
|
|
1007
|
+
--cmp-tag-yellow-deep-content: #222222;
|
|
978
1008
|
--cmp-tag-green-content: #00973C;
|
|
979
1009
|
--cmp-tag-green-bg: #E8F9EF;
|
|
1010
|
+
--cmp-tag-green-deep-bg: #00973C;
|
|
980
1011
|
--cmp-tag-blue-content: #0075FF;
|
|
981
1012
|
--cmp-tag-blue-bg: #E6F1FF;
|
|
1013
|
+
--cmp-tag-blue-deep-bg: #0075FF;
|
|
982
1014
|
--cmp-tag-darkblue-content: #006AC1;
|
|
983
1015
|
--cmp-tag-darkblue-bg: #EAF5FE;
|
|
1016
|
+
--cmp-tag-darkblue-deep-bg: #006AC1;
|
|
984
1017
|
--cmp-tag-indigo-content: #004290;
|
|
985
1018
|
--cmp-tag-indigo-bg: #EFF6FF;
|
|
1019
|
+
--cmp-tag-indigo-deep-bg: #004290;
|
|
986
1020
|
--cmp-tag-grey-content: #737373;
|
|
987
1021
|
--cmp-tag-grey-bg: #EEEEEE;
|
|
1022
|
+
--cmp-tag-grey-deep-bg: #737373;
|
|
1023
|
+
--cmp-tag-deep-content: #FFFFFF;
|
|
988
1024
|
--cmp-tag-group-gap: 8px;
|
|
989
1025
|
--cmp-badge-size: 6px;
|
|
990
1026
|
--cmp-badge-radius: 9999px;
|
|
@@ -1149,8 +1185,10 @@
|
|
|
1149
1185
|
--cmp-guide-contents-typography-color: #222222;
|
|
1150
1186
|
--cmp-guide-contents-icon: #00973C;
|
|
1151
1187
|
--cmp-guide-contents-radius: 8px;
|
|
1152
|
-
--cmp-guide-contents-depth-paddingLeft:
|
|
1153
|
-
--cmp-progress-linear-height:
|
|
1188
|
+
--cmp-guide-contents-depth-paddingLeft: 24px;
|
|
1189
|
+
--cmp-progress-linear-height-xs: 12px;
|
|
1190
|
+
--cmp-progress-linear-height-sm: 20px;
|
|
1191
|
+
--cmp-progress-linear-height-md: 24px;
|
|
1154
1192
|
--cmp-progress-linear-radius: 9999px;
|
|
1155
1193
|
--cmp-progress-linear-gap: 12px;
|
|
1156
1194
|
--cmp-progress-circular-size: 80px;
|
|
@@ -1238,10 +1276,8 @@
|
|
|
1238
1276
|
--cmp-stepper-vertical-title-paddingTop: 12px;
|
|
1239
1277
|
--cmp-stepper-vertical-title-paddingBottom: 6px;
|
|
1240
1278
|
--cmp-stepper-vertical-title-text: #004290;
|
|
1241
|
-
--cmp-tab-main-
|
|
1242
|
-
--cmp-tab-main-
|
|
1243
|
-
--cmp-tab-main-md-height: 36px;
|
|
1244
|
-
--cmp-tab-main-md-paddingX: 24px;
|
|
1279
|
+
--cmp-tab-main-height: 36px;
|
|
1280
|
+
--cmp-tab-main-paddingX: 24px;
|
|
1245
1281
|
--cmp-tab-main-gap: 8px;
|
|
1246
1282
|
--cmp-tab-main-container-gap: 4px;
|
|
1247
1283
|
--cmp-tab-main-radius: 6px;
|
|
@@ -1310,6 +1346,86 @@
|
|
|
1310
1346
|
--cmp-gnb-rail-item-radius: 8px;
|
|
1311
1347
|
--cmp-gnb-rail-item-icon: 24px;
|
|
1312
1348
|
--cmp-gnb-rail-item-width: 44px;
|
|
1349
|
+
--cmp-gnb-system-panel-light-bg: #FFFFFF;
|
|
1350
|
+
--cmp-gnb-system-panel-light-border: #E1E1E1;
|
|
1351
|
+
--cmp-gnb-system-panel-dark-bg: #004177;
|
|
1352
|
+
--cmp-gnb-system-panel-dark-border: #006AC1;
|
|
1353
|
+
--cmp-gnb-system-panel-gap: 8px;
|
|
1354
|
+
--cmp-gnb-system-panel-divider-color-light: #E1E1E1;
|
|
1355
|
+
--cmp-gnb-system-panel-divider-color-dark: #006AC1;
|
|
1356
|
+
--cmp-gnb-system-panel-divider-color-darker: #004290;
|
|
1357
|
+
--cmp-gnb-system-domainTag-paddingX: 12px;
|
|
1358
|
+
--cmp-gnb-system-domainTag-paddingY: 2px;
|
|
1359
|
+
--cmp-gnb-system-domainTag-radius: 6px;
|
|
1360
|
+
--cmp-gnb-system-domainTag-light-bg: #F6F6F6;
|
|
1361
|
+
--cmp-gnb-system-domainTag-light-text: #555555;
|
|
1362
|
+
--cmp-gnb-system-domainTag-dark-bg: #07284A;
|
|
1363
|
+
--cmp-gnb-system-domainTag-dark-text: #FFFFFF;
|
|
1364
|
+
--cmp-gnb-system-domainTag-darker-bg: #004177;
|
|
1365
|
+
--cmp-gnb-system-domainTag-darker-text: #FFFFFF;
|
|
1366
|
+
--cmp-gnb-system-item-height: 32px;
|
|
1367
|
+
--cmp-gnb-system-item-radius: 8px;
|
|
1368
|
+
--cmp-gnb-system-item-icon-frame: 24px;
|
|
1369
|
+
--cmp-gnb-system-item-icon-glyph: 20px;
|
|
1370
|
+
--cmp-gnb-system-item-icon-radius: 4px;
|
|
1371
|
+
--cmp-gnb-system-item-iconLabelGap: 8px;
|
|
1372
|
+
--cmp-gnb-system-item-light-bg-default: #FFFFFF;
|
|
1373
|
+
--cmp-gnb-system-item-light-bg-hover: #F6F6F6;
|
|
1374
|
+
--cmp-gnb-system-item-light-icon-bg: #FFFFFF;
|
|
1375
|
+
--cmp-gnb-system-item-light-icon-default: #888888;
|
|
1376
|
+
--cmp-gnb-system-item-light-text: #222222;
|
|
1377
|
+
--cmp-gnb-system-item-dark-bg-default: #004177;
|
|
1378
|
+
--cmp-gnb-system-item-dark-bg-hover: #025497;
|
|
1379
|
+
--cmp-gnb-system-item-dark-icon-bg-default: #004177;
|
|
1380
|
+
--cmp-gnb-system-item-dark-icon-bg-hover: #FFFFFF;
|
|
1381
|
+
--cmp-gnb-system-item-dark-text: #FFFFFF;
|
|
1382
|
+
--cmp-gnb-system-item-darker-bg-default: #001B39;
|
|
1383
|
+
--cmp-gnb-system-item-darker-bg-hover: #002B5E;
|
|
1384
|
+
--cmp-gnb-system-item-darker-icon-bg-default: #001B39;
|
|
1385
|
+
--cmp-gnb-system-item-darker-icon-bg-hover: #FFFFFF;
|
|
1386
|
+
--cmp-gnb-system-item-darker-text: #FFFFFF;
|
|
1387
|
+
--cmp-gnb-system-actionButton-paddingLeft: 4px;
|
|
1388
|
+
--cmp-gnb-system-actionButton-paddingRight: 6px;
|
|
1389
|
+
--cmp-gnb-system-actionButton-selectData-gap: 4px;
|
|
1390
|
+
--cmp-gnb-system-actionButton-selectData-icon: 16px;
|
|
1391
|
+
--cmp-gnb-system-actionButton-selectData-text-light: #005CC9;
|
|
1392
|
+
--cmp-gnb-system-actionButton-selectData-text-dark: #BBDAFF;
|
|
1393
|
+
--cmp-gnb-system-actionButton-switch-icon: 16px;
|
|
1394
|
+
--cmp-gnb-system-actionButton-switch-text-light: #555555;
|
|
1395
|
+
--cmp-gnb-system-actionButton-switch-text-dark: #FFFFFF;
|
|
1396
|
+
--cmp-gnb-system-actionButton-select-icon: 16px;
|
|
1397
|
+
--cmp-gnb-system-accountButton-paddingY: 4px;
|
|
1398
|
+
--cmp-gnb-system-accountButton-paddingX: 12px;
|
|
1399
|
+
--cmp-gnb-system-accountButton-gap: 8px;
|
|
1400
|
+
--cmp-gnb-system-accountButton-icon: 16px;
|
|
1401
|
+
--cmp-gnb-system-accountButton-bg-default: #FFFFFF;
|
|
1402
|
+
--cmp-gnb-system-accountButton-bg-hover: #F6F6F6;
|
|
1403
|
+
--cmp-gnb-system-accountButton-bg-negativeHover: #FCEFEF;
|
|
1404
|
+
--cmp-gnb-system-accountButton-content-default: #222222;
|
|
1405
|
+
--cmp-gnb-system-accountButton-content-negative: #E30000;
|
|
1406
|
+
--cmp-gnb-system-accountButton-selectData-gap: 4px;
|
|
1407
|
+
--cmp-gnb-system-accountButton-selectData-icon: 16px;
|
|
1408
|
+
--cmp-gnb-system-accountButton-selectData-text: #005CC9;
|
|
1409
|
+
--cmp-gnb-system-accountListBox-width: 240px;
|
|
1410
|
+
--cmp-gnb-system-accountListBox-bg: #FFFFFF;
|
|
1411
|
+
--cmp-gnb-system-accountListBox-radius: 4px;
|
|
1412
|
+
--cmp-gnb-system-accountListBox-userdata-bg: #F9F9F9;
|
|
1413
|
+
--cmp-gnb-system-accountListBox-userdata-paddingX: 12px;
|
|
1414
|
+
--cmp-gnb-system-accountListBox-userdata-paddingY: 8px;
|
|
1415
|
+
--cmp-gnb-system-accountListBox-userdata-email-color: #888888;
|
|
1416
|
+
--cmp-gnb-system-accountListBox-userdata-name-color: #555555;
|
|
1417
|
+
--cmp-gnb-system-accountListBox-userdata-role-color: #888888;
|
|
1418
|
+
--cmp-gnb-system-accountListBox-list-paddingY: 4px;
|
|
1419
|
+
--cmp-gnb-system-alertButton-paddingX: 4px;
|
|
1420
|
+
--cmp-gnb-system-alertButton-count-color-light: #0075FF;
|
|
1421
|
+
--cmp-gnb-system-alertButton-count-color-dark: #FFD643;
|
|
1422
|
+
--cmp-gnb-system-alertButton-bg-notificationHover-light: #EFF6FF;
|
|
1423
|
+
--cmp-gnb-system-alertButton-icon-color-notification-light: #64ABFF;
|
|
1424
|
+
--cmp-gnb-system-alertButton-icon-color-notification-dark: #FEE17C;
|
|
1425
|
+
--cmp-gnb-system-setting-paddingX: 4px;
|
|
1426
|
+
--cmp-gnb-system-min-padding: 8px;
|
|
1427
|
+
--cmp-gnb-system-project-gap: 8px;
|
|
1428
|
+
--cmp-gnb-system-project-padding: 8px;
|
|
1313
1429
|
--cmp-list-group-gap: 8px;
|
|
1314
1430
|
--cmp-list-group-padding: 16px;
|
|
1315
1431
|
--cmp-listItem-paddingX: 16px;
|
|
@@ -1362,7 +1478,6 @@
|
|
|
1362
1478
|
--cmp-listDraggableItem-bordered-border-hover: #AAAAAA;
|
|
1363
1479
|
--cmp-listDraggableItem-bordered-dragging-bg: #EFF6FF;
|
|
1364
1480
|
--cmp-listDraggableItem-bordered-dragging-border-color: #2D8DFF;
|
|
1365
|
-
--cmp-listDraggableItem-bordered-dragging-border-width: 2px;
|
|
1366
1481
|
--cmp-listDraggableItem-border-default: #E1E1E1;
|
|
1367
1482
|
--cmp-listDraggableItem-border-width-default: 1px;
|
|
1368
1483
|
--cmp-listDraggableItem-text-default: #222222;
|
|
@@ -1397,9 +1512,8 @@
|
|
|
1397
1512
|
--cmp-tree-item-rowGap: 8px;
|
|
1398
1513
|
--cmp-tree-item-contentGap: 12px;
|
|
1399
1514
|
--cmp-tree-item-text-default: #222222;
|
|
1400
|
-
--cmp-tree-item-text-selected: #0075FF;
|
|
1401
1515
|
--cmp-tree-item-arrow-icon: 16px;
|
|
1402
|
-
--cmp-tree-connector-line-color: #
|
|
1516
|
+
--cmp-tree-connector-line-color: #E1E1E1;
|
|
1403
1517
|
--cmp-pageHeader-paddingX: 16px;
|
|
1404
1518
|
--cmp-pageHeader-gap: 12px;
|
|
1405
1519
|
--cmp-pageHeader-title-paddingLeft: 4px;
|
|
@@ -1559,6 +1673,12 @@
|
|
|
1559
1673
|
font-weight: 500;
|
|
1560
1674
|
line-height: 20px;
|
|
1561
1675
|
}
|
|
1676
|
+
.typo-body-sm-semibold {
|
|
1677
|
+
font-family: Pretendard Variable, Pretendard, -apple-system, BlinkMacSystemFont, system-ui, Segoe UI, Apple SD Gothic Neo, Noto Sans KR, Malgun Gothic, Apple Color Emoji, Segoe UI Emoji, sans-serif;
|
|
1678
|
+
font-size: 12px;
|
|
1679
|
+
font-weight: 600;
|
|
1680
|
+
line-height: 20px;
|
|
1681
|
+
}
|
|
1562
1682
|
.typo-body-sm-bold {
|
|
1563
1683
|
font-family: Pretendard Variable, Pretendard, -apple-system, BlinkMacSystemFont, system-ui, Segoe UI, Apple SD Gothic Neo, Noto Sans KR, Malgun Gothic, Apple Color Emoji, Segoe UI Emoji, sans-serif;
|
|
1564
1684
|
font-size: 12px;
|
|
@@ -1577,6 +1697,12 @@
|
|
|
1577
1697
|
font-weight: 500;
|
|
1578
1698
|
line-height: 24px;
|
|
1579
1699
|
}
|
|
1700
|
+
.typo-body-md-semibold {
|
|
1701
|
+
font-family: Pretendard Variable, Pretendard, -apple-system, BlinkMacSystemFont, system-ui, Segoe UI, Apple SD Gothic Neo, Noto Sans KR, Malgun Gothic, Apple Color Emoji, Segoe UI Emoji, sans-serif;
|
|
1702
|
+
font-size: 14px;
|
|
1703
|
+
font-weight: 600;
|
|
1704
|
+
line-height: 24px;
|
|
1705
|
+
}
|
|
1580
1706
|
.typo-body-md-bold {
|
|
1581
1707
|
font-family: Pretendard Variable, Pretendard, -apple-system, BlinkMacSystemFont, system-ui, Segoe UI, Apple SD Gothic Neo, Noto Sans KR, Malgun Gothic, Apple Color Emoji, Segoe UI Emoji, sans-serif;
|
|
1582
1708
|
font-size: 14px;
|
package/eslint/index.mjs
CHANGED
|
@@ -11,6 +11,9 @@ import preferTypoPreset from "./rules/prefer-typo-preset.mjs";
|
|
|
11
11
|
import tableNumericAlign from "./rules/table-numeric-align.mjs";
|
|
12
12
|
import requireLocaleNumber from "./rules/require-locale-number.mjs";
|
|
13
13
|
import componentGroupGap from "./rules/component-group-gap.mjs";
|
|
14
|
+
import fieldWidthGrade from "./rules/field-width-grade.mjs";
|
|
15
|
+
import tableColumnWidth from "./rules/table-column-width.mjs";
|
|
16
|
+
import dividerVerticalHeight from "./rules/divider-vertical-height.mjs";
|
|
14
17
|
|
|
15
18
|
const PLUGIN_NAME = "sellmate";
|
|
16
19
|
|
|
@@ -24,6 +27,9 @@ const plugin = {
|
|
|
24
27
|
"table-numeric-align": tableNumericAlign,
|
|
25
28
|
"require-locale-number": requireLocaleNumber,
|
|
26
29
|
"component-group-gap": componentGroupGap,
|
|
30
|
+
"field-width-grade": fieldWidthGrade,
|
|
31
|
+
"table-column-width": tableColumnWidth,
|
|
32
|
+
"divider-vertical-height": dividerVerticalHeight,
|
|
27
33
|
},
|
|
28
34
|
};
|
|
29
35
|
|
|
@@ -48,12 +54,18 @@ const recommended = [
|
|
|
48
54
|
[`${PLUGIN_NAME}/no-off-scale-spacing`]: "error",
|
|
49
55
|
// 생 <button>/<table> 은 디자인 시스템을 통째로 우회하는 것 (스타일 자유와 무관)
|
|
50
56
|
[`${PLUGIN_NAME}/no-raw-html-control`]: "error",
|
|
57
|
+
// 세로 SDivider 에 className 으로 높이를 주면 self-stretch 가 무효가 되어 선이 위로 솟는다
|
|
58
|
+
[`${PLUGIN_NAME}/divider-vertical-height`]: "error",
|
|
51
59
|
|
|
52
60
|
// 아래는 디자인 컨벤션 — 권고만 한다
|
|
53
61
|
[`${PLUGIN_NAME}/prefer-typo-preset`]: "warn",
|
|
54
62
|
[`${PLUGIN_NAME}/component-group-gap`]: "warn",
|
|
55
63
|
[`${PLUGIN_NAME}/table-numeric-align`]: "warn",
|
|
56
64
|
[`${PLUGIN_NAME}/require-locale-number`]: "warn",
|
|
65
|
+
// 폭 등급 환산이 아직 잠정치라 권고에 둔다 (디자인 확정표가 오면 error 승격 검토)
|
|
66
|
+
[`${PLUGIN_NAME}/field-width-grade`]: "warn",
|
|
67
|
+
// 컬럼 폭 — 폭 미지정(기본 120px)·스페이서 오용은 권고, % · clamp() 는 조용히 깨지므로 error
|
|
68
|
+
[`${PLUGIN_NAME}/table-column-width`]: "warn",
|
|
57
69
|
|
|
58
70
|
// 앱 고유 치수(w-[280px])·일회성 값에는 임의 값이 정당하다. 필요한 팀만 켠다.
|
|
59
71
|
[`${PLUGIN_NAME}/no-arbitrary-class`]: "off",
|
|
@@ -79,6 +91,8 @@ const strict = [
|
|
|
79
91
|
[`${PLUGIN_NAME}/component-group-gap`]: "error",
|
|
80
92
|
[`${PLUGIN_NAME}/table-numeric-align`]: "error",
|
|
81
93
|
[`${PLUGIN_NAME}/require-locale-number`]: "error",
|
|
94
|
+
[`${PLUGIN_NAME}/field-width-grade`]: "error",
|
|
95
|
+
[`${PLUGIN_NAME}/table-column-width`]: "error",
|
|
82
96
|
},
|
|
83
97
|
},
|
|
84
98
|
];
|
|
@@ -73,6 +73,32 @@ export function literalString(node) {
|
|
|
73
73
|
: undefined;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
/**
|
|
77
|
+
* STableColumn 자리인지 — `asColumn` 보다 넓게, 값을 그리지 않는 스페이서 열까지 본다.
|
|
78
|
+
*
|
|
79
|
+
* `name` · `label` 만으로는 판정하지 않는다. 소비 앱의 검색 필터 필드·상세 모달 키-값 필드가
|
|
80
|
+
* 정확히 같은 모양(`{ name, label, type, ... }`)이라, 그것만 보면 잡히는 것의 대부분이 표와
|
|
81
|
+
* 무관한 객체가 된다 — 실측에서 265건 중 261건이 오탐이었다.
|
|
82
|
+
*
|
|
83
|
+
* 그래서 `STableColumn` 타입의 판별 유니온을 그대로 옮긴다 — 값을 그리는 열은 `field` 를,
|
|
84
|
+
* 값을 그리지 않는 스페이서 열은 `autoWidth` 를 반드시 갖는다. 둘 다 없으면 컬럼이 아니다.
|
|
85
|
+
* 폭 규칙이 봐야 하는 스페이서 열은 `autoWidth` 쪽으로 그대로 들어온다.
|
|
86
|
+
*
|
|
87
|
+
* 놓치는 것: `{ ...base, name, label }` 처럼 `field` 가 스프레드로 들어오는 컬럼. 정적으로는
|
|
88
|
+
* 검색 필터 필드와 구분되지 않아 보고하지 않는다 (`asColumn` 을 쓰는 다른 두 규칙과 같은 한계).
|
|
89
|
+
* @returns {{ nameProp, labelProp, columnName: string | undefined } | null}
|
|
90
|
+
*/
|
|
91
|
+
export function asColumnShape(node) {
|
|
92
|
+
const nameProp = prop(node, "name");
|
|
93
|
+
const labelProp = prop(node, "label");
|
|
94
|
+
if (!nameProp || !labelProp) return null;
|
|
95
|
+
if (!prop(node, "field") && !prop(node, "autoWidth")) return null;
|
|
96
|
+
// name 이 문자열 리터럴이 아니면 컬럼 정의로 단정하지 않는다 (일반 객체 오탐 방지)
|
|
97
|
+
const columnName = literalString(nameProp);
|
|
98
|
+
if (columnName === undefined) return null;
|
|
99
|
+
return { nameProp, labelProp, columnName };
|
|
100
|
+
}
|
|
101
|
+
|
|
76
102
|
/**
|
|
77
103
|
* STableColumn 형태인지 — name·label·field 셋을 모두 가진 객체만 컬럼으로 본다.
|
|
78
104
|
* @returns {{ nameProp, labelProp, label: string } | null}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 세로 `SDivider` 의 높이를 `className="h-*"` 로 주면 정렬이 조용히 깨지는 것을 잡는다.
|
|
3
|
+
*
|
|
4
|
+
* 세로 분할선의 기본값은 `h-auto ... self-stretch` 라, 높이를 주지 않으면 부모 줄 높이를
|
|
5
|
+
* 그대로 채운다. 그런데 `align-self: stretch` 는 **교차축 크기가 auto 일 때만** 늘리므로
|
|
6
|
+
* className 으로 높이가 정해지는 순간 stretch 가 무효가 되고 flex-start 처럼 줄 맨 위에
|
|
7
|
+
* 붙는다. tailwind-merge 는 `h-auto` 만 교체하고 `self-stretch` 는 남기므로 경고도 없다.
|
|
8
|
+
*
|
|
9
|
+
* 높이와 정렬은 같이 정해져야 하는 값이라 컴포넌트가 함께 맡는다 — `height` prop 을 쓴다.
|
|
10
|
+
*
|
|
11
|
+
* <SDivider vertical height={20} /> // 높이 + self-center
|
|
12
|
+
* <SDivider vertical className="h-sd-20" /> // 위로 솟는다
|
|
13
|
+
*
|
|
14
|
+
* 정렬을 **직접 지정한 경우**(`self-center` `self-start` `my-auto` …)는 알고 쓰는 것으로
|
|
15
|
+
* 보고 잡지 않는다.
|
|
16
|
+
*
|
|
17
|
+
* AGENTS.md §3-6.
|
|
18
|
+
*/
|
|
19
|
+
import { collectClassTokens, stripVariants, stripModifiers } from "../lib/class-names.mjs";
|
|
20
|
+
|
|
21
|
+
/** 높이를 정하는 유틸리티인가 — `h-auto` 만 예외(기본값과 같아 stretch 가 살아 있다) */
|
|
22
|
+
function heightUtil(util) {
|
|
23
|
+
const m = /^h-(.+)$/.exec(util);
|
|
24
|
+
if (!m || m[1] === "auto") return null;
|
|
25
|
+
return m[1];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** 교차축 정렬을 이미 직접 지정했는가 */
|
|
29
|
+
function alignsSelf(util) {
|
|
30
|
+
return /^self-/.test(util) || util === "my-auto" || util === "mt-auto" || util === "mb-auto";
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* 높이 유틸리티 값을 `height` prop 값으로 옮긴다. 옮길 수 없으면 null (수정 제안 없음).
|
|
35
|
+
* h-sd-20 → {20}
|
|
36
|
+
* h-[20px] → {20}
|
|
37
|
+
* h-[var(--x)] → "var(--x)"
|
|
38
|
+
*/
|
|
39
|
+
function toHeightProp(value) {
|
|
40
|
+
const scaled = /^sd-(\d+)$/.exec(value);
|
|
41
|
+
if (scaled) return `{${scaled[1]}}`;
|
|
42
|
+
const arbitrary = /^\[(.+)\]$/.exec(value);
|
|
43
|
+
if (!arbitrary) return null;
|
|
44
|
+
const inner = arbitrary[1].replace(/_/g, " ");
|
|
45
|
+
const px = /^(\d+(?:\.\d+)?)px$/.exec(inner);
|
|
46
|
+
if (px) return `{${px[1]}}`;
|
|
47
|
+
if (inner.includes('"')) return null;
|
|
48
|
+
return `"${inner}"`;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const isClassAttr = (a) =>
|
|
52
|
+
a.type === "JSXAttribute" && (a.name?.name === "className" || a.name?.name === "class");
|
|
53
|
+
|
|
54
|
+
export default {
|
|
55
|
+
meta: {
|
|
56
|
+
type: "problem",
|
|
57
|
+
docs: {
|
|
58
|
+
description: "세로 SDivider 의 높이는 className 이 아니라 height prop 으로 지정",
|
|
59
|
+
},
|
|
60
|
+
schema: [],
|
|
61
|
+
messages: {
|
|
62
|
+
useHeightProp:
|
|
63
|
+
"세로 SDivider 의 높이는 `height` prop 으로 주세요{{suggestion}} — `className` 으로 주면 `align-self: stretch` 가 무효가 되어 선이 줄 맨 위에 붙습니다. (AGENTS.md §3-6)",
|
|
64
|
+
},
|
|
65
|
+
fixable: "code",
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
create(context) {
|
|
69
|
+
return {
|
|
70
|
+
JSXOpeningElement(node) {
|
|
71
|
+
if (node.name.type !== "JSXIdentifier" || node.name.name !== "SDivider") return;
|
|
72
|
+
|
|
73
|
+
const attrs = node.attributes;
|
|
74
|
+
const named = (n) => attrs.find((a) => a.type === "JSXAttribute" && a.name?.name === n);
|
|
75
|
+
|
|
76
|
+
// 세로 분할선만 대상. `vertical={expr}` 처럼 값이 정적이지 않으면 판단하지 않는다.
|
|
77
|
+
const vertical = named("vertical");
|
|
78
|
+
if (!vertical) return;
|
|
79
|
+
if (vertical.value !== null && vertical.value?.expression?.value !== true) return;
|
|
80
|
+
|
|
81
|
+
// 이미 height prop 을 쓰고 있으면 컴포넌트가 정렬까지 맡는다
|
|
82
|
+
if (named("height")) return;
|
|
83
|
+
|
|
84
|
+
const classAttr = attrs.find(isClassAttr);
|
|
85
|
+
if (!classAttr) return;
|
|
86
|
+
|
|
87
|
+
const tokens = collectClassTokens(classAttr);
|
|
88
|
+
let height = null;
|
|
89
|
+
for (const { token } of tokens) {
|
|
90
|
+
const util = stripModifiers(stripVariants(token));
|
|
91
|
+
if (alignsSelf(util)) return; // 정렬을 직접 정했다 — 의도한 것으로 본다
|
|
92
|
+
// variant 가 붙은 높이(`md:h-sd-20`)는 prop 으로 옮길 수 없어 판단에서 뺀다
|
|
93
|
+
if (height === null && token === util) height = heightUtil(util);
|
|
94
|
+
}
|
|
95
|
+
if (height === null) return;
|
|
96
|
+
|
|
97
|
+
const propValue = toHeightProp(height);
|
|
98
|
+
|
|
99
|
+
context.report({
|
|
100
|
+
node,
|
|
101
|
+
messageId: "useHeightProp",
|
|
102
|
+
data: { suggestion: propValue ? ` (\`height=${propValue}\`)` : "" },
|
|
103
|
+
fix(fixer) {
|
|
104
|
+
if (!propValue) return null;
|
|
105
|
+
// className 이 통짜 문자열일 때만 안전하게 손댄다 (cn()·템플릿 리터럴은 제외)
|
|
106
|
+
const raw =
|
|
107
|
+
classAttr.value?.type === "Literal"
|
|
108
|
+
? classAttr.value
|
|
109
|
+
: classAttr.value?.type === "JSXExpressionContainer" &&
|
|
110
|
+
classAttr.value.expression.type === "Literal"
|
|
111
|
+
? classAttr.value.expression
|
|
112
|
+
: null;
|
|
113
|
+
if (!raw || typeof raw.value !== "string") return null;
|
|
114
|
+
|
|
115
|
+
const rest = raw.value
|
|
116
|
+
.split(/\s+/)
|
|
117
|
+
.filter(Boolean)
|
|
118
|
+
.filter((t) => t !== `h-${height}`);
|
|
119
|
+
if (rest.length === raw.value.split(/\s+/).filter(Boolean).length) return null;
|
|
120
|
+
|
|
121
|
+
const fixes = [fixer.insertTextAfter(vertical, ` height=${propValue}`)];
|
|
122
|
+
if (rest.length > 0) {
|
|
123
|
+
fixes.push(fixer.replaceText(raw, `"${rest.join(" ")}"`));
|
|
124
|
+
} else {
|
|
125
|
+
// 속성만 지우면 공백이 두 칸 남는다 — 앞 공백까지 함께 지운다
|
|
126
|
+
const src = context.sourceCode ?? context.getSourceCode();
|
|
127
|
+
const [start, end] = classAttr.range;
|
|
128
|
+
const from = /\s/.test(src.text[start - 1]) ? start - 1 : start;
|
|
129
|
+
fixes.push(fixer.removeRange([from, end]));
|
|
130
|
+
}
|
|
131
|
+
return fixes;
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
},
|
|
137
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* playground 의 실측 페이지(FieldWidthGradePage)가 규칙과 같은 계산을 쓰기 위한 타입 선언.
|
|
3
|
+
* 규칙 본체는 소비 앱이 그대로 실행하는 plain ESM 이라 .mjs 로 두고, 타입만 여기에 붙인다.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export type FieldGrade = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
7
|
+
export type FieldSize = 'sm' | 'md';
|
|
8
|
+
|
|
9
|
+
export interface FieldComponentSpec {
|
|
10
|
+
/** 스키마 상한을 담는 prop — 숫자 필드는 maxLength 가 아니라 max 다 */
|
|
11
|
+
lengthProp: 'maxLength' | 'max';
|
|
12
|
+
font: Record<FieldSize, number>;
|
|
13
|
+
/** 글자가 쓸 수 없는 폭의 합 (좌우 패딩 · 테두리 · 스테퍼) */
|
|
14
|
+
chrome: Record<FieldSize, number>;
|
|
15
|
+
/** 한글이 들어갈 수 있는가 */
|
|
16
|
+
korean: boolean;
|
|
17
|
+
grades: FieldGrade[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export declare const GRADES: Record<FieldGrade, number>;
|
|
21
|
+
export declare const CHAR_RATIO: { narrow: number; wide: number };
|
|
22
|
+
export declare const COMPONENTS: Record<string, FieldComponentSpec>;
|
|
23
|
+
|
|
24
|
+
export declare function capacity(
|
|
25
|
+
spec: FieldComponentSpec,
|
|
26
|
+
size: FieldSize,
|
|
27
|
+
grade: FieldGrade,
|
|
28
|
+
ratio: number,
|
|
29
|
+
grades?: Record<FieldGrade, number>,
|
|
30
|
+
): number;
|
|
31
|
+
|
|
32
|
+
export declare function smallestGradeFor(
|
|
33
|
+
spec: FieldComponentSpec,
|
|
34
|
+
size: FieldSize,
|
|
35
|
+
len: number,
|
|
36
|
+
ratio: number,
|
|
37
|
+
grades?: Record<FieldGrade, number>,
|
|
38
|
+
): FieldGrade | undefined;
|
|
39
|
+
|
|
40
|
+
declare const rule: unknown;
|
|
41
|
+
export default rule;
|