@stcn52/pro 0.0.0-stage → 0.2.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.
Files changed (163) hide show
  1. package/CHANGELOG.md +615 -0
  2. package/CONVENTIONS.md +152 -0
  3. package/LICENSE +21 -0
  4. package/README.md +226 -2
  5. package/RELEASING.md +51 -0
  6. package/THIRD_PARTY_NOTICES.md +52 -0
  7. package/dist/index.cjs +23153 -0
  8. package/dist/index.cjs.map +1 -0
  9. package/dist/index.d.cts +5067 -0
  10. package/dist/index.d.ts +5067 -0
  11. package/dist/index.js +22941 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/styles.css +10475 -0
  14. package/dist/tokens.css +322 -0
  15. package/docs/antd-alignment-plan.md +983 -0
  16. package/docs/api.md +3654 -0
  17. package/docs/components.md +1702 -0
  18. package/docs/measurements.md +152 -0
  19. package/docs/qa/README.md +50 -0
  20. package/docs/qa/browser-checks.json +394 -0
  21. package/docs/qa/d-chrome-checklist-dark.png +0 -0
  22. package/docs/qa/d-chrome-checks.json +234 -0
  23. package/docs/qa/d-chrome-detail-dark.png +0 -0
  24. package/docs/qa/d-chrome-filters-dark.png +0 -0
  25. package/docs/qa/d-chrome-shell-dark.png +0 -0
  26. package/docs/qa/d-detail-checks.json +222 -0
  27. package/docs/qa/d-detail-comments-failed-dark.png +0 -0
  28. package/docs/qa/d-detail-preview-dark.png +0 -0
  29. package/docs/qa/d-entity-checks.json +294 -0
  30. package/docs/qa/d-entity-failed-dark.png +0 -0
  31. package/docs/qa/d-workbench-canvas-dark.png +0 -0
  32. package/docs/qa/d-workbench-checks.json +338 -0
  33. package/docs/qa/d-workbench-edit-failed-dark.png +0 -0
  34. package/docs/qa/d-workbench-roadmap-dark.png +0 -0
  35. package/docs/qa/d-workbench-wizard-failed-dark.png +0 -0
  36. package/docs/qa/date-range-mobile-dark.jpg +0 -0
  37. package/docs/qa/p0-cascader-checks.json +228 -0
  38. package/docs/qa/p0-cascader-multiple-dark.png +0 -0
  39. package/docs/qa/p0-config-checks.json +430 -0
  40. package/docs/qa/p0-config-nested-dark.png +0 -0
  41. package/docs/qa/p0-date-checks.json +595 -0
  42. package/docs/qa/p0-date-time-dark.png +0 -0
  43. package/docs/qa/p0-form-lifecycle-checks.json +30 -0
  44. package/docs/qa/p0-form-lifecycle.png +0 -0
  45. package/docs/qa/p0-select-checks.json +378 -0
  46. package/docs/qa/p0-select-virtual-dark.png +0 -0
  47. package/docs/qa/p0-table-checks.json +290 -0
  48. package/docs/qa/p0-table-virtual-dark.png +0 -0
  49. package/docs/qa/p0-transfer-checks.json +322 -0
  50. package/docs/qa/p0-transfer-pagination-dark.png +0 -0
  51. package/docs/qa/p0-tree-checks.json +242 -0
  52. package/docs/qa/p0-tree-range-dark.png +0 -0
  53. package/docs/qa/p1-app-browser-checks.json +34 -0
  54. package/docs/qa/p1-app-feedback-dark.png +0 -0
  55. package/docs/qa/p1-avatar-checks.json +370 -0
  56. package/docs/qa/p1-avatar-dark.png +0 -0
  57. package/docs/qa/p1-browser-checks.json +218 -0
  58. package/docs/qa/p1-card-checks.json +262 -0
  59. package/docs/qa/p1-card-dark.png +0 -0
  60. package/docs/qa/p1-content-navigation-browser-checks.json +114 -0
  61. package/docs/qa/p1-controls-browser-checks.json +86 -0
  62. package/docs/qa/p1-controls-desktop-dark.png +0 -0
  63. package/docs/qa/p1-dialog-nested-dark.png +0 -0
  64. package/docs/qa/p1-display-browser-checks.json +114 -0
  65. package/docs/qa/p1-display-desktop-dark.png +0 -0
  66. package/docs/qa/p1-divider-dark.png +0 -0
  67. package/docs/qa/p1-drawer-browser-checks.json +302 -0
  68. package/docs/qa/p1-drawer-rtl-dark.png +0 -0
  69. package/docs/qa/p1-general-input-browser-checks.json +114 -0
  70. package/docs/qa/p1-general-input-desktop-dark.png +0 -0
  71. package/docs/qa/p1-image-browser-checks.json +38 -0
  72. package/docs/qa/p1-image-preview-dark.png +0 -0
  73. package/docs/qa/p1-inline-browser-checks.json +58 -0
  74. package/docs/qa/p1-inline-desktop-dark.png +0 -0
  75. package/docs/qa/p1-layout-browser-checks.json +114 -0
  76. package/docs/qa/p1-layout-desktop-dark.png +0 -0
  77. package/docs/qa/p1-menu-checks.json +357 -0
  78. package/docs/qa/p1-menu-long-dark.png +0 -0
  79. package/docs/qa/p1-nav-dark.png +0 -0
  80. package/docs/qa/p1-nav-sidebar-checks.json +218 -0
  81. package/docs/qa/p1-navigation-browser-checks.json +114 -0
  82. package/docs/qa/p1-navigation-mobile-dark.png +0 -0
  83. package/docs/qa/p1-pagination-checks.json +309 -0
  84. package/docs/qa/p1-pagination-dark.png +0 -0
  85. package/docs/qa/p1-pagination-mobile-dark.png +0 -0
  86. package/docs/qa/p1-popup-actions-browser-checks.json +58 -0
  87. package/docs/qa/p1-popup-actions-desktop-dark.png +0 -0
  88. package/docs/qa/p1-progress-browser-checks.json +30 -0
  89. package/docs/qa/p1-progress-desktop-dark.png +0 -0
  90. package/docs/qa/p1-rate-half-desktop-dark.png +0 -0
  91. package/docs/qa/p1-segment-checks.json +426 -0
  92. package/docs/qa/p1-segment-dark.png +0 -0
  93. package/docs/qa/p1-sidebar-dark.png +0 -0
  94. package/docs/qa/p1-slider-rate-browser-checks.json +114 -0
  95. package/docs/qa/p1-states-browser-checks.json +34 -0
  96. package/docs/qa/p1-states-checks.json +342 -0
  97. package/docs/qa/p1-states-dark.png +0 -0
  98. package/docs/qa/p1-states-mobile-dark.png +0 -0
  99. package/docs/qa/p1-tabs-editable-dark.png +0 -0
  100. package/docs/qa/p1-tag-dark.png +0 -0
  101. package/docs/qa/p1-tag-divider-checks.json +330 -0
  102. package/docs/qa/p1-upload-browser-checks.json +30 -0
  103. package/docs/qa/p1-upload-list-dark.png +0 -0
  104. package/docs/qa/p2-ai-panel-checks.json +401 -0
  105. package/docs/qa/p2-ai-panel-dark.png +0 -0
  106. package/docs/qa/p2-alert-dark.png +0 -0
  107. package/docs/qa/p2-app-final-checks.json +309 -0
  108. package/docs/qa/p2-app-final-dark.png +0 -0
  109. package/docs/qa/p2-badge-alert-checks.json +466 -0
  110. package/docs/qa/p2-beam-motion-checks.json +58 -0
  111. package/docs/qa/p2-calendar-dark.png +0 -0
  112. package/docs/qa/p2-calendar-timeline-checks.json +254 -0
  113. package/docs/qa/p2-charts-checks.json +242 -0
  114. package/docs/qa/p2-charts-dark.png +0 -0
  115. package/docs/qa/p2-color-gradient-dark.png +0 -0
  116. package/docs/qa/p2-content-navigation-checks.json +794 -0
  117. package/docs/qa/p2-dialog-popover-dark.png +0 -0
  118. package/docs/qa/p2-display-checks.json +128 -0
  119. package/docs/qa/p2-display-dark.png +0 -0
  120. package/docs/qa/p2-drawer-final-dark.png +0 -0
  121. package/docs/qa/p2-extras-checks.json +482 -0
  122. package/docs/qa/p2-general-inputs-checks.json +154 -0
  123. package/docs/qa/p2-general-inputs-dark.png +0 -0
  124. package/docs/qa/p2-icon-checks.json +466 -0
  125. package/docs/qa/p2-icon-dark.png +0 -0
  126. package/docs/qa/p2-image-dark.png +0 -0
  127. package/docs/qa/p2-inline-editors-checks.json +199 -0
  128. package/docs/qa/p2-input-button-checks.json +778 -0
  129. package/docs/qa/p2-input-dark.png +0 -0
  130. package/docs/qa/p2-layout-final-checks.json +136 -0
  131. package/docs/qa/p2-layout-final-dark.png +0 -0
  132. package/docs/qa/p2-lists-checks.json +290 -0
  133. package/docs/qa/p2-masonry-dark.png +0 -0
  134. package/docs/qa/p2-media-checks.json +212 -0
  135. package/docs/qa/p2-mentions-color-checks.json +362 -0
  136. package/docs/qa/p2-overlay-checks.json +370 -0
  137. package/docs/qa/p2-people-picker-dark.png +0 -0
  138. package/docs/qa/p2-popconfirm-final-dark.png +0 -0
  139. package/docs/qa/p2-popup-final-checks.json +223 -0
  140. package/docs/qa/p2-qr-browser-decode.json +30 -0
  141. package/docs/qa/p2-quick-select-dark.png +0 -0
  142. package/docs/qa/p2-quick-text-dark.png +0 -0
  143. package/docs/qa/p2-rate-dark.png +0 -0
  144. package/docs/qa/p2-scroll-navigation-checks.json +198 -0
  145. package/docs/qa/p2-scroll-navigation-dark.png +0 -0
  146. package/docs/qa/p2-selection-bar-checks.json +302 -0
  147. package/docs/qa/p2-selection-bar-dark.png +0 -0
  148. package/docs/qa/p2-slider-rate-checks.json +262 -0
  149. package/docs/qa/p2-switch-dark.png +0 -0
  150. package/docs/qa/p2-tabs-dark.png +0 -0
  151. package/docs/qa/p2-timeline-dark.png +0 -0
  152. package/docs/qa/p2-toast-dark.png +0 -0
  153. package/docs/qa/p2-toggle-checks.json +834 -0
  154. package/docs/qa/p2-tour-dark.png +0 -0
  155. package/docs/qa/p2-upload-dark.png +0 -0
  156. package/docs/qa/table-details.md +26 -0
  157. package/docs/qa/table-mobile-dark.jpg +0 -0
  158. package/docs/qa/transfer-mobile-light.jpg +0 -0
  159. package/docs/qa/tree-browser-checks.json +226 -0
  160. package/docs/qa/tree-details.md +25 -0
  161. package/docs/qa/tree-directory-mobile-dark.jpg +0 -0
  162. package/docs/tokens.md +255 -0
  163. package/package.json +92 -3
