tembro 2.1.6 → 2.1.8

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.
@@ -12,7 +12,6 @@ export const documentedPublicComponentSurfaces: readonly PublicComponentSurfaceE
12
12
  { slug: "badge", registryName: "badge", surface: "documented" },
13
13
  { slug: "checkbox", registryName: "checkbox", surface: "documented" },
14
14
  { slug: "overlay", registryName: "dialog", surface: "documented" },
15
- { slug: "form-field", registryName: "form-field-shell", surface: "documented" },
16
15
  { slug: "data-table", registryName: "data-table", surface: "documented" },
17
16
  { slug: "calendar", registryName: "calendar", surface: "documented" },
18
17
  { slug: "date-picker", registryName: "date-picker", surface: "documented" },
@@ -43,7 +42,6 @@ export const standalonePublicComponentSurfaces: readonly PublicComponentSurfaceE
43
42
  { slug: "tree-view", registryName: "tree-view", surface: "standalone" },
44
43
  { slug: "copy-button", registryName: "copy-button", surface: "standalone" },
45
44
  { slug: "section", registryName: "section", surface: "standalone" },
46
- { slug: "sticky-footer-bar", registryName: "sticky-footer-bar", surface: "standalone" },
47
45
  { slug: "calendar-scheduler", registryName: "calendar-scheduler", surface: "standalone" },
48
46
  { slug: "dual-list-picker", registryName: "dual-list-picker", surface: "standalone" },
49
47
  { slug: "menubar", registryName: "menubar", surface: "standalone" },
@@ -257,7 +257,7 @@ export const PACKAGE_IMPORT = "tembro"
257
257
  export const DOCS_APP_NAME = "azamat-ui"
258
258
  export const CLI_INIT_NEXT_COMMAND = `npx ${CLI_PACKAGE_NAME} init --template next --defaults`
259
259
  export const CLI_INIT_VITE_COMMAND = `npx ${CLI_PACKAGE_NAME} init --template vite --defaults`
260
- export const CLI_ADD_COMMAND = `npx ${CLI_PACKAGE_NAME} add button form-input`
260
+ export const CLI_ADD_COMMAND = `npx ${CLI_PACKAGE_NAME} add button input`
261
261
  export const PACKAGE_INSTALL_COMMAND = `${CLI_INIT_NEXT_COMMAND}\n${CLI_ADD_COMMAND}`
262
262
  export const CLI_INSTALL_COMMAND = `npx ${CLI_PACKAGE_NAME} --help`
263
263
  export const CLI_THEME_COMMAND = `npx ${CLI_PACKAGE_NAME} theme`
@@ -1696,13 +1696,7 @@ const componentSurfaceSections: Partial<Record<string, ComponentSurfaceSectionMe
1696
1696
  key: "related",
1697
1697
  title: "Related input patterns",
1698
1698
  description: "Specialized input types for search, masking, numeric entry, and compact structured values.",
1699
- slugs: ["search-input", "password-input", "number-input", "phone-input", "masked-input", "money-input", "quantity-input", "tag-input", "otp-input"],
1700
- },
1701
- {
1702
- key: "integrations",
1703
- title: "Form integrations",
1704
- description: "Use these wrappers when the field needs to plug directly into shared form shells or React Hook Form.",
1705
- slugs: ["form-input", "form-textarea"],
1699
+ slugs: ["search-input", "password-input", "number-input", "phone-input", "masked-input", "money-input", "tag-input", "otp-input"],
1706
1700
  },
1707
1701
  ],
1708
1702
  select: [
@@ -1716,19 +1710,7 @@ const componentSurfaceSections: Partial<Record<string, ComponentSurfaceSectionMe
1716
1710
  key: "related",
1717
1711
  title: "Related select members",
1718
1712
  description: "These members add real behavior such as remote loading or keyboard-first local filtering.",
1719
- slugs: ["simple-select", "async-select", "combobox"],
1720
- },
1721
- {
1722
- key: "integrations",
1723
- title: "Form integrations",
1724
- description: "Use wrapped selects when you need consistent form-level validation, labels, and shell behavior.",
1725
- slugs: ["form-select"],
1726
- },
1727
- {
1728
- key: "compatibility",
1729
- title: "Compatibility aliases",
1730
- description: "Keep older helper routes available for migration, but do not lead with them in new work.",
1731
- slugs: ["async-multi-select", "form-async-select"],
1713
+ slugs: ["async-select", "combobox"],
1732
1714
  },
