@kushagradhawan/kookie-ui 0.1.41 → 0.1.42

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 (142) hide show
  1. package/README.md +257 -60
  2. package/components.css +386 -79
  3. package/dist/cjs/components/schemas/base-button.schema.d.ts +319 -0
  4. package/dist/cjs/components/schemas/base-button.schema.d.ts.map +1 -0
  5. package/dist/cjs/components/schemas/base-button.schema.js +2 -0
  6. package/dist/cjs/components/schemas/base-button.schema.js.map +7 -0
  7. package/dist/cjs/components/schemas/button.schema.d.ts +686 -0
  8. package/dist/cjs/components/schemas/button.schema.d.ts.map +1 -0
  9. package/dist/cjs/components/schemas/button.schema.js +2 -0
  10. package/dist/cjs/components/schemas/button.schema.js.map +7 -0
  11. package/dist/cjs/components/schemas/icon-button.schema.d.ts +329 -0
  12. package/dist/cjs/components/schemas/icon-button.schema.d.ts.map +1 -0
  13. package/dist/cjs/components/schemas/icon-button.schema.js +2 -0
  14. package/dist/cjs/components/schemas/icon-button.schema.js.map +7 -0
  15. package/dist/cjs/components/schemas/index.d.ts +52 -0
  16. package/dist/cjs/components/schemas/index.d.ts.map +1 -0
  17. package/dist/cjs/components/schemas/index.js +2 -0
  18. package/dist/cjs/components/schemas/index.js.map +7 -0
  19. package/dist/cjs/components/schemas/toggle-button.schema.d.ts +1172 -0
  20. package/dist/cjs/components/schemas/toggle-button.schema.d.ts.map +1 -0
  21. package/dist/cjs/components/schemas/toggle-button.schema.js +2 -0
  22. package/dist/cjs/components/schemas/toggle-button.schema.js.map +7 -0
  23. package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts +563 -0
  24. package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts.map +1 -0
  25. package/dist/cjs/components/schemas/toggle-icon-button.schema.js +2 -0
  26. package/dist/cjs/components/schemas/toggle-icon-button.schema.js.map +7 -0
  27. package/dist/cjs/components/sheet.d.ts +1 -1
  28. package/dist/cjs/components/sheet.d.ts.map +1 -1
  29. package/dist/cjs/components/sheet.js +1 -1
  30. package/dist/cjs/components/sheet.js.map +3 -3
  31. package/dist/cjs/components/shell.d.ts +125 -164
  32. package/dist/cjs/components/shell.d.ts.map +1 -1
  33. package/dist/cjs/components/shell.js +1 -1
  34. package/dist/cjs/components/shell.js.map +3 -3
  35. package/dist/cjs/components/sidebar.d.ts +1 -7
  36. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  37. package/dist/cjs/components/sidebar.js +1 -1
  38. package/dist/cjs/components/sidebar.js.map +3 -3
  39. package/dist/cjs/components/theme.d.ts +3 -0
  40. package/dist/cjs/components/theme.d.ts.map +1 -1
  41. package/dist/cjs/components/theme.js +1 -1
  42. package/dist/cjs/components/theme.js.map +3 -3
  43. package/dist/cjs/components/theme.props.d.ts +10 -0
  44. package/dist/cjs/components/theme.props.d.ts.map +1 -1
  45. package/dist/cjs/components/theme.props.js +1 -1
  46. package/dist/cjs/components/theme.props.js.map +3 -3
  47. package/dist/cjs/helpers/font-config.d.ts +96 -0
  48. package/dist/cjs/helpers/font-config.d.ts.map +1 -0
  49. package/dist/cjs/helpers/font-config.js +3 -0
  50. package/dist/cjs/helpers/font-config.js.map +7 -0
  51. package/dist/cjs/helpers/index.d.ts +1 -0
  52. package/dist/cjs/helpers/index.d.ts.map +1 -1
  53. package/dist/cjs/helpers/index.js +1 -1
  54. package/dist/cjs/helpers/index.js.map +2 -2
  55. package/dist/esm/components/schemas/base-button.schema.d.ts +319 -0
  56. package/dist/esm/components/schemas/base-button.schema.d.ts.map +1 -0
  57. package/dist/esm/components/schemas/base-button.schema.js +2 -0
  58. package/dist/esm/components/schemas/base-button.schema.js.map +7 -0
  59. package/dist/esm/components/schemas/button.schema.d.ts +686 -0
  60. package/dist/esm/components/schemas/button.schema.d.ts.map +1 -0
  61. package/dist/esm/components/schemas/button.schema.js +2 -0
  62. package/dist/esm/components/schemas/button.schema.js.map +7 -0
  63. package/dist/esm/components/schemas/icon-button.schema.d.ts +329 -0
  64. package/dist/esm/components/schemas/icon-button.schema.d.ts.map +1 -0
  65. package/dist/esm/components/schemas/icon-button.schema.js +2 -0
  66. package/dist/esm/components/schemas/icon-button.schema.js.map +7 -0
  67. package/dist/esm/components/schemas/index.d.ts +52 -0
  68. package/dist/esm/components/schemas/index.d.ts.map +1 -0
  69. package/dist/esm/components/schemas/index.js +2 -0
  70. package/dist/esm/components/schemas/index.js.map +7 -0
  71. package/dist/esm/components/schemas/toggle-button.schema.d.ts +1172 -0
  72. package/dist/esm/components/schemas/toggle-button.schema.d.ts.map +1 -0
  73. package/dist/esm/components/schemas/toggle-button.schema.js +2 -0
  74. package/dist/esm/components/schemas/toggle-button.schema.js.map +7 -0
  75. package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts +563 -0
  76. package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts.map +1 -0
  77. package/dist/esm/components/schemas/toggle-icon-button.schema.js +2 -0
  78. package/dist/esm/components/schemas/toggle-icon-button.schema.js.map +7 -0
  79. package/dist/esm/components/sheet.d.ts +1 -1
  80. package/dist/esm/components/sheet.d.ts.map +1 -1
  81. package/dist/esm/components/sheet.js +1 -1
  82. package/dist/esm/components/sheet.js.map +3 -3
  83. package/dist/esm/components/shell.d.ts +125 -164
  84. package/dist/esm/components/shell.d.ts.map +1 -1
  85. package/dist/esm/components/shell.js +1 -1
  86. package/dist/esm/components/shell.js.map +3 -3
  87. package/dist/esm/components/sidebar.d.ts +1 -7
  88. package/dist/esm/components/sidebar.d.ts.map +1 -1
  89. package/dist/esm/components/sidebar.js +1 -1
  90. package/dist/esm/components/sidebar.js.map +3 -3
  91. package/dist/esm/components/theme.d.ts +3 -0
  92. package/dist/esm/components/theme.d.ts.map +1 -1
  93. package/dist/esm/components/theme.js +1 -1
  94. package/dist/esm/components/theme.js.map +3 -3
  95. package/dist/esm/components/theme.props.d.ts +10 -0
  96. package/dist/esm/components/theme.props.d.ts.map +1 -1
  97. package/dist/esm/components/theme.props.js +1 -1
  98. package/dist/esm/components/theme.props.js.map +3 -3
  99. package/dist/esm/helpers/font-config.d.ts +96 -0
  100. package/dist/esm/helpers/font-config.d.ts.map +1 -0
  101. package/dist/esm/helpers/font-config.js +3 -0
  102. package/dist/esm/helpers/font-config.js.map +7 -0
  103. package/dist/esm/helpers/index.d.ts +1 -0
  104. package/dist/esm/helpers/index.d.ts.map +1 -1
  105. package/dist/esm/helpers/index.js +1 -1
  106. package/dist/esm/helpers/index.js.map +2 -2
  107. package/package.json +23 -3
  108. package/schemas/base-button.d.ts +2 -0
  109. package/schemas/base-button.json +284 -0
  110. package/schemas/button.d.ts +2 -0
  111. package/schemas/button.json +535 -0
  112. package/schemas/icon-button.d.ts +2 -0
  113. package/schemas/icon-button.json +318 -0
  114. package/schemas/index.d.ts +2 -0
  115. package/schemas/index.json +2016 -0
  116. package/schemas/schemas.d.ts +29 -0
  117. package/schemas/toggle-button.d.ts +2 -0
  118. package/schemas/toggle-button.json +543 -0
  119. package/schemas/toggle-icon-button.d.ts +2 -0
  120. package/schemas/toggle-icon-button.json +326 -0
  121. package/schemas-json.d.ts +12 -0
  122. package/src/components/_internal/base-sidebar.css +1 -2
  123. package/src/components/schemas/base-button.schema.ts +339 -0
  124. package/src/components/schemas/button.schema.ts +198 -0
  125. package/src/components/schemas/icon-button.schema.ts +142 -0
  126. package/src/components/schemas/index.ts +68 -0
  127. package/src/components/schemas/toggle-button.schema.ts +122 -0
  128. package/src/components/schemas/toggle-icon-button.schema.ts +195 -0
  129. package/src/components/sheet.css +39 -19
  130. package/src/components/sheet.tsx +62 -3
  131. package/src/components/shell.css +510 -89
  132. package/src/components/shell.tsx +2055 -928
  133. package/src/components/sidebar.tsx +3 -22
  134. package/src/components/theme.props.tsx +8 -0
  135. package/src/components/theme.tsx +16 -0
  136. package/src/helpers/font-config.ts +167 -0
  137. package/src/helpers/index.ts +1 -0
  138. package/src/styles/fonts.css +16 -13
  139. package/src/styles/tokens/typography.css +27 -4
  140. package/styles.css +398 -79
  141. package/tokens/base.css +12 -0
  142. package/tokens.css +12 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.schema.d.ts","sourceRoot":"","sources":["../../../../src/components/schemas/button.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IACvB;;OAEG;;IAGH;;;OAGG;;IAOH;;;OAGG;;IAOH;;OAEG;;IAMH;;;OAGG;;IAOH;;OAEG;;QAGC,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAahC,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAazB,uCAAuC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAavC,oDAAoD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAapD,uDAAuD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAavD,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAa5B,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU9B,CAAC;AAEZ;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAK5D"}
