@safe-ugc-ui/types 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -129,9 +129,23 @@ var fontWeightValueSchema = z2.union([
129
129
  z2.literal(800),
130
130
  z2.literal(900)
131
131
  ]);
132
+ var easingValueSchema = z2.enum([
133
+ "ease",
134
+ "linear",
135
+ "ease-in",
136
+ "ease-out",
137
+ "ease-in-out"
138
+ ]);
139
+ var transitionDefSchema = z2.object({
140
+ property: z2.string(),
141
+ duration: z2.number(),
142
+ easing: easingValueSchema.optional(),
143
+ delay: z2.number().optional()
144
+ });
145
+ var transitionFieldSchema = z2.union([transitionDefSchema, z2.array(transitionDefSchema)]).optional();
132
146
  var sizeValueSchema = z2.union([lengthSchema, percentageSchema, z2.literal("auto")]);
133
147
  var lineHeightValueSchema = z2.union([z2.number(), lengthSchema]);
134
- var stylePropsSchema = z2.object({
148
+ var coreStyleShape = {
135
149
  // -----------------------------------------------------------------------
136
150
  // Layout — Dynamic
137
151
  // -----------------------------------------------------------------------
@@ -225,6 +239,11 @@ var stylePropsSchema = z2.object({
225
239
  bottom: lengthSchema.optional(),
226
240
  left: lengthSchema.optional(),
227
241
  // -----------------------------------------------------------------------
242
+ // Object-fit — Dynamic (for Image nodes)
243
+ // -----------------------------------------------------------------------
244
+ objectFit: dynamicSchema(z2.enum(["cover", "contain", "fill", "none", "scale-down"])).optional(),
245
+ objectPosition: dynamicSchema(z2.string()).optional(),
246
+ // -----------------------------------------------------------------------
228
247
  // Grid — Dynamic
229
248
  // -----------------------------------------------------------------------
230
249
  gridTemplateColumns: dynamicSchema(z2.string()).optional(),
@@ -239,6 +258,16 @@ var stylePropsSchema = z2.object({
239
258
  // $style — reference to a named style in card.styles
240
259
  // -----------------------------------------------------------------------
241
260
  $style: z2.string().optional()
261
+ };
262
+ var { $style: _$styleField, ...coreStyleShapeWithout$style } = coreStyleShape;
263
+ var hoverStylePropsSchema = z2.object({
264
+ ...coreStyleShapeWithout$style,
265
+ transition: transitionFieldSchema
266
+ });
267
+ var stylePropsSchema = z2.object({
268
+ ...coreStyleShape,
269
+ hoverStyle: hoverStylePropsSchema.optional(),
270
+ transition: transitionFieldSchema
242
271
  });
243
272
 
244
273
  // src/props.ts
@@ -463,6 +492,63 @@ var LETTER_SPACING_MIN = -10;
463
492
  var LETTER_SPACING_MAX = 50;
464
493
  var OPACITY_MIN = 0;
465
494
  var OPACITY_MAX = 1;
495
+ var TRANSITION_DURATION_MAX = 2e3;
496
+ var TRANSITION_DELAY_MAX = 1e3;
497
+ var TRANSITION_MAX_COUNT = 10;
498
+ var ALLOWED_TRANSITION_PROPERTIES = [
499
+ "display",
500
+ "flexDirection",
501
+ "justifyContent",
502
+ "alignItems",
503
+ "alignSelf",
504
+ "flexWrap",
505
+ "flex",
506
+ "gap",
507
+ "width",
508
+ "height",
509
+ "minWidth",
510
+ "maxWidth",
511
+ "minHeight",
512
+ "maxHeight",
513
+ "padding",
514
+ "paddingTop",
515
+ "paddingRight",
516
+ "paddingBottom",
517
+ "paddingLeft",
518
+ "margin",
519
+ "marginTop",
520
+ "marginRight",
521
+ "marginBottom",
522
+ "marginLeft",
523
+ "backgroundColor",
524
+ "color",
525
+ "borderRadius",
526
+ "borderRadiusTopLeft",
527
+ "borderRadiusTopRight",
528
+ "borderRadiusBottomLeft",
529
+ "borderRadiusBottomRight",
530
+ "fontSize",
531
+ "fontWeight",
532
+ "fontStyle",
533
+ "textAlign",
534
+ "textDecoration",
535
+ "lineHeight",
536
+ "letterSpacing",
537
+ "opacity",
538
+ "overflow",
539
+ "position",
540
+ "top",
541
+ "right",
542
+ "bottom",
543
+ "left",
544
+ "zIndex",
545
+ "gridTemplateColumns",
546
+ "gridTemplateRows",
547
+ "gridColumn",
548
+ "gridRow",
549
+ "objectFit",
550
+ "objectPosition"
551
+ ];
466
552
  var PHASE1_COMPONENT_TYPES = [
467
553
  "Box",
468
554
  "Row",
@@ -671,6 +757,7 @@ var CSS_NAMED_COLORS = /* @__PURE__ */ new Set([
671
757
  ]);
672
758
  export {
673
759
  ALLOWED_OVERFLOW_VALUES,
760
+ ALLOWED_TRANSITION_PROPERTIES,
674
761
  ALL_COMPONENT_TYPES,
675
762
  ASSET_INDIVIDUAL_MAX_BYTES,
676
763
  ASSET_TOTAL_MAX_BYTES,
@@ -710,6 +797,9 @@ export {
710
797
  TRANSFORM_SCALE_MIN,
711
798
  TRANSFORM_TRANSLATE_MAX,
712
799
  TRANSFORM_TRANSLATE_MIN,
800
+ TRANSITION_DELAY_MAX,
801
+ TRANSITION_DURATION_MAX,
802
+ TRANSITION_MAX_COUNT,
713
803
  ZINDEX_MAX,
714
804
  ZINDEX_MIN,
715
805
  alignItemsValueSchema,
@@ -732,6 +822,7 @@ export {
732
822
  dividerNodeSchema,
733
823
  dividerPropsSchema,
734
824
  dynamicSchema,
825
+ easingValueSchema,
735
826
  exprSchema,
736
827
  flexDirectionValueSchema,
737
828
  flexWrapValueSchema,
@@ -741,6 +832,7 @@ export {
741
832
  gradientObjectSchema,
742
833
  gradientStopSchema,
743
834
  gridNodeSchema,
835
+ hoverStylePropsSchema,
744
836
  iconNameSchema,
745
837
  iconNodeSchema,
746
838
  iconPropsSchema,
@@ -775,6 +867,7 @@ export {
775
867
  toggleNodeSchema,
776
868
  togglePropsSchema,
777
869
  transformObjectSchema,
870
+ transitionDefSchema,
778
871
  ugcCardSchema,
779
872
  ugcNodeSchema
780
873
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/values.ts","../src/styles.ts","../src/props.ts","../src/primitives.ts","../src/card.ts","../src/constants.ts"],"sourcesContent":["/**\n * @safe-ugc-ui/types — Value Type System\n *\n * Defines the core value types used throughout the Safe UGC UI framework.\n * Based on spec section 4.1: Ref, Expr, Dynamic, Static, and primitive value types.\n *\n * Naming convention:\n * - Zod schema → `fooSchema`\n * - Inferred TypeScript type → `Foo`\n */\n\nimport { z } from 'zod';\n\n// ---------------------------------------------------------------------------\n// 1. Ref — state variable reference\n// ---------------------------------------------------------------------------\n\nexport const refSchema = z.object({\n $ref: z.string(),\n});\n\nexport type Ref = z.infer<typeof refSchema>;\n\n// ---------------------------------------------------------------------------\n// 2. Expr — expression\n// ---------------------------------------------------------------------------\n\nexport const exprSchema = z.object({\n $expr: z.string(),\n});\n\nexport type Expr = z.infer<typeof exprSchema>;\n\n// ---------------------------------------------------------------------------\n// 3. AssetPath — local asset reference (`@assets/...`)\n// ---------------------------------------------------------------------------\n\nexport const assetPathSchema = z.string().startsWith('@assets/');\n\nexport type AssetPath = `@assets/${string}`;\n\n// ---------------------------------------------------------------------------\n// 4. Color — hex, rgb, hsl, named colors (loose string for now)\n// ---------------------------------------------------------------------------\n\nexport const colorSchema = z.string();\n\nexport type Color = z.infer<typeof colorSchema>;\n\n// ---------------------------------------------------------------------------\n// 5. Length — number | string (px, %, em, rem)\n// ---------------------------------------------------------------------------\n\nexport const lengthSchema = z.union([z.number(), z.string()]);\n\nexport type Length = z.infer<typeof lengthSchema>;\n\n// ---------------------------------------------------------------------------\n// 6. Percentage — string like \"50%\"\n// ---------------------------------------------------------------------------\n\nexport const percentageSchema = z.string();\n\nexport type Percentage = z.infer<typeof percentageSchema>;\n\n// ---------------------------------------------------------------------------\n// 7. IconName — string identifier for platform-provided icons\n// ---------------------------------------------------------------------------\n\nexport const iconNameSchema = z.string();\n\nexport type IconName = z.infer<typeof iconNameSchema>;\n\n// ---------------------------------------------------------------------------\n// Helper generic types (TypeScript-only, no Zod)\n// ---------------------------------------------------------------------------\n\n/** A value that can be a literal T, a state Ref, or an Expr. */\nexport type Dynamic<T> = T | Ref | Expr;\n\n/** A value that can be a literal T or a state Ref (expressions forbidden). */\nexport type RefOnly<T> = T | Ref;\n\n/** A value that must be a static literal (no dynamic binding). */\nexport type Static<T> = T;\n\n// ---------------------------------------------------------------------------\n// Helper: dynamic / refOnly Zod schema builders\n// ---------------------------------------------------------------------------\n\n/**\n * Creates a Zod schema that accepts the given base schema OR a Ref OR an Expr.\n *\n * ```ts\n * const dynamicColor = dynamicSchema(colorSchema);\n * // accepts: \"#ff0000\" | { $ref: \"$color\" } | { $expr: \"...\" }\n * ```\n */\nexport function dynamicSchema<T extends z.ZodTypeAny>(schema: T) {\n return z.union([schema, refSchema, exprSchema]);\n}\n\n/**\n * Creates a Zod schema that accepts the given base schema OR a Ref\n * (expressions are forbidden).\n *\n * ```ts\n * const refOnlyAsset = refOnlySchema(assetPathSchema);\n * // accepts: \"@assets/img.png\" | { $ref: \"$imgPath\" }\n * ```\n */\nexport function refOnlySchema<T extends z.ZodTypeAny>(schema: T) {\n return z.union([schema, refSchema]);\n}\n\n// ---------------------------------------------------------------------------\n// Type guard functions (runtime)\n// ---------------------------------------------------------------------------\n\n/**\n * Returns `true` if the value is a `Ref` object (`{ $ref: string }`).\n */\nexport function isRef(value: unknown): value is Ref {\n return (\n typeof value === 'object' &&\n value !== null &&\n '$ref' in value &&\n typeof (value as Record<string, unknown>).$ref === 'string'\n );\n}\n\n/**\n * Returns `true` if the value is an `Expr` object (`{ $expr: string }`).\n */\nexport function isExpr(value: unknown): value is Expr {\n return (\n typeof value === 'object' &&\n value !== null &&\n '$expr' in value &&\n typeof (value as Record<string, unknown>).$expr === 'string'\n );\n}\n\n/**\n * Returns `true` if the value is either a `Ref` or an `Expr`.\n */\nexport function isDynamic(value: unknown): boolean {\n return isRef(value) || isExpr(value);\n}\n\n/**\n * Returns `true` if the value is a valid `AssetPath` (starts with `@assets/`).\n */\nexport function isAssetPath(value: unknown): value is AssetPath {\n return typeof value === 'string' && value.startsWith('@assets/');\n}\n","/**\n * @safe-ugc-ui/types — Style System\n *\n * Defines Zod schemas and inferred TypeScript types for the style system.\n * Based on spec sections 3.1-3.8 (style properties) and 4.3 (style value types).\n *\n * Naming convention:\n * - Zod schema -> `fooSchema`\n * - Inferred TS -> `Foo`\n *\n * Dynamic fields accept literal | $ref | $expr.\n * Static fields accept literal only (no $ref, no $expr).\n */\n\nimport { z } from 'zod';\nimport {\n refSchema,\n exprSchema,\n dynamicSchema,\n colorSchema,\n lengthSchema,\n percentageSchema,\n} from './values.js';\n\n// ===========================================================================\n// 1. Structured objects (Static only — no dynamic wrappers)\n// ===========================================================================\n\n// ---------------------------------------------------------------------------\n// 1.1 GradientStop\n// ---------------------------------------------------------------------------\n\nexport const gradientStopSchema = z.object({\n color: z.string(),\n position: z.string(), // e.g. \"0%\", \"100%\"\n});\n\nexport type GradientStop = z.infer<typeof gradientStopSchema>;\n\n// ---------------------------------------------------------------------------\n// 1.2 LinearGradient\n// ---------------------------------------------------------------------------\n\nexport const linearGradientSchema = z.object({\n type: z.literal('linear'),\n direction: z.string(), // e.g. \"135deg\", \"to right\"\n stops: z.array(gradientStopSchema),\n});\n\nexport type LinearGradient = z.infer<typeof linearGradientSchema>;\n\n// ---------------------------------------------------------------------------\n// 1.3 RadialGradient\n// ---------------------------------------------------------------------------\n\nexport const radialGradientSchema = z.object({\n type: z.literal('radial'),\n stops: z.array(gradientStopSchema),\n});\n\nexport type RadialGradient = z.infer<typeof radialGradientSchema>;\n\n// ---------------------------------------------------------------------------\n// 1.4 GradientObject (union)\n// ---------------------------------------------------------------------------\n\nexport const gradientObjectSchema = z.union([\n linearGradientSchema,\n radialGradientSchema,\n]);\n\nexport type GradientObject = z.infer<typeof gradientObjectSchema>;\n\n// ---------------------------------------------------------------------------\n// 1.5 ShadowObject\n// ---------------------------------------------------------------------------\n\nexport const shadowObjectSchema = z.object({\n offsetX: z.number(),\n offsetY: z.number(),\n blur: z.number().optional(),\n spread: z.number().optional(),\n color: z.string(),\n});\n\nexport type ShadowObject = z.infer<typeof shadowObjectSchema>;\n\n// ---------------------------------------------------------------------------\n// 1.6 BorderObject\n// ---------------------------------------------------------------------------\n\nexport const borderObjectSchema = z.object({\n width: z.number(),\n style: z.enum(['solid', 'dashed', 'dotted', 'none']),\n color: z.string(),\n});\n\nexport type BorderObject = z.infer<typeof borderObjectSchema>;\n\n// ---------------------------------------------------------------------------\n// 1.7 TransformObject (skew intentionally excluded — forbidden by spec 3.6)\n// ---------------------------------------------------------------------------\n\nexport const transformObjectSchema = z.object({\n rotate: z.string().optional(), // e.g. \"45deg\"\n scale: z.number().optional(), // 0.1 ~ 1.5\n translateX: z.number().optional(), // -500 ~ 500\n translateY: z.number().optional(), // -500 ~ 500\n});\n\nexport type TransformObject = z.infer<typeof transformObjectSchema>;\n\n// ===========================================================================\n// 2. Enum value types\n// ===========================================================================\n\n// ---------------------------------------------------------------------------\n// 2.1 PositionValue\n// ---------------------------------------------------------------------------\n\nexport const positionValueSchema = z.enum(['static', 'relative', 'absolute']);\nexport type PositionValue = z.infer<typeof positionValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.2 OverflowValue\n// ---------------------------------------------------------------------------\n\nexport const overflowValueSchema = z.enum(['visible', 'hidden', 'auto']);\nexport type OverflowValue = z.infer<typeof overflowValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.3 DisplayValue\n// ---------------------------------------------------------------------------\n\nexport const displayValueSchema = z.enum(['flex', 'block', 'none']);\nexport type DisplayValue = z.infer<typeof displayValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.4 FlexDirectionValue\n// ---------------------------------------------------------------------------\n\nexport const flexDirectionValueSchema = z.enum([\n 'row',\n 'column',\n 'row-reverse',\n 'column-reverse',\n]);\nexport type FlexDirectionValue = z.infer<typeof flexDirectionValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.5 JustifyContentValue\n// ---------------------------------------------------------------------------\n\nexport const justifyContentValueSchema = z.enum([\n 'start',\n 'center',\n 'end',\n 'space-between',\n 'space-around',\n 'space-evenly',\n]);\nexport type JustifyContentValue = z.infer<typeof justifyContentValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.6 AlignItemsValue\n// ---------------------------------------------------------------------------\n\nexport const alignItemsValueSchema = z.enum([\n 'start',\n 'center',\n 'end',\n 'stretch',\n 'baseline',\n]);\nexport type AlignItemsValue = z.infer<typeof alignItemsValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.7 AlignSelfValue\n// ---------------------------------------------------------------------------\n\nexport const alignSelfValueSchema = z.enum([\n 'auto',\n 'start',\n 'center',\n 'end',\n 'stretch',\n]);\nexport type AlignSelfValue = z.infer<typeof alignSelfValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.8 FlexWrapValue\n// ---------------------------------------------------------------------------\n\nexport const flexWrapValueSchema = z.enum(['nowrap', 'wrap', 'wrap-reverse']);\nexport type FlexWrapValue = z.infer<typeof flexWrapValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.9 TextAlignValue\n// ---------------------------------------------------------------------------\n\nexport const textAlignValueSchema = z.enum([\n 'left',\n 'center',\n 'right',\n 'justify',\n]);\nexport type TextAlignValue = z.infer<typeof textAlignValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.10 TextDecorationValue\n// ---------------------------------------------------------------------------\n\nexport const textDecorationValueSchema = z.enum([\n 'none',\n 'underline',\n 'line-through',\n]);\nexport type TextDecorationValue = z.infer<typeof textDecorationValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.11 FontStyleValue\n// ---------------------------------------------------------------------------\n\nexport const fontStyleValueSchema = z.enum(['normal', 'italic']);\nexport type FontStyleValue = z.infer<typeof fontStyleValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.12 FontWeightValue\n// ---------------------------------------------------------------------------\n\nexport const fontWeightValueSchema = z.union([\n z.enum(['normal', 'bold']),\n z.literal(100),\n z.literal(200),\n z.literal(300),\n z.literal(400),\n z.literal(500),\n z.literal(600),\n z.literal(700),\n z.literal(800),\n z.literal(900),\n]);\nexport type FontWeightValue = z.infer<typeof fontWeightValueSchema>;\n\n// ===========================================================================\n// 3. StyleProps — the main style schema (spec 4.3)\n//\n// Dynamic fields: literal | $ref | $expr -> dynamicSchema(base).optional()\n// Static fields: literal only -> base.optional()\n// ===========================================================================\n\n/**\n * Helper: a size value that can be a Length, Percentage, or the literal \"auto\".\n * Used for width/height properties.\n */\nconst sizeValueSchema = z.union([lengthSchema, percentageSchema, z.literal('auto')]);\n\n/**\n * Helper: lineHeight can be a bare number (multiplier) or a length.\n */\nconst lineHeightValueSchema = z.union([z.number(), lengthSchema]);\n\nexport const stylePropsSchema = z.object({\n // -----------------------------------------------------------------------\n // Layout — Dynamic\n // -----------------------------------------------------------------------\n display: dynamicSchema(displayValueSchema).optional(),\n flexDirection: dynamicSchema(flexDirectionValueSchema).optional(),\n justifyContent: dynamicSchema(justifyContentValueSchema).optional(),\n alignItems: dynamicSchema(alignItemsValueSchema).optional(),\n alignSelf: dynamicSchema(alignSelfValueSchema).optional(),\n flexWrap: dynamicSchema(flexWrapValueSchema).optional(),\n flex: dynamicSchema(z.number()).optional(),\n gap: dynamicSchema(lengthSchema).optional(),\n\n // -----------------------------------------------------------------------\n // Sizing — Dynamic\n // -----------------------------------------------------------------------\n width: dynamicSchema(sizeValueSchema).optional(),\n height: dynamicSchema(sizeValueSchema).optional(),\n minWidth: dynamicSchema(z.union([lengthSchema, percentageSchema])).optional(),\n maxWidth: dynamicSchema(z.union([lengthSchema, percentageSchema])).optional(),\n minHeight: dynamicSchema(z.union([lengthSchema, percentageSchema])).optional(),\n maxHeight: dynamicSchema(z.union([lengthSchema, percentageSchema])).optional(),\n\n // -----------------------------------------------------------------------\n // Spacing — Dynamic\n // -----------------------------------------------------------------------\n padding: dynamicSchema(lengthSchema).optional(),\n paddingTop: dynamicSchema(lengthSchema).optional(),\n paddingRight: dynamicSchema(lengthSchema).optional(),\n paddingBottom: dynamicSchema(lengthSchema).optional(),\n paddingLeft: dynamicSchema(lengthSchema).optional(),\n margin: dynamicSchema(lengthSchema).optional(),\n marginTop: dynamicSchema(lengthSchema).optional(),\n marginRight: dynamicSchema(lengthSchema).optional(),\n marginBottom: dynamicSchema(lengthSchema).optional(),\n marginLeft: dynamicSchema(lengthSchema).optional(),\n\n // -----------------------------------------------------------------------\n // Colors — Dynamic\n // -----------------------------------------------------------------------\n backgroundColor: dynamicSchema(colorSchema).optional(),\n color: dynamicSchema(colorSchema).optional(),\n\n // -----------------------------------------------------------------------\n // Border radius — Dynamic\n // -----------------------------------------------------------------------\n borderRadius: dynamicSchema(lengthSchema).optional(),\n borderRadiusTopLeft: dynamicSchema(lengthSchema).optional(),\n borderRadiusTopRight: dynamicSchema(lengthSchema).optional(),\n borderRadiusBottomLeft: dynamicSchema(lengthSchema).optional(),\n borderRadiusBottomRight: dynamicSchema(lengthSchema).optional(),\n\n // -----------------------------------------------------------------------\n // Typography — Dynamic\n // -----------------------------------------------------------------------\n fontSize: dynamicSchema(lengthSchema).optional(),\n fontWeight: dynamicSchema(fontWeightValueSchema).optional(),\n fontStyle: dynamicSchema(fontStyleValueSchema).optional(),\n textAlign: dynamicSchema(textAlignValueSchema).optional(),\n textDecoration: dynamicSchema(textDecorationValueSchema).optional(),\n lineHeight: dynamicSchema(lineHeightValueSchema).optional(),\n letterSpacing: dynamicSchema(lengthSchema).optional(),\n\n // -----------------------------------------------------------------------\n // Opacity — Dynamic\n // -----------------------------------------------------------------------\n opacity: dynamicSchema(z.number()).optional(),\n\n // -----------------------------------------------------------------------\n // Gradient — Static only\n // -----------------------------------------------------------------------\n backgroundGradient: gradientObjectSchema.optional(),\n\n // -----------------------------------------------------------------------\n // Shadow — Static only (single or array of shadows)\n // -----------------------------------------------------------------------\n boxShadow: z\n .union([shadowObjectSchema, z.array(shadowObjectSchema)])\n .optional(),\n\n // -----------------------------------------------------------------------\n // Borders — Static only\n // -----------------------------------------------------------------------\n border: borderObjectSchema.optional(),\n borderTop: borderObjectSchema.optional(),\n borderRight: borderObjectSchema.optional(),\n borderBottom: borderObjectSchema.optional(),\n borderLeft: borderObjectSchema.optional(),\n\n // -----------------------------------------------------------------------\n // Transform — Static only (skew excluded)\n // -----------------------------------------------------------------------\n transform: transformObjectSchema.optional(),\n\n // -----------------------------------------------------------------------\n // Overflow — Static only\n // -----------------------------------------------------------------------\n overflow: overflowValueSchema.optional(),\n\n // -----------------------------------------------------------------------\n // Position — Static only\n // -----------------------------------------------------------------------\n position: positionValueSchema.optional(),\n top: lengthSchema.optional(),\n right: lengthSchema.optional(),\n bottom: lengthSchema.optional(),\n left: lengthSchema.optional(),\n\n // -----------------------------------------------------------------------\n // Grid — Dynamic\n // -----------------------------------------------------------------------\n gridTemplateColumns: dynamicSchema(z.string()).optional(),\n gridTemplateRows: dynamicSchema(z.string()).optional(),\n gridColumn: dynamicSchema(z.string()).optional(),\n gridRow: dynamicSchema(z.string()).optional(),\n\n // -----------------------------------------------------------------------\n // z-index — Static only (0-100 enforced at validation layer)\n // -----------------------------------------------------------------------\n zIndex: z.number().optional(),\n\n // -----------------------------------------------------------------------\n // $style — reference to a named style in card.styles\n // -----------------------------------------------------------------------\n $style: z.string().optional(),\n});\n\nexport type StyleProps = z.infer<typeof stylePropsSchema>;\n","/**\n * @safe-ugc-ui/types — Component Fields\n *\n * Defines Zod schemas and inferred TypeScript types for each component's\n * field set (formerly `props`). Based on spec section 4.2.\n *\n * Security-sensitive fields use restricted value types:\n * - Image.src, Avatar.src -> refOnly (no $expr — prevents URL manipulation)\n * - Icon.name -> static (no $ref, no $expr)\n * - All others -> dynamic (literal | $ref | $expr)\n *\n * Naming convention:\n * - Zod schema -> `fooPropsSchema`\n * - Inferred TS -> `FooProps`\n */\n\nimport { z } from 'zod';\nimport {\n dynamicSchema,\n refOnlySchema,\n assetPathSchema,\n colorSchema,\n lengthSchema,\n iconNameSchema,\n} from './values.js';\n\n// ---------------------------------------------------------------------------\n// 1. TextProps\n// ---------------------------------------------------------------------------\n\nexport const textPropsSchema = z.object({\n content: dynamicSchema(z.string()),\n});\n\nexport type TextProps = z.infer<typeof textPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 2. ImageProps\n// ---------------------------------------------------------------------------\n\nexport const imagePropsSchema = z.object({\n src: refOnlySchema(assetPathSchema),\n alt: dynamicSchema(z.string()).optional(),\n});\n\nexport type ImageProps = z.infer<typeof imagePropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 3. ProgressBarProps\n// ---------------------------------------------------------------------------\n\nexport const progressBarPropsSchema = z.object({\n value: dynamicSchema(z.number()),\n max: dynamicSchema(z.number()),\n color: dynamicSchema(colorSchema).optional(),\n});\n\nexport type ProgressBarProps = z.infer<typeof progressBarPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 4. AvatarProps\n// ---------------------------------------------------------------------------\n\nexport const avatarPropsSchema = z.object({\n src: refOnlySchema(assetPathSchema),\n size: dynamicSchema(lengthSchema).optional(),\n});\n\nexport type AvatarProps = z.infer<typeof avatarPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 5. IconProps\n// ---------------------------------------------------------------------------\n\nexport const iconPropsSchema = z.object({\n name: iconNameSchema,\n size: dynamicSchema(lengthSchema).optional(),\n color: dynamicSchema(colorSchema).optional(),\n});\n\nexport type IconProps = z.infer<typeof iconPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 6. BadgeProps\n// ---------------------------------------------------------------------------\n\nexport const badgePropsSchema = z.object({\n label: dynamicSchema(z.string()),\n color: dynamicSchema(colorSchema).optional(),\n});\n\nexport type BadgeProps = z.infer<typeof badgePropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 7. ChipProps\n// ---------------------------------------------------------------------------\n\nexport const chipPropsSchema = z.object({\n label: dynamicSchema(z.string()),\n color: dynamicSchema(colorSchema).optional(),\n});\n\nexport type ChipProps = z.infer<typeof chipPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 8. DividerProps\n// ---------------------------------------------------------------------------\n\nexport const dividerPropsSchema = z.object({\n color: dynamicSchema(colorSchema).optional(),\n thickness: dynamicSchema(lengthSchema).optional(),\n});\n\nexport type DividerProps = z.infer<typeof dividerPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 9. SpacerProps\n// ---------------------------------------------------------------------------\n\nexport const spacerPropsSchema = z.object({\n size: dynamicSchema(lengthSchema).optional(),\n});\n\nexport type SpacerProps = z.infer<typeof spacerPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 10. ButtonProps\n// ---------------------------------------------------------------------------\n\nexport const buttonPropsSchema = z.object({\n label: dynamicSchema(z.string()),\n action: z.string(),\n});\n\nexport type ButtonProps = z.infer<typeof buttonPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 11. ToggleProps\n// ---------------------------------------------------------------------------\n\nexport const togglePropsSchema = z.object({\n value: dynamicSchema(z.boolean()),\n onToggle: z.string(),\n});\n\nexport type ToggleProps = z.infer<typeof togglePropsSchema>;\n","/**\n * @safe-ugc-ui/types — Primitives (Node Types)\n *\n * Defines the component tree structure using Zod schemas with z.lazy() for\n * recursive types. Based on spec section 2 (primitive list) and section 4.2\n * (component field rules).\n *\n * Node categories:\n * - Layout: Box, Row, Column, Stack, Grid (have children)\n * - Content: Text, Image (have fields, no children)\n * - Display: ProgressBar, Avatar, Icon, Badge, Chip, Divider, Spacer\n * - Interaction: Button, Toggle\n *\n * Naming convention:\n * - Zod schema -> `fooNodeSchema`\n * - Inferred TS -> `FooNode`\n */\n\nimport { z } from 'zod';\nimport { exprSchema } from './values.js';\nimport { stylePropsSchema } from './styles.js';\nimport {\n textPropsSchema,\n imagePropsSchema,\n progressBarPropsSchema,\n avatarPropsSchema,\n iconPropsSchema,\n badgePropsSchema,\n chipPropsSchema,\n dividerPropsSchema,\n spacerPropsSchema,\n buttonPropsSchema,\n togglePropsSchema,\n} from './props.js';\n\n// ===========================================================================\n// 1. ForLoop — iterative children\n// ===========================================================================\n\n/**\n * A for-loop that produces children by iterating over a state array.\n *\n * ```json\n * { \"for\": \"msg\", \"in\": \"$messages\", \"template\": { ... } }\n * ```\n *\n * The `template` field references UGCNode via z.lazy() since UGCNode is\n * defined later in this module.\n */\nexport const forLoopSchema = z.object({\n for: z.string(),\n in: z.string(),\n template: z.lazy(() => ugcNodeSchema),\n});\n\nexport type ForLoop = {\n for: string;\n in: string;\n template: UGCNode;\n};\n\n// ===========================================================================\n// 2. Children — array of nodes OR a for-loop\n// ===========================================================================\n\nconst childrenSchema = z.union([\n z.array(z.lazy(() => ugcNodeSchema)),\n forLoopSchema,\n]);\n\ntype Children = UGCNode[] | ForLoop;\n\n// ===========================================================================\n// 3. Base node fields (shared by every node)\n// ===========================================================================\n\nconst baseFields = {\n style: stylePropsSchema.optional(),\n condition: exprSchema.optional(),\n};\n\n// ===========================================================================\n// 4. Layout nodes — have children\n// ===========================================================================\n\n// ---------------------------------------------------------------------------\n// 4.1 BoxNode\n// ---------------------------------------------------------------------------\n\nexport const boxNodeSchema = z.object({\n type: z.literal('Box'),\n children: childrenSchema.optional(),\n ...baseFields,\n});\n\nexport type BoxNode = {\n type: 'Box';\n children?: Children;\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 4.2 RowNode\n// ---------------------------------------------------------------------------\n\nexport const rowNodeSchema = z.object({\n type: z.literal('Row'),\n children: childrenSchema.optional(),\n ...baseFields,\n});\n\nexport type RowNode = {\n type: 'Row';\n children?: Children;\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 4.3 ColumnNode\n// ---------------------------------------------------------------------------\n\nexport const columnNodeSchema = z.object({\n type: z.literal('Column'),\n children: childrenSchema.optional(),\n ...baseFields,\n});\n\nexport type ColumnNode = {\n type: 'Column';\n children?: Children;\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 4.4 StackNode\n// ---------------------------------------------------------------------------\n\nexport const stackNodeSchema = z.object({\n type: z.literal('Stack'),\n children: childrenSchema.optional(),\n ...baseFields,\n});\n\nexport type StackNode = {\n type: 'Stack';\n children?: Children;\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 4.5 GridNode\n// ---------------------------------------------------------------------------\n\nexport const gridNodeSchema = z.object({\n type: z.literal('Grid'),\n children: childrenSchema.optional(),\n ...baseFields,\n});\n\nexport type GridNode = {\n type: 'Grid';\n children?: Children;\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ===========================================================================\n// 5. Content nodes — have fields, no children\n// ===========================================================================\n\n// ---------------------------------------------------------------------------\n// 5.1 TextNode\n// ---------------------------------------------------------------------------\n\nexport const textNodeSchema = z.object({\n type: z.literal('Text'),\n ...textPropsSchema.shape,\n ...baseFields,\n});\n\nexport type TextNode = {\n type: 'Text';\n} & z.infer<typeof textPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 5.2 ImageNode\n// ---------------------------------------------------------------------------\n\nexport const imageNodeSchema = z.object({\n type: z.literal('Image'),\n ...imagePropsSchema.shape,\n ...baseFields,\n});\n\nexport type ImageNode = {\n type: 'Image';\n} & z.infer<typeof imagePropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ===========================================================================\n// 6. Display nodes\n// ===========================================================================\n\n// ---------------------------------------------------------------------------\n// 6.1 ProgressBarNode\n// ---------------------------------------------------------------------------\n\nexport const progressBarNodeSchema = z.object({\n type: z.literal('ProgressBar'),\n ...progressBarPropsSchema.shape,\n ...baseFields,\n});\n\nexport type ProgressBarNode = {\n type: 'ProgressBar';\n} & z.infer<typeof progressBarPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 6.2 AvatarNode\n// ---------------------------------------------------------------------------\n\nexport const avatarNodeSchema = z.object({\n type: z.literal('Avatar'),\n ...avatarPropsSchema.shape,\n ...baseFields,\n});\n\nexport type AvatarNode = {\n type: 'Avatar';\n} & z.infer<typeof avatarPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 6.3 IconNode\n// ---------------------------------------------------------------------------\n\nexport const iconNodeSchema = z.object({\n type: z.literal('Icon'),\n ...iconPropsSchema.shape,\n ...baseFields,\n});\n\nexport type IconNode = {\n type: 'Icon';\n} & z.infer<typeof iconPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 6.4 BadgeNode\n// ---------------------------------------------------------------------------\n\nexport const badgeNodeSchema = z.object({\n type: z.literal('Badge'),\n ...badgePropsSchema.shape,\n ...baseFields,\n});\n\nexport type BadgeNode = {\n type: 'Badge';\n} & z.infer<typeof badgePropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 6.5 ChipNode\n// ---------------------------------------------------------------------------\n\nexport const chipNodeSchema = z.object({\n type: z.literal('Chip'),\n ...chipPropsSchema.shape,\n ...baseFields,\n});\n\nexport type ChipNode = {\n type: 'Chip';\n} & z.infer<typeof chipPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 6.6 DividerNode\n// ---------------------------------------------------------------------------\n\nexport const dividerNodeSchema = z.object({\n type: z.literal('Divider'),\n ...dividerPropsSchema.shape,\n ...baseFields,\n});\n\nexport type DividerNode = {\n type: 'Divider';\n} & z.infer<typeof dividerPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 6.7 SpacerNode\n// ---------------------------------------------------------------------------\n\nexport const spacerNodeSchema = z.object({\n type: z.literal('Spacer'),\n ...spacerPropsSchema.shape,\n ...baseFields,\n});\n\nexport type SpacerNode = {\n type: 'Spacer';\n} & z.infer<typeof spacerPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ===========================================================================\n// 7. Interaction nodes\n// ===========================================================================\n\n// ---------------------------------------------------------------------------\n// 7.1 ButtonNode\n// ---------------------------------------------------------------------------\n\nexport const buttonNodeSchema = z.object({\n type: z.literal('Button'),\n ...buttonPropsSchema.shape,\n ...baseFields,\n});\n\nexport type ButtonNode = {\n type: 'Button';\n} & z.infer<typeof buttonPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 7.2 ToggleNode\n// ---------------------------------------------------------------------------\n\nexport const toggleNodeSchema = z.object({\n type: z.literal('Toggle'),\n ...togglePropsSchema.shape,\n ...baseFields,\n});\n\nexport type ToggleNode = {\n type: 'Toggle';\n} & z.infer<typeof togglePropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ===========================================================================\n// 8. UGCNode — discriminated union of all node types\n// ===========================================================================\n\n/**\n * Union of every node type. Recursive via z.lazy() so that layout nodes\n * can contain UGCNode children.\n */\nexport type UGCNode =\n | BoxNode\n | RowNode\n | ColumnNode\n | StackNode\n | GridNode\n | TextNode\n | ImageNode\n | ProgressBarNode\n | AvatarNode\n | IconNode\n | BadgeNode\n | ChipNode\n | DividerNode\n | SpacerNode\n | ButtonNode\n | ToggleNode;\n\nexport const ugcNodeSchema: z.ZodType<UGCNode> = z.lazy(() =>\n z.discriminatedUnion('type', [\n boxNodeSchema,\n rowNodeSchema,\n columnNodeSchema,\n stackNodeSchema,\n gridNodeSchema,\n textNodeSchema,\n imageNodeSchema,\n progressBarNodeSchema,\n avatarNodeSchema,\n iconNodeSchema,\n badgeNodeSchema,\n chipNodeSchema,\n dividerNodeSchema,\n spacerNodeSchema,\n buttonNodeSchema,\n toggleNodeSchema,\n ]),\n);\n\n// ===========================================================================\n// 9. Phase1Node — MVP subset (spec section 9, Phase 1)\n// ===========================================================================\n\n/**\n * Phase 1 MVP node types: Box, Row, Column, Text, Image.\n */\nexport type Phase1Node =\n | BoxNode\n | RowNode\n | ColumnNode\n | TextNode\n | ImageNode;\n\nexport const phase1NodeSchema: z.ZodType<Phase1Node> = z.lazy(() =>\n z.discriminatedUnion('type', [\n boxNodeSchema,\n rowNodeSchema,\n columnNodeSchema,\n textNodeSchema,\n imageNodeSchema,\n ]),\n);\n","/**\n * @safe-ugc-ui/types — Card Document\n *\n * Defines the top-level UGC card document structure, based on spec section 7\n * (example cards).\n *\n * A card consists of:\n * - meta: name and version\n * - assets: optional mapping of asset keys to @assets/ paths\n * - state: optional initial state values\n * - views: named view definitions, each a UGCNode tree\n *\n * Naming convention:\n * - Zod schema -> `fooSchema`\n * - Inferred TS -> `Foo`\n */\n\nimport { z } from 'zod';\nimport { ugcNodeSchema } from './primitives.js';\nimport { stylePropsSchema } from './styles.js';\n\n// ---------------------------------------------------------------------------\n// 1. CardMeta\n// ---------------------------------------------------------------------------\n\nexport const cardMetaSchema = z.object({\n name: z.string(),\n version: z.string(),\n});\n\nexport type CardMeta = z.infer<typeof cardMetaSchema>;\n\n// ---------------------------------------------------------------------------\n// 2. UGCCard — top-level card document\n// ---------------------------------------------------------------------------\n\n/** Pattern for valid style names: starts with letter, then alphanumeric/hyphens/underscores */\nconst styleNamePattern = /^[A-Za-z][A-Za-z0-9_-]*$/;\n\nexport const ugcCardSchema = z.object({\n meta: cardMetaSchema,\n assets: z.record(z.string(), z.string()).optional(),\n state: z.record(z.string(), z.unknown()).optional(),\n styles: z.record(z.string().regex(styleNamePattern), stylePropsSchema).optional(),\n views: z.record(z.string(), ugcNodeSchema),\n});\n\nexport type UGCCard = z.infer<typeof ugcCardSchema>;\n","/**\n * @safe-ugc-ui/types — Constants\n *\n * All numeric limit constants and enumerated value sets from the Safe UGC UI\n * spec sections 6.1–6.4, plus component type lists and security-related arrays\n * from sections 2 and 3.\n *\n * Pure TypeScript — no Zod dependency.\n */\n\n// ---------------------------------------------------------------------------\n// 6.1 Card-level limits\n// ---------------------------------------------------------------------------\n\n/** Maximum size of the entire card JSON document (1 MB). */\nexport const CARD_JSON_MAX_BYTES = 1_000_000;\n\n/** Maximum combined size of all Text content strings (200 KB). */\nexport const TEXT_CONTENT_TOTAL_MAX_BYTES = 200_000;\n\n/** Maximum combined size of all style objects (100 KB). */\nexport const STYLE_OBJECTS_TOTAL_MAX_BYTES = 100_000;\n\n/** Maximum size of a single asset file (5 MB). */\nexport const ASSET_INDIVIDUAL_MAX_BYTES = 5_000_000;\n\n/** Maximum total size of all assets combined (50 MB). */\nexport const ASSET_TOTAL_MAX_BYTES = 50_000_000;\n\n// ---------------------------------------------------------------------------\n// 6.2 Rendering limits\n// ---------------------------------------------------------------------------\n\n/** Maximum number of rendered DOM nodes. */\nexport const MAX_NODE_COUNT = 10_000;\n\n/** Maximum iterations for a single `for...in` loop. */\nexport const MAX_LOOP_ITERATIONS = 1_000;\n\n/** Maximum depth of nested loops. */\nexport const MAX_NESTED_LOOPS = 2;\n\n/** Maximum number of elements with `overflow: auto` per card. */\nexport const MAX_OVERFLOW_AUTO_COUNT = 2;\n\n/** Maximum depth of nested Stack components. */\nexport const MAX_STACK_NESTING = 3;\n\n// ---------------------------------------------------------------------------\n// 6.3 Expression limits\n// ---------------------------------------------------------------------------\n\n/** Maximum character length of an expression string. */\nexport const EXPR_MAX_LENGTH = 500;\n\n/** Maximum number of tokens in a single expression. */\nexport const EXPR_MAX_TOKENS = 50;\n\n/** Maximum nesting depth within an expression. */\nexport const EXPR_MAX_NESTING = 10;\n\n/** Maximum nesting depth for if/then/else conditions. */\nexport const EXPR_MAX_CONDITION_NESTING = 3;\n\n/** Maximum character length of a string literal inside an expression. */\nexport const EXPR_MAX_STRING_LITERAL = 1_000;\n\n/** Maximum depth of variable reference paths (e.g. `$a.b.c.d.e`). */\nexport const EXPR_MAX_REF_DEPTH = 5;\n\n/** Maximum allowed array index in variable references. */\nexport const EXPR_MAX_ARRAY_INDEX = 9_999;\n\n/** Maximum digits after the decimal point in number literals. */\nexport const EXPR_MAX_FRACTIONAL_DIGITS = 10;\n\n// ---------------------------------------------------------------------------\n// 6.4 Style limits\n// ---------------------------------------------------------------------------\n\n/** Minimum allowed z-index value. */\nexport const ZINDEX_MIN = 0;\n\n/** Maximum allowed z-index value. */\nexport const ZINDEX_MAX = 100;\n\n/** Minimum allowed transform scale factor. */\nexport const TRANSFORM_SCALE_MIN = 0.1;\n\n/** Maximum allowed transform scale factor. */\nexport const TRANSFORM_SCALE_MAX = 1.5;\n\n/** Minimum allowed translateX/Y value (px). */\nexport const TRANSFORM_TRANSLATE_MIN = -500;\n\n/** Maximum allowed translateX/Y value (px). */\nexport const TRANSFORM_TRANSLATE_MAX = 500;\n\n/** Minimum allowed font size (px). */\nexport const FONT_SIZE_MIN = 8;\n\n/** Maximum allowed font size (px). */\nexport const FONT_SIZE_MAX = 72;\n\n/** Maximum number of box-shadow entries. */\nexport const BOX_SHADOW_MAX_COUNT = 5;\n\n/** Maximum blur radius for a box-shadow (px). */\nexport const BOX_SHADOW_BLUR_MAX = 100;\n\n/** Maximum spread radius for a box-shadow (px). */\nexport const BOX_SHADOW_SPREAD_MAX = 50;\n\n/** Maximum border-radius value (px). */\nexport const BORDER_RADIUS_MAX = 9999;\n\n/** Minimum letter-spacing value (px). */\nexport const LETTER_SPACING_MIN = -10;\n\n/** Maximum letter-spacing value (px). */\nexport const LETTER_SPACING_MAX = 50;\n\n/** Minimum opacity value. */\nexport const OPACITY_MIN = 0;\n\n/** Maximum opacity value. */\nexport const OPACITY_MAX = 1;\n\n// ---------------------------------------------------------------------------\n// Component type lists\n// ---------------------------------------------------------------------------\n\n/**\n * Phase 1 MVP component types (spec section 9, Phase 1).\n * Box, Row, Column, Text, Image.\n */\nexport const PHASE1_COMPONENT_TYPES = [\n 'Box',\n 'Row',\n 'Column',\n 'Text',\n 'Image',\n] as const;\n\n/**\n * All 16 component types defined in spec section 2.\n *\n * Layout (2.1): Box, Row, Column, Stack, Grid, Spacer\n * Content (2.2): Text, Image, Icon, Divider\n * Display (2.3): ProgressBar, Badge, Avatar, Chip\n * Interaction (2.4): Button, Toggle\n */\nexport const ALL_COMPONENT_TYPES = [\n // 2.1 Layout\n 'Box',\n 'Row',\n 'Column',\n 'Stack',\n 'Grid',\n 'Spacer',\n // 2.2 Content\n 'Text',\n 'Image',\n 'Icon',\n 'Divider',\n // 2.3 Display\n 'ProgressBar',\n 'Badge',\n 'Avatar',\n 'Chip',\n // 2.4 Interaction (optional)\n 'Button',\n 'Toggle',\n] as const;\n\n// ---------------------------------------------------------------------------\n// Security-related enumerated values\n// ---------------------------------------------------------------------------\n\n/**\n * CSS properties that are completely forbidden (spec section 3.8).\n *\n * - External resource loading: backgroundImage, cursor, listStyleImage, content\n * - Performance / deception: filter, backdropFilter, mixBlendMode\n * - Complex visual manipulation: animation, transition, clipPath, mask\n */\nexport const FORBIDDEN_STYLE_PROPERTIES = [\n 'backgroundImage',\n 'cursor',\n 'listStyleImage',\n 'content',\n 'filter',\n 'backdropFilter',\n 'mixBlendMode',\n 'animation',\n 'transition',\n 'clipPath',\n 'mask',\n] as const;\n\n/**\n * Position values that are never allowed (spec section 3.3).\n */\nexport const FORBIDDEN_POSITION_VALUES = ['fixed', 'sticky'] as const;\n\n/**\n * Allowed overflow values (spec section 3.2).\n * Note: `scroll` is forbidden to prevent scroll-jacking.\n */\nexport const ALLOWED_OVERFLOW_VALUES = ['visible', 'hidden', 'auto'] as const;\n\n/**\n * CSS function prefixes that must be rejected in any string value\n * to prevent injection of dynamic CSS or external resource loading.\n */\nexport const DANGEROUS_CSS_FUNCTIONS = [\n 'calc(',\n 'var(',\n 'url(',\n 'env(',\n 'expression(',\n] as const;\n\n/**\n * Object key path segments that indicate prototype pollution attempts.\n * Any property path containing these segments must be rejected.\n */\nexport const PROTOTYPE_POLLUTION_SEGMENTS = [\n '__proto__',\n 'constructor',\n 'prototype',\n] as const;\n\n// ---------------------------------------------------------------------------\n// CSS named colors (148 standard CSS color keywords)\n// ---------------------------------------------------------------------------\n\nexport const CSS_NAMED_COLORS: ReadonlySet<string> = new Set([\n 'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure',\n 'beige', 'bisque', 'black', 'blanchedalmond', 'blue',\n 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse',\n 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson',\n 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray',\n 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen',\n 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen',\n 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet',\n 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue',\n 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro',\n 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green',\n 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred',\n 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush',\n 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan',\n 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink',\n 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey',\n 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 'linen',\n 'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid',\n 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise',\n 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin',\n 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab',\n 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen',\n 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru',\n 'pink', 'plum', 'powderblue', 'purple', 'rebeccapurple',\n 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon',\n 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver',\n 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow',\n 'springgreen', 'steelblue', 'tan', 'teal', 'thistle',\n 'tomato', 'turquoise', 'violet', 'wheat', 'white',\n 'whitesmoke', 'yellow', 'yellowgreen',\n]);\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z"]}
1
+ {"version":3,"sources":["../src/values.ts","../src/styles.ts","../src/props.ts","../src/primitives.ts","../src/card.ts","../src/constants.ts"],"sourcesContent":["/**\n * @safe-ugc-ui/types — Value Type System\n *\n * Defines the core value types used throughout the Safe UGC UI framework.\n * Based on spec section 4.1: Ref, Expr, Dynamic, Static, and primitive value types.\n *\n * Naming convention:\n * - Zod schema → `fooSchema`\n * - Inferred TypeScript type → `Foo`\n */\n\nimport { z } from 'zod';\n\n// ---------------------------------------------------------------------------\n// 1. Ref — state variable reference\n// ---------------------------------------------------------------------------\n\nexport const refSchema = z.object({\n $ref: z.string(),\n});\n\nexport type Ref = z.infer<typeof refSchema>;\n\n// ---------------------------------------------------------------------------\n// 2. Expr — expression\n// ---------------------------------------------------------------------------\n\nexport const exprSchema = z.object({\n $expr: z.string(),\n});\n\nexport type Expr = z.infer<typeof exprSchema>;\n\n// ---------------------------------------------------------------------------\n// 3. AssetPath — local asset reference (`@assets/...`)\n// ---------------------------------------------------------------------------\n\nexport const assetPathSchema = z.string().startsWith('@assets/');\n\nexport type AssetPath = `@assets/${string}`;\n\n// ---------------------------------------------------------------------------\n// 4. Color — hex, rgb, hsl, named colors (loose string for now)\n// ---------------------------------------------------------------------------\n\nexport const colorSchema = z.string();\n\nexport type Color = z.infer<typeof colorSchema>;\n\n// ---------------------------------------------------------------------------\n// 5. Length — number | string (px, %, em, rem)\n// ---------------------------------------------------------------------------\n\nexport const lengthSchema = z.union([z.number(), z.string()]);\n\nexport type Length = z.infer<typeof lengthSchema>;\n\n// ---------------------------------------------------------------------------\n// 6. Percentage — string like \"50%\"\n// ---------------------------------------------------------------------------\n\nexport const percentageSchema = z.string();\n\nexport type Percentage = z.infer<typeof percentageSchema>;\n\n// ---------------------------------------------------------------------------\n// 7. IconName — string identifier for platform-provided icons\n// ---------------------------------------------------------------------------\n\nexport const iconNameSchema = z.string();\n\nexport type IconName = z.infer<typeof iconNameSchema>;\n\n// ---------------------------------------------------------------------------\n// Helper generic types (TypeScript-only, no Zod)\n// ---------------------------------------------------------------------------\n\n/** A value that can be a literal T, a state Ref, or an Expr. */\nexport type Dynamic<T> = T | Ref | Expr;\n\n/** A value that can be a literal T or a state Ref (expressions forbidden). */\nexport type RefOnly<T> = T | Ref;\n\n/** A value that must be a static literal (no dynamic binding). */\nexport type Static<T> = T;\n\n// ---------------------------------------------------------------------------\n// Helper: dynamic / refOnly Zod schema builders\n// ---------------------------------------------------------------------------\n\n/**\n * Creates a Zod schema that accepts the given base schema OR a Ref OR an Expr.\n *\n * ```ts\n * const dynamicColor = dynamicSchema(colorSchema);\n * // accepts: \"#ff0000\" | { $ref: \"$color\" } | { $expr: \"...\" }\n * ```\n */\nexport function dynamicSchema<T extends z.ZodTypeAny>(schema: T) {\n return z.union([schema, refSchema, exprSchema]);\n}\n\n/**\n * Creates a Zod schema that accepts the given base schema OR a Ref\n * (expressions are forbidden).\n *\n * ```ts\n * const refOnlyAsset = refOnlySchema(assetPathSchema);\n * // accepts: \"@assets/img.png\" | { $ref: \"$imgPath\" }\n * ```\n */\nexport function refOnlySchema<T extends z.ZodTypeAny>(schema: T) {\n return z.union([schema, refSchema]);\n}\n\n// ---------------------------------------------------------------------------\n// Type guard functions (runtime)\n// ---------------------------------------------------------------------------\n\n/**\n * Returns `true` if the value is a `Ref` object (`{ $ref: string }`).\n */\nexport function isRef(value: unknown): value is Ref {\n return (\n typeof value === 'object' &&\n value !== null &&\n '$ref' in value &&\n typeof (value as Record<string, unknown>).$ref === 'string'\n );\n}\n\n/**\n * Returns `true` if the value is an `Expr` object (`{ $expr: string }`).\n */\nexport function isExpr(value: unknown): value is Expr {\n return (\n typeof value === 'object' &&\n value !== null &&\n '$expr' in value &&\n typeof (value as Record<string, unknown>).$expr === 'string'\n );\n}\n\n/**\n * Returns `true` if the value is either a `Ref` or an `Expr`.\n */\nexport function isDynamic(value: unknown): boolean {\n return isRef(value) || isExpr(value);\n}\n\n/**\n * Returns `true` if the value is a valid `AssetPath` (starts with `@assets/`).\n */\nexport function isAssetPath(value: unknown): value is AssetPath {\n return typeof value === 'string' && value.startsWith('@assets/');\n}\n","/**\n * @safe-ugc-ui/types — Style System\n *\n * Defines Zod schemas and inferred TypeScript types for the style system.\n * Based on spec sections 3.1-3.8 (style properties) and 4.3 (style value types).\n *\n * Naming convention:\n * - Zod schema -> `fooSchema`\n * - Inferred TS -> `Foo`\n *\n * Dynamic fields accept literal | $ref | $expr.\n * Static fields accept literal only (no $ref, no $expr).\n */\n\nimport { z } from 'zod';\nimport {\n refSchema,\n exprSchema,\n dynamicSchema,\n colorSchema,\n lengthSchema,\n percentageSchema,\n} from './values.js';\n\n// ===========================================================================\n// 1. Structured objects (Static only — no dynamic wrappers)\n// ===========================================================================\n\n// ---------------------------------------------------------------------------\n// 1.1 GradientStop\n// ---------------------------------------------------------------------------\n\nexport const gradientStopSchema = z.object({\n color: z.string(),\n position: z.string(), // e.g. \"0%\", \"100%\"\n});\n\nexport type GradientStop = z.infer<typeof gradientStopSchema>;\n\n// ---------------------------------------------------------------------------\n// 1.2 LinearGradient\n// ---------------------------------------------------------------------------\n\nexport const linearGradientSchema = z.object({\n type: z.literal('linear'),\n direction: z.string(), // e.g. \"135deg\", \"to right\"\n stops: z.array(gradientStopSchema),\n});\n\nexport type LinearGradient = z.infer<typeof linearGradientSchema>;\n\n// ---------------------------------------------------------------------------\n// 1.3 RadialGradient\n// ---------------------------------------------------------------------------\n\nexport const radialGradientSchema = z.object({\n type: z.literal('radial'),\n stops: z.array(gradientStopSchema),\n});\n\nexport type RadialGradient = z.infer<typeof radialGradientSchema>;\n\n// ---------------------------------------------------------------------------\n// 1.4 GradientObject (union)\n// ---------------------------------------------------------------------------\n\nexport const gradientObjectSchema = z.union([\n linearGradientSchema,\n radialGradientSchema,\n]);\n\nexport type GradientObject = z.infer<typeof gradientObjectSchema>;\n\n// ---------------------------------------------------------------------------\n// 1.5 ShadowObject\n// ---------------------------------------------------------------------------\n\nexport const shadowObjectSchema = z.object({\n offsetX: z.number(),\n offsetY: z.number(),\n blur: z.number().optional(),\n spread: z.number().optional(),\n color: z.string(),\n});\n\nexport type ShadowObject = z.infer<typeof shadowObjectSchema>;\n\n// ---------------------------------------------------------------------------\n// 1.6 BorderObject\n// ---------------------------------------------------------------------------\n\nexport const borderObjectSchema = z.object({\n width: z.number(),\n style: z.enum(['solid', 'dashed', 'dotted', 'none']),\n color: z.string(),\n});\n\nexport type BorderObject = z.infer<typeof borderObjectSchema>;\n\n// ---------------------------------------------------------------------------\n// 1.7 TransformObject (skew intentionally excluded — forbidden by spec 3.6)\n// ---------------------------------------------------------------------------\n\nexport const transformObjectSchema = z.object({\n rotate: z.string().optional(), // e.g. \"45deg\"\n scale: z.number().optional(), // 0.1 ~ 1.5\n translateX: z.number().optional(), // -500 ~ 500\n translateY: z.number().optional(), // -500 ~ 500\n});\n\nexport type TransformObject = z.infer<typeof transformObjectSchema>;\n\n// ===========================================================================\n// 2. Enum value types\n// ===========================================================================\n\n// ---------------------------------------------------------------------------\n// 2.1 PositionValue\n// ---------------------------------------------------------------------------\n\nexport const positionValueSchema = z.enum(['static', 'relative', 'absolute']);\nexport type PositionValue = z.infer<typeof positionValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.2 OverflowValue\n// ---------------------------------------------------------------------------\n\nexport const overflowValueSchema = z.enum(['visible', 'hidden', 'auto']);\nexport type OverflowValue = z.infer<typeof overflowValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.3 DisplayValue\n// ---------------------------------------------------------------------------\n\nexport const displayValueSchema = z.enum(['flex', 'block', 'none']);\nexport type DisplayValue = z.infer<typeof displayValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.4 FlexDirectionValue\n// ---------------------------------------------------------------------------\n\nexport const flexDirectionValueSchema = z.enum([\n 'row',\n 'column',\n 'row-reverse',\n 'column-reverse',\n]);\nexport type FlexDirectionValue = z.infer<typeof flexDirectionValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.5 JustifyContentValue\n// ---------------------------------------------------------------------------\n\nexport const justifyContentValueSchema = z.enum([\n 'start',\n 'center',\n 'end',\n 'space-between',\n 'space-around',\n 'space-evenly',\n]);\nexport type JustifyContentValue = z.infer<typeof justifyContentValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.6 AlignItemsValue\n// ---------------------------------------------------------------------------\n\nexport const alignItemsValueSchema = z.enum([\n 'start',\n 'center',\n 'end',\n 'stretch',\n 'baseline',\n]);\nexport type AlignItemsValue = z.infer<typeof alignItemsValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.7 AlignSelfValue\n// ---------------------------------------------------------------------------\n\nexport const alignSelfValueSchema = z.enum([\n 'auto',\n 'start',\n 'center',\n 'end',\n 'stretch',\n]);\nexport type AlignSelfValue = z.infer<typeof alignSelfValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.8 FlexWrapValue\n// ---------------------------------------------------------------------------\n\nexport const flexWrapValueSchema = z.enum(['nowrap', 'wrap', 'wrap-reverse']);\nexport type FlexWrapValue = z.infer<typeof flexWrapValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.9 TextAlignValue\n// ---------------------------------------------------------------------------\n\nexport const textAlignValueSchema = z.enum([\n 'left',\n 'center',\n 'right',\n 'justify',\n]);\nexport type TextAlignValue = z.infer<typeof textAlignValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.10 TextDecorationValue\n// ---------------------------------------------------------------------------\n\nexport const textDecorationValueSchema = z.enum([\n 'none',\n 'underline',\n 'line-through',\n]);\nexport type TextDecorationValue = z.infer<typeof textDecorationValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.11 FontStyleValue\n// ---------------------------------------------------------------------------\n\nexport const fontStyleValueSchema = z.enum(['normal', 'italic']);\nexport type FontStyleValue = z.infer<typeof fontStyleValueSchema>;\n\n// ---------------------------------------------------------------------------\n// 2.12 FontWeightValue\n// ---------------------------------------------------------------------------\n\nexport const fontWeightValueSchema = z.union([\n z.enum(['normal', 'bold']),\n z.literal(100),\n z.literal(200),\n z.literal(300),\n z.literal(400),\n z.literal(500),\n z.literal(600),\n z.literal(700),\n z.literal(800),\n z.literal(900),\n]);\nexport type FontWeightValue = z.infer<typeof fontWeightValueSchema>;\n\n// ===========================================================================\n// 3. TransitionDef — constrained CSS transition declaration (spec 3.9)\n// ===========================================================================\n\nexport const easingValueSchema = z.enum([\n 'ease',\n 'linear',\n 'ease-in',\n 'ease-out',\n 'ease-in-out',\n]);\n\nexport type EasingValue = z.infer<typeof easingValueSchema>;\n\nexport const transitionDefSchema = z.object({\n property: z.string(),\n duration: z.number(),\n easing: easingValueSchema.optional(),\n delay: z.number().optional(),\n});\n\nexport type TransitionDef = z.infer<typeof transitionDefSchema>;\n\nconst transitionFieldSchema = z\n .union([transitionDefSchema, z.array(transitionDefSchema)])\n .optional();\n\n// ===========================================================================\n// 4. StyleProps — the main style schema (spec 4.3)\n//\n// Dynamic fields: literal | $ref | $expr -> dynamicSchema(base).optional()\n// Static fields: literal only -> base.optional()\n// ===========================================================================\n\n/**\n * Helper: a size value that can be a Length, Percentage, or the literal \"auto\".\n * Used for width/height properties.\n */\nconst sizeValueSchema = z.union([lengthSchema, percentageSchema, z.literal('auto')]);\n\n/**\n * Helper: lineHeight can be a bare number (multiplier) or a length.\n */\nconst lineHeightValueSchema = z.union([z.number(), lengthSchema]);\n\n/**\n * Core style shape shared by both stylePropsSchema and hoverStylePropsSchema.\n * Extracted to avoid duplication and prevent recursive nesting of hoverStyle.\n */\nconst coreStyleShape = {\n // -----------------------------------------------------------------------\n // Layout — Dynamic\n // -----------------------------------------------------------------------\n display: dynamicSchema(displayValueSchema).optional(),\n flexDirection: dynamicSchema(flexDirectionValueSchema).optional(),\n justifyContent: dynamicSchema(justifyContentValueSchema).optional(),\n alignItems: dynamicSchema(alignItemsValueSchema).optional(),\n alignSelf: dynamicSchema(alignSelfValueSchema).optional(),\n flexWrap: dynamicSchema(flexWrapValueSchema).optional(),\n flex: dynamicSchema(z.number()).optional(),\n gap: dynamicSchema(lengthSchema).optional(),\n\n // -----------------------------------------------------------------------\n // Sizing — Dynamic\n // -----------------------------------------------------------------------\n width: dynamicSchema(sizeValueSchema).optional(),\n height: dynamicSchema(sizeValueSchema).optional(),\n minWidth: dynamicSchema(z.union([lengthSchema, percentageSchema])).optional(),\n maxWidth: dynamicSchema(z.union([lengthSchema, percentageSchema])).optional(),\n minHeight: dynamicSchema(z.union([lengthSchema, percentageSchema])).optional(),\n maxHeight: dynamicSchema(z.union([lengthSchema, percentageSchema])).optional(),\n\n // -----------------------------------------------------------------------\n // Spacing — Dynamic\n // -----------------------------------------------------------------------\n padding: dynamicSchema(lengthSchema).optional(),\n paddingTop: dynamicSchema(lengthSchema).optional(),\n paddingRight: dynamicSchema(lengthSchema).optional(),\n paddingBottom: dynamicSchema(lengthSchema).optional(),\n paddingLeft: dynamicSchema(lengthSchema).optional(),\n margin: dynamicSchema(lengthSchema).optional(),\n marginTop: dynamicSchema(lengthSchema).optional(),\n marginRight: dynamicSchema(lengthSchema).optional(),\n marginBottom: dynamicSchema(lengthSchema).optional(),\n marginLeft: dynamicSchema(lengthSchema).optional(),\n\n // -----------------------------------------------------------------------\n // Colors — Dynamic\n // -----------------------------------------------------------------------\n backgroundColor: dynamicSchema(colorSchema).optional(),\n color: dynamicSchema(colorSchema).optional(),\n\n // -----------------------------------------------------------------------\n // Border radius — Dynamic\n // -----------------------------------------------------------------------\n borderRadius: dynamicSchema(lengthSchema).optional(),\n borderRadiusTopLeft: dynamicSchema(lengthSchema).optional(),\n borderRadiusTopRight: dynamicSchema(lengthSchema).optional(),\n borderRadiusBottomLeft: dynamicSchema(lengthSchema).optional(),\n borderRadiusBottomRight: dynamicSchema(lengthSchema).optional(),\n\n // -----------------------------------------------------------------------\n // Typography — Dynamic\n // -----------------------------------------------------------------------\n fontSize: dynamicSchema(lengthSchema).optional(),\n fontWeight: dynamicSchema(fontWeightValueSchema).optional(),\n fontStyle: dynamicSchema(fontStyleValueSchema).optional(),\n textAlign: dynamicSchema(textAlignValueSchema).optional(),\n textDecoration: dynamicSchema(textDecorationValueSchema).optional(),\n lineHeight: dynamicSchema(lineHeightValueSchema).optional(),\n letterSpacing: dynamicSchema(lengthSchema).optional(),\n\n // -----------------------------------------------------------------------\n // Opacity — Dynamic\n // -----------------------------------------------------------------------\n opacity: dynamicSchema(z.number()).optional(),\n\n // -----------------------------------------------------------------------\n // Gradient — Static only\n // -----------------------------------------------------------------------\n backgroundGradient: gradientObjectSchema.optional(),\n\n // -----------------------------------------------------------------------\n // Shadow — Static only (single or array of shadows)\n // -----------------------------------------------------------------------\n boxShadow: z\n .union([shadowObjectSchema, z.array(shadowObjectSchema)])\n .optional(),\n\n // -----------------------------------------------------------------------\n // Borders — Static only\n // -----------------------------------------------------------------------\n border: borderObjectSchema.optional(),\n borderTop: borderObjectSchema.optional(),\n borderRight: borderObjectSchema.optional(),\n borderBottom: borderObjectSchema.optional(),\n borderLeft: borderObjectSchema.optional(),\n\n // -----------------------------------------------------------------------\n // Transform — Static only (skew excluded)\n // -----------------------------------------------------------------------\n transform: transformObjectSchema.optional(),\n\n // -----------------------------------------------------------------------\n // Overflow — Static only\n // -----------------------------------------------------------------------\n overflow: overflowValueSchema.optional(),\n\n // -----------------------------------------------------------------------\n // Position — Static only\n // -----------------------------------------------------------------------\n position: positionValueSchema.optional(),\n top: lengthSchema.optional(),\n right: lengthSchema.optional(),\n bottom: lengthSchema.optional(),\n left: lengthSchema.optional(),\n\n // -----------------------------------------------------------------------\n // Object-fit — Dynamic (for Image nodes)\n // -----------------------------------------------------------------------\n objectFit: dynamicSchema(z.enum(['cover', 'contain', 'fill', 'none', 'scale-down'])).optional(),\n objectPosition: dynamicSchema(z.string()).optional(),\n\n // -----------------------------------------------------------------------\n // Grid — Dynamic\n // -----------------------------------------------------------------------\n gridTemplateColumns: dynamicSchema(z.string()).optional(),\n gridTemplateRows: dynamicSchema(z.string()).optional(),\n gridColumn: dynamicSchema(z.string()).optional(),\n gridRow: dynamicSchema(z.string()).optional(),\n\n // -----------------------------------------------------------------------\n // z-index — Static only (0-100 enforced at validation layer)\n // -----------------------------------------------------------------------\n zIndex: z.number().optional(),\n\n // -----------------------------------------------------------------------\n // $style — reference to a named style in card.styles\n // -----------------------------------------------------------------------\n $style: z.string().optional(),\n};\n\n// ---------------------------------------------------------------------------\n// HoverStyleProps — same as core style + transition, but NO hoverStyle\n// (prevents infinite nesting)\n// ---------------------------------------------------------------------------\n\n// Destructure out $style from coreStyleShape — it's not allowed in hoverStyle\nconst { $style: _$styleField, ...coreStyleShapeWithout$style } = coreStyleShape;\n\nexport const hoverStylePropsSchema = z.object({\n ...coreStyleShapeWithout$style,\n transition: transitionFieldSchema,\n});\n\nexport type HoverStyleProps = z.infer<typeof hoverStylePropsSchema>;\n\n// ---------------------------------------------------------------------------\n// StyleProps — core style + hoverStyle + transition\n// ---------------------------------------------------------------------------\n\nexport const stylePropsSchema = z.object({\n ...coreStyleShape,\n hoverStyle: hoverStylePropsSchema.optional(),\n transition: transitionFieldSchema,\n});\n\nexport type StyleProps = z.infer<typeof stylePropsSchema>;\n","/**\n * @safe-ugc-ui/types — Component Fields\n *\n * Defines Zod schemas and inferred TypeScript types for each component's\n * field set (formerly `props`). Based on spec section 4.2.\n *\n * Security-sensitive fields use restricted value types:\n * - Image.src, Avatar.src -> refOnly (no $expr — prevents URL manipulation)\n * - Icon.name -> static (no $ref, no $expr)\n * - All others -> dynamic (literal | $ref | $expr)\n *\n * Naming convention:\n * - Zod schema -> `fooPropsSchema`\n * - Inferred TS -> `FooProps`\n */\n\nimport { z } from 'zod';\nimport {\n dynamicSchema,\n refOnlySchema,\n assetPathSchema,\n colorSchema,\n lengthSchema,\n iconNameSchema,\n} from './values.js';\n\n// ---------------------------------------------------------------------------\n// 1. TextProps\n// ---------------------------------------------------------------------------\n\nexport const textPropsSchema = z.object({\n content: dynamicSchema(z.string()),\n});\n\nexport type TextProps = z.infer<typeof textPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 2. ImageProps\n// ---------------------------------------------------------------------------\n\nexport const imagePropsSchema = z.object({\n src: refOnlySchema(assetPathSchema),\n alt: dynamicSchema(z.string()).optional(),\n});\n\nexport type ImageProps = z.infer<typeof imagePropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 3. ProgressBarProps\n// ---------------------------------------------------------------------------\n\nexport const progressBarPropsSchema = z.object({\n value: dynamicSchema(z.number()),\n max: dynamicSchema(z.number()),\n color: dynamicSchema(colorSchema).optional(),\n});\n\nexport type ProgressBarProps = z.infer<typeof progressBarPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 4. AvatarProps\n// ---------------------------------------------------------------------------\n\nexport const avatarPropsSchema = z.object({\n src: refOnlySchema(assetPathSchema),\n size: dynamicSchema(lengthSchema).optional(),\n});\n\nexport type AvatarProps = z.infer<typeof avatarPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 5. IconProps\n// ---------------------------------------------------------------------------\n\nexport const iconPropsSchema = z.object({\n name: iconNameSchema,\n size: dynamicSchema(lengthSchema).optional(),\n color: dynamicSchema(colorSchema).optional(),\n});\n\nexport type IconProps = z.infer<typeof iconPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 6. BadgeProps\n// ---------------------------------------------------------------------------\n\nexport const badgePropsSchema = z.object({\n label: dynamicSchema(z.string()),\n color: dynamicSchema(colorSchema).optional(),\n});\n\nexport type BadgeProps = z.infer<typeof badgePropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 7. ChipProps\n// ---------------------------------------------------------------------------\n\nexport const chipPropsSchema = z.object({\n label: dynamicSchema(z.string()),\n color: dynamicSchema(colorSchema).optional(),\n});\n\nexport type ChipProps = z.infer<typeof chipPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 8. DividerProps\n// ---------------------------------------------------------------------------\n\nexport const dividerPropsSchema = z.object({\n color: dynamicSchema(colorSchema).optional(),\n thickness: dynamicSchema(lengthSchema).optional(),\n});\n\nexport type DividerProps = z.infer<typeof dividerPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 9. SpacerProps\n// ---------------------------------------------------------------------------\n\nexport const spacerPropsSchema = z.object({\n size: dynamicSchema(lengthSchema).optional(),\n});\n\nexport type SpacerProps = z.infer<typeof spacerPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 10. ButtonProps\n// ---------------------------------------------------------------------------\n\nexport const buttonPropsSchema = z.object({\n label: dynamicSchema(z.string()),\n action: z.string(),\n});\n\nexport type ButtonProps = z.infer<typeof buttonPropsSchema>;\n\n// ---------------------------------------------------------------------------\n// 11. ToggleProps\n// ---------------------------------------------------------------------------\n\nexport const togglePropsSchema = z.object({\n value: dynamicSchema(z.boolean()),\n onToggle: z.string(),\n});\n\nexport type ToggleProps = z.infer<typeof togglePropsSchema>;\n","/**\n * @safe-ugc-ui/types — Primitives (Node Types)\n *\n * Defines the component tree structure using Zod schemas with z.lazy() for\n * recursive types. Based on spec section 2 (primitive list) and section 4.2\n * (component field rules).\n *\n * Node categories:\n * - Layout: Box, Row, Column, Stack, Grid (have children)\n * - Content: Text, Image (have fields, no children)\n * - Display: ProgressBar, Avatar, Icon, Badge, Chip, Divider, Spacer\n * - Interaction: Button, Toggle\n *\n * Naming convention:\n * - Zod schema -> `fooNodeSchema`\n * - Inferred TS -> `FooNode`\n */\n\nimport { z } from 'zod';\nimport { exprSchema } from './values.js';\nimport { stylePropsSchema } from './styles.js';\nimport {\n textPropsSchema,\n imagePropsSchema,\n progressBarPropsSchema,\n avatarPropsSchema,\n iconPropsSchema,\n badgePropsSchema,\n chipPropsSchema,\n dividerPropsSchema,\n spacerPropsSchema,\n buttonPropsSchema,\n togglePropsSchema,\n} from './props.js';\n\n// ===========================================================================\n// 1. ForLoop — iterative children\n// ===========================================================================\n\n/**\n * A for-loop that produces children by iterating over a state array.\n *\n * ```json\n * { \"for\": \"msg\", \"in\": \"$messages\", \"template\": { ... } }\n * ```\n *\n * The `template` field references UGCNode via z.lazy() since UGCNode is\n * defined later in this module.\n */\nexport const forLoopSchema = z.object({\n for: z.string(),\n in: z.string(),\n template: z.lazy(() => ugcNodeSchema),\n});\n\nexport type ForLoop = {\n for: string;\n in: string;\n template: UGCNode;\n};\n\n// ===========================================================================\n// 2. Children — array of nodes OR a for-loop\n// ===========================================================================\n\nconst childrenSchema = z.union([\n z.array(z.lazy(() => ugcNodeSchema)),\n forLoopSchema,\n]);\n\ntype Children = UGCNode[] | ForLoop;\n\n// ===========================================================================\n// 3. Base node fields (shared by every node)\n// ===========================================================================\n\nconst baseFields = {\n style: stylePropsSchema.optional(),\n condition: exprSchema.optional(),\n};\n\n// ===========================================================================\n// 4. Layout nodes — have children\n// ===========================================================================\n\n// ---------------------------------------------------------------------------\n// 4.1 BoxNode\n// ---------------------------------------------------------------------------\n\nexport const boxNodeSchema = z.object({\n type: z.literal('Box'),\n children: childrenSchema.optional(),\n ...baseFields,\n});\n\nexport type BoxNode = {\n type: 'Box';\n children?: Children;\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 4.2 RowNode\n// ---------------------------------------------------------------------------\n\nexport const rowNodeSchema = z.object({\n type: z.literal('Row'),\n children: childrenSchema.optional(),\n ...baseFields,\n});\n\nexport type RowNode = {\n type: 'Row';\n children?: Children;\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 4.3 ColumnNode\n// ---------------------------------------------------------------------------\n\nexport const columnNodeSchema = z.object({\n type: z.literal('Column'),\n children: childrenSchema.optional(),\n ...baseFields,\n});\n\nexport type ColumnNode = {\n type: 'Column';\n children?: Children;\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 4.4 StackNode\n// ---------------------------------------------------------------------------\n\nexport const stackNodeSchema = z.object({\n type: z.literal('Stack'),\n children: childrenSchema.optional(),\n ...baseFields,\n});\n\nexport type StackNode = {\n type: 'Stack';\n children?: Children;\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 4.5 GridNode\n// ---------------------------------------------------------------------------\n\nexport const gridNodeSchema = z.object({\n type: z.literal('Grid'),\n children: childrenSchema.optional(),\n ...baseFields,\n});\n\nexport type GridNode = {\n type: 'Grid';\n children?: Children;\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ===========================================================================\n// 5. Content nodes — have fields, no children\n// ===========================================================================\n\n// ---------------------------------------------------------------------------\n// 5.1 TextNode\n// ---------------------------------------------------------------------------\n\nexport const textNodeSchema = z.object({\n type: z.literal('Text'),\n ...textPropsSchema.shape,\n ...baseFields,\n});\n\nexport type TextNode = {\n type: 'Text';\n} & z.infer<typeof textPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 5.2 ImageNode\n// ---------------------------------------------------------------------------\n\nexport const imageNodeSchema = z.object({\n type: z.literal('Image'),\n ...imagePropsSchema.shape,\n ...baseFields,\n});\n\nexport type ImageNode = {\n type: 'Image';\n} & z.infer<typeof imagePropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ===========================================================================\n// 6. Display nodes\n// ===========================================================================\n\n// ---------------------------------------------------------------------------\n// 6.1 ProgressBarNode\n// ---------------------------------------------------------------------------\n\nexport const progressBarNodeSchema = z.object({\n type: z.literal('ProgressBar'),\n ...progressBarPropsSchema.shape,\n ...baseFields,\n});\n\nexport type ProgressBarNode = {\n type: 'ProgressBar';\n} & z.infer<typeof progressBarPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 6.2 AvatarNode\n// ---------------------------------------------------------------------------\n\nexport const avatarNodeSchema = z.object({\n type: z.literal('Avatar'),\n ...avatarPropsSchema.shape,\n ...baseFields,\n});\n\nexport type AvatarNode = {\n type: 'Avatar';\n} & z.infer<typeof avatarPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 6.3 IconNode\n// ---------------------------------------------------------------------------\n\nexport const iconNodeSchema = z.object({\n type: z.literal('Icon'),\n ...iconPropsSchema.shape,\n ...baseFields,\n});\n\nexport type IconNode = {\n type: 'Icon';\n} & z.infer<typeof iconPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 6.4 BadgeNode\n// ---------------------------------------------------------------------------\n\nexport const badgeNodeSchema = z.object({\n type: z.literal('Badge'),\n ...badgePropsSchema.shape,\n ...baseFields,\n});\n\nexport type BadgeNode = {\n type: 'Badge';\n} & z.infer<typeof badgePropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 6.5 ChipNode\n// ---------------------------------------------------------------------------\n\nexport const chipNodeSchema = z.object({\n type: z.literal('Chip'),\n ...chipPropsSchema.shape,\n ...baseFields,\n});\n\nexport type ChipNode = {\n type: 'Chip';\n} & z.infer<typeof chipPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 6.6 DividerNode\n// ---------------------------------------------------------------------------\n\nexport const dividerNodeSchema = z.object({\n type: z.literal('Divider'),\n ...dividerPropsSchema.shape,\n ...baseFields,\n});\n\nexport type DividerNode = {\n type: 'Divider';\n} & z.infer<typeof dividerPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 6.7 SpacerNode\n// ---------------------------------------------------------------------------\n\nexport const spacerNodeSchema = z.object({\n type: z.literal('Spacer'),\n ...spacerPropsSchema.shape,\n ...baseFields,\n});\n\nexport type SpacerNode = {\n type: 'Spacer';\n} & z.infer<typeof spacerPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ===========================================================================\n// 7. Interaction nodes\n// ===========================================================================\n\n// ---------------------------------------------------------------------------\n// 7.1 ButtonNode\n// ---------------------------------------------------------------------------\n\nexport const buttonNodeSchema = z.object({\n type: z.literal('Button'),\n ...buttonPropsSchema.shape,\n ...baseFields,\n});\n\nexport type ButtonNode = {\n type: 'Button';\n} & z.infer<typeof buttonPropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ---------------------------------------------------------------------------\n// 7.2 ToggleNode\n// ---------------------------------------------------------------------------\n\nexport const toggleNodeSchema = z.object({\n type: z.literal('Toggle'),\n ...togglePropsSchema.shape,\n ...baseFields,\n});\n\nexport type ToggleNode = {\n type: 'Toggle';\n} & z.infer<typeof togglePropsSchema> & {\n style?: z.infer<typeof stylePropsSchema>;\n condition?: z.infer<typeof exprSchema>;\n};\n\n// ===========================================================================\n// 8. UGCNode — discriminated union of all node types\n// ===========================================================================\n\n/**\n * Union of every node type. Recursive via z.lazy() so that layout nodes\n * can contain UGCNode children.\n */\nexport type UGCNode =\n | BoxNode\n | RowNode\n | ColumnNode\n | StackNode\n | GridNode\n | TextNode\n | ImageNode\n | ProgressBarNode\n | AvatarNode\n | IconNode\n | BadgeNode\n | ChipNode\n | DividerNode\n | SpacerNode\n | ButtonNode\n | ToggleNode;\n\nexport const ugcNodeSchema: z.ZodType<UGCNode> = z.lazy(() =>\n z.discriminatedUnion('type', [\n boxNodeSchema,\n rowNodeSchema,\n columnNodeSchema,\n stackNodeSchema,\n gridNodeSchema,\n textNodeSchema,\n imageNodeSchema,\n progressBarNodeSchema,\n avatarNodeSchema,\n iconNodeSchema,\n badgeNodeSchema,\n chipNodeSchema,\n dividerNodeSchema,\n spacerNodeSchema,\n buttonNodeSchema,\n toggleNodeSchema,\n ]),\n);\n\n// ===========================================================================\n// 9. Phase1Node — MVP subset (spec section 9, Phase 1)\n// ===========================================================================\n\n/**\n * Phase 1 MVP node types: Box, Row, Column, Text, Image.\n */\nexport type Phase1Node =\n | BoxNode\n | RowNode\n | ColumnNode\n | TextNode\n | ImageNode;\n\nexport const phase1NodeSchema: z.ZodType<Phase1Node> = z.lazy(() =>\n z.discriminatedUnion('type', [\n boxNodeSchema,\n rowNodeSchema,\n columnNodeSchema,\n textNodeSchema,\n imageNodeSchema,\n ]),\n);\n","/**\n * @safe-ugc-ui/types — Card Document\n *\n * Defines the top-level UGC card document structure, based on spec section 7\n * (example cards).\n *\n * A card consists of:\n * - meta: name and version\n * - assets: optional mapping of asset keys to @assets/ paths\n * - state: optional initial state values\n * - views: named view definitions, each a UGCNode tree\n *\n * Naming convention:\n * - Zod schema -> `fooSchema`\n * - Inferred TS -> `Foo`\n */\n\nimport { z } from 'zod';\nimport { ugcNodeSchema } from './primitives.js';\nimport { stylePropsSchema } from './styles.js';\n\n// ---------------------------------------------------------------------------\n// 1. CardMeta\n// ---------------------------------------------------------------------------\n\nexport const cardMetaSchema = z.object({\n name: z.string(),\n version: z.string(),\n});\n\nexport type CardMeta = z.infer<typeof cardMetaSchema>;\n\n// ---------------------------------------------------------------------------\n// 2. UGCCard — top-level card document\n// ---------------------------------------------------------------------------\n\n/** Pattern for valid style names: starts with letter, then alphanumeric/hyphens/underscores */\nconst styleNamePattern = /^[A-Za-z][A-Za-z0-9_-]*$/;\n\nexport const ugcCardSchema = z.object({\n meta: cardMetaSchema,\n assets: z.record(z.string(), z.string()).optional(),\n state: z.record(z.string(), z.unknown()).optional(),\n styles: z.record(z.string().regex(styleNamePattern), stylePropsSchema).optional(),\n views: z.record(z.string(), ugcNodeSchema),\n});\n\nexport type UGCCard = z.infer<typeof ugcCardSchema>;\n","/**\n * @safe-ugc-ui/types — Constants\n *\n * All numeric limit constants and enumerated value sets from the Safe UGC UI\n * spec sections 6.1–6.4, plus component type lists and security-related arrays\n * from sections 2 and 3.\n *\n * Pure TypeScript — no Zod dependency.\n */\n\n// ---------------------------------------------------------------------------\n// 6.1 Card-level limits\n// ---------------------------------------------------------------------------\n\n/** Maximum size of the entire card JSON document (1 MB). */\nexport const CARD_JSON_MAX_BYTES = 1_000_000;\n\n/** Maximum combined size of all Text content strings (200 KB). */\nexport const TEXT_CONTENT_TOTAL_MAX_BYTES = 200_000;\n\n/** Maximum combined size of all style objects (100 KB). */\nexport const STYLE_OBJECTS_TOTAL_MAX_BYTES = 100_000;\n\n/** Maximum size of a single asset file (5 MB). */\nexport const ASSET_INDIVIDUAL_MAX_BYTES = 5_000_000;\n\n/** Maximum total size of all assets combined (50 MB). */\nexport const ASSET_TOTAL_MAX_BYTES = 50_000_000;\n\n// ---------------------------------------------------------------------------\n// 6.2 Rendering limits\n// ---------------------------------------------------------------------------\n\n/** Maximum number of rendered DOM nodes. */\nexport const MAX_NODE_COUNT = 10_000;\n\n/** Maximum iterations for a single `for...in` loop. */\nexport const MAX_LOOP_ITERATIONS = 1_000;\n\n/** Maximum depth of nested loops. */\nexport const MAX_NESTED_LOOPS = 2;\n\n/** Maximum number of elements with `overflow: auto` per card. */\nexport const MAX_OVERFLOW_AUTO_COUNT = 2;\n\n/** Maximum depth of nested Stack components. */\nexport const MAX_STACK_NESTING = 3;\n\n// ---------------------------------------------------------------------------\n// 6.3 Expression limits\n// ---------------------------------------------------------------------------\n\n/** Maximum character length of an expression string. */\nexport const EXPR_MAX_LENGTH = 500;\n\n/** Maximum number of tokens in a single expression. */\nexport const EXPR_MAX_TOKENS = 50;\n\n/** Maximum nesting depth within an expression. */\nexport const EXPR_MAX_NESTING = 10;\n\n/** Maximum nesting depth for if/then/else conditions. */\nexport const EXPR_MAX_CONDITION_NESTING = 3;\n\n/** Maximum character length of a string literal inside an expression. */\nexport const EXPR_MAX_STRING_LITERAL = 1_000;\n\n/** Maximum depth of variable reference paths (e.g. `$a.b.c.d.e`). */\nexport const EXPR_MAX_REF_DEPTH = 5;\n\n/** Maximum allowed array index in variable references. */\nexport const EXPR_MAX_ARRAY_INDEX = 9_999;\n\n/** Maximum digits after the decimal point in number literals. */\nexport const EXPR_MAX_FRACTIONAL_DIGITS = 10;\n\n// ---------------------------------------------------------------------------\n// 6.4 Style limits\n// ---------------------------------------------------------------------------\n\n/** Minimum allowed z-index value. */\nexport const ZINDEX_MIN = 0;\n\n/** Maximum allowed z-index value. */\nexport const ZINDEX_MAX = 100;\n\n/** Minimum allowed transform scale factor. */\nexport const TRANSFORM_SCALE_MIN = 0.1;\n\n/** Maximum allowed transform scale factor. */\nexport const TRANSFORM_SCALE_MAX = 1.5;\n\n/** Minimum allowed translateX/Y value (px). */\nexport const TRANSFORM_TRANSLATE_MIN = -500;\n\n/** Maximum allowed translateX/Y value (px). */\nexport const TRANSFORM_TRANSLATE_MAX = 500;\n\n/** Minimum allowed font size (px). */\nexport const FONT_SIZE_MIN = 8;\n\n/** Maximum allowed font size (px). */\nexport const FONT_SIZE_MAX = 72;\n\n/** Maximum number of box-shadow entries. */\nexport const BOX_SHADOW_MAX_COUNT = 5;\n\n/** Maximum blur radius for a box-shadow (px). */\nexport const BOX_SHADOW_BLUR_MAX = 100;\n\n/** Maximum spread radius for a box-shadow (px). */\nexport const BOX_SHADOW_SPREAD_MAX = 50;\n\n/** Maximum border-radius value (px). */\nexport const BORDER_RADIUS_MAX = 9999;\n\n/** Minimum letter-spacing value (px). */\nexport const LETTER_SPACING_MIN = -10;\n\n/** Maximum letter-spacing value (px). */\nexport const LETTER_SPACING_MAX = 50;\n\n/** Minimum opacity value. */\nexport const OPACITY_MIN = 0;\n\n/** Maximum opacity value. */\nexport const OPACITY_MAX = 1;\n\n/** Maximum transition duration in milliseconds. */\nexport const TRANSITION_DURATION_MAX = 2000;\n\n/** Maximum transition delay in milliseconds. */\nexport const TRANSITION_DELAY_MAX = 1000;\n\n/** Maximum number of transition definitions per style. */\nexport const TRANSITION_MAX_COUNT = 10;\n\n/**\n * CSS properties allowed in transition.property (spec 3.9).\n * Matches the DIRECT_MAP_PROPS whitelist from style-mapper.\n */\nexport const ALLOWED_TRANSITION_PROPERTIES = [\n 'display', 'flexDirection', 'justifyContent', 'alignItems', 'alignSelf',\n 'flexWrap', 'flex', 'gap', 'width', 'height', 'minWidth', 'maxWidth',\n 'minHeight', 'maxHeight', 'padding', 'paddingTop', 'paddingRight',\n 'paddingBottom', 'paddingLeft', 'margin', 'marginTop', 'marginRight',\n 'marginBottom', 'marginLeft', 'backgroundColor', 'color', 'borderRadius',\n 'borderRadiusTopLeft', 'borderRadiusTopRight',\n 'borderRadiusBottomLeft', 'borderRadiusBottomRight',\n 'fontSize', 'fontWeight', 'fontStyle', 'textAlign', 'textDecoration',\n 'lineHeight', 'letterSpacing', 'opacity', 'overflow', 'position',\n 'top', 'right', 'bottom', 'left', 'zIndex',\n 'gridTemplateColumns', 'gridTemplateRows', 'gridColumn', 'gridRow',\n 'objectFit', 'objectPosition',\n] as const;\n\n// ---------------------------------------------------------------------------\n// Component type lists\n// ---------------------------------------------------------------------------\n\n/**\n * Phase 1 MVP component types (spec section 9, Phase 1).\n * Box, Row, Column, Text, Image.\n */\nexport const PHASE1_COMPONENT_TYPES = [\n 'Box',\n 'Row',\n 'Column',\n 'Text',\n 'Image',\n] as const;\n\n/**\n * All 16 component types defined in spec section 2.\n *\n * Layout (2.1): Box, Row, Column, Stack, Grid, Spacer\n * Content (2.2): Text, Image, Icon, Divider\n * Display (2.3): ProgressBar, Badge, Avatar, Chip\n * Interaction (2.4): Button, Toggle\n */\nexport const ALL_COMPONENT_TYPES = [\n // 2.1 Layout\n 'Box',\n 'Row',\n 'Column',\n 'Stack',\n 'Grid',\n 'Spacer',\n // 2.2 Content\n 'Text',\n 'Image',\n 'Icon',\n 'Divider',\n // 2.3 Display\n 'ProgressBar',\n 'Badge',\n 'Avatar',\n 'Chip',\n // 2.4 Interaction (optional)\n 'Button',\n 'Toggle',\n] as const;\n\n// ---------------------------------------------------------------------------\n// Security-related enumerated values\n// ---------------------------------------------------------------------------\n\n/**\n * CSS properties that are completely forbidden (spec section 3.8).\n *\n * - External resource loading: backgroundImage, cursor, listStyleImage, content\n * - Performance / deception: filter, backdropFilter, mixBlendMode\n * - Complex visual manipulation: animation, transition, clipPath, mask\n */\nexport const FORBIDDEN_STYLE_PROPERTIES = [\n 'backgroundImage',\n 'cursor',\n 'listStyleImage',\n 'content',\n 'filter',\n 'backdropFilter',\n 'mixBlendMode',\n 'animation',\n 'transition',\n 'clipPath',\n 'mask',\n] as const;\n\n/**\n * Position values that are never allowed (spec section 3.3).\n */\nexport const FORBIDDEN_POSITION_VALUES = ['fixed', 'sticky'] as const;\n\n/**\n * Allowed overflow values (spec section 3.2).\n * Note: `scroll` is forbidden to prevent scroll-jacking.\n */\nexport const ALLOWED_OVERFLOW_VALUES = ['visible', 'hidden', 'auto'] as const;\n\n/**\n * CSS function prefixes that must be rejected in any string value\n * to prevent injection of dynamic CSS or external resource loading.\n */\nexport const DANGEROUS_CSS_FUNCTIONS = [\n 'calc(',\n 'var(',\n 'url(',\n 'env(',\n 'expression(',\n] as const;\n\n/**\n * Object key path segments that indicate prototype pollution attempts.\n * Any property path containing these segments must be rejected.\n */\nexport const PROTOTYPE_POLLUTION_SEGMENTS = [\n '__proto__',\n 'constructor',\n 'prototype',\n] as const;\n\n// ---------------------------------------------------------------------------\n// CSS named colors (148 standard CSS color keywords)\n// ---------------------------------------------------------------------------\n\nexport const CSS_NAMED_COLORS: ReadonlySet<string> = new Set([\n 'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure',\n 'beige', 'bisque', 'black', 'blanchedalmond', 'blue',\n 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse',\n 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson',\n 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray',\n 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen',\n 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen',\n 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet',\n 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue',\n 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro',\n 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green',\n 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred',\n 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush',\n 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan',\n 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink',\n 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey',\n 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 'linen',\n 'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid',\n 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise',\n 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin',\n 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab',\n 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen',\n 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru',\n 'pink', 'plum', 'powderblue', 'purple', 'rebeccapurple',\n 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon',\n 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver',\n 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow',\n 'springgreen', 'steelblue', 'tan', 'teal', 'thistle',\n 'tomato', 'turquoise', 'violet', 'wheat', 'white',\n 'whitesmoke', 'yellow', 'yellowgreen',\n]);\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@safe-ugc-ui/types",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Type definitions and Zod schemas for Safe UGC UI cards",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -17,15 +17,13 @@
17
17
  "import": "./dist/index.js"
18
18
  }
19
19
  },
20
- "files": [
21
- "dist"
22
- ],
23
- "dependencies": {
24
- "zod": "^3.24.0"
25
- },
26
- "devDependencies": {},
20
+ "files": ["dist"],
27
21
  "scripts": {
28
22
  "build": "tsup",
29
23
  "test": "vitest run"
30
- }
31
- }
24
+ },
25
+ "dependencies": {
26
+ "zod": "^3.24.0"
27
+ },
28
+ "devDependencies": {}
29
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Safe UGC UI Contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.