tembro 2.1.5 → 2.1.7

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,33 @@ 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-shell",
1797
+ "async-multi-select",
1798
+ "clearable-input",
1799
+ "copy-field",
1800
+ "file-dropzone",
1801
+ "form-async-select",
1802
+ "form-field",
1803
+ "form-field-shell",
1804
+ "form-input",
1805
+ "form-select",
1806
+ "form-switch",
1807
+ "form-textarea",
1808
+ "hover-card",
1809
+ "page-container",
1810
+ "page-header",
1811
+ "quantity-input",
1812
+ "section-header",
1813
+ "sidebar-nav",
1814
+ "simple-select",
1815
+ "stat-card",
1816
+ "sticky-footer-bar",
1817
+ ])
1818
+
1826
1819
  const hiddenKitGroups = new Set(["kits"])
1827
- const hiddenKitSlugs = new Set(["all", "dashboard", "calendar-kit", "wizard-kit"])
1820
+ const hiddenKitSlugs = new Set(["all", "dashboard", "calendar-kit", "wizard-kit", ...internalComponentCatalogSlugs])
1828
1821
  const skippedKitGroups = new Set(["hooks"])
1829
1822
 
1830
1823
  const fallbackRegistryCategoryByGroup: Record<string, ComponentCatalogItem["category"]> = {
@@ -1887,7 +1880,10 @@ for (const [group, groupSlugs] of Object.entries(kitGroups)) {
1887
1880
  const aliasTarget = kitMigrationAliases[slug]
1888
1881
  const effectiveSlug = aliasTarget ?? slug
1889
1882
  if (!slug || hiddenKitSlugs.has(slug) || hiddenKitSlugs.has(effectiveSlug)) continue
1890
- if (migrationAliasTargets.has(effectiveSlug) || migrationAliasTargets.has(slug)) continue
1883
+ if (
1884
+ (migrationAliasTargets.has(effectiveSlug) && !isPublicComponentSurfaceSlug(effectiveSlug)) ||
1885
+ (migrationAliasTargets.has(slug) && !isPublicComponentSurfaceSlug(slug))
1886
+ ) continue
1891
1887
  if (baseComponentSlugs.has(effectiveSlug) || generatedComponentCatalog.has(effectiveSlug)) continue
1892
1888
  const category = fallbackRegistryCategoryByGroup[group] ?? "Data Display"
1893
1889
  const icon = fallbackRegistryIconByGroup[group] ?? SparklesIcon
@@ -1909,12 +1905,15 @@ for (const [group, groupSlugs] of Object.entries(kitGroups)) {
1909
1905
  }
1910
1906
 
1911
1907
  const fallbackComponentCatalog = [...generatedComponentCatalog.values()]
1912
- export const componentCatalog: ComponentCatalogItem[] = [...baseComponentCatalog, ...fallbackComponentCatalog]
1908
+ export const componentCatalog: ComponentCatalogItem[] = [...baseComponentCatalog, ...fallbackComponentCatalog].filter(
1909
+ (item) => !internalComponentCatalogSlugs.has(item.slug)
1910
+ )
1913
1911
 
1914
1912
  const packageDocsSurfaceCatalog: ComponentCatalogItem[] = []
1915
1913
 
1916
1914
  const packageDocsSurfaceCatalogMap = new Map(packageDocsSurfaceCatalog.map((item) => [item.slug, item] as const))
1917
1915
  const hiddenPrimaryComponentCatalogSlugs = new Set([
1916
+ ...internalComponentCatalogSlugs,
1918
1917
  "app-sidebar",
1919
1918
  "app-shell",
1920
1919
  "app-header",
@@ -2036,7 +2035,12 @@ export function getComponentDetailSidebarSections(activeSlug?: string): Componen
2036
2035
 
2037
2036
  export function getComponentSurfaceSections(slug: string) {
2038
2037
  const primarySlug = getPrimaryComponentSurfaceSlug(slug)
2039
- return componentSurfaceSections[primarySlug] ?? []
2038
+ return (componentSurfaceSections[primarySlug] ?? [])
2039
+ .map((section) => ({
2040
+ ...section,
2041
+ slugs: section.slugs.filter((sectionSlug) => !internalComponentCatalogSlugs.has(sectionSlug)),
2042
+ }))
2043
+ .filter((section) => section.slugs.length > 0)
2040
2044
  }
2041
2045
 
2042
2046
  export function getPrimaryComponentMemberInventory(surfaceSlug?: string): ComponentSurfaceMemberInventoryItem[] {
@@ -2044,7 +2048,7 @@ export function getPrimaryComponentMemberInventory(surfaceSlug?: string): Compon
2044
2048
 
2045
2049
  return surfaceSlugs.flatMap((currentSurfaceSlug) => {
2046
2050
  const surface = getComponentSurfaceCatalogItem(currentSurfaceSlug)
2047
- const sections = componentSurfaceSections[currentSurfaceSlug] ?? []
2051
+ const sections = getComponentSurfaceSections(currentSurfaceSlug)
2048
2052
 
2049
2053
  return sections.flatMap((section) => {
2050
2054
  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.5",
4
+ "version": "2.1.7",
5
5
  "description": "Reusable React + TypeScript UI kit registry",
6
6
  "groups": {
7
7
  "ui": [
@@ -53,23 +53,14 @@
53
53
  "otp-input",
54
54
  "password-input",
55
55
  "phone-input",
56
- "quantity-input",
57
56
  "quantity-stepper",
58
57
  "rating",
59
58
  "search-input",
60
- "simple-select",
61
59
  "slider",
62
60
  "tag-input",
63
61
  "inline-editable"
64
62
  ],
65
- "form": [
66
- "form-field-shell",
67
- "form-input",
68
- "form-select",
69
- "form-textarea",
70
- "form-switch",
71
- "form-async-select"
72
- ],
63
+ "form": [],
73
64
  "feedback": [
74
65
  "alert",
75
66
  "loading-state",
@@ -105,15 +96,9 @@
105
96
  "quick-action-grid"
106
97
  ],
107
98
  "layout": [
108
- "app-header",
109
99
  "sidebar",
110
100
  "breadcrumbs",
111
- "page-container",
112
- "section",
113
- "section-header",
114
- "sidebar-nav",
115
- "stat-card",
116
- "sticky-footer-bar"
101
+ "section"
117
102
  ],
118
103
  "filters": [
119
104
  "filter-bar",
@@ -129,8 +114,7 @@
129
114
  ],
130
115
  "upload": [
131
116
  "file-upload",
132
- "image-upload",
133
- "file-dropzone"
117
+ "image-upload"
134
118
  ],
135
119
  "wizard": [
136
120
  "stepper",
@@ -196,14 +180,12 @@
196
180
  "tooltip",
197
181
  "kbd",
198
182
  "sidebar",
199
- "sidebar-nav",
200
183
  "breadcrumbs",
201
184
  "data-state",
202
185
  "loading-state",
203
186
  "progress",
204
187
  "progress-circle",
205
188
  "metric-grid",
206
- "stat-card",
207
189
  "activity-feed",
208
190
  "data-list",
209
191
  "user-card",
@@ -233,12 +215,10 @@
233
215
  ],
234
216
  "sourceCopy": [
235
217
  "sidebar",
236
- "sidebar-nav",
237
218
  "breadcrumbs",
238
219
  "data-state",
239
220
  "loading-state",
240
221
  "progress-circle",
241
- "stat-card",
242
222
  "metric-grid",
243
223
  "activity-feed",
244
224
  "user-card",
@@ -247,13 +227,8 @@
247
227
  "date-picker",
248
228
  "date-range-picker",
249
229
  "file-upload",
250
- "file-dropzone",
251
230
  "use-data-table-view-state",
252
231
  "data-table",
253
- "form-input",
254
- "form-select",
255
- "form-textarea",
256
- "form-switch",
257
232
  "trend-card",
258
233
  "notification-center",
259
234
  "command-bar"
@@ -261,8 +236,7 @@
261
236
  "system": [
262
237
  "data-table",
263
238
  "data-table-view-presets",
264
- "sidebar",
265
- "sidebar-nav"
239
+ "sidebar"
266
240
  ]
267
241
  },
268
242
  "publicSurface": {
@@ -274,7 +248,6 @@
274
248
  "badge",
275
249
  "checkbox",
276
250
  "dialog",
277
- "form-field-shell",
278
251
  "data-table",
279
252
  "calendar",
280
253
  "date-picker",
@@ -304,7 +277,6 @@
304
277
  "tree-view",
305
278
  "copy-button",
306
279
  "section",
307
- "sticky-footer-bar",
308
280
  "calendar-scheduler",
309
281
  "dual-list-picker",
310
282
  "menubar",
@@ -334,8 +306,24 @@
334
306
  "simple-select": "select",
335
307
  "combobox": "select",
336
308
  "async-multi-select": "async-select",
337
- "form-async-select": "form-select",
309
+ "form-async-select": "select",
338
310
  "app-sidebar": "sidebar",
339
- "smart-card": "info-card"
311
+ "smart-card": "info-card",
312
+ "app-header": "sidebar",
313
+ "app-shell": "sidebar",
314
+ "copy-field": "copy-button",
315
+ "file-dropzone": "file-upload",
316
+ "form-field-shell": "input",
317
+ "form-input": "input",
318
+ "form-select": "select",
319
+ "form-switch": "switch",
320
+ "form-textarea": "textarea",
321
+ "hover-card": "tooltip",
322
+ "page-container": "sidebar",
323
+ "page-header": "breadcrumbs",
324
+ "section-header": "section",
325
+ "sidebar-nav": "sidebar",
326
+ "stat-card": "metric-grid",
327
+ "sticky-footer-bar": "sidebar"
340
328
  }
341
329
  }
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.5",
4
+ "version": "2.1.7",
5
5
  "description": "Reusable React + TypeScript UI kit registry",
6
6
  "groups": {
7
7
  "ui": [
@@ -53,23 +53,14 @@
53
53
  "otp-input",
54
54
  "password-input",
55
55
  "phone-input",
56
- "quantity-input",
57
56
  "quantity-stepper",
58
57
  "rating",
59
58
  "search-input",
60
- "simple-select",
61
59
  "slider",
62
60
  "tag-input",
63
61
  "inline-editable"
64
62
  ],
65
- "form": [
66
- "form-field-shell",
67
- "form-input",
68
- "form-select",
69
- "form-textarea",
70
- "form-switch",
71
- "form-async-select"
72
- ],
63
+ "form": [],
73
64
  "feedback": [
74
65
  "alert",
75
66
  "loading-state",
@@ -105,15 +96,9 @@
105
96
  "quick-action-grid"
106
97
  ],
107
98
  "layout": [
108
- "app-header",
109
99
  "sidebar",
110
100
  "breadcrumbs",
111
- "page-container",
112
- "section",
113
- "section-header",
114
- "sidebar-nav",
115
- "stat-card",
116
- "sticky-footer-bar"
101
+ "section"
117
102
  ],
118
103
  "filters": [
119
104
  "filter-bar",
@@ -129,8 +114,7 @@
129
114
  ],
130
115
  "upload": [
131
116
  "file-upload",
132
- "image-upload",
133
- "file-dropzone"
117
+ "image-upload"
134
118
  ],
135
119
  "wizard": [
136
120
  "stepper",
@@ -196,14 +180,12 @@
196
180
  "tooltip",
197
181
  "kbd",
198
182
  "sidebar",
199
- "sidebar-nav",
200
183
  "breadcrumbs",
201
184
  "data-state",
202
185
  "loading-state",
203
186
  "progress",
204
187
  "progress-circle",
205
188
  "metric-grid",
206
- "stat-card",
207
189
  "activity-feed",
208
190
  "data-list",
209
191
  "user-card",
@@ -233,12 +215,10 @@
233
215
  ],
234
216
  "sourceCopy": [
235
217
  "sidebar",
236
- "sidebar-nav",
237
218
  "breadcrumbs",
238
219
  "data-state",
239
220
  "loading-state",
240
221
  "progress-circle",
241
- "stat-card",
242
222
  "metric-grid",
243
223
  "activity-feed",
244
224
  "user-card",
@@ -247,13 +227,8 @@
247
227
  "date-picker",
248
228
  "date-range-picker",
249
229
  "file-upload",
250
- "file-dropzone",
251
230
  "use-data-table-view-state",
252
231
  "data-table",
253
- "form-input",
254
- "form-select",
255
- "form-textarea",
256
- "form-switch",
257
232
  "trend-card",
258
233
  "notification-center",
259
234
  "command-bar"
@@ -261,8 +236,7 @@
261
236
  "system": [
262
237
  "data-table",
263
238
  "data-table-view-presets",
264
- "sidebar",
265
- "sidebar-nav"
239
+ "sidebar"
266
240
  ]
267
241
  },
268
242
  "publicSurface": {
@@ -274,7 +248,6 @@
274
248
  "badge",
275
249
  "checkbox",
276
250
  "dialog",
277
- "form-field-shell",
278
251
  "data-table",
279
252
  "calendar",
280
253
  "date-picker",
@@ -304,7 +277,6 @@
304
277
  "tree-view",
305
278
  "copy-button",
306
279
  "section",
307
- "sticky-footer-bar",
308
280
  "calendar-scheduler",
309
281
  "dual-list-picker",
310
282
  "menubar",
@@ -334,8 +306,24 @@
334
306
  "simple-select": "select",
335
307
  "combobox": "select",
336
308
  "async-multi-select": "async-select",
337
- "form-async-select": "form-select",
309
+ "form-async-select": "select",
338
310
  "app-sidebar": "sidebar",
339
- "smart-card": "info-card"
311
+ "smart-card": "info-card",
312
+ "app-header": "sidebar",
313
+ "app-shell": "sidebar",
314
+ "copy-field": "copy-button",
315
+ "file-dropzone": "file-upload",
316
+ "form-field-shell": "input",
317
+ "form-input": "input",
318
+ "form-select": "select",
319
+ "form-switch": "switch",
320
+ "form-textarea": "textarea",
321
+ "hover-card": "tooltip",
322
+ "page-container": "sidebar",
323
+ "page-header": "breadcrumbs",
324
+ "section-header": "section",
325
+ "sidebar-nav": "sidebar",
326
+ "stat-card": "metric-grid",
327
+ "sticky-footer-bar": "sidebar"
340
328
  }
341
329
  }