uidl-runtime 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +175 -0
  3. package/bin/validate.mjs +44 -0
  4. package/dist/actions/eventBus.d.ts +7 -0
  5. package/dist/actions/index.d.ts +5 -0
  6. package/dist/actions/interpreter.d.ts +54 -0
  7. package/dist/compiler/dashboard.d.ts +10 -0
  8. package/dist/compiler/form.d.ts +22 -0
  9. package/dist/compiler/index.d.ts +16 -0
  10. package/dist/compiler/list.d.ts +20 -0
  11. package/dist/compiler/report.d.ts +10 -0
  12. package/dist/compiler/settings.d.ts +10 -0
  13. package/dist/compiler/tree.d.ts +10 -0
  14. package/dist/compiler/types.d.ts +315 -0
  15. package/dist/compiler/wizard.d.ts +10 -0
  16. package/dist/components/BarcodeAndQRCode.d.ts +29 -0
  17. package/dist/components/charts.d.ts +66 -0
  18. package/dist/components/iconPaths.d.ts +5 -0
  19. package/dist/components/icons.d.ts +31 -0
  20. package/dist/components/primitives.d.ts +411 -0
  21. package/dist/data/adapters/http.d.ts +37 -0
  22. package/dist/data/adapters/inMemory.d.ts +62 -0
  23. package/dist/data/errors.d.ts +15 -0
  24. package/dist/data/index.d.ts +7 -0
  25. package/dist/data/testing/mockHttpServer.d.ts +16 -0
  26. package/dist/data/types.d.ts +74 -0
  27. package/dist/editor/Canvas.d.ts +22 -0
  28. package/dist/editor/Editor.d.ts +18 -0
  29. package/dist/editor/LayerTree.d.ts +12 -0
  30. package/dist/editor/PropertyPanel.d.ts +7 -0
  31. package/dist/editor/StylePanel.d.ts +7 -0
  32. package/dist/editor/ValidationStatus.d.ts +9 -0
  33. package/dist/editor/WidgetPalette.d.ts +6 -0
  34. package/dist/editor/document.d.ts +10 -0
  35. package/dist/editor/index.d.ts +2 -0
  36. package/dist/editor/store.d.ts +46 -0
  37. package/dist/expr/evaluate.d.ts +51 -0
  38. package/dist/hooks/useElementWidth.d.ts +14 -0
  39. package/dist/index.d.ts +61 -0
  40. package/dist/registry/defaults.d.ts +2 -0
  41. package/dist/registry/registry.d.ts +4 -0
  42. package/dist/renderer/RenderNode.d.ts +16 -0
  43. package/dist/renderer/UIDocumentRenderer.d.ts +13 -0
  44. package/dist/renderer/instantiateComponent.d.ts +18 -0
  45. package/dist/renderer/renderDocument.d.ts +63 -0
  46. package/dist/schema/action.schema.json +515 -0
  47. package/dist/schema/design-tokens.schema.json +51 -0
  48. package/dist/schema/jsonSchema.d.ts +11 -0
  49. package/dist/schema/theme-presets.schema.json +952 -0
  50. package/dist/schema/uidl-document.schema.json +187 -0
  51. package/dist/schemas/actions.d.ts +5 -0
  52. package/dist/schemas/document.d.ts +35 -0
  53. package/dist/schemas/theme.d.ts +260 -0
  54. package/dist/services/aiPromptGenerator.d.ts +11 -0
  55. package/dist/state/createDocumentState.d.ts +18 -0
  56. package/dist/state/dataSources.d.ts +58 -0
  57. package/dist/state/index.d.ts +4 -0
  58. package/dist/style.css +2 -0
  59. package/dist/theme/engine.d.ts +9 -0
  60. package/dist/theme/index.d.ts +7 -0
  61. package/dist/theme/meridianPreset.d.ts +5 -0
  62. package/dist/theme/presets.d.ts +5 -0
  63. package/dist/theme/registry.d.ts +15 -0
  64. package/dist/theme/serialize.d.ts +5 -0
  65. package/dist/theme/tailwind.d.ts +11 -0
  66. package/dist/types/actions.d.ts +116 -0
  67. package/dist/types/editor.d.ts +45 -0
  68. package/dist/types/index.d.ts +82 -0
  69. package/dist/types/theme.d.ts +95 -0
  70. package/dist/uidl-runtime.js +98 -0
  71. package/dist/uidl-runtime.js.map +1 -0
  72. package/dist/uidl-runtime.mjs +17779 -0
  73. package/dist/uidl-runtime.mjs.map +1 -0
  74. package/dist/utils/chart.d.ts +12 -0
  75. package/dist/utils/cn.d.ts +1 -0
  76. package/dist/utils/formLayout.d.ts +93 -0
  77. package/dist/utils/i18n.d.ts +132 -0
  78. package/dist/utils/listCell.d.ts +21 -0
  79. package/dist/utils/responsive.d.ts +3 -0
  80. package/dist/utils/tailwind.d.ts +23 -0
  81. package/dist/validate/validateResponsive.d.ts +7 -0
  82. package/dist/version.d.ts +10 -0
  83. package/package.json +109 -0
