@pebble-software/bonsai 0.0.8 → 0.1.1

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 (118) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +371 -88
  3. package/dist/ast.js +10 -0
  4. package/dist/ast.js.map +1 -0
  5. package/dist/chunks/builder.meta-WpXc5VBB.js +666 -0
  6. package/dist/chunks/builder.meta-WpXc5VBB.js.map +1 -0
  7. package/dist/chunks/button-jfJanilw.js +161 -0
  8. package/dist/chunks/button-jfJanilw.js.map +1 -0
  9. package/dist/chunks/create-renderer-DHneTPd-.js +280 -0
  10. package/dist/chunks/create-renderer-DHneTPd-.js.map +1 -0
  11. package/dist/chunks/index-DzpRdatr.js +359 -0
  12. package/dist/chunks/index-DzpRdatr.js.map +1 -0
  13. package/dist/chunks/render-shared-Ci28BpkI.js +1989 -0
  14. package/dist/chunks/render-shared-Ci28BpkI.js.map +1 -0
  15. package/dist/components/core/bonsai.d.ts +5 -0
  16. package/dist/components/core/render-shared.d.ts +123 -0
  17. package/dist/components/core/render-tree-client.d.ts +4 -0
  18. package/dist/components/core/render-tree-server.d.ts +2 -0
  19. package/dist/components/ui/a.d.ts +3 -0
  20. package/dist/components/ui/accordion.d.ts +17 -0
  21. package/dist/components/ui/alert-dialog.d.ts +23 -0
  22. package/dist/components/ui/alert.d.ts +12 -0
  23. package/dist/components/ui/avatar.d.ts +21 -0
  24. package/dist/components/ui/badge.d.ts +10 -0
  25. package/dist/components/ui/breadcrumb.d.ts +10 -0
  26. package/dist/components/ui/button.d.ts +14 -0
  27. package/dist/components/ui/calendar.d.ts +9 -0
  28. package/dist/components/ui/card.d.ts +15 -0
  29. package/dist/components/ui/checkbox.d.ts +7 -0
  30. package/dist/components/ui/collapsible.d.ts +5 -0
  31. package/dist/components/ui/combobox.d.ts +31 -0
  32. package/dist/components/ui/command.d.ts +23 -0
  33. package/dist/components/ui/dialog.d.ts +23 -0
  34. package/dist/components/ui/drawer.d.ts +22 -0
  35. package/dist/components/ui/dropdown-menu.d.ts +29 -0
  36. package/dist/components/ui/form.d.ts +24 -0
  37. package/dist/components/ui/h.d.ts +10 -0
  38. package/dist/components/ui/input-group.d.ts +18 -0
  39. package/dist/components/ui/input-otp.d.ts +11 -0
  40. package/dist/components/ui/input.d.ts +3 -0
  41. package/dist/components/ui/label.d.ts +10 -0
  42. package/dist/components/ui/loader.d.ts +14 -0
  43. package/dist/components/ui/p.d.ts +11 -0
  44. package/dist/components/ui/popover.d.ts +9 -0
  45. package/dist/components/ui/progress.d.ts +31 -0
  46. package/dist/components/ui/scroll-area.d.ts +13 -0
  47. package/dist/components/ui/select.d.ts +17 -0
  48. package/dist/components/ui/separator.d.ts +8 -0
  49. package/dist/components/ui/sidebar.d.ts +70 -0
  50. package/dist/components/ui/signature-pad.d.ts +7 -0
  51. package/dist/components/ui/skeleton.d.ts +7 -0
  52. package/dist/components/ui/switch.d.ts +8 -0
  53. package/dist/components/ui/table.d.ts +14 -0
  54. package/dist/components/ui/tabs.d.ts +15 -0
  55. package/dist/components/ui/textarea.d.ts +5 -0
  56. package/dist/components/ui/toast.d.ts +46 -0
  57. package/dist/components/ui/tooltip.d.ts +15 -0
  58. package/dist/constants.d.ts +1 -0
  59. package/dist/constants.js +11 -0
  60. package/dist/constants.js.map +1 -0
  61. package/dist/core.d.ts +12 -0
  62. package/dist/core.js +17 -0
  63. package/dist/core.js.map +1 -0
  64. package/dist/hooks/haptics.d.ts +8 -0
  65. package/dist/hooks/use-mobile.d.ts +1 -0
  66. package/dist/index.css +7 -0
  67. package/dist/index.d.ts +27 -339
  68. package/dist/index.js +532 -4297
  69. package/dist/index.js.map +1 -0
  70. package/dist/lib/ast/cache.d.ts +8 -0
  71. package/dist/lib/ast/evaluator.d.ts +2 -0
  72. package/dist/lib/ast/helpers.d.ts +2 -0
  73. package/dist/lib/ast/index.d.ts +29 -0
  74. package/dist/lib/ast/setup.d.ts +2 -0
  75. package/dist/lib/ast/types.d.ts +1 -0
  76. package/dist/lib/ast/utils.d.ts +4 -0
  77. package/dist/lib/haptics.d.ts +8 -0
  78. package/dist/lib/registry/drift.d.ts +17 -0
  79. package/dist/lib/registry/identity.d.ts +24 -0
  80. package/dist/lib/registry/json-schema-to-zod.d.ts +32 -0
  81. package/dist/lib/registry/manifest-schema.d.ts +62 -0
  82. package/dist/lib/registry/manifest.d.ts +26 -0
  83. package/dist/lib/registry/merge-generated.d.ts +7 -0
  84. package/dist/lib/registry/pebble-registry.d.ts +1 -0
  85. package/dist/lib/registry/types.d.ts +29 -0
  86. package/dist/lib/registry/validate.d.ts +18 -0
  87. package/dist/lib/renderer/compile-template.d.ts +70 -0
  88. package/dist/lib/ui/registry.d.ts +19 -0
  89. package/dist/lib/utils.d.ts +3 -0
  90. package/dist/library/constants/src/components.d.ts +59 -0
  91. package/dist/library/constants/src/index.d.ts +2 -0
  92. package/dist/library/constants/src/webhook-events.d.ts +6 -0
  93. package/dist/library/schemas/src/bonsai.schema.d.ts +24 -0
  94. package/dist/library/schemas/src/builder.meta.d.ts +26 -0
  95. package/dist/presets/calendar.js +374 -0
  96. package/dist/presets/calendar.js.map +1 -0
  97. package/dist/presets/signature.js +405 -0
  98. package/dist/presets/signature.js.map +1 -0
  99. package/dist/renderer/core-registry.d.ts +52 -0
  100. package/dist/renderer/create-renderer.d.ts +38 -0
  101. package/dist/renderer/presets/calendar.d.ts +5 -0
  102. package/dist/renderer/presets/signature.d.ts +6 -0
  103. package/dist/schemas.d.ts +2 -0
  104. package/dist/schemas.js +13 -0
  105. package/dist/schemas.js.map +1 -0
  106. package/dist/styles/css/base.css +144 -0
  107. package/dist/styles/css/fonts.css +25 -0
  108. package/dist/styles/css/maplibre.css +29 -0
  109. package/dist/styles/css/overrides.css +7 -0
  110. package/dist/styles/css/tailwind.css +1 -0
  111. package/dist/styles/css/theme.css +197 -0
  112. package/dist/styles/css/tw-animate.css +1 -0
  113. package/dist/styles/css/utilities.css +44 -0
  114. package/dist/styles/presets.json +20 -0
  115. package/dist/styles/vendor/maplibre-gl.css +701 -0
  116. package/dist/styles/vendor/tw-animate.css +692 -0
  117. package/dist/types.d.ts +1 -0
  118. package/package.json +64 -19