1733
1715
  ],
1734
1716
  "date-picker": [
@@ -1742,7 +1724,7 @@ const componentSurfaceSections: Partial<Record<string, ComponentSurfaceSectionMe
1742
1724
  key: "integrations",
1743
1725
  title: "Form integrations",
1744
1726
  description: "Use wrapped date fields when validation, labels, and form shell behavior should stay standardized.",
1745
- slugs: ["form-input"],
1727
+ slugs: [],
1746
1728
  },
1747
1729
  ],
1748
1730
  dialog: [
@@ -1764,27 +1746,13 @@ const componentSurfaceSections: Partial<Record<string, ComponentSurfaceSectionMe
1764
1746
  key: "core",
1765
1747
  title: "Sidebar surfaces",
1766
1748
  description: "These pieces define the reusable sidebar surface first, then layer shell framing around it only when the route really needs it.",
1767
- slugs: ["sidebar", "sidebar-nav", "breadcrumbs"],
1749
+ slugs: ["sidebar", "breadcrumbs"],
1768
1750
  },
1769
1751
  {
1770
1752
  key: "related",
1771
1753
  title: "Route-level patterns",
1772
1754
  description: "Use these patterns only after the sidebar and navigation contract are already clear.",
1773
- slugs: ["app-shell", "app-header", "page-container", "section", "toolbar", "split-layout", "sticky-footer-bar"],
1774
- },
1775
- ],
1776
- "page-header": [
1777
- {
1778
- key: "core",
1779
- title: "Page context surfaces",
1780
- description: "Use these pieces to establish page identity, breadcrumbs, meta, and supporting stats.",
1781
- slugs: ["page-header", "breadcrumbs"],
1782
- },
1783
- {
1784
- key: "related",
1785
- title: "Supporting page patterns",
1786
- description: "These supporting pieces sit around the page header when you need compact summary or stat context.",
1787
- slugs: ["stat-card"],
1755
+ slugs: ["section", "toolbar", "split-layout"],
1788
1756
  },
1789
1757
  ],
