sellmate-design-system-react 2.2.0 → 3.1.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/AGENTS.md +661 -0
- package/README.md +85 -0
- package/dist/components/SActionModal/README.md +41 -0
- package/dist/components/SBadge/README.md +25 -0
- package/dist/components/SBarcodeInput/README.md +64 -0
- package/dist/components/SButton/README.md +49 -0
- package/dist/components/SCalendar/README.md +42 -0
- package/dist/components/SCallout/README.md +29 -0
- package/dist/components/SCallout/SCallout.cjs +76 -1
- package/dist/components/SCallout/SCallout.cjs.map +1 -1
- package/dist/components/SCallout/SCallout.d.ts +6 -2
- package/dist/components/SCallout/SCallout.js +76 -1
- package/dist/components/SCallout/SCallout.js.map +1 -1
- package/dist/components/SCard/README.md +12 -0
- package/dist/components/SCheckbox/README.md +44 -0
- package/dist/components/SChip/README.md +57 -0
- package/dist/components/SChipInput/README.md +77 -0
- package/dist/components/SCircleProgress/README.md +35 -0
- package/dist/components/SConfirmModal/README.md +61 -0
- package/dist/components/SDatePicker/README.md +62 -0
- package/dist/components/SDateRangePicker/README.md +64 -0
- package/dist/components/SDivider/README.md +25 -0
- package/dist/components/SDraggableItem/README.md +40 -0
- package/dist/components/SDraggableItem/SDraggableItem.cjs +3079 -0
- package/dist/components/SDraggableItem/SDraggableItem.cjs.map +1 -0
- package/dist/components/SDraggableItem/SDraggableItem.d.ts +33 -0
- package/dist/components/SDraggableItem/SDraggableItem.js +3077 -0
- package/dist/components/SDraggableItem/SDraggableItem.js.map +1 -0
- package/dist/components/SDraggableItem/index.d.ts +1 -0
- package/dist/components/SDropdownButton/README.md +50 -0
- package/dist/components/SExpansionItem/README.md +40 -0
- package/dist/components/SExpansionItem/SExpansionItem.cjs +6 -15
- package/dist/components/SExpansionItem/SExpansionItem.cjs.map +1 -1
- package/dist/components/SExpansionItem/SExpansionItem.js +6 -15
- package/dist/components/SExpansionItem/SExpansionItem.js.map +1 -1
- package/dist/components/SField/README.md +91 -0
- package/dist/components/SFilePicker/README.md +72 -0
- package/dist/components/SForm/README.md +31 -0
- package/dist/components/SGhostButton/README.md +76 -0
- package/dist/components/SGnb/README.md +56 -0
- package/dist/components/SGuide/README.md +34 -0
- package/dist/components/SIcon/README.md +91 -0
- package/dist/components/SInput/README.md +66 -0
- package/dist/components/SKeyValueTable/README.md +59 -0
- package/dist/components/SLayout/README.md +42 -0
- package/dist/components/SLinearProgress/README.md +17 -0
- package/dist/components/SList/README.md +14 -0
- package/dist/components/SList/SList.cjs +38 -0
- package/dist/components/SList/SList.cjs.map +1 -0
- package/dist/components/SList/SList.d.ts +10 -0
- package/dist/components/SList/SList.js +36 -0
- package/dist/components/SList/SList.js.map +1 -0
- package/dist/components/SList/index.d.ts +1 -0
- package/dist/components/SListItem/README.md +19 -0
- package/dist/components/SListItem/SListItem.cjs +83 -0
- package/dist/components/SListItem/SListItem.cjs.map +1 -0
- package/dist/components/SListItem/SListItem.d.ts +26 -0
- package/dist/components/SListItem/SListItem.js +81 -0
- package/dist/components/SListItem/SListItem.js.map +1 -0
- package/dist/components/SListItem/index.d.ts +1 -0
- package/dist/components/SLoadingContainer/README.md +29 -0
- package/dist/components/SLoadingModal/README.md +52 -0
- package/dist/components/SModal/README.md +192 -0
- package/dist/components/SModalContainer/README.md +49 -0
- package/dist/components/SNumberInput/README.md +74 -0
- package/dist/components/SPage/README.md +25 -0
- package/dist/components/SPagination/README.md +40 -0
- package/dist/components/SPopover/README.md +54 -0
- package/dist/components/SPopup/README.md +38 -0
- package/dist/components/SPortal/README.md +51 -0
- package/dist/components/SRadio/README.md +57 -0
- package/dist/components/SRadioButton/README.md +24 -0
- package/dist/components/SScrollArea/README.md +16 -0
- package/dist/components/SSectionHeaderCard/README.md +51 -0
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.cjs +3414 -0
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.cjs.map +1 -0
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.d.ts +32 -0
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.js +3392 -0
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.js.map +1 -0
- package/dist/components/SSectionHeaderCard/index.d.ts +1 -0
- package/dist/components/SSelect/README.md +79 -0
- package/dist/components/SStepper/README.md +30 -0
- package/dist/components/SSwitch/README.md +24 -0
- package/dist/components/STable/README.md +82 -0
- package/dist/components/STableBar/README.md +28 -0
- package/dist/components/STabs/README.md +37 -0
- package/dist/components/STag/README.md +44 -0
- package/dist/components/STextLink/README.md +48 -0
- package/dist/components/STextarea/README.md +60 -0
- package/dist/components/STimePicker/README.md +65 -0
- package/dist/components/STimeRangePicker/README.md +63 -0
- package/dist/components/SToast/README.md +70 -0
- package/dist/components/SToggle/README.md +22 -0
- package/dist/components/STooltip/README.md +57 -0
- package/dist/index.cjs +815 -419
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +815 -423
- package/dist/index.js.map +1 -1
- package/dist/llms.txt +3496 -0
- package/dist/styles.css +545 -19
- package/dist/theme.css +22 -0
- package/eslint/index.mjs +66 -0
- package/eslint/lib/class-names.mjs +119 -0
- package/eslint/lib/table-column.mjs +53 -0
- package/eslint/rules/no-arbitrary-class.mjs +91 -0
- package/eslint/rules/no-off-scale-spacing.mjs +67 -0
- package/eslint/rules/no-raw-html-control.mjs +117 -0
- package/eslint/rules/prefer-typo-preset.mjs +73 -0
- package/eslint/rules/require-locale-number.mjs +78 -0
- package/eslint/rules/table-numeric-align.mjs +93 -0
- package/eslint/scale.gen.mjs +16 -0
- package/package.json +9 -4
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 숫자 컬럼은 예외 없이 `toLocaleString()` 으로 세 자리 콤마를 넣도록 강제한다.
|
|
3
|
+
*
|
|
4
|
+
* 전화번호·사업자번호처럼 하이픈이 들어가는 값은 숫자가 아니라 서식이 정해진
|
|
5
|
+
* 문자열이므로 대상에서 뺀다. 그 밖에 예외가 필요하면 `allow` 로 컬럼을 지정한다.
|
|
6
|
+
*
|
|
7
|
+
* AGENTS.md §1-4 / §3-4.
|
|
8
|
+
*/
|
|
9
|
+
import {
|
|
10
|
+
NUMERIC_LABEL,
|
|
11
|
+
IDENTIFIER_ONLY,
|
|
12
|
+
prop,
|
|
13
|
+
asColumn,
|
|
14
|
+
} from "../lib/table-column.mjs";
|
|
15
|
+
|
|
16
|
+
export default {
|
|
17
|
+
meta: {
|
|
18
|
+
type: "problem",
|
|
19
|
+
docs: {
|
|
20
|
+
description: "금액·수량 등 숫자 표시에 toLocaleString 사용",
|
|
21
|
+
},
|
|
22
|
+
schema: [
|
|
23
|
+
{
|
|
24
|
+
type: "object",
|
|
25
|
+
properties: {
|
|
26
|
+
/** 검사에서 뺄 컬럼 name */
|
|
27
|
+
allow: { type: "array", items: { type: "string" }, uniqueItems: true },
|
|
28
|
+
},
|
|
29
|
+
additionalProperties: false,
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
messages: {
|
|
33
|
+
missingFormat:
|
|
34
|
+
"숫자 컬럼 `{{label}}` 에 format 이 없습니다. `format: (v) => `${Number(v).toLocaleString()}{{unit}}`` 처럼 세 자리 구분을 넣으세요. (AGENTS.md §1-4)",
|
|
35
|
+
missingLocale:
|
|
36
|
+
"숫자 컬럼 `{{label}}` 의 format 이 toLocaleString 을 쓰지 않습니다. 세 자리 구분 없이 표시됩니다. (AGENTS.md §1-4)",
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
create(context) {
|
|
41
|
+
const allow = new Set(context.options[0]?.allow ?? []);
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
ObjectExpression(node) {
|
|
45
|
+
const column = asColumn(node);
|
|
46
|
+
if (!column) return;
|
|
47
|
+
|
|
48
|
+
const { labelProp, label, columnName } = column;
|
|
49
|
+
if (columnName && allow.has(columnName)) return;
|
|
50
|
+
|
|
51
|
+
// 숫자 컬럼이면 모두 대상 — 하이픈 서식 문자열(전화번호 등)만 뺀다
|
|
52
|
+
if (!NUMERIC_LABEL.test(label) || IDENTIFIER_ONLY.test(label)) return;
|
|
53
|
+
|
|
54
|
+
// render 로 셀을 직접 그리는 경우는 이 규칙이 판단하지 않는다
|
|
55
|
+
if (prop(node, "render")) return;
|
|
56
|
+
|
|
57
|
+
const unit = /금액|가격|단가|판매가|원가|비용|수수료|배송비|할인|합계|총액|잔액/.test(label)
|
|
58
|
+
? "원"
|
|
59
|
+
: "";
|
|
60
|
+
|
|
61
|
+
const formatProp = prop(node, "format");
|
|
62
|
+
if (!formatProp) {
|
|
63
|
+
context.report({
|
|
64
|
+
node: labelProp,
|
|
65
|
+
messageId: "missingFormat",
|
|
66
|
+
data: { label, unit },
|
|
67
|
+
});
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const src = context.sourceCode.getText(formatProp);
|
|
72
|
+
if (!src.includes("toLocaleString")) {
|
|
73
|
+
context.report({ node: formatProp, messageId: "missingLocale", data: { label } });
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 숫자 컬럼이 오른쪽 정렬(`align: 'right'`)인지 검사한다.
|
|
3
|
+
*
|
|
4
|
+
* 자릿수가 세로로 맞아야 값의 크기를 비교할 수 있으므로,
|
|
5
|
+
* 금액·수량·개수처럼 숫자가 들어가는 컬럼은 예외 없이 오른쪽 정렬한다.
|
|
6
|
+
*
|
|
7
|
+
* 대상은 `name` · `label` · `field` 를 모두 가진 객체 리터럴(= STableColumn 형태)뿐이라
|
|
8
|
+
* 일반 객체를 오탐하지 않는다.
|
|
9
|
+
*
|
|
10
|
+
* AGENTS.md §3-4.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
NUMERIC_LABEL,
|
|
15
|
+
IDENTIFIER_ONLY,
|
|
16
|
+
NUMERIC_FORMAT,
|
|
17
|
+
prop,
|
|
18
|
+
literalString,
|
|
19
|
+
asColumn,
|
|
20
|
+
} from "../lib/table-column.mjs";
|
|
21
|
+
|
|
22
|
+
export default {
|
|
23
|
+
meta: {
|
|
24
|
+
type: "problem",
|
|
25
|
+
docs: {
|
|
26
|
+
description: "테이블의 숫자 컬럼은 오른쪽 정렬",
|
|
27
|
+
},
|
|
28
|
+
schema: [
|
|
29
|
+
{
|
|
30
|
+
type: "object",
|
|
31
|
+
properties: {
|
|
32
|
+
/** 검사에서 뺄 컬럼 name */
|
|
33
|
+
allow: { type: "array", items: { type: "string" }, uniqueItems: true },
|
|
34
|
+
},
|
|
35
|
+
additionalProperties: false,
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
messages: {
|
|
39
|
+
needsRight:
|
|
40
|
+
"숫자 컬럼 `{{label}}` 은 `align: 'right'` 로 오른쪽 정렬해야 합니다{{reason}}. (AGENTS.md §3-4)",
|
|
41
|
+
},
|
|
42
|
+
fixable: "code",
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
create(context) {
|
|
46
|
+
const allow = new Set(context.options[0]?.allow ?? []);
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
ObjectExpression(node) {
|
|
50
|
+
const column = asColumn(node);
|
|
51
|
+
if (!column) return;
|
|
52
|
+
|
|
53
|
+
const { labelProp, label, columnName } = column;
|
|
54
|
+
if (columnName && allow.has(columnName)) return;
|
|
55
|
+
|
|
56
|
+
// 숫자 판정 — label 키워드 또는 format 의 숫자 서식
|
|
57
|
+
let reason = "";
|
|
58
|
+
let numeric = false;
|
|
59
|
+
|
|
60
|
+
if (NUMERIC_LABEL.test(label) && !IDENTIFIER_ONLY.test(label)) {
|
|
61
|
+
numeric = true;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const formatProp = prop(node, "format");
|
|
65
|
+
if (formatProp) {
|
|
66
|
+
const src = context.sourceCode.getText(formatProp);
|
|
67
|
+
if (NUMERIC_FORMAT.test(src)) {
|
|
68
|
+
numeric = true;
|
|
69
|
+
reason = " (format 이 숫자를 서식화하고 있습니다)";
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!numeric) return;
|
|
74
|
+
|
|
75
|
+
const alignProp = prop(node, "align");
|
|
76
|
+
if (literalString(alignProp) === "right") return;
|
|
77
|
+
|
|
78
|
+
context.report({
|
|
79
|
+
node: alignProp ?? labelProp,
|
|
80
|
+
messageId: "needsRight",
|
|
81
|
+
data: { label, reason },
|
|
82
|
+
fix(fixer) {
|
|
83
|
+
if (alignProp) {
|
|
84
|
+
return fixer.replaceText(alignProp.value, "'right'");
|
|
85
|
+
}
|
|
86
|
+
// align 이 없으면 label 뒤에 추가한다
|
|
87
|
+
return fixer.insertTextAfter(labelProp, ", align: 'right'");
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/* 자동 생성: npm run build (scripts/gen-eslint-scale.mjs). 직접 수정 금지. */
|
|
2
|
+
|
|
3
|
+
/** gap-*, p-*, m-* 등 간격 유틸리티가 받을 수 있는 값 (px) */
|
|
4
|
+
export const SPACING = [2,4,6,8,10,12,16,19,20,22,24,28,32,36,40,44,48,56,60,62,80];
|
|
5
|
+
|
|
6
|
+
/** text-* 숫자 유틸리티가 받을 수 있는 값 (px) */
|
|
7
|
+
export const TEXT_SIZES = [10,11,12,13,14,16,18,20,24,28,32];
|
|
8
|
+
|
|
9
|
+
/** rounded-* 가 받을 수 있는 키 */
|
|
10
|
+
export const RADIUS = ["2","4","6","8","full","control-sm","control-md","feedback-xs-square","feedback-sm-square","feedback-pill","field-sm","field-md","navigation","item-bordered"];
|
|
11
|
+
|
|
12
|
+
/** 타이포그래피 프리셋 클래스 */
|
|
13
|
+
export const TYPO_PRESETS = ["typo-body-lg-bold","typo-body-lg-default","typo-body-lg-medium","typo-body-md-bold","typo-body-md-default","typo-body-md-medium","typo-body-sm-bold","typo-body-sm-default","typo-body-sm-medium","typo-body-xs-default","typo-control-lg","typo-control-md-default","typo-control-md-underline","typo-control-sm-default","typo-control-sm-underline","typo-control-xs-bold","typo-control-xs-default","typo-control-xs-medium","typo-control-xs-underline","typo-feedback-md-bold","typo-feedback-md-medium","typo-feedback-md-underline","typo-feedback-sm-bold","typo-feedback-sm-medium","typo-feedback-sm-regular","typo-feedback-sm-underline","typo-feedback-xs","typo-field-lg-bold","typo-field-lg-default","typo-field-lg-medium","typo-field-md-bold","typo-field-md-default","typo-field-md-medium","typo-field-sm-bold","typo-field-sm-default","typo-field-sm-medium","typo-field-xs-default","typo-heading-lg","typo-heading-md","typo-heading-sm","typo-heading-xs","typo-navigation-lg-bold","typo-navigation-lg-medium","typo-navigation-md-bold","typo-navigation-sm-bold","typo-navigation-sm-default","typo-navigation-sm-medium","typo-navigation-xs-bold","typo-navigation-xs-medium","typo-table-accent","typo-table-body","typo-table-header"];
|
|
14
|
+
|
|
15
|
+
/** 색상 유틸리티 키 (text-*, bg-*, border-* 공통) */
|
|
16
|
+
export const COLORS = ["bg-accent","bg-accentBright","bg-accentFaint","bg-accentLight","bg-brand","bg-caution","bg-danger","bg-dangerLight","bg-deep","bg-frame","bg-neutralBright","bg-neutralLight","bg-progress","bg-screen","bg-subtle","bg-success","bg-successLight","bg-tableHeader","bg-warning","black","blue-strong","blue-subtle","border-accent","border-accentLight","border-danger","border-default","border-strong","border-success","brilliantblue-05","brilliantblue-10","brilliantblue-20","brilliantblue-25","brilliantblue-40","brilliantblue-50","brilliantblue-60","brilliantblue-70","brilliantblue-75","brilliantblue-80","brilliantblue-85","brilliantblue-90","brilliantblue-95","brilliantblue-99","control-bg-inverseHover","danger-15","danger-20","danger-30","danger-45","danger-60","danger-70","danger-75","danger-80","danger-85","danger-90","danger-95","danger-99","danger-strong","danger-subtle","darkblue-strong","darkblue-subtle","disabled-bg","disabled-border","disabled-icon","disabled-text","divider-default","fg-accent","fg-accentLight","fg-brand","fg-danger","fg-dangerLight","fg-deep","fg-inverse","fg-primary","fg-quaternary","fg-secondary","fg-subtleCool","fg-subtleWarm","fg-success","fg-tertiary","fg-warning","field-bg-default","field-bg-hover","field-bg-readOnly","field-border-danger","field-border-default","field-border-focus","field-border-hover","field-border-success","field-icon-default","field-text-default","field-text-placeholder","field-text-readOnly","green-15","green-25","green-45","green-55","green-65","green-70","green-75","green-80","green-85","green-90","green-95","green-99","green-strong","green-subtle","grey-05","grey-10","grey-20","grey-25","grey-30","grey-35","grey-45","grey-50","grey-55","grey-60","grey-65","grey-70","grey-80","grey-85","grey-90","grey-95","grey-strong","grey-subtle","indigo-strong","indigo-subtle","lightblue-strong","lightblue-subtle","link-accent","navigation-gnb-bg-dark","oceanblue-15","oceanblue-25","oceanblue-50","oceanblue-60","oceanblue-65","oceanblue-70","oceanblue-75","oceanblue-80","oceanblue-85","oceanblue-90","oceanblue-95","oceanblue-99","olive-05","olive-10","olive-15","olive-20","olive-30","olive-45","olive-55","olive-65","olive-70","olive-80","olive-90","olive-95","orange-10","orange-20","orange-35","orange-45","orange-55","orange-60","orange-65","orange-75","orange-85","orange-90","orange-95","orange-99","orange-strong","orange-subtle","primary-05","primary-10","primary-20","primary-25","primary-40","primary-50","primary-60","primary-70","primary-75","primary-80","primary-85","primary-90","primary-95","primary-99","red-15","red-20","red-30","red-45","red-60","red-70","red-75","red-80","red-85","red-90","red-95","red-99","red-strong","red-subtle","steelblue-10","steelblue-25","steelblue-45","steelblue-60","steelblue-65","steelblue-70","steelblue-75","steelblue-80","steelblue-85","steelblue-90","steelblue-95","steelblue-99","success-15","success-25","success-45","success-55","success-65","success-70","success-75","success-80","success-85","success-90","success-95","success-99","success-strong","success-subtle","warning-10","warning-20","warning-35","warning-45","warning-55","warning-60","warning-65","warning-75","warning-85","warning-90","warning-95","warning-99","warning-strong","warning-subtle","white","yellow-10","yellow-20","yellow-25","yellow-30","yellow-40","yellow-45","yellow-50","yellow-60","yellow-70","yellow-80","yellow-90","yellow-95","yellow-moderate","yellow-strong","yellow-subtle"];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sellmate-design-system-react",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Sellmate Design System — React (TypeScript + Tailwind v4) port",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"keywords": [
|
|
@@ -16,7 +16,10 @@
|
|
|
16
16
|
"**/*.css"
|
|
17
17
|
],
|
|
18
18
|
"files": [
|
|
19
|
-
"dist"
|
|
19
|
+
"dist",
|
|
20
|
+
"eslint",
|
|
21
|
+
"!eslint/__tests__",
|
|
22
|
+
"AGENTS.md"
|
|
20
23
|
],
|
|
21
24
|
"exports": {
|
|
22
25
|
".": {
|
|
@@ -25,7 +28,8 @@
|
|
|
25
28
|
"require": "./dist/index.cjs"
|
|
26
29
|
},
|
|
27
30
|
"./theme.css": "./dist/theme.css",
|
|
28
|
-
"./styles.css": "./dist/styles.css"
|
|
31
|
+
"./styles.css": "./dist/styles.css",
|
|
32
|
+
"./eslint": "./eslint/index.mjs"
|
|
29
33
|
},
|
|
30
34
|
"main": "./dist/index.cjs",
|
|
31
35
|
"module": "./dist/index.js",
|
|
@@ -33,7 +37,7 @@
|
|
|
33
37
|
"scripts": {
|
|
34
38
|
"prepublishOnly": "node scripts/guard-publish-branch.mjs",
|
|
35
39
|
"prepack": "npm run build",
|
|
36
|
-
"build": "npm run gen:tokens && tsup && node scripts/preserve-directives.mjs && npm run build:dts && npm run build:css",
|
|
40
|
+
"build": "npm run gen:tokens && tsup && node scripts/preserve-directives.mjs && npm run build:dts && npm run build:css && node scripts/copy-docs.mjs && node scripts/gen-eslint-scale.mjs && node scripts/gen-llms.mjs",
|
|
37
41
|
"build:dts": "tsc -p tsconfig.build.json --emitDeclarationOnly",
|
|
38
42
|
"gen:tokens": "node scripts/generate-tokens.mjs",
|
|
39
43
|
"docs:gen": "node scripts/gen-docs.mjs",
|
|
@@ -46,6 +50,7 @@
|
|
|
46
50
|
"storybook": "storybook dev -p 6006",
|
|
47
51
|
"build-storybook": "storybook build",
|
|
48
52
|
"test:spec": "npm run build && node --test ./src/components/**/*.test.mjs",
|
|
53
|
+
"test:eslint": "node --test ./eslint/__tests__/*.test.mjs",
|
|
49
54
|
"typecheck": "tsc --noEmit",
|
|
50
55
|
"lint": "eslint \"src/**/*.{ts,tsx}\"",
|
|
51
56
|
"lint:fix": "eslint \"src/**/*.{ts,tsx}\" --fix",
|