@@ -0,0 +1,46 @@
1
+ import { IconProps } from '@tabler/icons-react';
2
+ import { VariantProps } from 'class-variance-authority';
3
+ import * as React from "react";
4
+ declare const toastVariants: (props?: ({
5
+ variant?: "default" | "error" | "success" | "warning" | "loading" | "promise" | "info" | null | undefined;
6
+ size?: "sm" | "md" | "lg" | "xl" | null | undefined;
7
+ raised?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
8
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
9
+ interface ToastActions {
10
+ label: React.ReactNode;
11
+ onClick: () => void;
12
+ }
13
+ interface ToastOptions extends VariantProps<typeof toastVariants> {
14
+ description?: React.ReactNode;
15
+ icon?: React.ElementType<IconProps> | undefined;
16
+ duration?: number;
17
+ action?: ToastActions;
18
+ cancel?: ToastActions;
19
+ className?: string;
20
+ }
21
+ interface PromiseToastOptions extends ToastOptions {
22
+ loadingOptions?: ToastOptions;
23
+ successOptions?: ToastOptions;
24
+ errorOptions?: ToastOptions;
25
+ }
26
+ declare const toast: ((message: React.ReactNode, options?: ToastOptions) => string) & {
27
+ success: (message: React.ReactNode, options?: ToastOptions) => string;
28
+ error: (message: React.ReactNode, options?: ToastOptions) => string;
29
+ warning: (message: React.ReactNode, options?: ToastOptions) => string;
30
+ info: (message: React.ReactNode, options?: ToastOptions) => string;
31
+ loading: (message: React.ReactNode, options?: ToastOptions) => string;
32
+ promise: <T>(promise: Promise<T> | (() => Promise<T>), messages: {
33
+ loading: React.ReactNode;
34
+ success: React.ReactNode | ((data: T) => React.ReactNode);
35
+ error: React.ReactNode | ((error: unknown) => React.ReactNode);
36
+ }, options?: PromiseToastOptions) => Promise<T>;
37
+ };
38
+ declare function ToastList({ className, style, }: {
39
+ className?: string;
40
+ style?: React.CSSProperties;
41
+ }): React.JSX.Element;
42
+ declare const Toaster: {
43
+ ({ className, style, ...props }: React.ComponentProps<typeof ToastList>): React.JSX.Element;
44
+ displayName: string;
45
+ };
46
+ export { Toaster, ToastList, toast };
@@ -0,0 +1,15 @@
1
+ import { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip';
2
+ declare function TooltipProvider({ delay, closeDelay, ...props }: TooltipPrimitive.Provider.Props): import("react").JSX.Element;
3
+ declare function Tooltip({ delay, closeDelay, ...props }: TooltipPrimitive.Root.Props & {
4
+ delay?: number;
5
+ closeDelay?: number;
6
+ }): import("react").JSX.Element;
7
+ declare function TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props): import("react").JSX.Element;
8
+ declare const tooltipVariants: (props?: ({
9
+ align?: "center" | "end" | "start" | null | undefined;
10
+ side?: "inline-start" | "inline-end" | "left" | "right" | "top" | "bottom" | null | undefined;
11
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
12
+ declare function TooltipContent({ className, side, sideOffset, align, alignOffset, withArrow, children, ...props }: TooltipPrimitive.Popup.Props & Pick<TooltipPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset"> & {
13
+ withArrow?: boolean;
14
+ }): import("react").JSX.Element;
15
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, tooltipVariants, };
@@ -0,0 +1 @@
1
+ export * from './library/constants/src/index.js';
@@ -0,0 +1,11 @@
1
+ var e = /* @__PURE__ */ ((t) => (t.FORM_CAPTURED = "FORM_CAPTURED", t.FILE_GENERATED = "FILE_GENERATED", t.FILE_UPLOADED = "FILE_UPLOADED", t))(e || {});
2
+ const a = new Set(Object.values(e));
3
+ var A = /* @__PURE__ */ ((t) => (t.A = "a", t.P = "p", t.H = "h", t.OL = "ol", t.UL = "ul", t.LI = "li", t.DIV = "div", t.SPAN = "span", t.ACCORDION = "accordion", t.ACCORDION_ITEM = "accordion-item", t.ACCORDION_TRIGGER = "accordion-trigger", t.ACCORDION_CONTENT = "accordion-content", t.ALERT = "alert", t.AVATAR = "avatar", t.BADGE = "badge", t.BUTTON = "button", t.CARD = "card", t.CARD_HEADER = "card-header", t.CARD_TITLE = "card-title", t.CARD_DESCRIPTION = "card-description", t.CARD_CONTENT = "card-content", t.CARD_FOOTER = "card-footer", t.CARD_ACTION = "card-action", t.CARD_ICON = "card-icon", t.CALENDAR = "calendar", t.CHECKBOX = "checkbox", t.COLLAPSIBLE = "collapsible", t.COLLAPSIBLE_TRIGGER = "collapsible-trigger", t.COLLAPSIBLE_CONTENT = "collapsible-content", t.IMAGE = "image", t.OTP = "otp", t.INPUT = "input", t.INPUT_GROUP = "input-group", t.INPUT_GROUP_TEXT = "input-group-text", t.INPUT_GROUP_ADDON = "input-group-addon", t.INPUT_GROUP_BUTTON = "input-group-button", t.INPUT_GROUP_INPUT = "input-group-input", t.INPUT_GROUP_TEXTAREA = "input-group-textarea", t.LABEL = "label", t.LOADER = "loader", t.PROGRESS = "progress", t.SEPARATOR = "separator", t.SKELETON = "skeleton", t.SWITCH = "switch", t.TABLE = "table", t.TABLE_HEADER = "table-header", t.TABLE_BODY = "table-body", t.TABLE_FOOTER = "table-footer", t.TABLE_HEAD = "table-head", t.TABLE_ROW = "table-row", t.TABLE_CELL = "table-cell", t.TABLE_CAPTION = "table-caption", t.TEXTAREA = "textarea", t.SIGNATURE = "signature", t.EACH = "each", t.IF = "if", t))(A || {});
4
+ const r = new Set(Object.values(A));
5
+ export {
6
+ A as COMPONENT,
7
+ r as COMPONENT_LIST,
8
+ e as WEBHOOK_EVENT,
9
+ a as WEBHOOK_EVENTS
10
+ };
11
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../../library/constants/src/webhook-events.ts","../../../library/constants/src/components.ts"],"sourcesContent":["export enum WEBHOOK_EVENT {\n FORM_CAPTURED = \"FORM_CAPTURED\",\n FILE_GENERATED = \"FILE_GENERATED\",\n FILE_UPLOADED = \"FILE_UPLOADED\"\n}\n\nexport const WEBHOOK_EVENTS = new Set(Object.values(WEBHOOK_EVENT));\n","export enum COMPONENT {\n A = \"a\",\n P = \"p\",\n H = \"h\",\n OL = \"ol\",\n UL = \"ul\",\n LI = \"li\",\n DIV = \"div\",\n SPAN = \"span\",\n ACCORDION = \"accordion\",\n ACCORDION_ITEM = \"accordion-item\",\n ACCORDION_TRIGGER = \"accordion-trigger\",\n ACCORDION_CONTENT = \"accordion-content\",\n ALERT = \"alert\",\n AVATAR = \"avatar\",\n BADGE = \"badge\",\n BUTTON = \"button\",\n CARD = \"card\",\n CARD_HEADER = \"card-header\",\n CARD_TITLE = \"card-title\",\n CARD_DESCRIPTION = \"card-description\",\n CARD_CONTENT = \"card-content\",\n CARD_FOOTER = \"card-footer\",\n CARD_ACTION = \"card-action\",\n CARD_ICON = \"card-icon\",\n CALENDAR = \"calendar\",\n CHECKBOX = \"checkbox\",\n COLLAPSIBLE = \"collapsible\",\n COLLAPSIBLE_TRIGGER = \"collapsible-trigger\",\n COLLAPSIBLE_CONTENT = \"collapsible-content\",\n IMAGE = \"image\",\n OTP = \"otp\",\n INPUT = \"input\",\n INPUT_GROUP = \"input-group\",\n INPUT_GROUP_TEXT = \"input-group-text\",\n INPUT_GROUP_ADDON = \"input-group-addon\",\n INPUT_GROUP_BUTTON = \"input-group-button\",\n INPUT_GROUP_INPUT = \"input-group-input\",\n INPUT_GROUP_TEXTAREA = \"input-group-textarea\",\n LABEL = \"label\",\n LOADER = \"loader\",\n PROGRESS = \"progress\",\n SEPARATOR = \"separator\",\n SKELETON = \"skeleton\",\n SWITCH = \"switch\",\n TABLE = \"table\",\n TABLE_HEADER = \"table-header\",\n TABLE_BODY = \"table-body\",\n TABLE_FOOTER = \"table-footer\",\n TABLE_HEAD = \"table-head\",\n TABLE_ROW = \"table-row\",\n TABLE_CELL = \"table-cell\",\n TABLE_CAPTION = \"table-caption\",\n TEXTAREA = \"textarea\",\n SIGNATURE = \"signature\",\n EACH = \"each\",\n IF = \"if\",\n}\n\nexport const COMPONENT_LIST = new Set(Object.values(COMPONENT));\n"],"names":["WEBHOOK_EVENT","WEBHOOK_EVENTS","COMPONENT","COMPONENT_LIST"],"mappings":"AAAO,IAAKA,sBAAAA,OACVA,EAAA,gBAAgB,iBAChBA,EAAA,iBAAiB,kBACjBA,EAAA,gBAAgB,iBAHNA,IAAAA,KAAA,CAAA,CAAA;AAML,MAAMC,IAAiB,IAAI,IAAI,OAAO,OAAOD,CAAa,CAAC;ACN3D,IAAKE,sBAAAA,OACVA,EAAA,IAAI,KACJA,EAAA,IAAI,KACJA,EAAA,IAAI,KACJA,EAAA,KAAK,MACLA,EAAA,KAAK,MACLA,EAAA,KAAK,MACLA,EAAA,MAAM,OACNA,EAAA,OAAO,QACPA,EAAA,YAAY,aACZA,EAAA,iBAAiB,kBACjBA,EAAA,oBAAoB,qBACpBA,EAAA,oBAAoB,qBACpBA,EAAA,QAAQ,SACRA,EAAA,SAAS,UACTA,EAAA,QAAQ,SACRA,EAAA,SAAS,UACTA,EAAA,OAAO,QACPA,EAAA,cAAc,eACdA,EAAA,aAAa,cACbA,EAAA,mBAAmB,oBACnBA,EAAA,eAAe,gBACfA,EAAA,cAAc,eACdA,EAAA,cAAc,eACdA,EAAA,YAAY,aACZA,EAAA,WAAW,YACXA,EAAA,WAAW,YACXA,EAAA,cAAc,eACdA,EAAA,sBAAsB,uBACtBA,EAAA,sBAAsB,uBACtBA,EAAA,QAAQ,SACRA,EAAA,MAAM,OACNA,EAAA,QAAQ,SACRA,EAAA,cAAc,eACdA,EAAA,mBAAmB,oBACnBA,EAAA,oBAAoB,qBACpBA,EAAA,qBAAqB,sBACrBA,EAAA,oBAAoB,qBACpBA,EAAA,uBAAuB,wBACvBA,EAAA,QAAQ,SACRA,EAAA,SAAS,UACTA,EAAA,WAAW,YACXA,EAAA,YAAY,aACZA,EAAA,WAAW,YACXA,EAAA,SAAS,UACTA,EAAA,QAAQ,SACRA,EAAA,eAAe,gBACfA,EAAA,aAAa,cACbA,EAAA,eAAe,gBACfA,EAAA,aAAa,cACbA,EAAA,YAAY,aACZA,EAAA,aAAa,cACbA,EAAA,gBAAgB,iBAChBA,EAAA,WAAW,YACXA,EAAA,YAAY,aACZA,EAAA,OAAO,QACPA,EAAA,KAAK,MAxDKA,IAAAA,KAAA,CAAA,CAAA;AA2DL,MAAMC,IAAiB,IAAI,IAAI,OAAO,OAAOD,CAAS,CAAC;"}
package/dist/core.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ import { createBonsaiRenderer } from './renderer/create-renderer.js';
2
+ /** Renderer bound to the core registry. */
3
+ export declare const Bonsai: import('react').ComponentType<import('./index.js').BonsaiProps>;
4
+ export { createBonsaiRenderer };
5
+ export { useUpdateData, useBonsaiRenderMode } from './components/core/bonsai.js';
6
+ export { coreComponents, coreControlledInputs, coreRegistry, extendRegistry, } from './renderer/core-registry.js';
7
+ export { defineComponent, defineBonsaiRegistry } from './lib/registry/types.js';
8
+ export type { BonsaiProps, RenderMode } from './components/core/bonsai.js';
9
+ export type { BonsaiRendererOptions, BonsaiRendererInstance, } from './renderer/create-renderer.js';
10
+ export type { BonsaiRegistry, ComponentDefinition, ControlledFieldSpec, ComponentCapability, } from './lib/registry/types.js';
11
+ export type { BonsaiPreset, ComponentRegistry, ControlledInput, ControlledInputEntry, ControlledInputRegistry, } from './renderer/core-registry.js';
12
+ export type { Config } from './types.js';
package/dist/core.js ADDED
@@ -0,0 +1,17 @@
1
+ import { c as e } from "./chunks/create-renderer-DHneTPd-.js";
2
+ import { u as n } from "./chunks/create-renderer-DHneTPd-.js";
3
+ import { c as i, a as d, b as p, d as c, e as f, f as m, u } from "./chunks/render-shared-Ci28BpkI.js";
4
+ const { Bonsai: s } = e();
5
+ export {
6
+ s as Bonsai,
7
+ i as coreComponents,
8
+ d as coreControlledInputs,
9
+ p as coreRegistry,
10
+ e as createBonsaiRenderer,
11
+ c as defineBonsaiRegistry,
12
+ f as defineComponent,
13
+ m as extendRegistry,
14
+ u as useBonsaiRenderMode,
15
+ n as useUpdateData
16
+ };
17
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sources":["../src/core.ts"],"sourcesContent":["// Core entrypoint (`@pebble-software/bonsai/core`): the renderer plus only the\n// lightweight built-in components. Importing this never pulls in\n// react-day-picker or react-signature-canvas — add those explicitly via the\n// presets under `@pebble-software/bonsai/presets/*`.\n\nimport { createBonsaiRenderer } from \"./renderer/create-renderer\";\n\n/** Renderer bound to the core registry. */\nexport const { Bonsai } = createBonsaiRenderer();\n\nexport { createBonsaiRenderer };\nexport { useUpdateData, useBonsaiRenderMode } from \"./components/core/bonsai\";\nexport {\n coreComponents,\n coreControlledInputs,\n coreRegistry,\n extendRegistry,\n} from \"./renderer/core-registry\";\nexport { defineComponent, defineBonsaiRegistry } from \"./lib/registry/types\";\n\nexport type { BonsaiProps, RenderMode } from \"./components/core/bonsai\";\nexport type {\n BonsaiRendererOptions,\n BonsaiRendererInstance,\n} from \"./renderer/create-renderer\";\nexport type {\n BonsaiRegistry,\n ComponentDefinition,\n ControlledFieldSpec,\n ComponentCapability,\n} from \"./lib/registry/types\";\nexport type {\n BonsaiPreset,\n ComponentRegistry,\n ControlledInput,\n ControlledInputEntry,\n ControlledInputRegistry,\n} from \"./renderer/core-registry\";\nexport type { Config } from \"./types\";\n"],"names":["Bonsai","createBonsaiRenderer"],"mappings":";;;AAQO,MAAM,EAAE,QAAAA,EAAA,IAAWC,EAAA;"}
@@ -0,0 +1,8 @@
1
+ import { HapticInput } from 'web-haptics';
2
+ export { useWebHaptics as useHaptics } from 'web-haptics/react';
3
+ export declare const HAPTIC_BUTTON: HapticInput;
4
+ export declare const HAPTIC_TAB: HapticInput;
5
+ export declare const HAPTIC_SWITCH: HapticInput;
6
+ export declare const HAPTIC_CHECKBOX: HapticInput;
7
+ export declare const HAPTIC_ACCORDION: HapticInput;
8
+ export declare const HAPTIC_MENU_ITEM: HapticInput;
@@ -0,0 +1 @@
1
+ export declare function useIsMobile(): boolean;
package/dist/index.css CHANGED
@@ -1,6 +1,13 @@
1
1
  @import "tailwindcss";
2
2
  @import "tw-animate-css";
3
3
 
4
+ /* Scan this library's own source for class names. Tailwind v4 auto-detection
5
+ only scans the current working directory, so when bonsai is consumed as
6
+ source (e.g. apps/playground aliases to ../bonsai/src), its component classes
7
+ live outside the consumer's base and would otherwise be dropped. Path is
8
+ relative to this stylesheet; redundant but harmless for apps/bonsai itself. */
9
+ @source "./";
10
+
4
11
  /* --- Fonts --- */
5
12
  @font-face {
6
13
  font-family: "Great Vibes";
package/dist/index.d.ts CHANGED
@@ -1,339 +1,27 @@
1
- import { ComponentType } from 'react';
2
- import { JSX } from 'react';
3
- import { z } from 'zod';
4
- import { ZodType } from 'zod';
5
-
6
- export declare function assertNoFailingDrift(issues: DriftIssue[]): void;
7
-
8
- export declare function Bonsai(props: BonsaiProps): JSX.Element;
9
-
10
- declare interface BonsaiProps {
11
- captureUrl: string;
12
- expiry: string;
13
- template: Config;
14
- data?: any;
15
- status?: "pending" | "captured" | "completed" | "error" | "revoked";
16
- render?: RenderMode;
17
- registry?: BonsaiRegistry;
18
- }
19
-
20
- export declare interface BonsaiRegistry {
21
- id: string;
22
- version: string;
23
- namespace?: string;
24
- manifestHash?: string;
25
- components: Record<string, ComponentDefinition>;
26
- fallback?: RegistryFallback;
27
- }
28
-
29
- export declare function checkArtifactDrift(input: DriftCheckInput): DriftIssue[];
30
-
31
- export declare function clearManifestCache(): void;
32
-
33
- declare enum COMPONENT {
34
- A = "a",
35
- P = "p",
36
- H = "h",
37
- OL = "ol",
38
- UL = "ul",
39
- LI = "li",
40
- DIV = "div",
41
- SPAN = "span",
42
- ACCORDION = "accordion",
43
- ACCORDION_ITEM = "accordion-item",
44
- ACCORDION_TRIGGER = "accordion-trigger",
45
- ACCORDION_CONTENT = "accordion-content",
46
- ALERT = "alert",
47
- AVATAR = "avatar",
48
- BADGE = "badge",
49
- BUTTON = "button",
50
- CARD = "card",
51
- CARD_HEADER = "card-header",
52
- CARD_TITLE = "card-title",
53
- CARD_DESCRIPTION = "card-description",
54
- CARD_CONTENT = "card-content",
55
- CARD_FOOTER = "card-footer",
56
- CARD_ACTION = "card-action",
57
- CARD_ICON = "card-icon",
58
- CALENDAR = "calendar",
59
- CHECKBOX = "checkbox",
60
- COLLAPSIBLE = "collapsible",
61
- COLLAPSIBLE_TRIGGER = "collapsible-trigger",
62
- COLLAPSIBLE_CONTENT = "collapsible-content",
63
- IMAGE = "image",
64
- OTP = "otp",
65
- INPUT = "input",
66
- INPUT_GROUP = "input-group",
67
- INPUT_GROUP_TEXT = "input-group-text",
68
- INPUT_GROUP_ADDON = "input-group-addon",
69
- INPUT_GROUP_BUTTON = "input-group-button",
70
- INPUT_GROUP_INPUT = "input-group-input",
71
- INPUT_GROUP_TEXTAREA = "input-group-textarea",
72
- LABEL = "label",
73
- LOADER = "loader",
74
- PROGRESS = "progress",
75
- SEPARATOR = "separator",
76
- SKELETON = "skeleton",
77
- SWITCH = "switch",
78
- TABLE = "table",
79
- TABLE_HEADER = "table-header",
80
- TABLE_BODY = "table-body",
81
- TABLE_FOOTER = "table-footer",
82
- TABLE_HEAD = "table-head",
83
- TABLE_ROW = "table-row",
84
- TABLE_CELL = "table-cell",
85
- TABLE_CAPTION = "table-caption",
86
- TEXTAREA = "textarea",
87
- SIGNATURE = "signature",
88
- EACH = "each",
89
- IF = "if",
90
- }
91
-
92
- export declare type ComponentCapability = "children" | "bindings" | "events" | "formField" | "ssr" | "pdf";
93
-
94
- export declare interface ComponentDefinition {
95
- component: ComponentType<any> | string;
96
- propsSchema?: ZodType<any>;
97
- capabilities?: ComponentCapability[];
98
- controlled?: ControlledFieldSpec | Record<string, ControlledFieldSpec>;
99
- assets?: {
100
- css?: string[];
101
- fonts?: string[];
102
- };
103
- }
104
-
105
- export declare const componentMap: Record<COMPONENT[number], any>;
106
-
107
- export declare function composePropsSchema(baseSchema: z.ZodType<unknown> | undefined, tenantSchema: z.ZodType<unknown> | undefined): z.ZodType<unknown> | undefined;
108
-
109
- export declare function computeManifestHash(raw: string): Promise<string>;
110
-
111
- export declare const Config = pebbleTemplateSchema.Node;
112
-
113
- export declare type Config = z.infer<typeof pebbleTemplateSchema.Node>;
114
-
115
- export declare interface ControlledFieldSpec {
116
- valueProp: string;
117
- changeProp: string;
118
- extract: (eventOrValue: unknown) => unknown;
119
- }
120
-
121
- declare interface ControlledInput {
122
- valueProp: string;
123
- changeProp: string;
124
- extractor: (eventOrValue: any) => any;
125
- }
126
-
127
- export declare const controlledInputMap: Record<COMPONENT[number], Record<string, ControlledInput> | ControlledInput>;
128
-
129
- export declare function defineBonsaiRegistry(registry: BonsaiRegistry): BonsaiRegistry;
130
-
131
- export declare function defineComponent(def: ComponentDefinition): ComponentDefinition;
132
-
133
- export declare interface DriftCheckInput {
134
- artifactRegistries: RegistrySource[];
135
- configRegistries: RegistrySource[];
136
- artifactBaseUiVersion: string;
137
- installedBaseUiVersion: string;
138
- }
139
-
140
- export declare interface DriftIssue {
141
- check: "stale-artifact" | "baseui-drift";
142
- level: "warn" | "fail";
143
- message: string;
144
- }
145
-
146
- export declare const EXTRACTOR_ALLOWLIST: Record<string, (eventOrValue: unknown) => unknown>;
147
-
148
- /**
149
- * Compiles the JSON Schema subset a manifest's `propsSchema` is allowed to use into a
150
- * Zod validator (REGISTRY_SPIKE.md, "Registry manifests": "JSON Schema on the wire;
151
- * compiled to a Zod validator at load"). Deliberately a subset, not a general JSON
152
- * Schema implementation — enough to express prop narrowing (type, enum, required,
153
- * string/number bounds), which is the only thing a Case A manifest is allowed to do
154
- * to a prop schema in the first place.
155
- */
156
- export declare type JsonSchema = Record<string, unknown>;
157
-
158
- export declare function jsonSchemaToZod(schema: JsonSchema, options?: JsonSchemaToZodOptions): z.ZodType<unknown>;
159
-
160
- declare interface JsonSchemaToZodOptions {
161
- /**
162
- * Accept a `"{{expression}}"` binding anywhere a typed value is declared.
163
- *
164
- * A template author writes `checked: "{{form.agree}}"` and the binding is resolved at
165
- * render time, long after validation runs — so a schema saying `{"type":"boolean"}`
166
- * rejects a template that would render perfectly. The hand-rolled registry has always
167
- * worked around this by declaring `z.union([z.string(), z.boolean()])` by hand on every
168
- * affected prop. This is that convention made available to manifests whose schemas were
169
- * machine-derived from component sources and so cannot hand-write it.
170
- *
171
- * Opt-in rather than automatic: `bonsai.generated.json` doubles as an LLM tool
172
- * definition, and a prop that reads "boolean" there is worth keeping precise.
173
- *
174
- * Narrower than the hand-rolled convention on purpose — only binding-*shaped* strings
175
- * are admitted, not every string. `{"type":"string","minLength":1}` therefore still
176
- * rejects `""`, and an `enum` still rejects a value outside it, both of which a blanket
177
- * `z.string()` union would silently discard.
178
- */
179
- allowBindings?: boolean;
180
- }
181
-
182
- export declare interface LoadManifestOptions extends ResolveManifestOptions {
183
- allowedOrigins?: string[];
184
- fetchImpl?: typeof fetch;
185
- }
186
-
187
- export declare function loadRegistryManifest(source: RegistryManifest | string, options: LoadManifestOptions): Promise<BonsaiRegistry>;
188
-
189
- export declare type ManifestComponent = z.infer<typeof ManifestComponentSchema>;
190
-
191
- declare const ManifestComponentSchema: z.ZodObject<{
192
- name: z.ZodString;
193
- canonicalName: z.ZodOptional<z.ZodString>;
194
- entry: z.ZodString;
195
- propsSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
196
- capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
197
- children: "children";
198
- pdf: "pdf";
199
- bindings: "bindings";
200
- events: "events";
201
- formField: "formField";
202
- ssr: "ssr";
203
- }>>>;
204
- controlled: z.ZodOptional<z.ZodObject<{
205
- valueProp: z.ZodString;
206
- changeProp: z.ZodString;
207
- extract: z.ZodString;
208
- }, z.core.$strict>>;
209
- css: z.ZodOptional<z.ZodArray<z.ZodString>>;
210
- }, z.core.$strict>;
211
-
212
- export declare class ManifestLoadError extends Error {
213
- constructor(message: string);
214
- }
215
-
216
- export declare function mergeGeneratedWithOverrides(generated: ObjectPropsSchema | undefined, overrides: Partial<ObjectPropsSchema> | undefined): ObjectPropsSchema;
217
-
218
- export declare type ObjectPropsSchema = {
219
- type?: "object";
220
- properties: Record<string, JsonSchema>;
221
- required?: string[];
222
- };
223
-
224
- export declare const pebbleRegistry: BonsaiRegistry;
225
-
226
- declare const pebbleTemplateSchema = createTemplateSchema(PEBBLE_COMPONENT_SCHEMAS);
227
-
228
- export declare type PinResolution = {
229
- action: "render";
230
- reason: "no-pin";
231
- } | {
232
- action: "render";
233
- reason: "match";
234
- } | {
235
- action: "render";
236
- reason: "version-skew";
237
- warning: string;
238
- } | {
239
- action: "fail";
240
- reason: "id-mismatch";
241
- error: string;
242
- };
243
-
244
- declare type RegistryFallback = "error" | "div" | ComponentType<any>;
245
-
246
- export declare interface RegistryIdentity {
247
- id: string;
248
- version: string;
249
- manifestHash?: string;
250
- }
251
-
252
- export declare type RegistryManifest = z.infer<typeof RegistryManifestSchema>;
253
-
254
- export declare const RegistryManifestSchema: z.ZodObject<{
255
- $schema: z.ZodOptional<z.ZodString>;
256
- id: z.ZodString;
257
- namespace: z.ZodOptional<z.ZodString>;
258
- version: z.ZodString;
259
- engine: z.ZodObject<{
260
- name: z.ZodLiteral<"bonsai">;
261
- api: z.ZodString;
262
- }, z.core.$strict>;
263
- components: z.ZodArray<z.ZodObject<{
264
- name: z.ZodString;
265
- canonicalName: z.ZodOptional<z.ZodString>;
266
- entry: z.ZodString;
267
- propsSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
268
- capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
269
- children: "children";
270
- pdf: "pdf";
271
- bindings: "bindings";
272
- events: "events";
273
- formField: "formField";
274
- ssr: "ssr";
275
- }>>>;
276
- controlled: z.ZodOptional<z.ZodObject<{
277
- valueProp: z.ZodString;
278
- changeProp: z.ZodString;
279
- extract: z.ZodString;
280
- }, z.core.$strict>>;
281
- css: z.ZodOptional<z.ZodArray<z.ZodString>>;
282
- }, z.core.$strict>>;
283
- integrity: z.ZodOptional<z.ZodObject<{
284
- algorithm: z.ZodLiteral<"sha256">;
285
- manifestHash: z.ZodString;
286
- }, z.core.$strict>>;
287
- }, z.core.$strict>;
288
-
289
- export declare interface RegistrySource {
290
- url: string;
291
- registryHash: string;
292
- }
293
-
294
- export declare interface RegistryValidationError {
295
- path: string;
296
- message: string;
297
- componentType?: string;
298
- }
299
-
300
- export declare interface RegistryValidationResult {
301
- valid: boolean;
302
- errors: RegistryValidationError[];
303
- warnings: string[];
304
- }
305
-
306
- declare type RenderMode = "web" | "pdf" | "preview";
307
-
308
- export declare function resolveManifest(manifest: RegistryManifest, options: ResolveManifestOptions): BonsaiRegistry;
309
-
310
- export declare interface ResolveManifestOptions {
311
- base: BonsaiRegistry;
312
- engineApi?: string;
313
- maxComponents?: number;
314
- maxManifestBytes?: number;
315
- rawManifestSize?: number;
316
- manifestHash?: string;
317
- }
318
-
319
- export declare function resolveRegistryPin(pin: RegistryIdentity | undefined, registry: Pick<BonsaiRegistry, "id" | "version"> & {
320
- manifestHash?: string;
321
- }): PinResolution;
322
-
323
- export declare type SignatureProps = {
324
- value?: string | null;
325
- onChange?: (value: string | null) => void;
326
- canvasClassname?: string;
327
- imageType?: "image/png" | "image/jpeg" | "image/webp";
328
- };
329
-
330
- export declare function useUpdateData(): (path: string, value: any) => void;
331
-
332
- export declare function validateTemplate(template: Config, registry: BonsaiRegistry, options?: ValidateTemplateOptions): RegistryValidationResult;
333
-
334
- export declare interface ValidateTemplateOptions {
335
- mode?: "web" | "pdf";
336
- pin?: RegistryIdentity;
337
- }
338
-
339
- export { }
1
+ import { createBonsaiRenderer } from './renderer/create-renderer.js';
2
+ import { pebbleRegistry } from './lib/registry/pebble-registry.js';
3
+ /** Renderer bound to the full built-in registry. */
4
+ export declare const Bonsai: import('react').ComponentType<import('./index.js').BonsaiProps>;
5
+ export { createBonsaiRenderer };
6
+ export { useUpdateData, useBonsaiRenderMode } from './components/core/bonsai.js';
7
+ export { componentMap, controlledInputMap } from './lib/ui/registry.js';
8
+ export { pebbleRegistry };
9
+ export { coreRegistry, extendRegistry } from './renderer/core-registry.js';
10
+ export { defineComponent, defineBonsaiRegistry } from './lib/registry/types.js';
11
+ export type { BonsaiRegistry, ComponentDefinition, ControlledFieldSpec, ComponentCapability, } from './lib/registry/types.js';
12
+ export { validateTemplate } from './lib/registry/validate.js';
13
+ export type { RegistryValidationError, RegistryValidationResult, ValidateTemplateOptions, } from './lib/registry/validate.js';
14
+ export { resolveRegistryPin } from './lib/registry/identity.js';
15
+ export type { RegistryIdentity, PinResolution } from './lib/registry/identity.js';
16
+ export { resolveManifest, loadRegistryManifest, computeManifestHash, composePropsSchema, clearManifestCache, ManifestLoadError, EXTRACTOR_ALLOWLIST, RegistryManifestSchema, } from './lib/registry/manifest.js';
17
+ export type { RegistryManifest, ManifestComponent, ResolveManifestOptions, LoadManifestOptions, } from './lib/registry/manifest.js';
18
+ export { jsonSchemaToZod } from './lib/registry/json-schema-to-zod.js';
19
+ export type { JsonSchema } from './lib/registry/json-schema-to-zod.js';
20
+ export { mergeGeneratedWithOverrides } from './lib/registry/merge-generated.js';
21
+ export type { ObjectPropsSchema } from './lib/registry/merge-generated.js';
22
+ export { checkArtifactDrift, assertNoFailingDrift } from './lib/registry/drift.js';
23
+ export type { DriftCheckInput, DriftIssue, RegistrySource } from './lib/registry/drift.js';
24
+ export type { BonsaiProps, RenderMode } from './components/core/bonsai.js';
25
+ export type { BonsaiRendererOptions, BonsaiRendererInstance, } from './renderer/create-renderer.js';
26
+ export type { BonsaiPreset, ComponentRegistry, ControlledInput, ControlledInputEntry, ControlledInputRegistry, } from './renderer/core-registry.js';
27
+ export type { Config } from './types.js';