azamat-ui-kit-cli 0.2.2

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 (213) hide show
  1. package/README.md +8 -0
  2. package/dist/index.js +432 -0
  3. package/package.json +34 -0
  4. package/vendor/package.json +4 -0
  5. package/vendor/src/components/actions/action-bar.tsx +35 -0
  6. package/vendor/src/components/actions/action-menu.tsx +120 -0
  7. package/vendor/src/components/actions/button-group.tsx +47 -0
  8. package/vendor/src/components/actions/copy-button.tsx +91 -0
  9. package/vendor/src/components/actions/copy-field.tsx +31 -0
  10. package/vendor/src/components/actions/floating-action-button.tsx +33 -0
  11. package/vendor/src/components/actions/index.ts +7 -0
  12. package/vendor/src/components/actions/public.ts +5 -0
  13. package/vendor/src/components/actions/quick-action-grid.tsx +162 -0
  14. package/vendor/src/components/calendar/calendar.tsx +328 -0
  15. package/vendor/src/components/calendar/date-picker.tsx +78 -0
  16. package/vendor/src/components/calendar/date-range-picker.tsx +96 -0
  17. package/vendor/src/components/calendar/date-utils.ts +89 -0
  18. package/vendor/src/components/calendar/index.ts +4 -0
  19. package/vendor/src/components/charts/charts.tsx +275 -0
  20. package/vendor/src/components/charts/horizontal-bar-chart.tsx +46 -0
  21. package/vendor/src/components/charts/index.ts +4 -0
  22. package/vendor/src/components/charts/kpi.tsx +68 -0
  23. package/vendor/src/components/charts/progress-ring.tsx +45 -0
  24. package/vendor/src/components/charts/public.ts +1 -0
  25. package/vendor/src/components/command/command-palette.tsx +375 -0
  26. package/vendor/src/components/command/index.ts +1 -0
  27. package/vendor/src/components/data-table/data-table-actions-column.tsx +58 -0
  28. package/vendor/src/components/data-table/data-table-bulk-actions.tsx +84 -0
  29. package/vendor/src/components/data-table/data-table-column-visibility-menu.tsx +79 -0
  30. package/vendor/src/components/data-table/data-table-pagination.tsx +91 -0
  31. package/vendor/src/components/data-table/data-table-row-actions.tsx +48 -0
  32. package/vendor/src/components/data-table/data-table-select-column.tsx +59 -0
  33. package/vendor/src/components/data-table/data-table-sortable-header.tsx +45 -0
  34. package/vendor/src/components/data-table/data-table-toolbar.tsx +76 -0
  35. package/vendor/src/components/data-table/data-table-view-presets.tsx +128 -0
  36. package/vendor/src/components/data-table/data-table.tsx +507 -0
  37. package/vendor/src/components/data-table/index.ts +12 -0
  38. package/vendor/src/components/data-table/public.ts +10 -0
  39. package/vendor/src/components/data-table/table-export-menu.tsx +56 -0
  40. package/vendor/src/components/data-table/table-import-button.tsx +43 -0
  41. package/vendor/src/components/display/activity-feed.tsx +97 -0
  42. package/vendor/src/components/display/avatar.tsx +131 -0
  43. package/vendor/src/components/display/code-block.tsx +33 -0
  44. package/vendor/src/components/display/data-state.tsx +63 -0
  45. package/vendor/src/components/display/description-list.tsx +119 -0
  46. package/vendor/src/components/display/descriptions.tsx +83 -0
  47. package/vendor/src/components/display/entity-card.tsx +53 -0
  48. package/vendor/src/components/display/file-card.tsx +54 -0
  49. package/vendor/src/components/display/index.ts +30 -0
  50. package/vendor/src/components/display/kanban.tsx +104 -0
  51. package/vendor/src/components/display/keyboard-shortcut.tsx +31 -0
  52. package/vendor/src/components/display/list.tsx +100 -0
  53. package/vendor/src/components/display/metric-grid.tsx +86 -0
  54. package/vendor/src/components/display/progress.tsx +162 -0
  55. package/vendor/src/components/display/property-grid.tsx +54 -0
  56. package/vendor/src/components/display/result.tsx +90 -0
  57. package/vendor/src/components/display/smart-card.tsx +168 -0
  58. package/vendor/src/components/display/statistic.tsx +107 -0
  59. package/vendor/src/components/display/status-legend.tsx +108 -0
  60. package/vendor/src/components/display/tag-list.tsx +52 -0
  61. package/vendor/src/components/display/timeline.tsx +132 -0
  62. package/vendor/src/components/display/tree-view.tsx +116 -0
  63. package/vendor/src/components/feedback/alert.tsx +69 -0
  64. package/vendor/src/components/feedback/empty-state.tsx +56 -0
  65. package/vendor/src/components/feedback/index.ts +5 -0
  66. package/vendor/src/components/feedback/loading-state.tsx +39 -0
  67. package/vendor/src/components/feedback/page-state.tsx +69 -0
  68. package/vendor/src/components/feedback/status-badge.tsx +62 -0
  69. package/vendor/src/components/filters/filter-bar.tsx +89 -0
  70. package/vendor/src/components/filters/filter-chips.tsx +69 -0
  71. package/vendor/src/components/filters/index.ts +2 -0
  72. package/vendor/src/components/form/form-actions.tsx +53 -0
  73. package/vendor/src/components/form/form-async-select.tsx +26 -0
  74. package/vendor/src/components/form/form-date-input.tsx +19 -0
  75. package/vendor/src/components/form/form-date-picker.tsx +54 -0
  76. package/vendor/src/components/form/form-date-range-input.tsx +79 -0
  77. package/vendor/src/components/form/form-date-range-picker.tsx +57 -0
  78. package/vendor/src/components/form/form-field-shell.tsx +191 -0
  79. package/vendor/src/components/form/form-input.tsx +480 -0
  80. package/vendor/src/components/form/form-number-input.tsx +19 -0
  81. package/vendor/src/components/form/form-password-input.tsx +19 -0
  82. package/vendor/src/components/form/form-phone-input.tsx +22 -0
  83. package/vendor/src/components/form/form-search-input.tsx +19 -0
  84. package/vendor/src/components/form/form-section.tsx +29 -0
  85. package/vendor/src/components/form/form-select.tsx +194 -0
  86. package/vendor/src/components/form/form-switch.tsx +145 -0
  87. package/vendor/src/components/form/form-textarea.tsx +103 -0
  88. package/vendor/src/components/form/index.ts +17 -0
  89. package/vendor/src/components/form/public.ts +14 -0
  90. package/vendor/src/components/form/smart-form-shell.tsx +59 -0
  91. package/vendor/src/components/inputs/async-select.tsx +1143 -0
  92. package/vendor/src/components/inputs/clearable-input.tsx +78 -0
  93. package/vendor/src/components/inputs/color-input.tsx +47 -0
  94. package/vendor/src/components/inputs/combobox.tsx +89 -0
  95. package/vendor/src/components/inputs/date-input.tsx +32 -0
  96. package/vendor/src/components/inputs/date-range-input.tsx +67 -0
  97. package/vendor/src/components/inputs/index.ts +19 -0
  98. package/vendor/src/components/inputs/input-chrome.tsx +37 -0
  99. package/vendor/src/components/inputs/input-decorator.tsx +64 -0
  100. package/vendor/src/components/inputs/input-value.ts +42 -0
  101. package/vendor/src/components/inputs/masked-input.tsx +51 -0
  102. package/vendor/src/components/inputs/money-input.tsx +73 -0
  103. package/vendor/src/components/inputs/number-input.tsx +87 -0
  104. package/vendor/src/components/inputs/numeric-value.ts +39 -0
  105. package/vendor/src/components/inputs/otp-input.tsx +102 -0
  106. package/vendor/src/components/inputs/password-input.tsx +85 -0
  107. package/vendor/src/components/inputs/phone-input.tsx +46 -0
  108. package/vendor/src/components/inputs/quantity-input.tsx +116 -0
  109. package/vendor/src/components/inputs/quantity-stepper.tsx +49 -0
  110. package/vendor/src/components/inputs/rating.tsx +98 -0
  111. package/vendor/src/components/inputs/search-input.tsx +26 -0
  112. package/vendor/src/components/inputs/simple-select.tsx +72 -0
  113. package/vendor/src/components/inputs/slider.tsx +149 -0
  114. package/vendor/src/components/inputs/tag-input.tsx +104 -0
  115. package/vendor/src/components/layout/app-header.tsx +46 -0
  116. package/vendor/src/components/layout/app-shell.tsx +243 -0
  117. package/vendor/src/components/layout/app-sidebar.tsx +179 -0
  118. package/vendor/src/components/layout/breadcrumbs.tsx +72 -0
  119. package/vendor/src/components/layout/index.ts +11 -0
  120. package/vendor/src/components/layout/page-container.tsx +30 -0
  121. package/vendor/src/components/layout/page-header.tsx +60 -0
  122. package/vendor/src/components/layout/public.ts +10 -0
  123. package/vendor/src/components/layout/section.tsx +76 -0
  124. package/vendor/src/components/layout/sidebar-nav.tsx +147 -0
  125. package/vendor/src/components/layout/stat-card.tsx +88 -0
  126. package/vendor/src/components/layout/sticky-footer-bar.tsx +23 -0
  127. package/vendor/src/components/layout/workspace-shell.tsx +50 -0
  128. package/vendor/src/components/navigation/anchor-nav.tsx +44 -0
  129. package/vendor/src/components/navigation/index.ts +4 -0
  130. package/vendor/src/components/navigation/page-tabs.tsx +67 -0
  131. package/vendor/src/components/navigation/pagination.tsx +179 -0
  132. package/vendor/src/components/navigation/stepper-tabs.tsx +67 -0
  133. package/vendor/src/components/notifications/index.ts +1 -0
  134. package/vendor/src/components/notifications/toast.tsx +259 -0
  135. package/vendor/src/components/overlay/confirm-dialog.tsx +66 -0
  136. package/vendor/src/components/overlay/dialog-actions.tsx +68 -0
  137. package/vendor/src/components/overlay/index.ts +4 -0
  138. package/vendor/src/components/overlay/modal-shell.tsx +93 -0
  139. package/vendor/src/components/overlay/sheet-shell.tsx +212 -0
  140. package/vendor/src/components/patterns/action-system.tsx +116 -0
  141. package/vendor/src/components/patterns/crud-system.tsx +53 -0
  142. package/vendor/src/components/patterns/data-view.tsx +84 -0
  143. package/vendor/src/components/patterns/entity-details.tsx +66 -0
  144. package/vendor/src/components/patterns/filter-builder.tsx +113 -0
  145. package/vendor/src/components/patterns/form-builder-presets.ts +131 -0
  146. package/vendor/src/components/patterns/form-builder.tsx +334 -0
  147. package/vendor/src/components/patterns/index.ts +12 -0
  148. package/vendor/src/components/patterns/public.ts +4 -0
  149. package/vendor/src/components/patterns/resource-detail-page.tsx +160 -0
  150. package/vendor/src/components/patterns/resource-page.tsx +159 -0
  151. package/vendor/src/components/patterns/resource-system.tsx +61 -0
  152. package/vendor/src/components/patterns/settings-section.tsx +46 -0
  153. package/vendor/src/components/patterns/status-system.tsx +89 -0
  154. package/vendor/src/components/theme-provider.tsx +51 -0
  155. package/vendor/src/components/ui/badge.tsx +52 -0
  156. package/vendor/src/components/ui/button.tsx +61 -0
  157. package/vendor/src/components/ui/card.tsx +103 -0
  158. package/vendor/src/components/ui/checkbox.tsx +82 -0
  159. package/vendor/src/components/ui/collapse.tsx +126 -0
  160. package/vendor/src/components/ui/command.tsx +194 -0
  161. package/vendor/src/components/ui/dialog.tsx +160 -0
  162. package/vendor/src/components/ui/divider.tsx +46 -0
  163. package/vendor/src/components/ui/dropdown-menu.tsx +266 -0
  164. package/vendor/src/components/ui/input-group.tsx +158 -0
  165. package/vendor/src/components/ui/input.tsx +20 -0
  166. package/vendor/src/components/ui/popover.tsx +90 -0
  167. package/vendor/src/components/ui/segmented-control.tsx +78 -0
  168. package/vendor/src/components/ui/select.tsx +201 -0
  169. package/vendor/src/components/ui/skeleton.tsx +75 -0
  170. package/vendor/src/components/ui/spinner.tsx +50 -0
  171. package/vendor/src/components/ui/switch.tsx +71 -0
  172. package/vendor/src/components/ui/table.tsx +114 -0
  173. package/vendor/src/components/ui/tabs.tsx +55 -0
  174. package/vendor/src/components/ui/textarea.tsx +18 -0
  175. package/vendor/src/components/ui/tooltip.tsx +38 -0
  176. package/vendor/src/components/upload/file-upload.tsx +483 -0
  177. package/vendor/src/components/upload/image-upload.tsx +118 -0
  178. package/vendor/src/components/upload/index.ts +2 -0
  179. package/vendor/src/components/wizard/index.ts +2 -0
  180. package/vendor/src/components/wizard/stepper.tsx +53 -0
  181. package/vendor/src/components/wizard/wizard.tsx +60 -0
  182. package/vendor/src/families/card-family.ts +28 -0
  183. package/vendor/src/families/catalog.ts +96 -0
  184. package/vendor/src/families/data-table-family.ts +31 -0
  185. package/vendor/src/families/docs-adoption.ts +103 -0
  186. package/vendor/src/families/docs-groups.ts +209 -0
  187. package/vendor/src/families/docs-queries.ts +84 -0
  188. package/vendor/src/families/docs-routing.ts +89 -0
  189. package/vendor/src/families/form-family.ts +45 -0
  190. package/vendor/src/families/index.ts +17 -0
  191. package/vendor/src/families/input-family.ts +61 -0
  192. package/vendor/src/families/member-metadata.ts +466 -0
  193. package/vendor/src/families/member-queries.ts +28 -0
  194. package/vendor/src/families/member-snippet-queries.ts +54 -0
  195. package/vendor/src/families/member-snippets.ts +673 -0
  196. package/vendor/src/families/migration-map.ts +79 -0
  197. package/vendor/src/families/queries.ts +63 -0
  198. package/vendor/src/families/select-family.ts +33 -0
  199. package/vendor/src/families/views.ts +81 -0
  200. package/vendor/src/hooks/index.ts +6 -0
  201. package/vendor/src/hooks/use-before-unload-when-dirty.ts +21 -0
  202. package/vendor/src/hooks/use-data-table-view-state.ts +122 -0
  203. package/vendor/src/hooks/use-debounce.ts +52 -0
  204. package/vendor/src/hooks/use-disclosure.ts +38 -0
  205. package/vendor/src/hooks/use-is-mobile.ts +28 -0
  206. package/vendor/src/hooks/use-session-storage-state.ts +85 -0
  207. package/vendor/src/index.ts +38 -0
  208. package/vendor/src/lib/utils.ts +6 -0
  209. package/vendor/templates/components/button.tsx +0 -0
  210. package/vendor/templates/components/data-table.tsx +0 -0
  211. package/vendor/templates/components/input.tsx +0 -0
  212. package/vendor/templates/lib/utils.ts +0 -0
  213. package/vendor/templates/styles/globals.css +0 -0