@@ -0,0 +1,2 @@
1
+ import{z as o}from"zod";import{BaseButtonSchema as n}from"./base-button.schema.js";const e=n.extend({tooltip:o.string().optional().describe("Content to display in the tooltip on hover/focus"),tooltipSide:o.enum(["top","right","bottom","left"]).optional().default("top").describe("Side of the button where the tooltip should appear"),tooltipAlign:o.enum(["start","center","end"]).optional().default("center").describe("Alignment of the tooltip relative to the button"),tooltipDelayDuration:o.number().optional().describe("Delay before showing the tooltip (in milliseconds)"),tooltipDisableHoverableContent:o.boolean().optional().default(!1).describe("Whether to disable hoverable content behavior"),overrideStyles:o.object({normal:o.object({color:o.string().optional(),background:o.string().optional(),backgroundColor:o.string().optional(),boxShadow:o.string().optional(),filter:o.string().optional(),outline:o.string().optional(),outlineOffset:o.string().optional(),opacity:o.union([o.string(),o.number()]).optional()}).optional(),hover:o.object({color:o.string().optional(),background:o.string().optional(),backgroundColor:o.string().optional(),boxShadow:o.string().optional(),filter:o.string().optional(),outline:o.string().optional(),outlineOffset:o.string().optional(),opacity:o.union([o.string(),o.number()]).optional()}).optional(),active:o.object({color:o.string().optional(),background:o.string().optional(),backgroundColor:o.string().optional(),boxShadow:o.string().optional(),filter:o.string().optional(),outline:o.string().optional(),outlineOffset:o.string().optional(),opacity:o.union([o.string(),o.number()]).optional()}).optional(),pressed:o.object({color:o.string().optional(),background:o.string().optional(),backgroundColor:o.string().optional(),boxShadow:o.string().optional(),filter:o.string().optional(),outline:o.string().optional(),outlineOffset:o.string().optional(),opacity:o.union([o.string(),o.number()]).optional()}).optional(),open:o.object({color:o.string().optional(),background:o.string().optional(),backgroundColor:o.string().optional(),boxShadow:o.string().optional(),filter:o.string().optional(),outline:o.string().optional(),outlineOffset:o.string().optional(),opacity:o.union([o.string(),o.number()]).optional()}).optional(),disabled:o.object({color:o.string().optional(),background:o.string().optional(),backgroundColor:o.string().optional(),boxShadow:o.string().optional(),filter:o.string().optional(),outline:o.string().optional(),outlineOffset:o.string().optional(),opacity:o.union([o.string(),o.number()]).optional()}).optional(),focus:o.object({outline:o.string().optional(),outlineOffset:o.string().optional()}).optional()}).optional().describe("Override styles for different interaction states")}).strict();function l(t){return t}export{e as ButtonSchema,l as parseButtonProps};
2
+ //# sourceMappingURL=button.schema.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/schemas/button.schema.ts"],
4
+ "sourcesContent": ["import { z } from 'zod';\nimport { BaseButtonSchema } from './base-button.schema.js';\n\n/**\n * Button Zod schema - Single source of truth for Button component props\n *\n * The Button component is the primary interactive element in the Kookie User Interface.\n * It provides six visual variants, four sizes, comprehensive color options, and built-in\n * tooltip support. The component automatically handles icon sizing, supports responsive\n * layouts, and provides accessibility compliance out of the box.\n *\n * @example\n * ```tsx\n * // Basic button validation\n * const props = ButtonSchema.parse({ variant: 'solid', size: '2' });\n *\n * // Button with tooltip\n * const tooltipProps = ButtonSchema.parse({\n * tooltip: 'Save your progress',\n * tooltipSide: 'top'\n * });\n *\n * // Polymorphic button as link\n * const linkProps = ButtonSchema.parse({\n * as: 'a',\n * href: '/dashboard',\n * children: 'Go to Dashboard'\n * });\n * ```\n */\nexport const ButtonSchema = BaseButtonSchema.extend({\n /**\n * Content to display in the tooltip on hover/focus\n */\n tooltip: z.string().optional().describe('Content to display in the tooltip on hover/focus'),\n\n /**\n * Side of the button where the tooltip should appear\n * @default 'top'\n */\n tooltipSide: z\n .enum(['top', 'right', 'bottom', 'left'])\n .optional()\n .default('top')\n .describe('Side of the button where the tooltip should appear'),\n\n /**\n * Alignment of the tooltip relative to the button\n * @default 'center'\n */\n tooltipAlign: z\n .enum(['start', 'center', 'end'])\n .optional()\n .default('center')\n .describe('Alignment of the tooltip relative to the button'),\n\n /**\n * Delay before showing the tooltip (in milliseconds)\n */\n tooltipDelayDuration: z\n .number()\n .optional()\n .describe('Delay before showing the tooltip (in milliseconds)'),\n\n /**\n * Whether to disable hoverable content behavior\n * @default false\n */\n tooltipDisableHoverableContent: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether to disable hoverable content behavior'),\n\n /**\n * Override styles for different interaction states\n */\n overrideStyles: z\n .object({\n /** Default/idle state styles */\n normal: z\n .object({\n color: z.string().optional(),\n background: z.string().optional(),\n backgroundColor: z.string().optional(),\n boxShadow: z.string().optional(),\n filter: z.string().optional(),\n outline: z.string().optional(),\n outlineOffset: z.string().optional(),\n opacity: z.union([z.string(), z.number()]).optional(),\n })\n .optional(),\n /** Hover state styles */\n hover: z\n .object({\n color: z.string().optional(),\n background: z.string().optional(),\n backgroundColor: z.string().optional(),\n boxShadow: z.string().optional(),\n filter: z.string().optional(),\n outline: z.string().optional(),\n outlineOffset: z.string().optional(),\n opacity: z.union([z.string(), z.number()]).optional(),\n })\n .optional(),\n /** Active (mouse down) state styles */\n active: z\n .object({\n color: z.string().optional(),\n background: z.string().optional(),\n backgroundColor: z.string().optional(),\n boxShadow: z.string().optional(),\n filter: z.string().optional(),\n outline: z.string().optional(),\n outlineOffset: z.string().optional(),\n opacity: z.union([z.string(), z.number()]).optional(),\n })\n .optional(),\n /** Toggle pressed state styles (data-state=\"on\") */\n pressed: z\n .object({\n color: z.string().optional(),\n background: z.string().optional(),\n backgroundColor: z.string().optional(),\n boxShadow: z.string().optional(),\n filter: z.string().optional(),\n outline: z.string().optional(),\n outlineOffset: z.string().optional(),\n opacity: z.union([z.string(), z.number()]).optional(),\n })\n .optional(),\n /** Open state styles (e.g., when used as a trigger) */\n open: z\n .object({\n color: z.string().optional(),\n background: z.string().optional(),\n backgroundColor: z.string().optional(),\n boxShadow: z.string().optional(),\n filter: z.string().optional(),\n outline: z.string().optional(),\n outlineOffset: z.string().optional(),\n opacity: z.union([z.string(), z.number()]).optional(),\n })\n .optional(),\n /** Disabled state styles */\n disabled: z\n .object({\n color: z.string().optional(),\n background: z.string().optional(),\n backgroundColor: z.string().optional(),\n boxShadow: z.string().optional(),\n filter: z.string().optional(),\n outline: z.string().optional(),\n outlineOffset: z.string().optional(),\n opacity: z.union([z.string(), z.number()]).optional(),\n })\n .optional(),\n /** Focus-visible outline styles */\n focus: z\n .object({\n outline: z.string().optional(),\n outlineOffset: z.string().optional(),\n })\n .optional(),\n })\n .optional()\n .describe('Override styles for different interaction states'),\n}).strict();\n\n/**\n * Type derived from Button Zod schema\n * This ensures type safety and consistency with the schema\n */\nexport type ButtonProps = z.infer<typeof ButtonSchema>;\n\n/**\n * Development-only helper to validate and normalize Button props\n * This function should only be used in development mode\n *\n * @param props - Props to validate and normalize\n * @returns Validated and normalized props\n *\n * @example\n * ```tsx\n * // In development, this will validate props and show helpful errors\n * const validatedProps = parseButtonProps({\n * variant: 'invalid',\n * tooltipSide: 'invalid'\n * });\n * // Throws validation errors for invalid enum values\n * ```\n */\nexport function parseButtonProps(props: unknown): ButtonProps {\n if (process.env.NODE_ENV === 'development') {\n return ButtonSchema.parse(props);\n }\n return props as ButtonProps;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["z", "BaseButtonSchema", "ButtonSchema", "parseButtonProps", "props"]
7
+ }
@@ -0,0 +1,329 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * IconButton Zod schema - Single source of truth for IconButton component props
4
+ *
5
+ * IconButton is a specialized button component designed for icon-only interactions.
6
+ * It requires proper accessibility attributes to meet WCAG guidelines and provides
7
+ * comprehensive tooltip support for better user experience.
8
+ *
9
+ * Key features:
10
+ * - Required accessibility attributes (aria-label, aria-labelledby, or children)
11
+ * - Tooltip support for better UX
12
+ * - Inherits all BaseButton functionality
13
+ * - Optimized for icon-only interactions
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * // Basic icon button with aria-label
18
+ * const props = IconButtonSchema.parse({
19
+ * 'aria-label': 'Close dialog',
20
+ * variant: 'ghost'
21
+ * });
22
+ *
23
+ * // Icon button with tooltip
24
+ * const tooltipProps = IconButtonSchema.parse({
25
+ * 'aria-label': 'Settings',
26
+ * tooltip: 'Open settings menu',
27
+ * tooltipSide: 'right'
28
+ * });
29
+ *
30
+ * // Icon button with children (fallback accessibility)
31
+ * const childrenProps = IconButtonSchema.parse({
32
+ * children: <SettingsIcon />,
33
+ * variant: 'soft'
34
+ * });
35
+ * ```
36
+ */
37
+ export declare const IconButtonSchema: z.ZodEffects<z.ZodObject<{
38
+ as: z.ZodOptional<z.ZodString>;
39
+ asChild: z.ZodOptional<z.ZodBoolean>;
40
+ size: z.ZodDefault<z.ZodUnion<[z.ZodEnum<["1", "2", "3", "4"]>, z.ZodObject<{
41
+ initial: z.ZodOptional<z.ZodEnum<["1", "2", "3", "4"]>>;
42
+ sm: z.ZodOptional<z.ZodEnum<["1", "2", "3", "4"]>>;
43
+ md: z.ZodOptional<z.ZodEnum<["1", "2", "3", "4"]>>;
44
+ lg: z.ZodOptional<z.ZodEnum<["1", "2", "3", "4"]>>;
45
+ xl: z.ZodOptional<z.ZodEnum<["1", "2", "3", "4"]>>;
46
+ }, "strip", z.ZodTypeAny, {
47
+ initial?: "1" | "2" | "3" | "4" | undefined;
48
+ sm?: "1" | "2" | "3" | "4" | undefined;
49
+ md?: "1" | "2" | "3" | "4" | undefined;
50
+ lg?: "1" | "2" | "3" | "4" | undefined;
51
+ xl?: "1" | "2" | "3" | "4" | undefined;
52
+ }, {
53
+ initial?: "1" | "2" | "3" | "4" | undefined;
54
+ sm?: "1" | "2" | "3" | "4" | undefined;
55
+ md?: "1" | "2" | "3" | "4" | undefined;
56
+ lg?: "1" | "2" | "3" | "4" | undefined;
57
+ xl?: "1" | "2" | "3" | "4" | undefined;
58
+ }>]>>;
59
+ variant: z.ZodDefault<z.ZodEnum<["classic", "solid", "soft", "surface", "outline", "ghost", "override"]>>;
60
+ color: z.ZodOptional<z.ZodEnum<["tomato", "red", "ruby", "crimson", "pink", "plum", "purple", "violet", "iris", "indigo", "blue", "cyan", "teal", "jade", "green", "grass", "brown", "orange", "sky", "mint", "lime", "yellow", "amber", "gold", "bronze", "gray"]>>;
61
+ highContrast: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
62
+ radius: z.ZodOptional<z.ZodEnum<["none", "small", "medium", "large", "full"]>>;
63
+ loading: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
64
+ fullWidth: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
65
+ material: z.ZodOptional<z.ZodEnum<["solid", "translucent"]>>;
66
+ panelBackground: z.ZodOptional<z.ZodEnum<["solid", "translucent"]>>;
67
+ flush: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
68
+ disabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
69
+ type: z.ZodOptional<z.ZodEnum<["button", "submit", "reset"]>>;
70
+ className: z.ZodOptional<z.ZodString>;
71
+ style: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber]>>>;
72
+ onClick: z.ZodOptional<z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>>;
73
+ onFocus: z.ZodOptional<z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>>;
74
+ onBlur: z.ZodOptional<z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>>;
75
+ onMouseEnter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>>;
76
+ onMouseLeave: z.ZodOptional<z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>>;
77
+ onKeyDown: z.ZodOptional<z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>>;
78
+ onKeyUp: z.ZodOptional<z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>>;
79
+ onSubmit: z.ZodOptional<z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>>;
80
+ tabIndex: z.ZodOptional<z.ZodNumber>;
81
+ 'aria-describedby': z.ZodOptional<z.ZodString>;
82
+ 'aria-expanded': z.ZodOptional<z.ZodBoolean>;
83
+ 'aria-pressed': z.ZodOptional<z.ZodBoolean>;
84
+ 'aria-current': z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodEnum<["page", "step", "location", "date", "time"]>]>>;
85
+ 'aria-controls': z.ZodOptional<z.ZodString>;
86
+ 'aria-owns': z.ZodOptional<z.ZodString>;
87
+ 'data-*': z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
88
+ id: z.ZodOptional<z.ZodString>;
89
+ title: z.ZodOptional<z.ZodString>;
90
+ role: z.ZodOptional<z.ZodString>;
91
+ } & {
92
+ tooltip: z.ZodOptional<z.ZodString>;
93
+ tooltipSide: z.ZodDefault<z.ZodOptional<z.ZodEnum<["top", "right", "bottom", "left"]>>>;
94
+ tooltipAlign: z.ZodDefault<z.ZodOptional<z.ZodEnum<["start", "center", "end"]>>>;
95
+ tooltipDelayDuration: z.ZodOptional<z.ZodNumber>;
96
+ tooltipDisableHoverableContent: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
97
+ 'aria-label': z.ZodOptional<z.ZodString>;
98
+ 'aria-labelledby': z.ZodOptional<z.ZodString>;
99
+ children: z.ZodOptional<z.ZodAny>;
100
+ }, "strict", z.ZodTypeAny, {
101
+ size: "1" | "2" | "3" | "4" | {
102
+ initial?: "1" | "2" | "3" | "4" | undefined;
103
+ sm?: "1" | "2" | "3" | "4" | undefined;
104
+ md?: "1" | "2" | "3" | "4" | undefined;
105
+ lg?: "1" | "2" | "3" | "4" | undefined;
106
+ xl?: "1" | "2" | "3" | "4" | undefined;
107
+ };
108
+ disabled: boolean;
109
+ variant: "classic" | "soft" | "surface" | "outline" | "ghost" | "solid" | "override";
110
+ highContrast: boolean;
111
+ flush: boolean;
112
+ loading: boolean;
113
+ tooltipSide: "left" | "right" | "bottom" | "top";
114
+ tooltipAlign: "center" | "end" | "start";
115
+ tooltipDisableHoverableContent: boolean;
116
+ fullWidth: boolean;
117
+ className?: string | undefined;
118
+ color?: "gray" | "gold" | "bronze" | "brown" | "yellow" | "amber" | "orange" | "tomato" | "red" | "ruby" | "crimson" | "pink" | "plum" | "purple" | "violet" | "iris" | "indigo" | "blue" | "cyan" | "teal" | "jade" | "green" | "grass" | "lime" | "mint" | "sky" | undefined;
119
+ style?: Record<string, string | number> | undefined;
120
+ tooltip?: string | undefined;
121
+ title?: string | undefined;
122
+ as?: string | undefined;
123
+ asChild?: boolean | undefined;
124
+ id?: string | undefined;
125
+ tabIndex?: number | undefined;
126
+ role?: string | undefined;
127
+ 'aria-controls'?: string | undefined;
128
+ 'aria-current'?: boolean | "page" | "time" | "step" | "location" | "date" | undefined;
129
+ 'aria-describedby'?: string | undefined;
130
+ 'aria-expanded'?: boolean | undefined;
131
+ 'aria-label'?: string | undefined;
132
+ 'aria-labelledby'?: string | undefined;
133
+ 'aria-owns'?: string | undefined;
134
+ 'aria-pressed'?: boolean | undefined;
135
+ children?: any;
136
+ onFocus?: ((...args: unknown[]) => unknown) | undefined;
137
+ onBlur?: ((...args: unknown[]) => unknown) | undefined;
138
+ onSubmit?: ((...args: unknown[]) => unknown) | undefined;
139
+ onKeyDown?: ((...args: unknown[]) => unknown) | undefined;
140
+ onKeyUp?: ((...args: unknown[]) => unknown) | undefined;
141
+ onClick?: ((...args: unknown[]) => unknown) | undefined;
142
+ onMouseEnter?: ((...args: unknown[]) => unknown) | undefined;
143
+ onMouseLeave?: ((...args: unknown[]) => unknown) | undefined;
144
+ type?: "button" | "reset" | "submit" | undefined;
145
+ radius?: "small" | "none" | "medium" | "large" | "full" | undefined;
146
+ material?: "solid" | "translucent" | undefined;
147
+ panelBackground?: "solid" | "translucent" | undefined;
148
+ tooltipDelayDuration?: number | undefined;
149
+ 'data-*'?: Record<string, string> | undefined;
150
+ }, {
151
+ className?: string | undefined;
152
+ color?: "gray" | "gold" | "bronze" | "brown" | "yellow" | "amber" | "orange" | "tomato" | "red" | "ruby" | "crimson" | "pink" | "plum" | "purple" | "violet" | "iris" | "indigo" | "blue" | "cyan" | "teal" | "jade" | "green" | "grass" | "lime" | "mint" | "sky" | undefined;
153
+ size?: "1" | "2" | "3" | "4" | {
154
+ initial?: "1" | "2" | "3" | "4" | undefined;
155
+ sm?: "1" | "2" | "3" | "4" | undefined;
156
+ md?: "1" | "2" | "3" | "4" | undefined;
157
+ lg?: "1" | "2" | "3" | "4" | undefined;
158
+ xl?: "1" | "2" | "3" | "4" | undefined;
159
+ } | undefined;
160
+ style?: Record<string, string | number> | undefined;
161
+ tooltip?: string | undefined;
162
+ disabled?: boolean | undefined;
163
+ title?: string | undefined;
164
+ as?: string | undefined;
165
+ asChild?: boolean | undefined;
166
+ id?: string | undefined;
167
+ tabIndex?: number | undefined;
168
+ role?: string | undefined;
169
+ 'aria-controls'?: string | undefined;
170
+ 'aria-current'?: boolean | "page" | "time" | "step" | "location" | "date" | undefined;
171
+ 'aria-describedby'?: string | undefined;
172
+ 'aria-expanded'?: boolean | undefined;
173
+ 'aria-label'?: string | undefined;
174
+ 'aria-labelledby'?: string | undefined;
175
+ 'aria-owns'?: string | undefined;
176
+ 'aria-pressed'?: boolean | undefined;
177
+ children?: any;
178
+ onFocus?: ((...args: unknown[]) => unknown) | undefined;
179
+ onBlur?: ((...args: unknown[]) => unknown) | undefined;
180
+ onSubmit?: ((...args: unknown[]) => unknown) | undefined;
181
+ onKeyDown?: ((...args: unknown[]) => unknown) | undefined;
182
+ onKeyUp?: ((...args: unknown[]) => unknown) | undefined;
183
+ onClick?: ((...args: unknown[]) => unknown) | undefined;
184
+ onMouseEnter?: ((...args: unknown[]) => unknown) | undefined;
185
+ onMouseLeave?: ((...args: unknown[]) => unknown) | undefined;
186
+ type?: "button" | "reset" | "submit" | undefined;
187
+ variant?: "classic" | "soft" | "surface" | "outline" | "ghost" | "solid" | "override" | undefined;
188
+ highContrast?: boolean | undefined;
189
+ radius?: "small" | "none" | "medium" | "large" | "full" | undefined;
190
+ material?: "solid" | "translucent" | undefined;
191
+ panelBackground?: "solid" | "translucent" | undefined;
192
+ flush?: boolean | undefined;
193
+ loading?: boolean | undefined;
194
+ tooltipSide?: "left" | "right" | "bottom" | "top" | undefined;
195
+ tooltipAlign?: "center" | "end" | "start" | undefined;
196
+ tooltipDelayDuration?: number | undefined;
197
+ tooltipDisableHoverableContent?: boolean | undefined;
198
+ fullWidth?: boolean | undefined;
199
+ 'data-*'?: Record<string, string> | undefined;
200
+ }>, {
201
+ size: "1" | "2" | "3" | "4" | {
202
+ initial?: "1" | "2" | "3" | "4" | undefined;
203
+ sm?: "1" | "2" | "3" | "4" | undefined;
204
+ md?: "1" | "2" | "3" | "4" | undefined;
205
+ lg?: "1" | "2" | "3" | "4" | undefined;
206
+ xl?: "1" | "2" | "3" | "4" | undefined;
207
+ };
208
+ disabled: boolean;
209
+ variant: "classic" | "soft" | "surface" | "outline" | "ghost" | "solid" | "override";
210
+ highContrast: boolean;
211
+ flush: boolean;
212
+ loading: boolean;
213
+ tooltipSide: "left" | "right" | "bottom" | "top";
214
+ tooltipAlign: "center" | "end" | "start";
215
+ tooltipDisableHoverableContent: boolean;
216
+ fullWidth: boolean;
217
+ className?: string | undefined;
218
+ color?: "gray" | "gold" | "bronze" | "brown" | "yellow" | "amber" | "orange" | "tomato" | "red" | "ruby" | "crimson" | "pink" | "plum" | "purple" | "violet" | "iris" | "indigo" | "blue" | "cyan" | "teal" | "jade" | "green" | "grass" | "lime" | "mint" | "sky" | undefined;
219
+ style?: Record<string, string | number> | undefined;
220
+ tooltip?: string | undefined;
221
+ title?: string | undefined;
222
+ as?: string | undefined;
223
+ asChild?: boolean | undefined;
224
+ id?: string | undefined;
225
+ tabIndex?: number | undefined;
226
+ role?: string | undefined;
227
+ 'aria-controls'?: string | undefined;
228
+ 'aria-current'?: boolean | "page" | "time" | "step" | "location" | "date" | undefined;
229
+ 'aria-describedby'?: string | undefined;
230
+ 'aria-expanded'?: boolean | undefined;
231
+ 'aria-label'?: string | undefined;
232
+ 'aria-labelledby'?: string | undefined;
233
+ 'aria-owns'?: string | undefined;
234
+ 'aria-pressed'?: boolean | undefined;
235
+ children?: any;
236
+ onFocus?: ((...args: unknown[]) => unknown) | undefined;
237
+ onBlur?: ((...args: unknown[]) => unknown) | undefined;
238
+ onSubmit?: ((...args: unknown[]) => unknown) | undefined;
239
+ onKeyDown?: ((...args: unknown[]) => unknown) | undefined;
240
+ onKeyUp?: ((...args: unknown[]) => unknown) | undefined;
241
+ onClick?: ((...args: unknown[]) => unknown) | undefined;
242
+ onMouseEnter?: ((...args: unknown[]) => unknown) | undefined;
243
+ onMouseLeave?: ((...args: unknown[]) => unknown) | undefined;
244
+ type?: "button" | "reset" | "submit" | undefined;
245
+ radius?: "small" | "none" | "medium" | "large" | "full" | undefined;
246
+ material?: "solid" | "translucent" | undefined;
247
+ panelBackground?: "solid" | "translucent" | undefined;
248
+ tooltipDelayDuration?: number | undefined;
249
+ 'data-*'?: Record<string, string> | undefined;
250
+ }, {
251
+ className?: string | undefined;
252
+ color?: "gray" | "gold" | "bronze" | "brown" | "yellow" | "amber" | "orange" | "tomato" | "red" | "ruby" | "crimson" | "pink" | "plum" | "purple" | "violet" | "iris" | "indigo" | "blue" | "cyan" | "teal" | "jade" | "green" | "grass" | "lime" | "mint" | "sky" | undefined;
253
+ size?: "1" | "2" | "3" | "4" | {
254
+ initial?: "1" | "2" | "3" | "4" | undefined;
255
+ sm?: "1" | "2" | "3" | "4" | undefined;
256
+ md?: "1" | "2" | "3" | "4" | undefined;
257
+ lg?: "1" | "2" | "3" | "4" | undefined;
258
+ xl?: "1" | "2" | "3" | "4" | undefined;
259
+ } | undefined;
260
+ style?: Record<string, string | number> | undefined;
261
+ tooltip?: string | undefined;
262
+ disabled?: boolean | undefined;
263
+ title?: string | undefined;
264
+ as?: string | undefined;
265
+ asChild?: boolean | undefined;
266
+ id?: string | undefined;
267
+ tabIndex?: number | undefined;
268
+ role?: string | undefined;
269
+ 'aria-controls'?: string | undefined;
270
+ 'aria-current'?: boolean | "page" | "time" | "step" | "location" | "date" | undefined;
271
+ 'aria-describedby'?: string | undefined;
272
+ 'aria-expanded'?: boolean | undefined;
273
+ 'aria-label'?: string | undefined;
274
+ 'aria-labelledby'?: string | undefined;
275
+ 'aria-owns'?: string | undefined;
276
+ 'aria-pressed'?: boolean | undefined;
277
+ children?: any;
278
+ onFocus?: ((...args: unknown[]) => unknown) | undefined;
279
+ onBlur?: ((...args: unknown[]) => unknown) | undefined;
280
+ onSubmit?: ((...args: unknown[]) => unknown) | undefined;
281
+ onKeyDown?: ((...args: unknown[]) => unknown) | undefined;
282
+ onKeyUp?: ((...args: unknown[]) => unknown) | undefined;
283
+ onClick?: ((...args: unknown[]) => unknown) | undefined;
284
+ onMouseEnter?: ((...args: unknown[]) => unknown) | undefined;
285
+ onMouseLeave?: ((...args: unknown[]) => unknown) | undefined;
286
+ type?: "button" | "reset" | "submit" | undefined;
287
+ variant?: "classic" | "soft" | "surface" | "outline" | "ghost" | "solid" | "override" | undefined;
288
+ highContrast?: boolean | undefined;
289
+ radius?: "small" | "none" | "medium" | "large" | "full" | undefined;
290
+ material?: "solid" | "translucent" | undefined;
291
+ panelBackground?: "solid" | "translucent" | undefined;
292
+ flush?: boolean | undefined;
293
+ loading?: boolean | undefined;
294
+ tooltipSide?: "left" | "right" | "bottom" | "top" | undefined;
295
+ tooltipAlign?: "center" | "end" | "start" | undefined;
296
+ tooltipDelayDuration?: number | undefined;
297
+ tooltipDisableHoverableContent?: boolean | undefined;
298
+ fullWidth?: boolean | undefined;
299
+ 'data-*'?: Record<string, string> | undefined;
300
+ }>;
301
+ /**
302
+ * Type derived from IconButton Zod schema
303
+ * This ensures type safety and consistency with the schema
304
+ */
305
+ export type IconButtonProps = z.infer<typeof IconButtonSchema>;
306
+ /**
307
+ * Development-only helper to validate and normalize IconButton props
308
+ * This function should only be used in development mode
309
+ *
310
+ * @param props - Props to validate and normalize
311
+ * @returns Validated and normalized props
312
+ *
313
+ * @example
314
+ * ```tsx
315
+ * // In development, this will validate props and show helpful errors
316
+ * const validatedProps = parseIconButtonProps({
317
+ * variant: 'ghost'
318
+ * // Missing accessibility - will throw error
319
+ * });
320
+ * // Throws: "IconButton must have either 'aria-label', 'aria-labelledby', or 'children' for accessibility"
321
+ *
322
+ * const validProps = parseIconButtonProps({
323
+ * 'aria-label': 'Close',
324
+ * variant: 'ghost'
325
+ * });
326
+ * ```
327
+ */
328
+ export declare function parseIconButtonProps(props: unknown): IconButtonProps;
329
+ //# sourceMappingURL=icon-button.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-button.schema.d.ts","sourceRoot":"","sources":["../../../../src/components/schemas/icon-button.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoE3B,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAKpE"}
@@ -0,0 +1,2 @@
1
+ import{z as e}from"zod";import{BaseButtonSchema as t}from"./base-button.schema.js";const l=t.extend({tooltip:e.string().optional().describe("Content to display in the tooltip on hover/focus"),tooltipSide:e.enum(["top","right","bottom","left"]).optional().default("top").describe("Side of the button where the tooltip should appear"),tooltipAlign:e.enum(["start","center","end"]).optional().default("center").describe("Alignment of the tooltip relative to the button"),tooltipDelayDuration:e.number().optional().describe("Delay before showing the tooltip (in milliseconds)"),tooltipDisableHoverableContent:e.boolean().optional().default(!1).describe("Whether to disable hoverable content behavior"),"aria-label":e.string().optional().describe("ARIA label for accessibility"),"aria-labelledby":e.string().optional().describe("ARIA labelled by reference"),children:e.any().optional().describe("Children elements (required for accessibility if no aria-label)")}).refine(o=>o["aria-label"]||o["aria-labelledby"]||o.children,{message:"IconButton must have either 'aria-label', 'aria-labelledby', or 'children' for accessibility",path:["aria-label","aria-labelledby","children"]});function r(o){return o}export{l as IconButtonSchema,r as parseIconButtonProps};
2
+ //# sourceMappingURL=icon-button.schema.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/schemas/icon-button.schema.ts"],
4
+ "sourcesContent": ["import { z } from 'zod';\nimport { BaseButtonSchema } from './base-button.schema.js';\n\n/**\n * IconButton Zod schema - Single source of truth for IconButton component props\n *\n * IconButton is a specialized button component designed for icon-only interactions.\n * It requires proper accessibility attributes to meet WCAG guidelines and provides\n * comprehensive tooltip support for better user experience.\n *\n * Key features:\n * - Required accessibility attributes (aria-label, aria-labelledby, or children)\n * - Tooltip support for better UX\n * - Inherits all BaseButton functionality\n * - Optimized for icon-only interactions\n *\n * @example\n * ```tsx\n * // Basic icon button with aria-label\n * const props = IconButtonSchema.parse({\n * 'aria-label': 'Close dialog',\n * variant: 'ghost'\n * });\n *\n * // Icon button with tooltip\n * const tooltipProps = IconButtonSchema.parse({\n * 'aria-label': 'Settings',\n * tooltip: 'Open settings menu',\n * tooltipSide: 'right'\n * });\n *\n * // Icon button with children (fallback accessibility)\n * const childrenProps = IconButtonSchema.parse({\n * children: <SettingsIcon />,\n * variant: 'soft'\n * });\n * ```\n */\nexport const IconButtonSchema = BaseButtonSchema.extend({\n /**\n * Content to display in the tooltip on hover/focus\n */\n tooltip: z.string().optional().describe('Content to display in the tooltip on hover/focus'),\n\n /**\n * Side of the button where the tooltip should appear\n * @default 'top'\n */\n tooltipSide: z\n .enum(['top', 'right', 'bottom', 'left'])\n .optional()\n .default('top')\n .describe('Side of the button where the tooltip should appear'),\n\n /**\n * Alignment of the tooltip relative to the button\n * @default 'center'\n */\n tooltipAlign: z\n .enum(['start', 'center', 'end'])\n .optional()\n .default('center')\n .describe('Alignment of the tooltip relative to the button'),\n\n /**\n * Delay before showing the tooltip (in milliseconds)\n */\n tooltipDelayDuration: z\n .number()\n .optional()\n .describe('Delay before showing the tooltip (in milliseconds)'),\n\n /**\n * Whether to disable hoverable content behavior\n * @default false\n */\n tooltipDisableHoverableContent: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether to disable hoverable content behavior'),\n\n /**\n * ARIA label for accessibility (required if no aria-labelledby or children)\n * Icon buttons must have an accessible name to meet WCAG guidelines\n */\n 'aria-label': z.string().optional().describe('ARIA label for accessibility'),\n\n /**\n * ARIA labelled by reference (required if no aria-label or children)\n * Icon buttons must have an accessible name to meet WCAG guidelines\n */\n 'aria-labelledby': z.string().optional().describe('ARIA labelled by reference'),\n\n /**\n * Children elements (required if no aria-label or aria-labelledby)\n * Icon buttons must have an accessible name to meet WCAG guidelines\n */\n children: z\n .any()\n .optional()\n .describe('Children elements (required for accessibility if no aria-label)'),\n}).refine((data) => data['aria-label'] || data['aria-labelledby'] || data.children, {\n message:\n \"IconButton must have either 'aria-label', 'aria-labelledby', or 'children' for accessibility\",\n path: ['aria-label', 'aria-labelledby', 'children'],\n});\n\n/**\n * Type derived from IconButton Zod schema\n * This ensures type safety and consistency with the schema\n */\nexport type IconButtonProps = z.infer<typeof IconButtonSchema>;\n\n/**\n * Development-only helper to validate and normalize IconButton props\n * This function should only be used in development mode\n *\n * @param props - Props to validate and normalize\n * @returns Validated and normalized props\n *\n * @example\n * ```tsx\n * // In development, this will validate props and show helpful errors\n * const validatedProps = parseIconButtonProps({\n * variant: 'ghost'\n * // Missing accessibility - will throw error\n * });\n * // Throws: \"IconButton must have either 'aria-label', 'aria-labelledby', or 'children' for accessibility\"\n *\n * const validProps = parseIconButtonProps({\n * 'aria-label': 'Close',\n * variant: 'ghost'\n * });\n * ```\n */\nexport function parseIconButtonProps(props: unknown): IconButtonProps {\n if (process.env.NODE_ENV === 'development') {\n return IconButtonSchema.parse(props);\n }\n return props as IconButtonProps;\n}\n"],
5
+ "mappings": "AAAA,OAAS,KAAAA,MAAS,MAClB,OAAS,oBAAAC,MAAwB,0BAqC1B,MAAMC,EAAmBD,EAAiB,OAAO,CAItD,QAASD,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kDAAkD,EAM1F,YAAaA,EACV,KAAK,CAAC,MAAO,QAAS,SAAU,MAAM,CAAC,EACvC,SAAS,EACT,QAAQ,KAAK,EACb,SAAS,oDAAoD,EAMhE,aAAcA,EACX,KAAK,CAAC,QAAS,SAAU,KAAK,CAAC,EAC/B,SAAS,EACT,QAAQ,QAAQ,EAChB,SAAS,iDAAiD,EAK7D,qBAAsBA,EACnB,OAAO,EACP,SAAS,EACT,SAAS,oDAAoD,EAMhE,+BAAgCA,EAC7B,QAAQ,EACR,SAAS,EACT,QAAQ,EAAK,EACb,SAAS,+CAA+C,EAM3D,aAAcA,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,8BAA8B,EAM3E,kBAAmBA,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B,EAM9E,SAAUA,EACP,IAAI,EACJ,SAAS,EACT,SAAS,iEAAiE,CAC/E,CAAC,EAAE,OAAQG,GAASA,EAAK,YAAY,GAAKA,EAAK,iBAAiB,GAAKA,EAAK,SAAU,CAClF,QACE,+FACF,KAAM,CAAC,aAAc,kBAAmB,UAAU,CACpD,CAAC,EA8BM,SAASC,EAAqBC,EAAiC,CAIpE,OAAOA,CACT",
6
+ "names": ["z", "BaseButtonSchema", "IconButtonSchema", "data", "parseIconButtonProps", "props"]
7
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Button component schemas - Single source of truth for all button-related components
3
+ *
4
+ * This module exports Zod schemas for all button components, providing:
5
+ * - Type-safe prop validation
6
+ * - Machine-readable JSON schema generation
7
+ * - Development-time prop validation
8
+ * - Consistent API across all button variants
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * import { ButtonSchema, parseButtonProps } from './schemas';
13
+ *
14
+ * // Type-safe prop validation
15
+ * const props = ButtonSchema.parse({ variant: 'solid', size: '2' });
16
+ *
17
+ * // Development-time validation
18
+ * const validatedProps = parseButtonProps(userProps);
19
+ * ```
20
+ */
21
+ export { BaseButtonSchema, parseBaseButtonProps } from './base-button.schema.js';
22
+ export type { BaseButtonProps } from './base-button.schema.js';
23
+ export { ButtonSchema, parseButtonProps } from './button.schema.js';
24
+ export type { ButtonProps } from './button.schema.js';
25
+ export { IconButtonSchema, parseIconButtonProps } from './icon-button.schema.js';
26
+ export type { IconButtonProps } from './icon-button.schema.js';
27
+ export { ToggleButtonSchema, parseToggleButtonProps } from './toggle-button.schema.js';
28
+ export type { ToggleButtonProps } from './toggle-button.schema.js';
29
+ export { ToggleIconButtonSchema, parseToggleIconButtonProps } from './toggle-icon-button.schema.js';
30
+ export type { ToggleIconButtonProps } from './toggle-icon-button.schema.js';
31
+ /**
32
+ * Generic parseProps helper for development-time validation
33
+ *
34
+ * This function provides a type-safe way to validate props in development mode.
35
+ * It should only be used in development as it adds runtime overhead.
36
+ *
37
+ * @param schema - Zod schema to validate against
38
+ * @param props - Props to validate
39
+ * @returns Validated and normalized props
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * import { parseProps } from './schemas';
44
+ * import { ButtonSchema } from './schemas';
45
+ *
46
+ * // In development, this will validate props and show helpful errors
47
+ * const validatedProps = parseProps(ButtonSchema, userProps);
48
+ * ```
49
+ */
50
+ export declare function parseProps<T>(schema: z.ZodSchema<T>, props: unknown): T;
51
+ import { z } from 'zod';
52
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACjF,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACjF,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACvF,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AACpG,YAAY,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAE5E;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CAKvE;AAED,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC"}
@@ -0,0 +1,2 @@
1
+ import{BaseButtonSchema as m,parseBaseButtonProps as a}from"./base-button.schema.js";import{ButtonSchema as c,parseButtonProps as B}from"./button.schema.js";import{IconButtonSchema as f,parseIconButtonProps as h}from"./icon-button.schema.js";import{ToggleButtonSchema as P,parseToggleButtonProps as T}from"./toggle-button.schema.js";import{ToggleIconButtonSchema as b,parseToggleIconButtonProps as I}from"./toggle-icon-button.schema.js";function e(t,o){return o}import"zod";export{m as BaseButtonSchema,c as ButtonSchema,f as IconButtonSchema,P as ToggleButtonSchema,b as ToggleIconButtonSchema,a as parseBaseButtonProps,B as parseButtonProps,h as parseIconButtonProps,e as parseProps,T as parseToggleButtonProps,I as parseToggleIconButtonProps};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/schemas/index.ts"],
4
+ "sourcesContent": ["/**\n * Button component schemas - Single source of truth for all button-related components\n *\n * This module exports Zod schemas for all button components, providing:\n * - Type-safe prop validation\n * - Machine-readable JSON schema generation\n * - Development-time prop validation\n * - Consistent API across all button variants\n *\n * @example\n * ```tsx\n * import { ButtonSchema, parseButtonProps } from './schemas';\n *\n * // Type-safe prop validation\n * const props = ButtonSchema.parse({ variant: 'solid', size: '2' });\n *\n * // Development-time validation\n * const validatedProps = parseButtonProps(userProps);\n * ```\n */\n\n// Base schemas\nexport { BaseButtonSchema, parseBaseButtonProps } from './base-button.schema.js';\nexport type { BaseButtonProps } from './base-button.schema.js';\n\n// Button schemas\nexport { ButtonSchema, parseButtonProps } from './button.schema.js';\nexport type { ButtonProps } from './button.schema.js';\n\n// IconButton schemas\nexport { IconButtonSchema, parseIconButtonProps } from './icon-button.schema.js';\nexport type { IconButtonProps } from './icon-button.schema.js';\n\n// ToggleButton schemas\nexport { ToggleButtonSchema, parseToggleButtonProps } from './toggle-button.schema.js';\nexport type { ToggleButtonProps } from './toggle-button.schema.js';\n\n// ToggleIconButton schemas\nexport { ToggleIconButtonSchema, parseToggleIconButtonProps } from './toggle-icon-button.schema.js';\nexport type { ToggleIconButtonProps } from './toggle-icon-button.schema.js';\n\n/**\n * Generic parseProps helper for development-time validation\n *\n * This function provides a type-safe way to validate props in development mode.\n * It should only be used in development as it adds runtime overhead.\n *\n * @param schema - Zod schema to validate against\n * @param props - Props to validate\n * @returns Validated and normalized props\n *\n * @example\n * ```tsx\n * import { parseProps } from './schemas';\n * import { ButtonSchema } from './schemas';\n *\n * // In development, this will validate props and show helpful errors\n * const validatedProps = parseProps(ButtonSchema, userProps);\n * ```\n */\nexport function parseProps<T>(schema: z.ZodSchema<T>, props: unknown): T {\n if (process.env.NODE_ENV === 'development') {\n return schema.parse(props);\n }\n return props as T;\n}\n\nimport { z } from 'zod';\n"],
5
+ "mappings": "AAsBA,OAAS,oBAAAA,EAAkB,wBAAAC,MAA4B,0BAIvD,OAAS,gBAAAC,EAAc,oBAAAC,MAAwB,qBAI/C,OAAS,oBAAAC,EAAkB,wBAAAC,MAA4B,0BAIvD,OAAS,sBAAAC,EAAoB,0BAAAC,MAA8B,4BAI3D,OAAS,0BAAAC,EAAwB,8BAAAC,MAAkC,iCAsB5D,SAASC,EAAcC,EAAwBC,EAAmB,CAIvE,OAAOA,CACT,CAEA,MAAkB",
6
+ "names": ["BaseButtonSchema", "parseBaseButtonProps", "ButtonSchema", "parseButtonProps", "IconButtonSchema", "parseIconButtonProps", "ToggleButtonSchema", "parseToggleButtonProps", "ToggleIconButtonSchema", "parseToggleIconButtonProps", "parseProps", "schema", "props"]
7
+ }