@@ -0,0 +1,315 @@
1
+ import { UIDLDocument } from '../types';
2
+ import { Language } from '../utils/i18n';
3
+ import { CellFormat } from '../utils/listCell';
4
+ /** Seven recipes the public compiler must support */
5
+ export type PageRecipe = "list" | "form" | "report" | "dashboard" | "settings" | "tree" | "wizard";
6
+ export declare const PAGE_RECIPES: readonly PageRecipe[];
7
+ export declare function isPageRecipe(value: unknown): value is PageRecipe;
8
+ export type LocalizedText = {
9
+ id: string;
10
+ en: string;
11
+ };
12
+ export type FieldWidget = "TextField" | "Textarea" | "Select" | "RadioGroup" | "Checkbox" | "Switch" | "Slider" | "Link" | "Currency" | "Date" | "Table";
13
+ export interface FieldOption {
14
+ value: string;
15
+ label: string;
16
+ }
17
+ /**
18
+ * A Link field's lookup target. `valueKey`/`labelKey` say how a row of that doctype becomes an
19
+ * option — the rows come from the host's query and carry the target's own keys, not
20
+ * `value`/`label`, so without them a Link rendered as an empty select.
21
+ */
22
+ export interface LinkTarget {
23
+ doctype: string;
24
+ valueKey?: string;
25
+ labelKey?: string;
26
+ }
27
+ export interface FieldMeta {
28
+ key: string;
29
+ label: LocalizedText;
30
+ widget: FieldWidget;
31
+ /**
32
+ * How the value is *printed*, when that differs from what the widget implies. Meridian keeps
33
+ * the two apart: a Float and a Currency both edit as a number box, but only Currency prints
34
+ * with a symbol — so a "Rate %" mapped to the Currency widget rendered as `IDR 2`.
35
+ * Unset, the list recipe infers the format from `widget`.
36
+ */
37
+ format?: CellFormat;
38
+ required?: boolean;
39
+ readOnly?: boolean;
40
+ options?: FieldOption[] | LinkTarget;
41
+ placeholder?: string | LocalizedText;
42
+ default?: unknown;
43
+ section?: string;
44
+ }
45
+ export interface ListColumn {
46
+ field: string;
47
+ width?: string;
48
+ align?: "left" | "right" | "center";
49
+ }
50
+ export interface ListFilter {
51
+ field: string;
52
+ widget: "Select" | "TextField" | "DateRange";
53
+ label?: LocalizedText;
54
+ options?: FieldOption[];
55
+ }
56
+ export interface ListSummary {
57
+ label: LocalizedText;
58
+ agg: "sum" | "count" | "avg";
59
+ field: string;
60
+ }
61
+ export interface ListPageMeta {
62
+ name: string;
63
+ label: LocalizedText;
64
+ titleField: string;
65
+ fields: FieldMeta[];
66
+ columns: ListColumn[];
67
+ filters?: ListFilter[];
68
+ defaultSort: {
69
+ field: string;
70
+ dir: "asc" | "desc";
71
+ };
72
+ pageSize?: number;
73
+ statusField?: string;
74
+ summaries?: ListSummary[];
75
+ }
76
+ export interface StateTransition {
77
+ name: string;
78
+ label: LocalizedText;
79
+ from: string[];
80
+ to: string;
81
+ confirm?: LocalizedText;
82
+ }
83
+ export interface DocumentStates {
84
+ field: string;
85
+ values: string[];
86
+ initial: string;
87
+ transitions: StateTransition[];
88
+ }
89
+ export interface ChildTableRef {
90
+ field: string;
91
+ doctype: string;
92
+ }
93
+ export interface FormPageMeta {
94
+ name: string;
95
+ label: LocalizedText;
96
+ titleField: string;
97
+ fields: FieldMeta[];
98
+ states?: DocumentStates;
99
+ childTables?: ChildTableRef[];
100
+ }
101
+ export interface ReportColumn {
102
+ key: string;
103
+ label: LocalizedText | string;
104
+ align?: "left" | "right" | "center";
105
+ width?: string;
106
+ /**
107
+ * How the value is printed — the same ListCell rule a list column follows. A report's
108
+ * money column is money: without this a General Ledger printed `1500000` beside a reference
109
+ * that shows `Rp 1.500.000`.
110
+ */
111
+ format?: CellFormat;
112
+ }
113
+ export interface ReportFilter {
114
+ field: string;
115
+ label: LocalizedText;
116
+ widget: "Select" | "TextField" | "DateRange";
117
+ options?: FieldOption[];
118
+ default?: unknown;
119
+ }
120
+ export interface ReportPageMeta {
121
+ name: string;
122
+ label: LocalizedText;
123
+ columns: ReportColumn[];
124
+ dataSource: string | Array<Record<string, unknown>> | {
125
+ $query: unknown;
126
+ };
127
+ filters?: ReportFilter[];
128
+ /**
129
+ * A headline figure. Give it `agg`/`field` to compute it from the rows the report loaded —
130
+ * a literal `value` is only for a figure the host already knows, and a report that declared
131
+ * `value: 0` printed a hard zero next to rows that plainly summed to more.
132
+ */
133
+ summaries?: Array<{
134
+ label: LocalizedText;
135
+ value?: string | number;
136
+ agg?: "sum" | "count" | "avg";
137
+ field?: string;
138
+ format?: CellFormat;
139
+ }>;
140
+ }
141
+ export interface DashboardKpi {
142
+ label: LocalizedText;
143
+ value: string | number;
144
+ }
145
+ export interface DashboardChart {
146
+ id: string;
147
+ title: LocalizedText;
148
+ type: "bar" | "line" | "donut";
149
+ xKey: string;
150
+ yKey: string;
151
+ dataSource: string | Array<Record<string, unknown>>;
152
+ style?: Record<string, unknown>;
153
+ }
154
+ export interface DashboardShortcut {
155
+ doctype: string;
156
+ label: LocalizedText;
157
+ description?: LocalizedText;
158
+ route?: string;
159
+ }
160
+ export interface DashboardPageMeta {
161
+ name: string;
162
+ label: LocalizedText;
163
+ kpis?: DashboardKpi[];
164
+ charts?: DashboardChart[];
165
+ shortcuts?: DashboardShortcut[];
166
+ dataSources?: Record<string, unknown>;
167
+ }
168
+ export interface SettingsField extends FieldMeta {
169
+ group?: string;
170
+ }
171
+ export interface SettingsSection {
172
+ id: string;
173
+ label: LocalizedText;
174
+ fields: SettingsField[];
175
+ }
176
+ export interface SettingsPageMeta {
177
+ name: string;
178
+ label: LocalizedText;
179
+ sections: SettingsSection[];
180
+ }
181
+ export interface TreeNode {
182
+ key: string;
183
+ label: LocalizedText;
184
+ children?: TreeNode[];
185
+ }
186
+ export interface TreePageMeta {
187
+ name: string;
188
+ label: LocalizedText;
189
+ titleField: string;
190
+ fields: FieldMeta[];
191
+ nodes: TreeNode[];
192
+ parentField?: string;
193
+ }
194
+ export interface WizardStep {
195
+ id: string;
196
+ label: LocalizedText;
197
+ fields: FieldMeta[];
198
+ }
199
+ export interface WizardPageMeta {
200
+ name: string;
201
+ label: LocalizedText;
202
+ steps: WizardStep[];
203
+ }
204
+ export type RecipeMetaMap = {
205
+ list: ListPageMeta;
206
+ form: FormPageMeta;
207
+ report: ReportPageMeta;
208
+ dashboard: DashboardPageMeta;
209
+ settings: SettingsPageMeta;
210
+ tree: TreePageMeta;
211
+ wizard: WizardPageMeta;
212
+ };
213
+ export interface QueryCapability {
214
+ collection: string;
215
+ filterFields?: string[];
216
+ sortableFields?: string[];
217
+ }
218
+ export interface MutationCapability {
219
+ collection: string;
220
+ operations: Array<"create" | "update" | "delete" | "transition">;
221
+ transitions?: string[];
222
+ }
223
+ /**
224
+ * Host-owned allowlist. The compiler MUST NOT emit a `$query` collection,
225
+ * `mutate` collection, or `command` name that is not in this manifest.
226
+ * Unknown values fail closed (validation error, not silent render).
227
+ */
228
+ export interface HostCapabilities {
229
+ /** Allowed `$query.collection` values (e.g. "invoices", "customers"). */
230
+ collections: string[];
231
+ /** Allowed `command` names (e.g. "workspace.rag.search"). */
232
+ commands: string[];
233
+ /** Allowed `mutate.collection` values — if omitted, same as `collections`. */
234
+ mutationCollections?: string[];
235
+ /** Allowed state transition names across all doctypes (optional strict gate). */
236
+ transitions?: string[];
237
+ /** Per-collection query allowlist — if provided, compiler validates filter/sort fields. */
238
+ queries?: QueryCapability[];
239
+ /** Per-collection mutation allowlist — if provided, compiler validates operations. */
240
+ mutations?: MutationCapability[];
241
+ /** Optional hard caps the compiler must respect. */
242
+ limits?: {
243
+ maxPageSize?: number;
244
+ maxFilters?: number;
245
+ };
246
+ }
247
+ export interface UiPolicy {
248
+ lang?: Language;
249
+ density?: "compact" | "comfortable";
250
+ theme?: string;
251
+ /**
252
+ * ISO 4217 code for money columns/fields. Meridian formats currency with the company's own
253
+ * currency; a host that has one declares it here. Left unset, money prints as a grouped
254
+ * number with no symbol rather than guessing one.
255
+ */
256
+ currency?: string;
257
+ }
258
+ export interface RoutePolicy {
259
+ /** Base for list pages, e.g. "/app/acme/list". */
260
+ listBase?: string;
261
+ /** Base for form/edit pages, e.g. "/app/acme/edit". */
262
+ formBase?: string;
263
+ /** Base for report pages, e.g. "/app/acme/report". */
264
+ reportBase?: string;
265
+ /** Optional custom resolver — if provided, compiler must call it instead of default join. */
266
+ resolveListRoute?: (meta: {
267
+ name: string;
268
+ }) => string;
269
+ resolveFormRoute?: (meta: {
270
+ name: string;
271
+ }, id: string) => string;
272
+ resolveReportRoute?: (meta: {
273
+ name: string;
274
+ }) => string;
275
+ }
276
+ export interface ResponsivePolicy {
277
+ breakpoints?: {
278
+ sm?: number;
279
+ md?: number;
280
+ lg?: number;
281
+ xl?: number;
282
+ };
283
+ }
284
+ export type CompilePageInputFor<R extends PageRecipe> = {
285
+ recipe: R;
286
+ meta: RecipeMetaMap[R];
287
+ hostCapabilities: HostCapabilities;
288
+ uiPolicy?: UiPolicy;
289
+ routePolicy?: RoutePolicy;
290
+ responsivePolicy?: ResponsivePolicy;
291
+ };
292
+ export type CompilePageInput = CompilePageInputFor<"list"> | CompilePageInputFor<"form"> | CompilePageInputFor<"report"> | CompilePageInputFor<"dashboard"> | CompilePageInputFor<"settings"> | CompilePageInputFor<"tree"> | CompilePageInputFor<"wizard">;
293
+ export type CompilePageResult = UIDLDocument;
294
+ export interface PageCompiler {
295
+ /** Deterministic, pure: same input → byte-identical UIDLDocument. */
296
+ compilePage(input: CompilePageInput): CompilePageResult;
297
+ }
298
+ export type CapabilityIssue = {
299
+ code: "unknown_collection" | "unknown_command" | "unknown_transition" | "limit_exceeded";
300
+ message: string;
301
+ path: string;
302
+ };
303
+ export declare function validateHostCapabilities(input: CompilePageInput): CapabilityIssue[];
304
+ /**
305
+ * Deterministic node id for a field/control derived only from recipe + meta
306
+ * identity, not from file paths or array order. Unchanged fields keep the
307
+ * same id after a patch, so incremental UIDL patching can preserve
308
+ * state and focus.
309
+ */
310
+ export declare function semanticNodeId(recipe: PageRecipe, metaName: string, fieldKey: string): string;
311
+ export declare function semanticListNodeIds(metaName: string): {
312
+ readonly search: `list-${string}-search`;
313
+ readonly table: `list-${string}-table`;
314
+ readonly page: `list-${string}-page`;
315
+ };
@@ -0,0 +1,10 @@
1
+ import { UIDLDocument, UIDLNode } from '../types';
2
+ import { HostCapabilities, RoutePolicy, UiPolicy, WizardPageMeta } from './types.js';
3
+ export interface CompileWizardOptions {
4
+ hostCapabilities: HostCapabilities;
5
+ uiPolicy?: UiPolicy;
6
+ routePolicy?: RoutePolicy;
7
+ docId?: string;
8
+ extraHeaderActions?: UIDLNode[];
9
+ }
10
+ export declare function compileWizardPage(meta: WizardPageMeta, options: CompileWizardOptions): UIDLDocument;
@@ -0,0 +1,29 @@
1
+ import { SVGProps } from 'react';
2
+ export interface QRCodeSVGProps extends SVGProps<SVGSVGElement> {
3
+ value?: string;
4
+ size?: number;
5
+ fgColor?: string;
6
+ bgColor?: string;
7
+ }
8
+ /**
9
+ * Deterministic vector QR code SVG generator for verification URLs, DJP e-Faktur, and BMT certificates.
10
+ */
11
+ export declare function QRCodeSVG({ value, size, fgColor, bgColor, className, ...props }: QRCodeSVGProps): import("react").JSX.Element;
12
+ export interface BarcodeSVGProps extends SVGProps<SVGSVGElement> {
13
+ value?: string;
14
+ width?: number;
15
+ height?: number;
16
+ showText?: boolean;
17
+ }
18
+ /**
19
+ * 1D Barcode SVG generator (Code 128 style) for shipping tracking numbers, Medical Records (RM), and SKU tags.
20
+ */
21
+ export declare function BarcodeSVG({ value, width, height, showText, className, ...props }: BarcodeSVGProps): import("react").JSX.Element;
22
+ export interface DataMatrixSVGProps extends SVGProps<SVGSVGElement> {
23
+ value?: string;
24
+ size?: number;
25
+ }
26
+ /**
27
+ * 2D DataMatrix SVG generator for ISO 13485 Medical Device UDI (Unique Device Identification).
28
+ */
29
+ export declare function DataMatrixSVG({ value, size, className, ...props }: DataMatrixSVGProps): import("react").JSX.Element;
@@ -0,0 +1,66 @@
1
+ export interface ChartGeometryProps {
2
+ /** One array per series; each inner array is that series' y values. */
3
+ points: number[][];
4
+ xLabels?: string[];
5
+ colors?: string[];
6
+ viewBoxHeight?: number;
7
+ aspectRatio?: number;
8
+ axisPadding?: number;
9
+ pointsPadding?: number;
10
+ xLabelOffset?: number;
11
+ yLabelOffset?: number;
12
+ yLabelDivisions?: number;
13
+ gridColor?: string;
14
+ fontColor?: string;
15
+ fontSize?: number;
16
+ gridThickness?: number;
17
+ left?: number;
18
+ bottom?: number;
19
+ extendGridX?: number;
20
+ yMin?: number | null;
21
+ yMax?: number | null;
22
+ formatY?: (value: number) => string;
23
+ formatX?: (value: string) => string;
24
+ drawXGrid?: boolean;
25
+ drawLabels?: boolean;
26
+ }
27
+ export interface BarChartProps extends ChartGeometryProps {
28
+ className?: string;
29
+ /** Bar width in viewBox units (Meridian: 28). */
30
+ barWidth?: number;
31
+ /** Corner radius in viewBox units (Meridian: 17 — bars are visibly pill-capped). */
32
+ radius?: number;
33
+ skipXLabel?: number;
34
+ drawZeroLine?: boolean;
35
+ zeroLineColor?: string;
36
+ ariaLabel?: string;
37
+ }
38
+ export declare function MeridianBarChart({ points, xLabels, colors, className, viewBoxHeight, aspectRatio, axisPadding, pointsPadding, xLabelOffset, yLabelOffset, yLabelDivisions, gridColor, zeroLineColor, fontColor, fontSize, gridThickness, left, bottom, extendGridX, barWidth, radius, skipXLabel, yMin, yMax, formatY, formatX, drawXGrid, drawLabels, drawZeroLine, ariaLabel, }: BarChartProps): import("react").JSX.Element;
39
+ export interface LineChartProps extends ChartGeometryProps {
40
+ className?: string;
41
+ /** Stroke width in viewBox units (Meridian: 5). */
42
+ thickness?: number;
43
+ ariaLabel?: string;
44
+ }
45
+ export declare function MeridianLineChart({ points, xLabels, colors, className, viewBoxHeight, aspectRatio, axisPadding, pointsPadding, xLabelOffset, yLabelOffset, yLabelDivisions, gridColor, fontColor, fontSize, gridThickness, thickness, left, bottom, extendGridX, yMin, yMax, formatY, formatX, drawXGrid, drawLabels, ariaLabel, }: LineChartProps): import("react").JSX.Element;
46
+ export interface DonutSector {
47
+ color: string;
48
+ value: number;
49
+ label?: string;
50
+ }
51
+ export interface DonutChartProps {
52
+ sectors: DonutSector[];
53
+ className?: string;
54
+ totalLabel?: string;
55
+ radius?: number;
56
+ startAngle?: number;
57
+ thickness?: number;
58
+ offsetX?: number;
59
+ offsetY?: number;
60
+ textOffsetX?: number;
61
+ textOffsetY?: number;
62
+ valueFormatter?: (value: number) => string;
63
+ ariaLabel?: string;
64
+ }
65
+ /** Meridian's DonutChart: a 100×100 viewBox, arcs stroked onto a clipped hole. */
66
+ export declare function MeridianDonutChart({ sectors, className, totalLabel, radius, startAngle, thickness, offsetX, offsetY, textOffsetX, textOffsetY, valueFormatter, ariaLabel, }: DonutChartProps): import("react").JSX.Element;
@@ -0,0 +1,5 @@
1
+ /** Every icon name a document or the demo chrome may reference. */
2
+ export declare const ICON_PATHS: Record<string, string[]>;
3
+ export type IconName = keyof typeof ICON_PATHS;
4
+ export declare const ICON_NAMES: IconName[];
5
+ export declare function hasIcon(name: string): boolean;
@@ -0,0 +1,31 @@
1
+ import { CSSProperties } from 'react';
2
+ import { ICON_PATHS, ICON_NAMES, hasIcon, IconName } from './iconPaths';
3
+ export { ICON_PATHS, ICON_NAMES, hasIcon };
4
+ export type { IconName };
5
+ export interface IconProps {
6
+ /** A name from `ICON_NAMES`. An unknown name renders nothing rather than a broken glyph. */
7
+ name: string;
8
+ /** Tailwind sizing/colour classes. Defaults to Meridian's sidebar icon size. */
9
+ className?: string;
10
+ style?: CSSProperties;
11
+ /** Give the icon an accessible name; without one it stays `aria-hidden`. */
12
+ title?: string;
13
+ /** Meridian strokes its chrome icons at 1.5; 2 reads better below 16px. */
14
+ strokeWidth?: number;
15
+ }
16
+ /**
17
+ * One outline glyph. `currentColor` on the stroke means an icon inherits the text colour of the
18
+ * row it sits in, which is what keeps the sidebar's active/inactive states in one place.
19
+ */
20
+ export declare function Icon({ name, className, style, title, strokeWidth }: IconProps): import("react").JSX.Element | null;
21
+ /**
22
+ * The registry widget. Sized in `em` so an icon dropped next to text in a document tracks that
23
+ * text's size instead of needing a class of its own.
24
+ */
25
+ export declare function IconWidget({ name, size, title, className, strokeWidth, }: {
26
+ name?: string;
27
+ size?: number | string;
28
+ title?: string;
29
+ className?: string;
30
+ strokeWidth?: number;
31
+ }): import("react").JSX.Element | null;