@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,70 @@
1
+ import { Config } from '../../types.js';
2
+ import { CompiledExpression } from '../ast/index.js';
3
+ /**
4
+ * Ahead-of-render metadata for one template node.
5
+ *
6
+ * Everything here is *scope-independent*: it is a pure function of the template
7
+ * node itself, so it survives being reused by every `each` row, every renderer
8
+ * instance and both render paths. Anything that depends on a row's `scope` /
9
+ * `indexScope`, on the live store, or on the `BonsaiRegistry` read from React
10
+ * context deliberately stays in the render path.
11
+ */
12
+ export interface CompiledNode {
13
+ /** The raw template node this was compiled from. */
14
+ source: Config;
15
+ /** True when the node is a bare string leaf. */
16
+ isText: boolean;
17
+ /** Element type *string* only — the registry lookup stays at render time. */
18
+ type: string;
19
+ isEach: boolean;
20
+ isIf: boolean;
21
+ isImage: boolean;
22
+ /** Variables the node's own bindings read, pre-split into path segments. */
23
+ dynamicKeys: CompiledKey[];
24
+ /** Arg names whose value is a `{{...}}` expression, so static props skip evaluation. */
25
+ dynamicArgs: Set<string>;
26
+ /**
27
+ * Arg name -> unresolved store path, only for args whose expression is a plain
28
+ * path (`{{user.name}}`, `{{rows[0].x}}`). Formulas (`{{a + b}}`, `{{xs.filter(...)}}`)
29
+ * have no path to write back to, so they're left out.
30
+ */
31
+ argPaths: Record<string, string>;
32
+ /** Parsed expressions keyed by arg name; `text` for a string leaf. */
33
+ expressions: Record<string, CompiledExpression>;
34
+ text: CompiledExpression | null;
35
+ /** True when the node has no bindings and is not a control node, so it can render as a memoised static subtree. */
36
+ isStatic: boolean;
37
+ each: CompiledEach | null;
38
+ children: CompiledNode[];
39
+ }
40
+ /** A dynamic key with the path-splitting work already done. */
41
+ export interface CompiledKey {
42
+ /** The key exactly as `extractVariables` produced it, e.g. `applicant.name`. */
43
+ key: string;
44
+ /** `key` split and unwrapped, e.g. `["rows", "0", "label"]`. */
45
+ segments: string[];
46
+ /** `numericNext[i]` is true when `segments[i + 1]` is an array index. */
47
+ numericNext: boolean[];
48
+ }
49
+ export interface CompiledEach {
50
+ as: string;
51
+ indexAlias: string | undefined;
52
+ keyExpr: any;
53
+ /**
54
+ * The unresolved store path the array lives at (`""` for a computed items
55
+ * expression). Resolving it against a row's `scope` stays at render time.
56
+ */
57
+ rawItemsPath: string;
58
+ }
59
+ export interface CompiledTemplate {
60
+ root: CompiledNode;
61
+ source: Config;
62
+ }
63
+ export declare function splitPathSegments(path: string): string[];
64
+ export declare function unwrapSegment(seg: string): string;
65
+ /**
66
+ * Compiles a template once and caches it by object identity, so mounting the
67
+ * same template in N renderer instances does the work once. Both `RenderTree`
68
+ * (SSR) and `RenderTreeClient` (client) consume the result.
69
+ */
70
+ export declare function compileTemplate(template: Config): CompiledTemplate;
@@ -0,0 +1,19 @@
1
+ import { ComponentRegistry, ControlledInput, ControlledInputEntry, ControlledInputRegistry } from '../../renderer/core-registry.js';
2
+ /**
3
+ * The full, batteries-included registry: every core component plus the heavy
4
+ * opt-in presets (calendar, signature). Importing this module transitively
5
+ * pulls in react-day-picker and react-signature-canvas — use
6
+ * `renderer/core-registry` if you want to stay lightweight.
7
+ *
8
+ * Typed with `ComponentRegistry`/`ControlledInputRegistry` (both
9
+ * `Record<string, ...>`) rather than `Record<COMPONENT[number], ...>` from
10
+ * `@bonsai/constants` — that package is workspace-only and unpublished, and
11
+ * referencing its types here would bake an escaping import path into this
12
+ * file's emitted declaration, the same class of bug fixed for `Config` in
13
+ * `src/types.ts`. (`COMPONENT[number]`, a numeric index into a union of
14
+ * string-literal enum members, was already widening to plain `string` here —
15
+ * so `ComponentRegistry`/`ControlledInputRegistry` lose nothing.)
16
+ */
17
+ export declare const componentMap: ComponentRegistry;
18
+ export declare const controlledInputMap: ControlledInputRegistry;
19
+ export type { ControlledInput, ControlledInputEntry };
@@ -0,0 +1,3 @@
1
+ import { ClassValue } from 'clsx';
2
+ export declare function cn(...inputs: ClassValue[]): string;
3
+ export declare function colorHash(text: string): string;
@@ -0,0 +1,59 @@
1
+ export declare enum COMPONENT {
2
+ A = "a",
3
+ P = "p",
4
+ H = "h",
5
+ OL = "ol",
6
+ UL = "ul",
7
+ LI = "li",
8
+ DIV = "div",
9
+ SPAN = "span",
10
+ ACCORDION = "accordion",
11
+ ACCORDION_ITEM = "accordion-item",
12
+ ACCORDION_TRIGGER = "accordion-trigger",
13
+ ACCORDION_CONTENT = "accordion-content",
14
+ ALERT = "alert",
15
+ AVATAR = "avatar",
16
+ BADGE = "badge",
17
+ BUTTON = "button",
18
+ CARD = "card",
19
+ CARD_HEADER = "card-header",
20
+ CARD_TITLE = "card-title",
21
+ CARD_DESCRIPTION = "card-description",
22
+ CARD_CONTENT = "card-content",
23
+ CARD_FOOTER = "card-footer",
24
+ CARD_ACTION = "card-action",
25
+ CARD_ICON = "card-icon",
26
+ CALENDAR = "calendar",
27
+ CHECKBOX = "checkbox",
28
+ COLLAPSIBLE = "collapsible",
29
+ COLLAPSIBLE_TRIGGER = "collapsible-trigger",
30
+ COLLAPSIBLE_CONTENT = "collapsible-content",
31
+ IMAGE = "image",
32
+ OTP = "otp",
33
+ INPUT = "input",
34
+ INPUT_GROUP = "input-group",
35
+ INPUT_GROUP_TEXT = "input-group-text",
36
+ INPUT_GROUP_ADDON = "input-group-addon",
37
+ INPUT_GROUP_BUTTON = "input-group-button",
38
+ INPUT_GROUP_INPUT = "input-group-input",
39
+ INPUT_GROUP_TEXTAREA = "input-group-textarea",
40
+ LABEL = "label",
41
+ LOADER = "loader",
42
+ PROGRESS = "progress",
43
+ SEPARATOR = "separator",
44
+ SKELETON = "skeleton",
45
+ SWITCH = "switch",
46
+ TABLE = "table",
47
+ TABLE_HEADER = "table-header",
48
+ TABLE_BODY = "table-body",
49
+ TABLE_FOOTER = "table-footer",
50
+ TABLE_HEAD = "table-head",
51
+ TABLE_ROW = "table-row",
52
+ TABLE_CELL = "table-cell",
53
+ TABLE_CAPTION = "table-caption",
54
+ TEXTAREA = "textarea",
55
+ SIGNATURE = "signature",
56
+ EACH = "each",
57
+ IF = "if"
58
+ }
59
+ export declare const COMPONENT_LIST: Set<COMPONENT>;
@@ -0,0 +1,2 @@
1
+ export * from './webhook-events.js';
2
+ export * from './components.js';
@@ -0,0 +1,6 @@
1
+ export declare enum WEBHOOK_EVENT {
2
+ FORM_CAPTURED = "FORM_CAPTURED",
3
+ FILE_GENERATED = "FILE_GENERATED",
4
+ FILE_UPLOADED = "FILE_UPLOADED"
5
+ }
6
+ export declare const WEBHOOK_EVENTS: Set<WEBHOOK_EVENT>;
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod';
2
+ export interface TemplateSchemaComponent {
3
+ argsSchema: z.ZodType<any>;
4
+ description?: string;
5
+ }
6
+ export interface GeneratedTemplateSchema {
7
+ Node: z.ZodType<any>;
8
+ ComponentNode: z.ZodDiscriminatedUnion<any>;
9
+ }
10
+ /**
11
+ * Builds the same `CoreNode.extend({ type, args }).meta({ description })` shape used
12
+ * above, from a registry's component list rather than a hand-written literal — the
13
+ * union stops being static; it does not stop existing. See REGISTRY_SPIKE.md,
14
+ * "Schema strategy".
15
+ */
16
+ export declare function createTemplateSchema(components: Record<string, TemplateSchemaComponent>): GeneratedTemplateSchema;
17
+ export declare const PEBBLE_COMPONENT_SCHEMAS: Record<string, TemplateSchemaComponent>;
18
+ declare const pebbleTemplateSchema: GeneratedTemplateSchema;
19
+ export declare const ComponentNode: z.ZodDiscriminatedUnion<any, string>;
20
+ export declare const Config: z.ZodType<any, unknown, z.core.$ZodTypeInternals<any, unknown>>;
21
+ export type Config = z.infer<typeof pebbleTemplateSchema.Node>;
22
+ /** Every element (non-string) node schema, keyed by its `type` literal. */
23
+ export declare const NodeSchemas: Record<string, z.ZodObject<any>>;
24
+ export {};
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Which children a node type may hold, and where it may be placed.
4
+ * `each` / `if` are transparent: they are allowed wherever their children are,
5
+ * and a child's `parent` rule is checked against the nearest element above them.
6
+ */
7
+ export interface NodeRules {
8
+ /** "any" (default), "none" (void / self-contained), or an allow-list of child types. */
9
+ accepts: "any" | "none" | string[];
10
+ /** Allow-list of direct parent types; absent means any parent. */
11
+ parent?: string[];
12
+ }
13
+ export type FieldControl = "text" | "textarea" | "select" | "switch" | "number" | "color" | "binding" | "json";
14
+ export type FieldGroup = "Content" | "Data" | "Style" | "Advanced";
15
+ export interface FieldHints {
16
+ label?: string;
17
+ control?: FieldControl;
18
+ group?: FieldGroup;
19
+ placeholder?: string;
20
+ }
21
+ export declare const nodeRules: z.core.$ZodRegistry<NodeRules, z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
22
+ export declare const fieldHints: z.core.$ZodRegistry<FieldHints, z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
23
+ /** The args object schema of a node type, unwrapped from `.optional()`. */
24
+ export declare function getArgsSchema(type: string): z.ZodObject | undefined;
25
+ /** Nesting rules for a node type; unknown types accept anything. */
26
+ export declare function getNodeRules(type: string): NodeRules;
@@ -0,0 +1,374 @@
1
+ import { COMPONENT as h } from "../constants.js";
2
+ import { jsxs as p, jsx as t } from "react/jsx-runtime";
3
+ import * as x from "react";
4
+ import { getDefaultClassNames as _, DayPicker as S } from "react-day-picker";
5
+ import { c as a, b, B as z } from "../chunks/button-jfJanilw.js";
6
+ import { IconSelector as k, IconCheck as C, IconChevronUp as D, IconChevronDown as v, IconChevronLeft as I, IconChevronRight as j } from "@tabler/icons-react";
7
+ import { Select as s } from "@base-ui/react/select";
8
+ const y = s.Root;
9
+ y.displayName = "Select";
10
+ function P({ className: n, ...e }) {
11
+ return /* @__PURE__ */ t(
12
+ s.Value,
13
+ {
14
+ "data-slot": "select-value",
15
+ className: a(
16
+ "flex flex-1 text-left",
17
+ "group/select-trigger:line-clamp-1 group/select-trigger:items-center data-placeholder:text-subtle font-base",
18
+ n
19
+ ),
20
+ ...e
21
+ }
22
+ );
23
+ }
24
+ function L({
25
+ className: n,
26
+ size: e = "lg",
27
+ variant: i = "outline",
28
+ raised: c,
29
+ extrude: m,
30
+ children: f,
31
+ ...r
32
+ }) {
33
+ return /* @__PURE__ */ p(
34
+ s.Trigger,
35
+ {
36
+ "data-slot": "select-trigger",
37
+ "data-size": e,
38
+ "aria-label": r["aria-label"] ?? "select-trigger",
39
+ className: a(
40
+ b({ size: e, variant: i, raised: c, extrude: m }),
41
+ "group/select-trigger neo-base neo-input-focus disabled:opacity-50 [&_svg]:shrink-0 w-full",
42
+ n
43
+ ),
44
+ ...r,
45
+ children: [
46
+ f,
47
+ /* @__PURE__ */ t(
48
+ s.Icon,
49
+ {
50
+ className: "flex items-center justify-center",
51
+ render: /* @__PURE__ */ t(
52
+ k,
53
+ {
54
+ "data-slot": "select-selector",
55
+ className: "text-muted size-4 pointer-events-none"
56
+ }
57
+ )
58
+ }
59
+ )
60
+ ]
61
+ }
62
+ );
63
+ }
64
+ function R({
65
+ className: n,
66
+ children: e,
67
+ side: i = "bottom",
68
+ sideOffset: c = 4,
69
+ align: m = "center",
70
+ alignOffset: f = 0,
71
+ alignItemWithTrigger: r = !0,
72
+ ...g
73
+ }) {
74
+ return /* @__PURE__ */ t(s.Portal, { children: /* @__PURE__ */ t(
75
+ s.Positioner,
76
+ {
77
+ side: i,
78
+ sideOffset: c,
79
+ align: m,
80
+ alignOffset: f,
81
+ alignItemWithTrigger: r,
82
+ className: "isolate z-50",
83
+ children: /* @__PURE__ */ p(
84
+ s.Popup,
85
+ {
86
+ "data-slot": "select-content",
87
+ className: a(
88
+ "neo-base neo-focus relative isolate bg-surface text-foreground rounded-base shadow-md border-2 z-50 duration-100",
89
+ "max-h-(--available-height) w-(--anchor-width) min-w-36",
90
+ "origin-(--transform-origin) overflow-x-hidden overflow-y-auto",
91
+ "data-open:animate-in data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95",
92
+ "data-closed:animate-out data-closed:fade-out-0",
93
+ "data-[side=top]:slide-in-from-bottom-2",
94
+ "data-[side=bottom]:slide-in-from-top-2",
95
+ "data-[side=left]:slide-in-from-right-2",
96
+ "data-[side=right]:slide-in-from-left-2",
97
+ n
98
+ ),
99
+ ...g,
100
+ children: [
101
+ /* @__PURE__ */ t(B, {}),
102
+ /* @__PURE__ */ t(s.List, { className: "flex flex-col gap-0.5 p-0.5", children: e }),
103
+ /* @__PURE__ */ t(E, {})
104
+ ]
105
+ }
106
+ )
107
+ }
108
+ ) });
109
+ }
110
+ function A({
111
+ className: n,
112
+ children: e,
113
+ ...i
114
+ }) {
115
+ return /* @__PURE__ */ p(
116
+ s.Item,
117
+ {
118
+ "data-slot": "select-item",
119
+ className: a(
120
+ "neo-base flex items-center gap-2 py-1.5 pr-8 pl-2 relative w-full cursor-pointer select-none",
121
+ "border-2 border-transparent hover:border-border focus-visible:border-border outline-hidden rounded-base text-sm",
122
+ "*:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
123
+ "data-disabled:pointer-events-none data-disabled:opacity-50",
124
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0",
125
+ n
126
+ ),
127
+ ...i,
128
+ children: [
129
+ /* @__PURE__ */ t(s.ItemText, { className: "flex flex-1 gap-2 shrink-0 whitespace-nowrap", children: e }),
130
+ /* @__PURE__ */ t(
131
+ s.ItemIndicator,
132
+ {
133
+ render: /* @__PURE__ */ t("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
134
+ children: /* @__PURE__ */ t(C, { className: "pointer-events-none" })
135
+ }
136
+ )
137
+ ]
138
+ }
139
+ );
140
+ }
141
+ function B({
142
+ className: n,
143
+ ...e
144
+ }) {
145
+ return /* @__PURE__ */ t(
146
+ s.ScrollUpArrow,
147
+ {
148
+ "data-slot": "select-scroll-up-button",
149
+ className: a(
150
+ "bg-surface z-10 flex cursor-default items-center justify-center py-1 top-0 w-full",
151
+ n
152
+ ),
153
+ ...e,
154
+ children: /* @__PURE__ */ t(D, {})
155
+ }
156
+ );
157
+ }
158
+ function E({
159
+ className: n,
160
+ ...e
161
+ }) {
162
+ return /* @__PURE__ */ t(
163
+ s.ScrollDownArrow,
164
+ {
165
+ "data-slot": "select-scroll-down-button",
166
+ className: a(
167
+ "bg-surface z-10 flex cursor-default items-center justify-center py-1 bottom-0 w-full",
168
+ n
169
+ ),
170
+ ...e,
171
+ children: /* @__PURE__ */ t(v, {})
172
+ }
173
+ );
174
+ }
175
+ function T({
176
+ className: n,
177
+ classNames: e,
178
+ showOutsideDays: i = !0,
179
+ captionLayout: c = "label",
180
+ hideWeekdays: m = !1,
181
+ buttonVariant: f = "outline",
182
+ hideWeekends: r,
183
+ formatters: g,
184
+ components: w,
185
+ ...N
186
+ }) {
187
+ const o = _();
188
+ return /* @__PURE__ */ t(
189
+ S,
190
+ {
191
+ showOutsideDays: i,
192
+ className: a(
193
+ "p-3 bg-surface group/calendar [--cell-size:--spacing(8)]",
194
+ "in-data-[slot=card-content]:bg-transparent",
195
+ "in-data-[slot=popover-content]:bg-transparent",
196
+ n
197
+ ),
198
+ captionLayout: c,
199
+ formatters: {
200
+ formatCaption: (l) => l.toLocaleString("default", { month: "short", year: "numeric" }),
201
+ formatMonthDropdown: (l) => l.toLocaleString("default", { month: "short" }),
202
+ ...g
203
+ },
204
+ classNames: {
205
+ root: a("w-fit", o.root),
206
+ nav: a(
207
+ "flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",
208
+ o.nav
209
+ ),
210
+ button_previous: a(
211
+ b({ variant: f, icon: "sm" }),
212
+ "aria-disabled:opacity-50 aria-disabled:translate-[0px] aria-disabled:shadow-none aria-disabled:pointer-events-none",
213
+ o.button_previous
214
+ ),
215
+ button_next: a(
216
+ b({ variant: f, icon: "sm" }),
217
+ "aria-disabled:opacity-50 aria-disabled:translate-[0px] aria-disabled:shadow-none aria-disabled:pointer-events-none",
218
+ o.button_next
219
+ ),
220
+ caption_label: a("select-none", o.caption_label),
221
+ months: a(
222
+ "flex gap-4 flex-col md:flex-row relative",
223
+ o.months
224
+ ),
225
+ month: a(
226
+ "flex flex-col w-full gap-4 *:first:*:h-(--cell-size) *:first:*:flex *:first:*:items-center *:first:*:justify-center *:first:**:font-medium *:first:**:font-heading *:first:**:text-base",
227
+ o.month
228
+ ),
229
+ month_grid: "w-full border-collapse",
230
+ weekdays: a("flex", o.weekdays),
231
+ weekday: a(
232
+ m ? "hidden" : "text-sm font-normal font-heading text-muted text-center select-none flex-1",
233
+ o.weekday
234
+ ),
235
+ week_number: a(
236
+ "text-sm font-normal font-heading text-muted text-center select-none flex size-(--cell-size) items-center justify-center my-auto",
237
+ o.week_number
238
+ ),
239
+ week_number_header: a(
240
+ "select-none w-(--cell-size)",
241
+ o.week_number_header
242
+ ),
243
+ week: a("flex w-full", o.week),
244
+ day: a(
245
+ "relative text-center group/day select-none transition-[width,padding,margin] duration-200",
246
+ o.day
247
+ ),
248
+ day_button: a("m-1", o.day_button),
249
+ today: a(
250
+ "*:data-[slot=calendar-day-button]:font-semibold *:data-[slot=calendar-day-button]:text-lg",
251
+ o.today
252
+ ),
253
+ outside: a(
254
+ "text-muted aria-selected:text-foreground opacity-50 hover:opacity-100 aria-selected:opacity-100 aria-selected:*:data-[slot=calendar-day-button]:bg-main-secondary hover:*:data-[slot=calendar-day-button]:bg-surface *:data-[slot=calendar-day-button]:bg-foreground/20",
255
+ o.outside
256
+ ),
257
+ ...e
258
+ },
259
+ components: {
260
+ Root: ({ className: l, rootRef: d, ...u }) => /* @__PURE__ */ t(
261
+ "div",
262
+ {
263
+ "data-slot": "calendar",
264
+ ref: d,
265
+ className: a(l),
266
+ ...u
267
+ }
268
+ ),
269
+ Chevron: ({ className: l, orientation: d, ...u }) => d === "left" ? /* @__PURE__ */ t(I, { className: a("size-4", l), ...u }) : d === "right" ? /* @__PURE__ */ t(
270
+ j,
271
+ {
272
+ className: a("size-4", l),
273
+ ...u
274
+ }
275
+ ) : /* @__PURE__ */ t(v, { className: a("size-4", l), ...u }),
276
+ Weekday: ({ children: l, ...d }) => {
277
+ const u = d["aria-label"] === "Saturday" || d["aria-label"] === "Sunday";
278
+ return r && u ? /* @__PURE__ */ t("td", { hidden: !0 }) : /* @__PURE__ */ t("td", { ...d, children: l });
279
+ },
280
+ Day: ({ children: l, ...d }) => {
281
+ const u = new Date(d.day.date).getDay();
282
+ return r && (u === 0 || u === 6) ? /* @__PURE__ */ t("td", { hidden: !0 }) : d.modifiers.hidden ? /* @__PURE__ */ t("td", { className: "all-unset size-(--cell-size) m-1 bg-foreground opacity-20 rounded-base" }) : /* @__PURE__ */ t("td", { ...d, children: l });
283
+ },
284
+ Dropdown: V,
285
+ DayButton: U,
286
+ ...w
287
+ },
288
+ ...N
289
+ }
290
+ );
291
+ }
292
+ function U({
293
+ day: n,
294
+ modifiers: e,
295
+ ...i
296
+ }) {
297
+ const c = x.useRef(null);
298
+ return x.useEffect(() => {
299
+ e.focused && c.current?.focus();
300
+ }, [e.focused]), /* @__PURE__ */ t(
301
+ z,
302
+ {
303
+ "data-slot": "calendar-day-button",
304
+ "data-day": n.date.toLocaleDateString(),
305
+ "data-selected-single": e.selected && !e.range_start && !e.range_end && !e.range_middle,
306
+ "data-range-start": e.range_start,
307
+ "data-range-end": e.range_end,
308
+ "data-range-middle": e.range_middle,
309
+ "aria-label": n.date.toDateString(),
310
+ raised: e.range_start || e.range_end ? "md" : e.range_middle ? "xs" : "sm",
311
+ variant: e.selected ? "default" : "outline",
312
+ extrude: e.selected ? null : "xs",
313
+ disabled: e.disabled,
314
+ icon: "sm",
315
+ ...i
316
+ }
317
+ );
318
+ }
319
+ function V(n) {
320
+ const { options: e, onChange: i, value: c } = n, m = e?.find((r) => r.value === c), f = (r) => {
321
+ i?.({
322
+ target: { value: r }
323
+ });
324
+ };
325
+ return /* @__PURE__ */ p(
326
+ y,
327
+ {
328
+ value: c?.toString(),
329
+ onValueChange: (r) => f(r),
330
+ children: [
331
+ /* @__PURE__ */ t(
332
+ L,
333
+ {
334
+ variant: "ghost",
335
+ raised: null,
336
+ extrude: null,
337
+ className: "w-fit mx-1",
338
+ size: "sm",
339
+ children: /* @__PURE__ */ t(P, { children: m?.label })
340
+ }
341
+ ),
342
+ /* @__PURE__ */ t(R, { className: "bg-transparent border-0 w-30 shadow-none", children: /* @__PURE__ */ t("div", { className: "p-2", children: /* @__PURE__ */ t("div", { className: "flex flex-col items-center bg-foreground shadow-xs rounded-base", children: e?.map((r) => /* @__PURE__ */ t(
343
+ A,
344
+ {
345
+ className: a(
346
+ b({ extrude: "md" }),
347
+ "not-last:rounded-b-none not-first:rounded-t-none border-2 not-last:border-b-0 hover:border-2 hover:z-2 z-1 duration-200"
348
+ ),
349
+ value: r.value.toString(),
350
+ children: r.label
351
+ },
352
+ r.value
353
+ )) }) }) })
354
+ ]
355
+ }
356
+ );
357
+ }
358
+ const H = {
359
+ components: {
360
+ [h.CALENDAR]: T
361
+ },
362
+ controlledInputs: {
363
+ [h.CALENDAR]: {
364
+ valueProp: "selected",
365
+ changeProp: "onSelect",
366
+ extractor: (n) => n
367
+ }
368
+ }
369
+ };
370
+ export {
371
+ T as Calendar,
372
+ H as calendarPreset
373
+ };
374
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sources":["../../src/components/ui/select.tsx","../../src/components/ui/calendar.tsx","../../src/renderer/presets/calendar.ts"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\";\nimport {\n IconSelector,\n IconCheck,\n IconChevronUp,\n IconChevronDown,\n} from \"@tabler/icons-react\";\nimport { cn } from \"@/lib/utils\";\nimport type { VariantProps } from \"class-variance-authority\";\nimport { buttonVariants } from \"./button\";\n\nconst Select = SelectPrimitive.Root;\n(Select as any).displayName = \"Select\";\n\nfunction SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {\n return (\n <SelectPrimitive.Group\n data-slot=\"select-group\"\n className={cn(\"scroll-my-1 p-1\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {\n return (\n <SelectPrimitive.Value\n data-slot=\"select-value\"\n className={cn(\n \"flex flex-1 text-left\",\n \"group/select-trigger:line-clamp-1 group/select-trigger:items-center data-placeholder:text-subtle font-base\",\n className,\n )}\n {...props}\n />\n );\n}\n\ninterface SelectTriggerProps\n extends\n SelectPrimitive.Trigger.Props,\n Omit<VariantProps<typeof buttonVariants>, \"icon\"> {}\n\nfunction SelectTrigger({\n className,\n size = \"lg\",\n variant = \"outline\",\n raised,\n extrude,\n children,\n ...props\n}: SelectTriggerProps) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n aria-label={props[\"aria-label\"] ?? \"select-trigger\"}\n className={cn(\n buttonVariants({ size, variant, raised, extrude }),\n \"group/select-trigger neo-base neo-input-focus disabled:opacity-50 [&_svg]:shrink-0 w-full\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon\n className=\"flex items-center justify-center\"\n render={\n <IconSelector\n data-slot=\"select-selector\"\n className=\"text-muted size-4 pointer-events-none\"\n />\n }\n />\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n side = \"bottom\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n alignItemWithTrigger = true,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<\n SelectPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"alignItemWithTrigger\"\n >) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n alignItemWithTrigger={alignItemWithTrigger}\n className=\"isolate z-50\"\n >\n <SelectPrimitive.Popup\n data-slot=\"select-content\"\n className={cn(\n \"neo-base neo-focus relative isolate bg-surface text-foreground rounded-base shadow-md border-2 z-50 duration-100\",\n \"max-h-(--available-height) w-(--anchor-width) min-w-36\",\n \"origin-(--transform-origin) overflow-x-hidden overflow-y-auto\",\n \"data-open:animate-in data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95\",\n \"data-closed:animate-out data-closed:fade-out-0\",\n \"data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.List className=\"flex flex-col gap-0.5 p-0.5\">\n {children}\n </SelectPrimitive.List>\n <SelectScrollDownButton />\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: SelectPrimitive.GroupLabel.Props) {\n return (\n <SelectPrimitive.GroupLabel\n data-slot=\"select-label\"\n className={cn(\"text-muted px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: SelectPrimitive.Item.Props) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"neo-base flex items-center gap-2 py-1.5 pr-8 pl-2 relative w-full cursor-pointer select-none\",\n \"border-2 border-transparent hover:border-border focus-visible:border-border outline-hidden rounded-base text-sm\",\n \"*:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n \"data-disabled:pointer-events-none data-disabled:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText className=\"flex flex-1 gap-2 shrink-0 whitespace-nowrap\">\n {children}\n </SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator\n render={\n <span className=\"pointer-events-none absolute right-2 flex size-4 items-center justify-center\" />\n }\n >\n <IconCheck className=\"pointer-events-none\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: SelectPrimitive.Separator.Props) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\n \"bg-foreground -mx-1 my-1 h-px pointer-events-none\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {\n return (\n <SelectPrimitive.ScrollUpArrow\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"bg-surface z-10 flex cursor-default items-center justify-center py-1 top-0 w-full\",\n className,\n )}\n {...props}\n >\n <IconChevronUp />\n </SelectPrimitive.ScrollUpArrow>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {\n return (\n <SelectPrimitive.ScrollDownArrow\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"bg-surface z-10 flex cursor-default items-center justify-center py-1 bottom-0 w-full\",\n className,\n )}\n {...props}\n >\n <IconChevronDown />\n </SelectPrimitive.ScrollDownArrow>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n type DropdownOption,\n} from \"react-day-picker\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Button, buttonVariants } from \"@/components/ui/button\";\nimport {\n IconChevronLeft,\n IconChevronRight,\n IconChevronDown,\n} from \"@tabler/icons-react\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\";\n\ntype CalendarProps = React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"];\n hideWeekends?: boolean;\n};\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n hideWeekdays = false,\n buttonVariant = \"outline\",\n hideWeekends,\n formatters,\n components,\n ...props\n}: CalendarProps) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"p-3 bg-surface group/calendar [--cell-size:--spacing(8)]\",\n \"in-data-[slot=card-content]:bg-transparent\",\n \"in-data-[slot=popover-content]:bg-transparent\",\n className,\n )}\n captionLayout={captionLayout}\n formatters={{\n formatCaption: (date) =>\n date.toLocaleString(\"default\", { month: \"short\", year: \"numeric\" }),\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant, icon: \"sm\" }),\n \"aria-disabled:opacity-50 aria-disabled:translate-[0px] aria-disabled:shadow-none aria-disabled:pointer-events-none\",\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant, icon: \"sm\" }),\n \"aria-disabled:opacity-50 aria-disabled:translate-[0px] aria-disabled:shadow-none aria-disabled:pointer-events-none\",\n defaultClassNames.button_next,\n ),\n caption_label: cn(\"select-none\", defaultClassNames.caption_label),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months,\n ),\n month: cn(\n \"flex flex-col w-full gap-4 *:first:*:h-(--cell-size) *:first:*:flex *:first:*:items-center *:first:*:justify-center *:first:**:font-medium *:first:**:font-heading *:first:**:text-base\",\n defaultClassNames.month,\n ),\n month_grid: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n hideWeekdays\n ? \"hidden\"\n : \"text-sm font-normal font-heading text-muted text-center select-none flex-1\",\n defaultClassNames.weekday,\n ),\n week_number: cn(\n \"text-sm font-normal font-heading text-muted text-center select-none flex size-(--cell-size) items-center justify-center my-auto\",\n defaultClassNames.week_number,\n ),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header,\n ),\n week: cn(\"flex w-full\", defaultClassNames.week),\n day: cn(\n \"relative text-center group/day select-none transition-[width,padding,margin] duration-200\",\n defaultClassNames.day,\n ),\n day_button: cn(\"m-1\", defaultClassNames.day_button),\n today: cn(\n \"*:data-[slot=calendar-day-button]:font-semibold *:data-[slot=calendar-day-button]:text-lg\",\n defaultClassNames.today,\n ),\n outside: cn(\n \"text-muted aria-selected:text-foreground opacity-50 hover:opacity-100 aria-selected:opacity-100 aria-selected:*:data-[slot=calendar-day-button]:bg-main-secondary hover:*:data-[slot=calendar-day-button]:bg-surface *:data-[slot=calendar-day-button]:bg-foreground/20\",\n defaultClassNames.outside,\n ),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n );\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <IconChevronLeft className={cn(\"size-4\", className)} {...props} />\n );\n }\n\n if (orientation === \"right\") {\n return (\n <IconChevronRight\n className={cn(\"size-4\", className)}\n {...props}\n />\n );\n }\n\n return (\n <IconChevronDown className={cn(\"size-4\", className)} {...props} />\n );\n },\n Weekday: ({ children, ...props }) => {\n const isWeekend =\n props[\"aria-label\"] === \"Saturday\" ||\n props[\"aria-label\"] === \"Sunday\";\n if (hideWeekends && isWeekend) {\n return <td hidden />;\n }\n return <td {...props}>{children}</td>;\n },\n Day: ({ children, ...props }) => {\n const weekday = new Date(props.day.date).getDay();\n const isWeekend = weekday === 0 || weekday === 6;\n if (hideWeekends && isWeekend) {\n return <td hidden />;\n }\n if (props.modifiers.hidden) {\n return (\n <td className=\"all-unset size-(--cell-size) m-1 bg-foreground opacity-20 rounded-base\" />\n );\n }\n return <td {...props}>{children}</td>;\n },\n Dropdown: CalendarDropdown,\n DayButton: CalendarDayButton,\n ...components,\n }}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n data-slot=\"calendar-day-button\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n aria-label={day.date.toDateString()}\n raised={\n modifiers.range_start || modifiers.range_end\n ? \"md\"\n : modifiers.range_middle\n ? \"xs\"\n : \"sm\"\n }\n variant={modifiers.selected ? \"default\" : \"outline\"}\n extrude={modifiers.selected ? null : \"xs\"}\n disabled={modifiers.disabled}\n icon=\"sm\"\n {...props}\n />\n );\n}\n\nfunction CalendarDropdown(\n props: Omit<React.SelectHTMLAttributes<HTMLSelectElement>, \"children\"> & {\n options?: DropdownOption[] | undefined;\n },\n) {\n const { options, onChange, value } = props;\n const selected = options?.find((option) => option.value === value);\n const handleChange = (value: string) => {\n const changeEvent = {\n target: { value },\n } as React.ChangeEvent<HTMLSelectElement>;\n onChange?.(changeEvent);\n };\n\n return (\n <Select\n value={value?.toString()}\n onValueChange={(value) => handleChange(value as any)}\n >\n <SelectTrigger\n variant=\"ghost\"\n raised={null}\n extrude={null}\n className=\"w-fit mx-1\"\n size=\"sm\"\n >\n <SelectValue>{selected?.label}</SelectValue>\n </SelectTrigger>\n <SelectContent className=\"bg-transparent border-0 w-30 shadow-none\">\n <div className=\"p-2\">\n <div className=\"flex flex-col items-center bg-foreground shadow-xs rounded-base\">\n {options?.map((option) => (\n <SelectItem\n className={cn(\n buttonVariants({ extrude: \"md\" }),\n \"not-last:rounded-b-none not-first:rounded-t-none border-2 not-last:border-b-0 hover:border-2 hover:z-2 z-1 duration-200\",\n )}\n key={option.value}\n value={option.value.toString()}\n >\n {option.label}\n </SelectItem>\n ))}\n </div>\n </div>\n </SelectContent>\n </Select>\n );\n}\n\nexport { Calendar };\n","import { COMPONENT } from \"@bonsai/constants\";\n\nimport { Calendar } from \"../../components/ui/calendar\";\nimport type { BonsaiPreset } from \"../core-registry\";\n\n/** Opt-in `calendar` component. Pulls in react-day-picker. */\nexport const calendarPreset: BonsaiPreset = {\n components: {\n [COMPONENT.CALENDAR]: Calendar,\n },\n controlledInputs: {\n [COMPONENT.CALENDAR]: {\n valueProp: \"selected\",\n changeProp: \"onSelect\",\n extractor: (date) => date,\n },\n },\n};\n\nexport { Calendar };\n"],"names":["Select","SelectPrimitive","SelectValue","className","props","jsx","cn","SelectTrigger","size","variant","raised","extrude","children","jsxs","buttonVariants","IconSelector","SelectContent","side","sideOffset","align","alignOffset","alignItemWithTrigger","SelectScrollUpButton","SelectScrollDownButton","SelectItem","IconCheck","IconChevronUp","IconChevronDown","Calendar","classNames","showOutsideDays","captionLayout","hideWeekdays","buttonVariant","hideWeekends","formatters","components","defaultClassNames","getDefaultClassNames","DayPicker","date","rootRef","orientation","IconChevronLeft","IconChevronRight","isWeekend","weekday","CalendarDropdown","CalendarDayButton","day","modifiers","ref","React","Button","options","onChange","value","selected","option","handleChange","calendarPreset","COMPONENT"],"mappings":"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"}