Binary file
Binary file
@@ -0,0 +1,26 @@
1
+ # Table details acceptance — 2026-10-08
2
+
3
+ Reference: [Ant Design Table](https://ant.design/components/table/). Existing
4
+ Klun styles and host-managed APIs are preserved; this change adds optional
5
+ local data processing without an Ant Design runtime dependency.
6
+
7
+ Automated checks cover filtering/sorting before paging, remote pages, disabled
8
+ selection, controlled and uncontrolled detail rows, native cell spans,
9
+ auxiliary column counts, collapsed groups, hidden columns, embedded controls,
10
+ empty/error feedback, summaries and pinned expansion offsets.
11
+
12
+ Real Chrome checks:
13
+
14
+ - Desktop light: sorting changes the displayed rows, detail expansion follows
15
+ row keys, status filtering reduces total and requests page 1; Escape restores
16
+ focus to the filter trigger.
17
+ - Mobile dark at 390px: the document fits the viewport, table contents scroll
18
+ horizontally inside their container (963px content / 295px viewport), and
19
+ pagination wraps without overlapping.
20
+ - Merged cells: ArrowRight skips the omitted cell, focuses `0-2`, and exactly one
21
+ rendered data cell remains in the tab sequence.
22
+
23
+ ![Mobile dark table](./table-mobile-dark.jpg)
24
+
25
+ This is Chrome verification, not cross-browser or screen-reader certification.
26
+ Virtualization and drag-and-drop engines are not introduced by this change.
Binary file
@@ -0,0 +1,226 @@
1
+ [
2
+ {
3
+ "story": "checkable",
4
+ "theme": "light",
5
+ "width": 1280,
6
+ "documentFits": true,
7
+ "renderedItems": 9
8
+ },
9
+ {
10
+ "story": "strict-checking",
11
+ "theme": "light",
12
+ "width": 1280,
13
+ "documentFits": true,
14
+ "renderedItems": 9
15
+ },
16
+ {
17
+ "story": "controlled",
18
+ "theme": "light",
19
+ "width": 1280,
20
+ "documentFits": true,
21
+ "renderedItems": 5
22
+ },
23
+ {
24
+ "story": "searchable",
25
+ "theme": "light",
26
+ "width": 1280,
27
+ "documentFits": true,
28
+ "renderedItems": 7
29
+ },
30
+ {
31
+ "story": "directory",
32
+ "theme": "light",
33
+ "width": 1280,
34
+ "documentFits": true,
35
+ "renderedItems": 9
36
+ },
37
+ {
38
+ "story": "lazy-loading",
39
+ "theme": "light",
40
+ "width": 1280,
41
+ "documentFits": true,
42
+ "renderedItems": 1
43
+ },
44
+ {
45
+ "story": "virtual-scroll",
46
+ "theme": "light",
47
+ "width": 1280,
48
+ "documentFits": true,
49
+ "renderedItems": 14
50
+ },
51
+ {
52
+ "story": "drag-and-drop",
53
+ "theme": "light",
54
+ "width": 1280,
55
+ "documentFits": true,
56
+ "renderedItems": 9
57
+ },
58
+ {
59
+ "story": "checkable",
60
+ "theme": "dark",
61
+ "width": 1280,
62
+ "documentFits": true,
63
+ "renderedItems": 9
64
+ },
65
+ {
66
+ "story": "strict-checking",
67
+ "theme": "dark",
68
+ "width": 1280,
69
+ "documentFits": true,
70
+ "renderedItems": 9
71
+ },
72
+ {
73
+ "story": "controlled",
74
+ "theme": "dark",
75
+ "width": 1280,
76
+ "documentFits": true,
77
+ "renderedItems": 5
78
+ },
79
+ {
80
+ "story": "searchable",
81
+ "theme": "dark",
82
+ "width": 1280,
83
+ "documentFits": true,
84
+ "renderedItems": 7
85
+ },
86
+ {
87
+ "story": "directory",
88
+ "theme": "dark",
89
+ "width": 1280,
90
+ "documentFits": true,
91
+ "renderedItems": 9
92
+ },
93
+ {
94
+ "story": "lazy-loading",
95
+ "theme": "dark",
96
+ "width": 1280,
97
+ "documentFits": true,
98
+ "renderedItems": 1
99
+ },
100
+ {
101
+ "story": "virtual-scroll",
102
+ "theme": "dark",
103
+ "width": 1280,
104
+ "documentFits": true,
105
+ "renderedItems": 14
106
+ },
107
+ {
108
+ "story": "drag-and-drop",
109
+ "theme": "dark",
110
+ "width": 1280,
111
+ "documentFits": true,
112
+ "renderedItems": 9
113
+ },
114
+ {
115
+ "story": "checkable",
116
+ "theme": "light",
117
+ "width": 390,
118
+ "documentFits": true,
119
+ "renderedItems": 9
120
+ },
121
+ {
122
+ "story": "strict-checking",
123
+ "theme": "light",
124
+ "width": 390,
125
+ "documentFits": true,
126
+ "renderedItems": 9
127
+ },
128
+ {
129
+ "story": "controlled",
130
+ "theme": "light",
131
+ "width": 390,
132
+ "documentFits": true,
133
+ "renderedItems": 5
134
+ },
135
+ {
136
+ "story": "searchable",
137
+ "theme": "light",
138
+ "width": 390,
139
+ "documentFits": true,
140
+ "renderedItems": 7
141
+ },
142
+ {
143
+ "story": "directory",
144
+ "theme": "light",
145
+ "width": 390,
146
+ "documentFits": true,
147
+ "renderedItems": 9
148
+ },
149
+ {
150
+ "story": "lazy-loading",
151
+ "theme": "light",
152
+ "width": 390,
153
+ "documentFits": true,
154
+ "renderedItems": 1
155
+ },
156
+ {
157
+ "story": "virtual-scroll",
158
+ "theme": "light",
159
+ "width": 390,
160
+ "documentFits": true,
161
+ "renderedItems": 14
162
+ },
163
+ {
164
+ "story": "drag-and-drop",
165
+ "theme": "light",
166
+ "width": 390,
167
+ "documentFits": true,
168
+ "renderedItems": 9
169
+ },
170
+ {
171
+ "story": "checkable",
172
+ "theme": "dark",
173
+ "width": 390,
174
+ "documentFits": true,
175
+ "renderedItems": 9
176
+ },
177
+ {
178
+ "story": "strict-checking",
179
+ "theme": "dark",
180
+ "width": 390,
181
+ "documentFits": true,
182
+ "renderedItems": 9
183
+ },
184
+ {
185
+ "story": "controlled",
186
+ "theme": "dark",
187
+ "width": 390,
188
+ "documentFits": true,
189
+ "renderedItems": 5
190
+ },
191
+ {
192
+ "story": "searchable",
193
+ "theme": "dark",
194
+ "width": 390,
195
+ "documentFits": true,
196
+ "renderedItems": 7
197
+ },
198
+ {
199
+ "story": "directory",
200
+ "theme": "dark",
201
+ "width": 390,
202
+ "documentFits": true,
203
+ "renderedItems": 9
204
+ },
205
+ {
206
+ "story": "lazy-loading",
207
+ "theme": "dark",
208
+ "width": 390,
209
+ "documentFits": true,
210
+ "renderedItems": 1
211
+ },
212
+ {
213
+ "story": "virtual-scroll",
214
+ "theme": "dark",
215
+ "width": 390,
216
+ "documentFits": true,
217
+ "renderedItems": 14
218
+ },
219
+ {
220
+ "story": "drag-and-drop",
221
+ "theme": "dark",
222
+ "width": 390,
223
+ "documentFits": true,
224
+ "renderedItems": 9
225
+ }
226
+ ]
@@ -0,0 +1,25 @@
1
+ # Tree details acceptance — 2026-10-08
2
+
3
+ Reference: [Ant Design Tree](https://ant.design/components/tree/). Existing Klun
4
+ Tree APIs and styles remain supported. DirectoryTree and hierarchy features
5
+ use native React, CSS and HTML5 drag events without new runtime dependencies.
6
+
7
+ Automated regression checks cover controlled expansion and selection, checkbox
8
+ conduction and strict mode, disabled boundaries, directory ranges, keyboard
9
+ navigation, embedded controls, async retry and source replacement, concurrent
10
+ key validation, nested loading, 10,000-node virtualization, deep hierarchies,
11
+ ref scrolling and drag/drop validation/cancellation.
12
+
13
+ Chrome verification covered eight stories in light/dark themes at desktop and
14
+ 390px widths (32 combinations), with no document overflow. Interaction checks
15
+ covered mixed checkbox state, Meta directory multiselection, nested async
16
+ failure/retry, scrolling to node 9000, End navigation and keyboard reordering.
17
+ The matrix is recorded in [tree-browser-checks.json](./tree-browser-checks.json).
18
+
19
+ HTML5 pointer-drop behavior is covered by DOM event tests. Native automated
20
+ mouse dragging did not produce a drop, so real pointer dragging remains a
21
+ manual browser acceptance item. Cross-browser and screen-reader certification
22
+ were not performed. Virtual rows use fixed heights; motion is a boolean CSS
23
+ option rather than Ant Design’s rc-motion configuration.
24
+
25
+ ![Directory tree, mobile dark](./tree-directory-mobile-dark.jpg)
package/docs/tokens.md ADDED
@@ -0,0 +1,255 @@
1
+ # Design tokens
2
+
3
+ <!-- Generated by `pnpm gen:docs` from src/styles/tokens.css. Do not edit by hand. -->
4
+
5
+ Everything the components draw with. The raw scale is transcribed from
6
+ PingCode's own theme stylesheet; everything above it is named by purpose
7
+ (`--surface-*`, `--fg-*`, `--border-*`, `--accent`), which is the layer a
8
+ component is allowed to use.
9
+
10
+ Theme is selected with `data-theme="light" | "dark" | "auto"` on any ancestor.
11
+
12
+ ## 1. raw scale (PingCode)
13
+
14
+ | Token | Value |
15
+ | ------------- | --------- |
16
+ | `--gray-10` | `#fff` |
17
+ | `--gray-70` | `#f7f7f7` |
18
+ | `--gray-80` | `#fafafa` |
19
+ | `--gray-100` | `#f5f5f5` |
20
+ | `--gray-200` | `#eee` |
21
+ | `--gray-300` | `#ddd` |
22
+ | `--gray-400` | `#cacaca` |
23
+ | `--gray-500` | `#aaa` |
24
+ | `--gray-600` | `#999` |
25
+ | `--gray-700` | `#666` |
26
+ | `--gray-800` | `#333` |
27
+ | `--gray-900` | `#1f1f1f` |
28
+ | `--brand-50` | `#f2f6ff` |
29
+ | `--brand-100` | `#e6edff` |
30
+ | `--brand-200` | `#c9dbff` |
31
+ | `--brand-300` | `#9dbcff` |
32
+ | `--brand-400` | `#80a8ff` |
33
+ | `--brand-500` | `#6698ff` |
34
+ | `--brand-600` | `#4c7fe6` |
35
+ | `--brand-700` | `#3563bf` |
36
+ | `--green-500` | `#73d897` |
37
+ | `--cyan-500` | `#5dcfff` |
38
+ | `--amber-500` | `#ffcd5d` |
39
+ | `--star` | `#ff9f73` |
40
+ | `--red-500` | `#ff7575` |
41
+
42
+ ## 2. status palette used by Ship tags (sampled from the live product)
43
+
44
+ | Token | Value |
45
+ | ---------------------- | --------- |
46
+ | `--status-pending` | `#56abfb` |
47
+ | `--status-completed` | `#73d897` |
48
+ | `--status-in-progress` | `#fdc45c` |
49
+ | `--status-blocked` | `#ff7575` |
50
+ | `--status-todo` | `#cacaca` |
51
+ | `--status-review` | `#9d8cff` |
52
+
53
+ ## 3. semantic: brand
54
+
55
+ | Token | Value |
56
+ | --------------------- | --------------------------- |
57
+ | `--accent` | `var(--brand-500)` |
58
+ | `--accent-hover` | `var(--brand-400)` |
59
+ | `--accent-active` | `var(--brand-600)` |
60
+ | `--accent-soft` | `rgba(102, 152, 255, 0.1)` |
61
+ | `--accent-soft-hover` | `rgba(102, 152, 255, 0.16)` |
62
+ | `--accent-contrast` | `#fff` |
63
+
64
+ ## 4. semantic: surfaces
65
+
66
+ | Token | Value |
67
+ | ------------------------------ | --------------------- |
68
+ | `--surface-app` | `#fff` |
69
+ | `--surface-default` | `#fff` |
70
+ | `--surface-panel` | `#fbfbfb` |
71
+ | `--surface-float` | `#fff` |
72
+ | `--surface-sunken` | `var(--gray-80)` |
73
+ | `--surface-header` | `#fff` |
74
+ | `--surface-rail` | `#4a525b` |
75
+ | `--surface-rail-hover` | `#56616d` |
76
+ | `--surface-rail-active` | `#39414c` |
77
+ | `--surface-hover` | `var(--gray-100)` |
78
+ | `--surface-active` | `var(--gray-200)` |
79
+ | `--surface-selected` | `var(--accent-soft)` |
80
+ | `--surface-scrim` | `rgba(0, 0, 0, 0.55)` |
81
+ | `--surface-table-head` | `var(--gray-80)` |
82
+ | `--surface-table-row-hover` | `var(--gray-70)` |
83
+ | `--surface-table-row-selected` | `var(--gray-80)` |
84
+
85
+ ## 5. semantic: foreground
86
+
87
+ | Token | Value |
88
+ | -------------------- | ----------------- |
89
+ | `--fg` | `#333` |
90
+ | `--fg-strong` | `#1f1f1f` |
91
+ | `--fg-muted` | `#666666` |
92
+ | `--fg-th` | `#aaaaaa` |
93
+ | `--fg-subtle` | `#767676` |
94
+ | `--fg-label` | `#999999` |
95
+ | `--fg-disabled` | `var(--gray-400)` |
96
+ | `--fg-on-rail` | `#ddd` |
97
+ | `--fg-on-rail-muted` | `#9aa4af` |
98
+ | `--fg-on-accent` | `#fff` |
99
+ | `--fg-link` | `#3d6fd0` |
100
+
101
+ ## 6. semantic: borders
102
+
103
+ | Token | Value |
104
+ | ---------------------- | ----------------- |
105
+ | `--border` | `var(--gray-200)` |
106
+ | `--border-strong` | `var(--gray-300)` |
107
+ | `--border-input` | `var(--gray-300)` |
108
+ | `--border-input-hover` | `var(--gray-400)` |
109
+ | `--border-divider` | `var(--gray-200)` |
110
+
111
+ ## 7. elevation
112
+
113
+ | Token | Value |
114
+ | ---------------------------- | ---------------------------------- |
115
+ | `--shadow-header` | `0 4px 8px 0 rgba(0, 0, 0, 0.03)` |
116
+ | `--shadow-popover` | `0 2px 12px 0 rgba(0, 0, 0, 0.12)` |
117
+ | `--shadow-dialog` | `0 8px 32px 0 rgba(0, 0, 0, 0.18)` |
118
+ | `--shadow-float-btn` | `0 0 10px rgba(0, 0, 0, 0.1)` |
119
+ | `--shadow-float-btn-hover` | `0 0 10px rgba(0, 0, 0, 0.25)` |
120
+ | `--shadow-table-fixed-left` | `6px 0 6px 0 rgba(0, 0, 0, 0.05)` |
121
+ | `--shadow-table-fixed-right` | `-6px 0 6px 0 rgba(0, 0, 0, 0.05)` |
122
+ | `--shadow-switch-knob` | `0 1px 3px rgba(0, 0, 0, 0.2)` |
123
+
124
+ ## 8. typography
125
+
126
+ | Token | Value |
127
+ | ------------------- | ----------------------------------------------------------------------- |
128
+ | `--font-mono` | `SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace` |
129
+ | `--text-xs` | `12px` |
130
+ | `--text-sm` | `13px` |
131
+ | `--text-base` | `14px` |
132
+ | `--text-md` | `15px` |
133
+ | `--text-lg` | `16px` |
134
+ | `--text-xl` | `20px` |
135
+ | `--text-2xl` | `24px` |
136
+ | `--leading-tight` | `1.3` |
137
+ | `--leading-base` | `1.5715` |
138
+ | `--leading-relaxed` | `1.72` |
139
+ | `--weight-regular` | `400` |
140
+ | `--weight-medium` | `500` |
141
+ | `--weight-bold` | `600` |
142
+
143
+ ## 9. spacing / sizing
144
+
145
+ | Token | Value |
146
+ | ------------------------ | ------- |
147
+ | `--space-1` | `4px` |
148
+ | `--space-2` | `8px` |
149
+ | `--space-3` | `12px` |
150
+ | `--space-4` | `16px` |
151
+ | `--space-5` | `20px` |
152
+ | `--space-6` | `24px` |
153
+ | `--space-8` | `32px` |
154
+ | `--space-10` | `40px` |
155
+ | `--space-12` | `48px` |
156
+ | `--table-head-height` | `44px` |
157
+ | `--radius-sm` | `2px` |
158
+ | `--radius` | `4px` |
159
+ | `--radius-md` | `6px` |
160
+ | `--radius-lg` | `8px` |
161
+ | `--radius-search-header` | `8px` |
162
+ | `--radius-search-field` | `4.8px` |
163
+ | `--radius-pill` | `999px` |
164
+
165
+ ## 10. Ship chrome geometry — measured from the live product
166
+
167
+ | Token | Value |
168
+ | --------------------- | ------------------------------ |
169
+ | `--rail-width` | `60px` |
170
+ | `--rail-item` | `60px` |
171
+ | `--header-height` | `52px` |
172
+ | `--toolbar-height` | `48px` |
173
+ | `--footer-height` | `48px` |
174
+ | `--sidebar-width` | `300px` |
175
+ | `--sidebar-width-old` | `260px` |
176
+ | `--sidebar-min-width` | `220px` |
177
+ | `--sidebar-max-width` | `420px` |
178
+ | `--control-height-sm` | `24px` |
179
+ | `--control-height` | `32px` |
180
+ | `--control-height-lg` | `36px` |
181
+ | `--z-popover` | `1000` |
182
+ | `--z-dialog` | `1100` |
183
+ | `--z-toast` | `1200` |
184
+ | `--z-tooltip` | `1300` |
185
+ | `--duration-fast` | `120ms` |
186
+ | `--duration` | `180ms` |
187
+ | `--ease` | `cubic-bezier(0.4, 0, 0.2, 1)` |
188
+
189
+ ## 11. Dark theme (dark overrides)
190
+
191
+ | Token | Value |
192
+ | ------------------------------ | ---------------------------------- |
193
+ | `--fg-th` | `#8b96a3` |
194
+ | `--gray-10` | `#2a2e34` |
195
+ | `--gray-70` | `#32363d` |
196
+ | `--gray-80` | `#30353c` |
197
+ | `--gray-100` | `#393e46` |
198
+ | `--gray-200` | `#3c414a` |
199
+ | `--gray-300` | `#464c57` |
200
+ | `--gray-400` | `#5b6370` |
201
+ | `--gray-500` | `#666e7d` |
202
+ | `--gray-600` | `#6f7a8a` |
203
+ | `--gray-700` | `#87909e` |
204
+ | `--gray-800` | `#bcc4d1` |
205
+ | `--gray-900` | `#d9dee6` |
206
+ | `--brand-50` | `#323844` |
207
+ | `--brand-100` | `#38414f` |
208
+ | `--brand-200` | `#435066` |
209
+ | `--brand-300` | `#4f6080` |
210
+ | `--brand-400` | `#5c7bb8` |
211
+ | `--brand-500` | `#6698ff` |
212
+ | `--brand-600` | `#82aaff` |
213
+ | `--brand-700` | `#a3c0ff` |
214
+ | `--surface-app` | `#2a2e34` |
215
+ | `--surface-default` | `#2a2e34` |
216
+ | `--surface-panel` | `#30353c` |
217
+ | `--surface-float` | `#393e46` |
218
+ | `--surface-sunken` | `#32363d` |
219
+ | `--surface-header` | `#30353c` |
220
+ | `--surface-rail` | `#23272c` |
221
+ | `--surface-rail-hover` | `#32373e` |
222
+ | `--surface-rail-active` | `#2c3138` |
223
+ | `--surface-hover` | `#3c414a` |
224
+ | `--surface-active` | `#464c57` |
225
+ | `--surface-selected` | `rgba(102, 152, 255, 0.16)` |
226
+ | `--surface-scrim` | `rgba(0, 0, 0, 0.65)` |
227
+ | `--surface-table-head` | `#32363d` |
228
+ | `--surface-table-row-hover` | `#343941` |
229
+ | `--surface-table-row-selected` | `#32363d` |
230
+ | `--fg` | `#bcc4d1` |
231
+ | `--fg-strong` | `#e4e9f0` |
232
+ | `--fg-muted` | `#a2adbb` |
233
+ | `--fg-subtle` | `#93a0b0` |
234
+ | `--fg-disabled` | `#5b6370` |
235
+ | `--fg-on-rail` | `#bcc4d1` |
236
+ | `--fg-on-rail-muted` | `#6f7a8a` |
237
+ | `--fg-link` | `#82aaff` |
238
+ | `--border` | `#3c414a` |
239
+ | `--border-strong` | `#464c57` |
240
+ | `--border-input` | `#464c57` |
241
+ | `--border-input-hover` | `#5b6370` |
242
+ | `--border-divider` | `#3c414a` |
243
+ | `--shadow-header` | `0 2px 6px 0 rgba(0, 0, 0, 0.2)` |
244
+ | `--shadow-popover` | `0 2px 12px 0 rgba(0, 0, 0, 0.45)` |
245
+ | `--shadow-dialog` | `0 8px 32px 0 rgba(0, 0, 0, 0.55)` |
246
+ | `--shadow-float-btn` | `0 0 10px rgba(0, 0, 0, 0.25)` |
247
+ | `--shadow-float-btn-hover` | `0 0 10px rgba(0, 0, 0, 0.45)` |
248
+ | `--shadow-table-fixed-left` | `6px 0 6px 0 rgba(0, 0, 0, 0.1)` |
249
+ | `--shadow-table-fixed-right` | `-6px 0 6px 0 rgba(0, 0, 0, 0.1)` |
250
+ | `--shadow-switch-knob` | `0 1px 3px rgba(0, 0, 0, 0.5)` |
251
+ | `--status-todo` | `#5b6370` |
252
+
253
+ ---
254
+
255
+ 186 declarations across 11 groups.
package/package.json CHANGED
@@ -1,6 +1,95 @@
1
1
  {
2
2
  "name": "@stcn52/pro",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.2.0",
4
+ "description": "Klun Pro — PingCode/Ship visual restoration component library: design tokens, primitives and Ship business components with light/dark themes.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "sideEffects": [
8
+ "**/*.css"
9
+ ],
10
+ "files": [
11
+ "dist",
12
+ "docs",
13
+ "README.md",
14
+ "CHANGELOG.md",
15
+ "LICENSE",
16
+ "CONVENTIONS.md",
17
+ "RELEASING.md",
18
+ "THIRD_PARTY_NOTICES.md"
19
+ ],
20
+ "main": "./dist/index.cjs",
21
+ "module": "./dist/index.js",
22
+ "types": "./dist/index.d.ts",
23
+ "exports": {
24
+ ".": {
25
+ "import": {
26
+ "types": "./dist/index.d.ts",
27
+ "default": "./dist/index.js"
28
+ },
29
+ "require": {
30
+ "types": "./dist/index.d.cts",
31
+ "default": "./dist/index.cjs"
32
+ }
33
+ },
34
+ "./styles.css": "./dist/styles.css",
35
+ "./tokens.css": "./dist/tokens.css",
36
+ "./package.json": "./package.json"
37
+ },
38
+ "peerDependencies": {
39
+ "react": ">=18",
40
+ "react-dom": ">=18"
41
+ },
42
+ "devDependencies": {
43
+ "@arethetypeswrong/cli": "^0.18.5",
44
+ "@eslint/js": "^10.0.1",
45
+ "@rc-component/qrcode": "2.0.0",
46
+ "@storybook/addon-a11y": "10.6.1",
47
+ "@storybook/addon-docs": "10.6.1",
48
+ "@storybook/addon-themes": "10.6.1",
49
+ "@storybook/react-vite": "10.6.1",
50
+ "@testing-library/jest-dom": "^7.0.1",
51
+ "@testing-library/react": "^16.3.3",
52
+ "@testing-library/user-event": "^14.6.7",
53
+ "@types/node": "^26.6.4",
54
+ "@types/react": "^19.2.2",
55
+ "@types/react-dom": "^19.2.1",
56
+ "@vitejs/plugin-react": "^6.1.2",
57
+ "@vitest/coverage-v8": "^5.0.3",
58
+ "eslint": "^10.12.0",
59
+ "eslint-plugin-react-hooks": "^7.1.1",
60
+ "jsdom": "^30.1.2",
61
+ "jsqr": "1.4.0",
62
+ "prettier": "^3.9.9",
63
+ "publint": "^0.3.25",
64
+ "react": "^19.2.0",
65
+ "react-dom": "^19.2.0",
66
+ "storybook": "10.6.1",
67
+ "tsup": "^8.5.0",
68
+ "typescript": "^5.9.3",
69
+ "typescript-eslint": "^8.71.1",
70
+ "vitest": "^5.0.3"
71
+ },
72
+ "publishConfig": {
73
+ "access": "public"
74
+ },
75
+ "engines": {
76
+ "node": ">=20"
77
+ },
78
+ "scripts": {
79
+ "build": "tsup && node scripts/build-styles.mjs",
80
+ "dev": "tsup --watch",
81
+ "storybook": "storybook dev -p 6006",
82
+ "build:storybook": "storybook build -o dist-storybook",
83
+ "typecheck": "tsc --noEmit",
84
+ "lint": "eslint .",
85
+ "format": "prettier --write .",
86
+ "format:check": "prettier --check .",
87
+ "gen:docs": "node scripts/gen-docs.mjs",
88
+ "release": "node scripts/release.mjs",
89
+ "test": "vitest run",
90
+ "test:watch": "vitest",
91
+ "verify": "node scripts/verify.mjs",
92
+ "gen:icons": "node scripts/gen-icons.mjs",
93
+ "build:styles": "node scripts/build-styles.mjs"
94
+ }
6
95
  }