@@ -0,0 +1,673 @@
1
+ export type ComponentSnippetTab = "tsx" | "cli"
2
+ export type ComponentSnippetVariant =
3
+ | "basic"
4
+ | "form"
5
+ | "async"
6
+ | "advanced"
7
+ | "migration"
8
+ | "cli"
9
+
10
+ export type ComponentSnippetExample = {
11
+ component: string
12
+ title: string
13
+ description: string
14
+ language: ComponentSnippetTab
15
+ variant: ComponentSnippetVariant
16
+ code: string
17
+ }
18
+
19
+ export const componentSnippetExamples: ComponentSnippetExample[] = [
20
+ {
21
+ component: "Input",
22
+ title: "Basic text field",
23
+ description: "Start with the base input before reaching for presets.",
24
+ language: "tsx",
25
+ variant: "basic",
26
+ code: `import { Input } from "azamat-ui-kit"
27
+
28
+ <Input placeholder="Email address" />`,
29
+ },
30
+ {
31
+ component: "SearchInput",
32
+ title: "Search filter",
33
+ description: "Use the search preset for list and table filtering.",
34
+ language: "tsx",
35
+ variant: "basic",
36
+ code: `import { SearchInput } from "azamat-ui-kit"
37
+
38
+ <SearchInput value={query} onValueChange={setQuery} placeholder="Search products..." />`,
39
+ },
40
+ {
41
+ component: "ClearableInput",
42
+ title: "Clearable field",
43
+ description: "Use the clearable preset when reset should stay inside the input chrome.",
44
+ language: "tsx",
45
+ variant: "basic",
46
+ code: `import { ClearableInput } from "azamat-ui-kit"
47
+
48
+ <ClearableInput value={keyword} onValueChange={setKeyword} placeholder="Keyword" />`,
49
+ },
50
+ {
51
+ component: "PasswordInput",
52
+ title: "Password field",
53
+ description: "Use the password preset when reveal and hide behavior matters.",
54
+ language: "tsx",
55
+ variant: "basic",
56
+ code: `import { PasswordInput } from "azamat-ui-kit"
57
+
58
+ <PasswordInput value={password} onValueChange={setPassword} placeholder="Password" />`,
59
+ },
60
+ {
61
+ component: "NumberInput",
62
+ title: "Parsed numeric value",
63
+ description: "Keep both raw entry and parsed number when needed.",
64
+ language: "tsx",
65
+ variant: "basic",
66
+ code: `import { NumberInput } from "azamat-ui-kit"
67
+
68
+ <NumberInput
69
+ min={0}
70
+ step={1}
71
+ value={quantity}
72
+ onNumberChange={setQuantity}
73
+ placeholder="Quantity"
74
+ />`,
75
+ },
76
+ {
77
+ component: "MaskedInput",
78
+ title: "Custom mask",
79
+ description: "MaskedInput is for custom displayed formatting over a raw string value.",
80
+ language: "tsx",
81
+ variant: "advanced",
82
+ code: `import { MaskedInput } from "azamat-ui-kit"
83
+
84
+ <MaskedInput
85
+ value={invoiceCode}
86
+ onValueChange={(masked) => setInvoiceCode(masked)}
87
+ mask={(value) => value.toUpperCase()}
88
+ />`,
89
+ },
90
+ {
91
+ component: "PhoneInput",
92
+ title: "Formatted phone entry",
93
+ description: "Phone input keeps visible formatting while emitting a normalized value.",
94
+ language: "tsx",
95
+ variant: "basic",
96
+ code: `import { PhoneInput } from "azamat-ui-kit"
97
+
98
+ <PhoneInput value={phone} onValueChange={(masked) => setPhone(masked)} />`,
99
+ },
100
+ {
101
+ component: "MoneyInput",
102
+ title: "Price field",
103
+ description: "Prefix and suffix keep financial context in the field chrome.",
104
+ language: "tsx",
105
+ variant: "basic",
106
+ code: `import { MoneyInput } from "azamat-ui-kit"
107
+
108
+ <MoneyInput
109
+ prefix="$"
110
+ value={price}
111
+ onValueChange={(amount) => setPrice(amount)}
112
+ placeholder="0.00"
113
+ />`,
114
+ },
115
+ {
116
+ component: "QuantityInput",
117
+ title: "Stepper quantity field",
118
+ description: "Use quantity input when typing and step controls should live together.",
119
+ language: "tsx",
120
+ variant: "basic",
121
+ code: `import { QuantityInput } from "azamat-ui-kit"
122
+
123
+ <QuantityInput value={count} min={1} max={20} onValueChange={setCount} />`,
124
+ },
125
+ {
126
+ component: "QuantityStepper",
127
+ title: "Stepper-only control",
128
+ description: "Use the stepper when free typing should be avoided entirely.",
129
+ language: "tsx",
130
+ variant: "advanced",
131
+ code: `import { QuantityStepper } from "azamat-ui-kit"
132
+
133
+ <QuantityStepper value={count} min={1} max={10} onValueChange={setCount} />`,
134
+ },
135
+ {
136
+ component: "OtpInput",
137
+ title: "Verification code",
138
+ description: "OtpInput handles per-cell focus and paste behavior for short codes.",
139
+ language: "tsx",
140
+ variant: "basic",
141
+ code: `import { OtpInput } from "azamat-ui-kit"
142
+
143
+ <OtpInput value={otp} onValueChange={setOtp} length={6} />`,
144
+ },
145
+ {
146
+ component: "ColorInput",
147
+ title: "Native color picker",
148
+ description: "Use the color preset when browser-native selection is sufficient.",
149
+ language: "tsx",
150
+ variant: "basic",
151
+ code: `import { ColorInput } from "azamat-ui-kit"
152
+
153
+ <ColorInput value={brandColor} onValueChange={setBrandColor} />`,
154
+ },
155
+ {
156
+ component: "DateInput",
157
+ title: "Simple date capture",
158
+ description: "Use the native wrapper when a full date picker is unnecessary.",
159
+ language: "tsx",
160
+ variant: "basic",
161
+ code: `import { DateInput } from "azamat-ui-kit"
162
+
163
+ <DateInput value={startDate} onValueChange={setStartDate} />`,
164
+ },
165
+ {
166
+ component: "DateRangeInput",
167
+ title: "From and to range",
168
+ description: "Use the range preset for lightweight report and filter intervals.",
169
+ language: "tsx",
170
+ variant: "basic",
171
+ code: `import { DateRangeInput } from "azamat-ui-kit"
172
+
173
+ <DateRangeInput value={range} onValueChange={setRange} />`,
174
+ },
175
+ {
176
+ component: "FormInput",
177
+ title: "Form field wrapper",
178
+ description: "Use the universal RHF wrapper when field framing and validation should stay consistent.",
179
+ language: "tsx",
180
+ variant: "form",
181
+ code: `import { FormInput } from "azamat-ui-kit"
182
+
183
+ <FormInput control={control} name="email" label="Email" placeholder="Email address" />`,
184
+ },
185
+ {
186
+ component: "FormInput",
187
+ title: "Universal search wrapper",
188
+ description: "Use kind switching instead of separate wrapper names for common field variants.",
189
+ language: "tsx",
190
+ variant: "form",
191
+ code: `import { FormInput } from "azamat-ui-kit"
192
+
193
+ <FormInput control={control} name="query" kind="search" label="Search" placeholder="Search products..." />`,
194
+ },
195
+ {
196
+ component: "FormInput",
197
+ title: "Universal number wrapper",
198
+ description: "Parsed numeric form state can stay behind the same wrapper contract.",
199
+ language: "tsx",
200
+ variant: "form",
201
+ code: `import { FormInput } from "azamat-ui-kit"
202
+
203
+ <FormInput control={control} name="quantity" kind="number" label="Quantity" min={0} />`,
204
+ },
205
+ {
206
+ component: "FormSearchInput",
207
+ title: "Search alias migration",
208
+ description: "Keep this only while migrating old forms to the universal FormInput entry.",
209
+ language: "tsx",
210
+ variant: "migration",
211
+ code: `import { FormSearchInput } from "azamat-ui-kit"
212
+
213
+ <FormSearchInput control={control} name="query" label="Search" />
214
+
215
+ // New work:
216
+ // <FormInput control={control} name="query" kind="search" label="Search" />`,
217
+ },
218
+ {
219
+ component: "FormPasswordInput",
220
+ title: "Password alias migration",
221
+ description: "Keep this only while migrating old forms to the universal FormInput entry.",
222
+ language: "tsx",
223
+ variant: "migration",
224
+ code: `import { FormPasswordInput } from "azamat-ui-kit"
225
+
226
+ <FormPasswordInput control={control} name="password" label="Password" />
227
+
228
+ // New work:
229
+ // <FormInput control={control} name="password" kind="password" label="Password" />`,
230
+ },
231
+ {
232
+ component: "FormNumberInput",
233
+ title: "Number alias migration",
234
+ description: "Keep this only while migrating old forms to the universal FormInput entry.",
235
+ language: "tsx",
236
+ variant: "migration",
237
+ code: `import { FormNumberInput } from "azamat-ui-kit"
238
+
239
+ <FormNumberInput control={control} name="quantity" label="Quantity" min={0} />
240
+
241
+ // New work:
242
+ // <FormInput control={control} name="quantity" kind="number" label="Quantity" min={0} />`,
243
+ },
244
+ {
245
+ component: "FormPhoneInput",
246
+ title: "Phone alias migration",
247
+ description: "Keep this only while migrating old forms to the universal FormInput entry.",
248
+ language: "tsx",
249
+ variant: "migration",
250
+ code: `import { FormPhoneInput } from "azamat-ui-kit"
251
+
252
+ <FormPhoneInput control={control} name="phone" label="Phone" />
253
+
254
+ // New work:
255
+ // <FormInput control={control} name="phone" kind="phone" label="Phone" />`,
256
+ },
257
+ {
258
+ component: "FormDateInput",
259
+ title: "Date alias migration",
260
+ description: "Keep this only while migrating old forms to the universal FormInput entry.",
261
+ language: "tsx",
262
+ variant: "migration",
263
+ code: `import { FormDateInput } from "azamat-ui-kit"
264
+
265
+ <FormDateInput control={control} name="startDate" label="Start date" />
266
+
267
+ // New work:
268
+ // <FormInput control={control} name="startDate" kind="date" label="Start date" />`,
269
+ },
270
+ {
271
+ component: "FormDateRangeInput",
272
+ title: "Form date range",
273
+ description: "Use the plain range wrapper for submitted from/to date objects.",
274
+ language: "tsx",
275
+ variant: "form",
276
+ code: `import { FormDateRangeInput } from "azamat-ui-kit"
277
+
278
+ <FormDateRangeInput control={control} name="period" label="Period" />`,
279
+ },
280
+ {
281
+ component: "TagInput",
282
+ title: "Freeform tokens",
283
+ description: "Only reach for TagInput when repeated freeform values are truly required.",
284
+ language: "tsx",
285
+ variant: "advanced",
286
+ code: `import { TagInput } from "azamat-ui-kit"
287
+
288
+ <TagInput value={tags} onValueChange={setTags} placeholder="Add tag" />`,
289
+ },
290
+
291
+ {
292
+ component: "Select",
293
+ title: "Base select",
294
+ description: "Start with the primitive select for standard single-choice flows.",
295
+ language: "tsx",
296
+ variant: "basic",
297
+ code: `import { Select } from "azamat-ui-kit"
298
+
299
+ <Select
300
+ value={status}
301
+ onValueChange={setStatus}
302
+ options={[
303
+ { label: "Active", value: "active" },
304
+ { label: "Archived", value: "archived" },
305
+ ]}
306
+ />`,
307
+ },
308
+ {
309
+ component: "SimpleSelect",
310
+ title: "Static options",
311
+ description: "Use the simple preset for compact static option lists.",
312
+ language: "tsx",
313
+ variant: "basic",
314
+ code: `import { SimpleSelect } from "azamat-ui-kit"
315
+
316
+ <SimpleSelect value={role} onValueChange={setRole} options={roleOptions} />`,
317
+ },
318
+ {
319
+ component: "AsyncSelect",
320
+ title: "Remote search",
321
+ description: "AsyncSelect should own the remote option loading flow.",
322
+ language: "tsx",
323
+ variant: "async",
324
+ code: `import { AsyncSelect } from "azamat-ui-kit"
325
+
326
+ <AsyncSelect
327
+ value={userId}
328
+ loadOptions={loadUsers}
329
+ onValueChange={setUserId}
330
+ placeholder="Search users..."
331
+ />`,
332
+ },
333
+ {
334
+ component: "AsyncMultiSelect",
335
+ title: "Remote multi select",
336
+ description: "Use the async multi preset when selected tags should stay visible.",
337
+ language: "tsx",
338
+ variant: "async",
339
+ code: `import { AsyncMultiSelect } from "azamat-ui-kit"
340
+
341
+ <AsyncMultiSelect
342
+ value={assigneeIds}
343
+ loadOptions={loadUsers}
344
+ onValueChange={setAssigneeIds}
345
+ />`,
346
+ },
347
+ {
348
+ component: "Combobox",
349
+ title: "Keyboard-first selection",
350
+ description: "Combobox is useful when fast filtering matters more than strict select semantics.",
351
+ language: "tsx",
352
+ variant: "basic",
353
+ code: `import { Combobox } from "azamat-ui-kit"
354
+
355
+ <Combobox value={country} onValueChange={setCountry} options={countryOptions} />`,
356
+ },
357
+ {
358
+ component: "FormSelect",
359
+ title: "Form select wrapper",
360
+ description: "Use the universal RHF wrapper when select state belongs to submitted form data.",
361
+ language: "tsx",
362
+ variant: "form",
363
+ code: `import { FormSelect } from "azamat-ui-kit"
364
+
365
+ <FormSelect control={control} name="role" label="Role" options={roleOptions} />`,
366
+ },
367
+ {
368
+ component: "FormSelect",
369
+ title: "Universal async wrapper",
370
+ description: "Remote option loading can stay behind the same select wrapper contract.",
371
+ language: "tsx",
372
+ variant: "form",
373
+ code: `import { FormSelect } from "azamat-ui-kit"
374
+
375
+ <FormSelect control={control} name="ownerId" kind="async" label="Owner" loadOptions={loadUsers} />`,
376
+ },
377
+ {
378
+ component: "FormAsyncSelect",
379
+ title: "Async alias migration",
380
+ description: "Keep this only while migrating old forms to the universal FormSelect entry.",
381
+ language: "tsx",
382
+ variant: "migration",
383
+ code: `import { FormAsyncSelect } from "azamat-ui-kit"
384
+
385
+ <FormAsyncSelect control={control} name="ownerId" label="Owner" loadOptions={loadUsers} />
386
+
387
+ // New work:
388
+ // <FormSelect control={control} name="ownerId" kind="async" label="Owner" loadOptions={loadUsers} />`,
389
+ },
390
+
391
+ {
392
+ component: "Card",
393
+ title: "Base card",
394
+ description: "Use the base card when you need neutral composition freedom.",
395
+ language: "tsx",
396
+ variant: "basic",
397
+ code: `import { Card, CardContent, CardHeader, CardTitle } from "azamat-ui-kit"
398
+
399
+ <Card>
400
+ <CardHeader>
401
+ <CardTitle>Overview</CardTitle>
402
+ </CardHeader>
403
+ <CardContent>Revenue summary content</CardContent>
404
+ </Card>`,
405
+ },
406
+ {
407
+ component: "InfoCard",
408
+ title: "Metric summary",
409
+ description: "InfoCard is the faster default when the content is already card-shaped.",
410
+ language: "tsx",
411
+ variant: "basic",
412
+ code: `import { InfoCard } from "azamat-ui-kit"
413
+
414
+ <InfoCard title="Revenue" description="Current month" value="$48,000" />`,
415
+ },
416
+ {
417
+ component: "StatCard",
418
+ title: "Compact KPI tile",
419
+ description: "Use stat cards for small dashboard overview rows.",
420
+ language: "tsx",
421
+ variant: "basic",
422
+ code: `import { StatCard } from "azamat-ui-kit"
423
+
424
+ <StatCard title="Active users" value="1,284" change="+12%" />`,
425
+ },
426
+ {
427
+ component: "StatisticCard",
428
+ title: "Structured metric tile",
429
+ description: "Use statistic cards when the metric needs label, value, and support context together.",
430
+ language: "tsx",
431
+ variant: "basic",
432
+ code: `import { StatisticCard } from "azamat-ui-kit"
433
+
434
+ <StatisticCard title="Conversion" value="4.8%" description="Last 30 days" />`,
435
+ },
436
+ {
437
+ component: "EntityCard",
438
+ title: "Entity summary",
439
+ description: "Entity cards work well for compact user and record previews.",
440
+ language: "tsx",
441
+ variant: "basic",
442
+ code: `import { EntityCard } from "azamat-ui-kit"
443
+
444
+ <EntityCard title="Azamat Jurayev" description="Admin user" />`,
445
+ },
446
+ {
447
+ component: "FileCard",
448
+ title: "Attachment preview",
449
+ description: "Use file cards for uploads and attached resources.",
450
+ language: "tsx",
451
+ variant: "basic",
452
+ code: `import { FileCard } from "azamat-ui-kit"
453
+
454
+ <FileCard name="invoice.pdf" size="2.4 MB" />`,
455
+ },
456
+ {
457
+ component: "SmartCard",
458
+ title: "Migration example",
459
+ description: "This exists for legacy migration and should not lead new docs.",
460
+ language: "tsx",
461
+ variant: "migration",
462
+ code: `import { SmartCard } from "azamat-ui-kit"
463
+
464
+ <SmartCard title="Legacy surface" description="Prefer InfoCard for new work." />`,
465
+ },
466
+
467
+ {
468
+ component: "FormFieldShell",
469
+ title: "Custom field shell",
470
+ description: "Use the shell when you are composing a custom control by hand.",
471
+ language: "tsx",
472
+ variant: "basic",
473
+ code: `import { FormFieldShell, Input } from "azamat-ui-kit"
474
+
475
+ <FormFieldShell label="Workspace name" description="Shown across the admin panel.">
476
+ <Input placeholder="Acme HQ" />
477
+ </FormFieldShell>`,
478
+ },
479
+ {
480
+ component: "FormTextarea",
481
+ title: "Textarea wrapper",
482
+ description: "Textarea wrapper keeps validation and copy aligned with other fields.",
483
+ language: "tsx",
484
+ variant: "form",
485
+ code: `import { FormTextarea } from "azamat-ui-kit"
486
+
487
+ <FormTextarea control={control} name="notes" label="Notes" rows={4} />`,
488
+ },
489
+ {
490
+ component: "FormSwitch",
491
+ title: "Boolean field",
492
+ description: "Switch wrappers keep label and description wiring aligned with other form fields.",
493
+ language: "tsx",
494
+ variant: "form",
495
+ code: `import { FormSwitch } from "azamat-ui-kit"
496
+
497
+ <FormSwitch control={control} name="isActive" label="Active" />`,
498
+ },
499
+ {
500
+ component: "FormDatePicker",
501
+ title: "Calendar date field",
502
+ description: "Use the calendar wrapper when native date input is too limited.",
503
+ language: "tsx",
504
+ variant: "form",
505
+ code: `import { FormDatePicker } from "azamat-ui-kit"
506
+
507
+ <FormDatePicker control={control} name="birthday" label="Birthday" />`,
508
+ },
509
+ {
510
+ component: "FormDateRangePicker",
511
+ title: "Calendar range field",
512
+ description: "Use the range picker wrapper for visual date interval selection.",
513
+ language: "tsx",
514
+ variant: "form",
515
+ code: `import { FormDateRangePicker } from "azamat-ui-kit"
516
+
517
+ <FormDateRangePicker control={control} name="reportingRange" label="Reporting range" />`,
518
+ },
519
+ {
520
+ component: "FormBuilder",
521
+ title: "Higher-level form builder",
522
+ description: "FormBuilder is for repeated internal patterns, not simple one-off forms.",
523
+ language: "tsx",
524
+ variant: "advanced",
525
+ code: `import { FormBuilder } from "azamat-ui-kit"
526
+
527
+ <FormBuilder
528
+ control={control}
529
+ fields={[{ name: "email", type: "input", label: "Email" }]}
530
+ />`,
531
+ },
532
+ {
533
+ component: "SmartFormShell",
534
+ title: "Legacy shell",
535
+ description: "Keep this only for migration; new work should prefer explicit form shell composition.",
536
+ language: "tsx",
537
+ variant: "migration",
538
+ code: `import { SmartFormShell } from "azamat-ui-kit"
539
+
540
+ <SmartFormShell title="Legacy settings">{content}</SmartFormShell>`,
541
+ },
542
+
543
+ {
544
+ component: "DataTable",
545
+ title: "Canonical table",
546
+ description: "DataTable owns the main grid surface and table orchestration.",
547
+ language: "tsx",
548
+ variant: "basic",
549
+ code: `import { DataTable } from "azamat-ui-kit"
550
+
551
+ <DataTable columns={columns} data={rows} />`,
552
+ },
553
+ {
554
+ component: "DataTableToolbar",
555
+ title: "Toolbar composition",
556
+ description: "Use the toolbar helper for consistent filters and actions around the grid.",
557
+ language: "tsx",
558
+ variant: "basic",
559
+ code: `import { DataTableToolbar, SearchInput } from "azamat-ui-kit"
560
+
561
+ <DataTableToolbar title="Orders" search={<SearchInput placeholder="Search orders..." />} />`,
562
+ },
563
+ {
564
+ component: "DataTablePagination",
565
+ title: "Pagination controls",
566
+ description: "Use the shared pagination helper to keep table paging UI consistent.",
567
+ language: "tsx",
568
+ variant: "basic",
569
+ code: `import { DataTablePagination } from "azamat-ui-kit"
570
+
571
+ <DataTablePagination pageIndex={pageIndex} pageCount={pageCount} onPageChange={setPageIndex} />`,
572
+ },
573
+ {
574
+ component: "DataTableColumnVisibilityMenu",
575
+ title: "Hide and show columns",
576
+ description: "Column visibility helpers keep personalization aligned with the table system.",
577
+ language: "tsx",
578
+ variant: "advanced",
579
+ code: `import { DataTableColumnVisibilityMenu } from "azamat-ui-kit"
580
+
581
+ <DataTableColumnVisibilityMenu table={table} />`,
582
+ },
583
+ {
584
+ component: "DataTableSortableHeader",
585
+ title: "Sortable header",
586
+ description: "Use the shared header helper instead of custom sort indicator plumbing.",
587
+ language: "tsx",
588
+ variant: "basic",
589
+ code: `import { DataTableSortableHeader } from "azamat-ui-kit"
590
+
591
+ header: ({ column }) => <DataTableSortableHeader column={column}>Name</DataTableSortableHeader>`,
592
+ },
593
+ {
594
+ component: "DataTableRowActions",
595
+ title: "Row actions menu",
596
+ description: "Use shared row actions when each record needs contextual operations.",
597
+ language: "tsx",
598
+ variant: "basic",
599
+ code: `import { DataTableRowActions } from "azamat-ui-kit"
600
+
601
+ <DataTableRowActions actions={[{ key: "edit", label: "Edit", onSelect: openEdit }]} />`,
602
+ },
603
+ {
604
+ component: "DataTableBulkActions",
605
+ title: "Bulk actions bar",
606
+ description: "Bulk actions should appear only when a selection exists.",
607
+ language: "tsx",
608
+ variant: "advanced",
609
+ code: `import { DataTableBulkActions } from "azamat-ui-kit"
610
+
611
+ <DataTableBulkActions rows={selectedRows} actions={[{ key: "delete", label: "Delete selected", onSelect: removeMany }]} />`,
612
+ },
613
+ {
614
+ component: "DataTableViewPresets",
615
+ title: "Preset views",
616
+ description: "Use view presets when users switch between saved table perspectives.",
617
+ language: "tsx",
618
+ variant: "advanced",
619
+ code: `import { DataTableViewPresets } from "azamat-ui-kit"
620
+
621
+ <DataTableViewPresets presets={presets} value={activePreset} onValueChange={setActivePreset} />`,
622
+ },
623
+ {
624
+ component: "createDataTableSelectColumn",
625
+ title: "Selection column factory",
626
+ description: "Use the factory to keep row-selection behavior standardized.",
627
+ language: "tsx",
628
+ variant: "advanced",
629
+ code: `import { createDataTableSelectColumn } from "azamat-ui-kit"
630
+
631
+ const selectColumn = createDataTableSelectColumn()`,
632
+ },
633
+ {
634
+ component: "createDataTableActionsColumn",
635
+ title: "Shared actions column",
636
+ description: "Column factories reduce repeated row action boilerplate.",
637
+ language: "tsx",
638
+ variant: "advanced",
639
+ code: `import { createDataTableActionsColumn } from "azamat-ui-kit"
640
+
641
+ const actionsColumn = createDataTableActionsColumn({
642
+ getActions: (_row, order) => [{ key: "open", label: "Open", onSelect: () => openOrder(order) }],
643
+ })`,
644
+ },
645
+ {
646
+ component: "TableExportMenu",
647
+ title: "Advanced export flow",
648
+ description: "Keep export helpers secondary to the core table experience.",
649
+ language: "tsx",
650
+ variant: "advanced",
651
+ code: `import { TableExportMenu } from "azamat-ui-kit"
652
+
653
+ <TableExportMenu options={[{ key: "csv", label: "Export CSV", onSelect: exportCsv }]} />`,
654
+ },
655
+ {
656
+ component: "TableImportButton",
657
+ title: "Import trigger",
658
+ description: "Keep import controls secondary to the main grid experience.",
659
+ language: "tsx",
660
+ variant: "advanced",
661
+ code: `import { TableImportButton } from "azamat-ui-kit"
662
+
663
+ <TableImportButton onFilesSelect={handleImport} />`,
664
+ },
665
+ {
666
+ component: "Input",
667
+ title: "CLI install",
668
+ description: "Install the package before consuming family-first docs routes.",
669
+ language: "cli",
670
+ variant: "cli",
671
+ code: `npm install azamat-ui-kit`,
672
+ },
673
+ ] as const