1790
1758
  "data-table": [
@@ -1823,8 +1791,59 @@ const kitRecommendedSlugs = new Set((kitRegistry?.recommended ?? []).map((slug)
1823
1791
  const kitMigrationAliases = kitRegistry?.migrationAliases ?? {}
1824
1792
  const migrationAliasTargets = new Set(Object.values(kitMigrationAliases))
1825
1793
 
1794
+ const internalComponentCatalogSlugs = new Set([
1795
+ "app-header",
1796
+ "app-sidebar",
1797
+ "app-shell",
1798
+ "async-multi-select",
1799
+ "clearable-input",
1800
+ "combobox",
1801
+ "copy-field",
1802
+ "data-table-actions-column",
1803
+ "data-table-bulk-actions",
1804
+ "data-table-column-visibility-menu",
1805
+ "data-table-pagination",
1806
+ "data-table-row-actions",
1807
+ "data-table-saved-filters",
1808
+ "data-table-select-column",
1809
+ "data-table-sortable-header",
1810
+ "data-table-toolbar",
1811
+ "data-table-view-presets",
1812
+ "date-input",
1813
+ "date-range-input",
1814
+ "file-dropzone",
1815
+ "form",
1816
+ "form-async-select",
1817
+ "form-field",
1818
+ "form-field-shell",
1819
+ "form-input",
1820
+ "form-select",
1821
+ "form-switch",
1822
+ "form-textarea",
1823
+ "hover-card",
1824
+ "input-decorator",
1825
+ "input-value",
1826
+ "inputs",
1827
+ "masked-input",
1828
+ "money-input",
1829
+ "number-input",
1830
+ "page-container",
1831
+ "page-header",
1832
+ "password-input",
1833
+ "phone-input",
1834
+ "quantity-input",
1835
+ "search-input",
1836
+ "section-header",
1837
+ "sidebar-nav",
1838
+ "simple-select",
1839
+ "stat-card",
1840
+ "sticky-footer-bar",
1841
+ "table-export-menu",
1842
+ "table-import-button",
1843
+ ])
1844
+
1826
1845
  const hiddenKitGroups = new Set(["kits"])
1827
- const hiddenKitSlugs = new Set(["all", "dashboard", "calendar-kit", "wizard-kit"])
1846
+ const hiddenKitSlugs = new Set(["all", "dashboard", "calendar-kit", "wizard-kit", ...internalComponentCatalogSlugs])
1828
1847
  const skippedKitGroups = new Set(["hooks"])
1829
1848
 
1830
1849
  const fallbackRegistryCategoryByGroup: Record<string, ComponentCatalogItem["category"]> = {
@@ -1887,7 +1906,10 @@ for (const [group, groupSlugs] of Object.entries(kitGroups)) {
1887
1906
  const aliasTarget = kitMigrationAliases[slug]
1888
1907
  const effectiveSlug = aliasTarget ?? slug
1889
1908
  if (!slug || hiddenKitSlugs.has(slug) || hiddenKitSlugs.has(effectiveSlug)) continue
1890
- if (migrationAliasTargets.has(effectiveSlug) || migrationAliasTargets.has(slug)) continue
1909
+ if (
1910
+ (migrationAliasTargets.has(effectiveSlug) && !isPublicComponentSurfaceSlug(effectiveSlug)) ||
1911
+ (migrationAliasTargets.has(slug) && !isPublicComponentSurfaceSlug(slug))
1912
+ ) continue
1891
1913
  if (baseComponentSlugs.has(effectiveSlug) || generatedComponentCatalog.has(effectiveSlug)) continue
1892
1914
  const category = fallbackRegistryCategoryByGroup[group] ?? "Data Display"
1893
1915
  const icon = fallbackRegistryIconByGroup[group] ?? SparklesIcon
@@ -1909,12 +1931,15 @@ for (const [group, groupSlugs] of Object.entries(kitGroups)) {
1909
1931
  }
1910
1932
 
1911
1933
  const fallbackComponentCatalog = [...generatedComponentCatalog.values()]
1912
- export const componentCatalog: ComponentCatalogItem[] = [...baseComponentCatalog, ...fallbackComponentCatalog]
1934
+ export const componentCatalog: ComponentCatalogItem[] = [...baseComponentCatalog, ...fallbackComponentCatalog].filter(
1935
+ (item) => !internalComponentCatalogSlugs.has(item.slug)
1936
+ )
1913
1937
 
1914
1938
  const packageDocsSurfaceCatalog: ComponentCatalogItem[] = []
1915
1939
 
1916
1940
  const packageDocsSurfaceCatalogMap = new Map(packageDocsSurfaceCatalog.map((item) => [item.slug, item] as const))
1917
1941
  const hiddenPrimaryComponentCatalogSlugs = new Set([
1942
+ ...internalComponentCatalogSlugs,
1918
1943
  "app-sidebar",
1919
1944
  "app-shell",
1920
1945
  "app-header",
@@ -2036,7 +2061,12 @@ export function getComponentDetailSidebarSections(activeSlug?: string): Componen
2036
2061
 
2037
2062
  export function getComponentSurfaceSections(slug: string) {
2038
2063
  const primarySlug = getPrimaryComponentSurfaceSlug(slug)
2039
- return componentSurfaceSections[primarySlug] ?? []
2064
+ return (componentSurfaceSections[primarySlug] ?? [])
2065
+ .map((section) => ({
2066
+ ...section,
2067
+ slugs: section.slugs.filter((sectionSlug) => !internalComponentCatalogSlugs.has(sectionSlug)),
2068
+ }))
2069
+ .filter((section) => section.slugs.length > 0)
2040
2070
  }
2041
2071
 
2042
2072
  export function getPrimaryComponentMemberInventory(surfaceSlug?: string): ComponentSurfaceMemberInventoryItem[] {
@@ -2044,7 +2074,7 @@ export function getPrimaryComponentMemberInventory(surfaceSlug?: string): Compon
2044
2074
 
2045
2075
  return surfaceSlugs.flatMap((currentSurfaceSlug) => {
2046
2076
  const surface = getComponentSurfaceCatalogItem(currentSurfaceSlug)
2047
- const sections = componentSurfaceSections[currentSurfaceSlug] ?? []
2077
+ const sections = getComponentSurfaceSections(currentSurfaceSlug)
2048
2078
 
2049
2079
  return sections.flatMap((section) => {
2050
2080
  const entries: ComponentSurfaceMemberInventoryItem[] = []
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://tembro.dev/registry.schema.json",
3
3
  "name": "tembro",
4
- "version": "2.1.6",
4
+ "version": "2.1.8",
5
5
  "description": "Reusable React + TypeScript UI kit registry",
6
6
  "groups": {
7
7
  "ui": [
@@ -46,30 +46,14 @@
46
46
  ],
47
47
  "inputs": [
48
48
  "async-select",
49
- "combobox",
50
- "masked-input",
51
- "money-input",
52
- "number-input",
53
49
  "otp-input",
54
- "password-input",
55
- "phone-input",
56
- "quantity-input",
57
50
  "quantity-stepper",
58
51
  "rating",
59
- "search-input",
60
- "simple-select",
61
52
  "slider",
62
53
  "tag-input",
63
54
  "inline-editable"
64
55
  ],
65
- "form": [
66
- "form-field-shell",
67
- "form-input",
68
- "form-select",
69
- "form-textarea",
70
- "form-switch",
71
- "form-async-select"
72
- ],
56
+ "form": [],
73
57
  "feedback": [
74
58
  "alert",
75
59
  "loading-state",
@@ -105,15 +89,9 @@
105
89
  "quick-action-grid"
106
90
  ],
107
91
  "layout": [
108
- "app-header",
109
92
  "sidebar",
110
93
  "breadcrumbs",
111
- "page-container",
112
- "section",
113
- "section-header",
114
- "sidebar-nav",
115
- "stat-card",
116
- "sticky-footer-bar"
94
+ "section"
117
95
  ],
118
96
  "filters": [
119
97
  "filter-bar",
@@ -129,8 +107,7 @@
129
107
  ],
130
108
  "upload": [
131
109
  "file-upload",
132
- "image-upload",
133
- "file-dropzone"
110
+ "image-upload"
134
111
  ],
135
112
  "wizard": [
136
113
  "stepper",
@@ -196,14 +173,12 @@
196
173
  "tooltip",
197
174
  "kbd",
198
175
  "sidebar",
199
- "sidebar-nav",
200
176
  "breadcrumbs",
201
177
  "data-state",
202
178
  "loading-state",
203
179
  "progress",
204
180
  "progress-circle",
205
181
  "metric-grid",
206
- "stat-card",
207
182
  "activity-feed",
208
183
  "data-list",
209
184
  "user-card",
@@ -233,12 +208,10 @@
233
208
  ],
234
209
  "sourceCopy": [
235
210
  "sidebar",
236
- "sidebar-nav",
237
211
  "breadcrumbs",
238
212
  "data-state",
239
213
  "loading-state",
240
214
  "progress-circle",
241
- "stat-card",
242
215
  "metric-grid",
243
216
  "activity-feed",
244
217
  "user-card",
@@ -247,22 +220,15 @@
247
220
  "date-picker",
248
221
  "date-range-picker",
249
222
  "file-upload",
250
- "file-dropzone",
251
223
  "use-data-table-view-state",
252
224
  "data-table",
253
- "form-input",
254
- "form-select",
255
- "form-textarea",
256
- "form-switch",
257
225
  "trend-card",
258
226
  "notification-center",
259
227
  "command-bar"
260
228
  ],
261
229
  "system": [
262
230
  "data-table",
263
- "data-table-view-presets",
264
- "sidebar",
265
- "sidebar-nav"
231
+ "sidebar"
266
232
  ]
267
233
  },
268
234
  "publicSurface": {
@@ -274,7 +240,6 @@
274
240
  "badge",
275
241
  "checkbox",
276
242
  "dialog",
277
- "form-field-shell",
278
243
  "data-table",
279
244
  "calendar",
280
245
  "date-picker",
@@ -304,7 +269,6 @@
304
269
  "tree-view",
305
270
  "copy-button",
306
271
  "section",
307
- "sticky-footer-bar",
308
272
  "calendar-scheduler",
309
273
  "dual-list-picker",
310
274
  "menubar",
@@ -334,8 +298,40 @@
334
298
  "simple-select": "select",
335
299
  "combobox": "select",
336
300
  "async-multi-select": "async-select",
337
- "form-async-select": "form-select",
301
+ "form-async-select": "select",
338
302
  "app-sidebar": "sidebar",
339
- "smart-card": "info-card"
303
+ "smart-card": "info-card",
304
+ "app-header": "sidebar",
305
+ "app-shell": "sidebar",
306
+ "copy-field": "copy-button",
307
+ "file-dropzone": "file-upload",
308
+ "form-field-shell": "input",
309
+ "form-input": "input",
310
+ "form-select": "select",
311
+ "form-switch": "switch",
312
+ "form-textarea": "textarea",
313
+ "hover-card": "tooltip",
314
+ "page-container": "sidebar",
315
+ "page-header": "breadcrumbs",
316
+ "section-header": "section",
317
+ "sidebar-nav": "sidebar",
318
+ "stat-card": "metric-grid",
319
+ "sticky-footer-bar": "sidebar",
320
+ "input-decorator": "input",
321
+ "input-value": "input",
322
+ "inputs": "input",
323
+ "form": "input",
324
+ "data-table-actions-column": "data-table",
325
+ "data-table-bulk-actions": "data-table",
326
+ "data-table-column-visibility-menu": "data-table",
327
+ "data-table-pagination": "data-table",
328
+ "data-table-row-actions": "data-table",
329
+ "data-table-saved-filters": "data-table",
330
+ "data-table-select-column": "data-table",
331
+ "data-table-sortable-header": "data-table",
332
+ "data-table-toolbar": "data-table",
333
+ "data-table-view-presets": "data-table",
334
+ "table-export-menu": "data-table",
335
+ "table-import-button": "data-table"
340
336
  }
341
337
  }
package/registry.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://tembro.dev/registry.schema.json",
3
3
  "name": "tembro",
4
- "version": "2.1.6",
4
+ "version": "2.1.8",
5
5
  "description": "Reusable React + TypeScript UI kit registry",
6
6
  "groups": {
7
7
  "ui": [
@@ -46,30 +46,14 @@
46
46
  ],
47
47
  "inputs": [
48
48
  "async-select",
49
- "combobox",
50
- "masked-input",
51
- "money-input",
52
- "number-input",
53
49
  "otp-input",
54
- "password-input",
55
- "phone-input",
56
- "quantity-input",
57
50
  "quantity-stepper",
58
51
  "rating",
59
- "search-input",
60
- "simple-select",
61
52
  "slider",
62
53
  "tag-input",
63
54
  "inline-editable"
64
55
  ],
65
- "form": [
66
- "form-field-shell",
67
- "form-input",
68
- "form-select",
69
- "form-textarea",
70
- "form-switch",
71
- "form-async-select"
72
- ],
56
+ "form": [],
73
57
  "feedback": [
74
58
  "alert",
75
59
  "loading-state",
@@ -105,15 +89,9 @@
105
89
  "quick-action-grid"
106
90
  ],
107
91
  "layout": [
108
- "app-header",
109
92
  "sidebar",
110
93
  "breadcrumbs",
111
- "page-container",
112
- "section",
113
- "section-header",
114
- "sidebar-nav",
115
- "stat-card",
116
- "sticky-footer-bar"
94
+ "section"
117
95
  ],
118
96
  "filters": [
119
97
  "filter-bar",
@@ -129,8 +107,7 @@
129
107
  ],
130
108
  "upload": [
131
109
  "file-upload",
132
- "image-upload",
133
- "file-dropzone"
110
+ "image-upload"
134
111
  ],
135
112
  "wizard": [
136
113
  "stepper",
@@ -196,14 +173,12 @@
196
173
  "tooltip",
197
174
  "kbd",
198
175
  "sidebar",
199
- "sidebar-nav",
200
176
  "breadcrumbs",
201
177
  "data-state",
202
178
  "loading-state",
203
179
  "progress",
204
180
  "progress-circle",
205
181
  "metric-grid",
206
- "stat-card",
207
182
  "activity-feed",
208
183
  "data-list",
209
184
  "user-card",
@@ -233,12 +208,10 @@
233
208
  ],
234
209
  "sourceCopy": [
235
210
  "sidebar",
236
- "sidebar-nav",
237
211
  "breadcrumbs",
238
212
  "data-state",
239
213
  "loading-state",
240
214
  "progress-circle",
241
- "stat-card",
242
215
  "metric-grid",
243
216
  "activity-feed",
244
217
  "user-card",
@@ -247,22 +220,15 @@
247
220
  "date-picker",
248
221
  "date-range-picker",
249
222
  "file-upload",
250
- "file-dropzone",
251
223
  "use-data-table-view-state",
252
224
  "data-table",
253
- "form-input",
254
- "form-select",
255
- "form-textarea",
256
- "form-switch",
257
225
  "trend-card",
258
226
  "notification-center",
259
227
  "command-bar"
260
228
  ],
261
229
  "system": [
262
230
  "data-table",
263
- "data-table-view-presets",
264
- "sidebar",
265
- "sidebar-nav"
231
+ "sidebar"
266
232
  ]
267
233
  },
268
234
  "publicSurface": {
@@ -274,7 +240,6 @@
274
240
  "badge",
275
241
  "checkbox",
276
242
  "dialog",
277
- "form-field-shell",
278
243
  "data-table",
279
244
  "calendar",
280
245
  "date-picker",
@@ -304,7 +269,6 @@
304
269
  "tree-view",
305
270
  "copy-button",
306
271
  "section",
307
- "sticky-footer-bar",
308
272
  "calendar-scheduler",
309
273
  "dual-list-picker",
310
274
  "menubar",
@@ -334,8 +298,40 @@
334
298
  "simple-select": "select",
335
299
  "combobox": "select",
336
300
  "async-multi-select": "async-select",
337
- "form-async-select": "form-select",
301
+ "form-async-select": "select",
338
302
  "app-sidebar": "sidebar",
339
- "smart-card": "info-card"
303
+ "smart-card": "info-card",
304
+ "app-header": "sidebar",
305
+ "app-shell": "sidebar",
306
+ "copy-field": "copy-button",
307
+ "file-dropzone": "file-upload",
308
+ "form-field-shell": "input",
309
+ "form-input": "input",
310
+ "form-select": "select",
311
+ "form-switch": "switch",
312
+ "form-textarea": "textarea",
313
+ "hover-card": "tooltip",
314
+ "page-container": "sidebar",
315
+ "page-header": "breadcrumbs",
316
+ "section-header": "section",
317
+ "sidebar-nav": "sidebar",
318
+ "stat-card": "metric-grid",
319
+ "sticky-footer-bar": "sidebar",
320
+ "input-decorator": "input",
321
+ "input-value": "input",
322
+ "inputs": "input",
323
+ "form": "input",
324
+ "data-table-actions-column": "data-table",
325
+ "data-table-bulk-actions": "data-table",
326
+ "data-table-column-visibility-menu": "data-table",
327
+ "data-table-pagination": "data-table",
328
+ "data-table-row-actions": "data-table",
329
+ "data-table-saved-filters": "data-table",
330
+ "data-table-select-column": "data-table",
331
+ "data-table-sortable-header": "data-table",
332
+ "data-table-toolbar": "data-table",
333
+ "data-table-view-presets": "data-table",
334
+ "table-export-menu": "data-table",
335
+ "table-import-button": "data-table"
340
336
  }
341
337
  }