@maplibre-yaml/core 0.1.0-alpha.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/LICENSE.md +21 -0
- package/dist/components/index.d.ts +106 -0
- package/dist/components/index.js +4332 -0
- package/dist/components/index.js.map +1 -0
- package/dist/index.d.ts +2717 -0
- package/dist/index.js +4305 -0
- package/dist/index.js.map +1 -0
- package/dist/map-renderer-RQc5_bdo.d.ts +149 -0
- package/dist/map.schema-EnZRrtIh.d.ts +68122 -0
- package/dist/schemas/index.d.ts +3151 -0
- package/dist/schemas/index.js +710 -0
- package/dist/schemas/index.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/schemas/base.schema.ts","../../src/schemas/source.schema.ts","../../src/schemas/layer.schema.ts","../../src/schemas/content.schema.ts","../../src/schemas/map.schema.ts","../../src/schemas/scrollytelling.schema.ts","../../src/schemas/page.schema.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @file Base schemas for maplibre-yaml\n * @module @maplibre-yaml/core/schemas/base\n *\n * @description\n * Foundational Zod schemas for coordinates, colors, expressions, and other\n * primitive types used throughout the library.\n *\n * @example\n * ```typescript\n * import { LngLatSchema, ColorSchema } from '@maplibre-yaml/core/schemas';\n * ```\n */\n\nimport { z } from \"zod\";\n\n/**\n * Longitude value in degrees.\n *\n * @remarks\n * Valid range: -180 to 180 (inclusive)\n *\n * @example\n * ```typescript\n * const lng = LongitudeSchema.parse(-74.006);\n * ```\n */\nexport const LongitudeSchema = z\n .number()\n .min(-180, \"Longitude must be >= -180\")\n .max(180, \"Longitude must be <= 180\")\n .describe(\"Longitude in degrees (-180 to 180)\");\n\n/**\n * Latitude value in degrees.\n *\n * @remarks\n * Valid range: -90 to 90 (inclusive)\n *\n * @example\n * ```typescript\n * const lat = LatitudeSchema.parse(40.7128);\n * ```\n */\nexport const LatitudeSchema = z\n .number()\n .min(-90, \"Latitude must be >= -90\")\n .max(90, \"Latitude must be <= 90\")\n .describe(\"Latitude in degrees (-90 to 90)\");\n\n/**\n * Geographic coordinates as [longitude, latitude].\n *\n * @remarks\n * **Validation Rules:**\n * - Longitude: -180 to 180\n * - Latitude: -90 to 90\n * - Must be a 2-element tuple\n *\n * Follows GeoJSON convention (lng, lat), not (lat, lng).\n *\n * **Common Values:**\n * - `[0, 0]` - Null Island (Gulf of Guinea)\n * - `[-74.006, 40.7128]` - New York City\n * - `[139.6917, 35.6895]` - Tokyo\n *\n * @example YAML\n * ```yaml\n * center: [-74.006, 40.7128]\n * ```\n *\n * @example TypeScript\n * ```typescript\n * const coords = LngLatSchema.parse([-74.006, 40.7128]);\n * ```\n *\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.1 | GeoJSON Position}\n */\nexport const LngLatSchema = z\n .tuple([LongitudeSchema, LatitudeSchema])\n .describe(\"Geographic coordinates as [longitude, latitude]\");\n\n/** Inferred type for geographic coordinates. */\nexport type LngLat = z.infer<typeof LngLatSchema>;\n\n/**\n * Bounding box as [west, south, east, north].\n *\n * @remarks\n * Defines a rectangular geographic area. Corner order:\n * 1. West (min longitude)\n * 2. South (min latitude)\n * 3. East (max longitude)\n * 4. North (max latitude)\n *\n * @example YAML\n * ```yaml\n * maxBounds: [-74.3, 40.5, -73.7, 40.9]\n * ```\n *\n * @example TypeScript\n * ```typescript\n * // NYC bounding box\n * const bounds = LngLatBoundsSchema.parse([-74.3, 40.5, -73.7, 40.9]);\n * ```\n */\nexport const LngLatBoundsSchema = z\n .tuple([\n LongitudeSchema, // west\n LatitudeSchema, // south\n LongitudeSchema, // east\n LatitudeSchema, // north\n ])\n .describe(\"Bounding box as [west, south, east, north]\");\n\n/** Inferred type for bounding box. */\nexport type LngLatBounds = z.infer<typeof LngLatBoundsSchema>;\n\n/**\n * CSS color value.\n *\n * @remarks\n * Supports multiple color formats:\n * - Hex: `#rgb`, `#rrggbb`, `#rrggbbaa`\n * - RGB: `rgb(255, 0, 0)`\n * - RGBA: `rgba(255, 0, 0, 0.5)`\n * - HSL: `hsl(0, 100%, 50%)`\n * - HSLA: `hsla(0, 100%, 50%, 0.5)`\n * - Named: `red`, `blue`, `transparent`, etc.\n *\n * @example YAML\n * ```yaml\n * paint:\n * circle-color: \"#ff0000\"\n * fill-color: \"rgba(255, 0, 0, 0.5)\"\n * line-color: \"hsl(120, 100%, 50%)\"\n * text-color: \"blue\"\n * ```\n *\n * @example TypeScript\n * ```typescript\n * const hex = ColorSchema.parse(\"#ff0000\");\n * const rgba = ColorSchema.parse(\"rgba(255, 0, 0, 0.5)\");\n * const named = ColorSchema.parse(\"red\");\n * ```\n */\nexport const ColorSchema = z\n .string()\n .refine(\n (val) => {\n // Hex color (#rgb, #rrggbb, #rrggbbaa)\n if (val.startsWith(\"#\")) {\n return /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(val);\n }\n // rgb/rgba\n if (val.startsWith(\"rgb\")) {\n return /^rgba?\\s*\\([^)]+\\)$/.test(val);\n }\n // hsl/hsla\n if (val.startsWith(\"hsl\")) {\n return /^hsla?\\s*\\([^)]+\\)$/.test(val);\n }\n // Named colors (accept any other string, browser will validate)\n return true;\n },\n {\n message:\n \"Invalid color format. Use hex (#rgb, #rrggbb), rgb(), rgba(), hsl(), hsla(), or named colors.\",\n }\n )\n .describe(\"CSS color value\");\n\n/** Inferred type for color values. */\nexport type Color = z.infer<typeof ColorSchema>;\n\n/**\n * MapLibre expression for data-driven styling.\n *\n * @remarks\n * MapLibre expressions provide powerful data-driven styling capabilities.\n * An expression is an array where the first element is the operator name.\n *\n * **Common Operators:**\n * - `get` - Get feature property\n * - `interpolate` - Interpolate between values\n * - `match` - Match values\n * - `case` - Conditional logic\n * - `step` - Step function\n *\n * This schema provides basic validation (array starting with string).\n * Full expression syntax is validated by MapLibre at runtime.\n *\n * @example Get Property\n * ```yaml\n * text-field: [\"get\", \"name\"]\n * ```\n *\n * @example Interpolate by Zoom\n * ```yaml\n * circle-radius:\n * - interpolate\n * - [\"linear\"]\n * - [\"zoom\"]\n * - 5\n * - 2\n * - 15\n * - 10\n * ```\n *\n * @example Match Values\n * ```yaml\n * circle-color:\n * - match\n * - [\"get\", \"type\"]\n * - \"park\"\n * - \"#228B22\"\n * - \"water\"\n * - \"#4169E1\"\n * - \"#808080\"\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/expressions/ | MapLibre Expressions}\n */\nexport const ExpressionSchema: z.ZodType<any[]> = z\n .array(z.any())\n .refine((val) => val.length > 0 && typeof val[0] === \"string\", {\n message:\n 'Expression must be an array starting with a string operator (e.g., [\"get\", \"property\"])',\n })\n .describe(\"MapLibre expression for data-driven styling\");\n\n/** Inferred type for expressions. */\nexport type Expression = z.infer<typeof ExpressionSchema>;\n\n/**\n * Number value or MapLibre expression.\n *\n * @remarks\n * Accepts either a static number or a dynamic expression.\n * Use expressions for data-driven or zoom-dependent values.\n *\n * @example Static Value\n * ```yaml\n * circle-radius: 8\n * ```\n *\n * @example Expression\n * ```yaml\n * circle-radius:\n * - interpolate\n * - [\"linear\"]\n * - [\"get\", \"magnitude\"]\n * - 0\n * - 4\n * - 10\n * - 20\n * ```\n */\nexport const NumberOrExpressionSchema = z\n .union([z.number(), ExpressionSchema])\n .describe(\"Number value or MapLibre expression\");\n\n/** Inferred type for number or expression. */\nexport type NumberOrExpression = z.infer<typeof NumberOrExpressionSchema>;\n\n/**\n * Color value or MapLibre expression.\n *\n * @remarks\n * Accepts either a static color or a dynamic expression.\n * Use expressions for data-driven colors.\n *\n * @example Static Color\n * ```yaml\n * circle-color: \"#ff0000\"\n * ```\n *\n * @example Expression\n * ```yaml\n * circle-color:\n * - match\n * - [\"get\", \"severity\"]\n * - \"high\"\n * - \"#ff0000\"\n * - \"medium\"\n * - \"#ffaa00\"\n * - \"low\"\n * - \"#00ff00\"\n * - \"#808080\"\n * ```\n */\nexport const ColorOrExpressionSchema = z\n .union([ColorSchema, ExpressionSchema])\n .describe(\"Color value or MapLibre expression\");\n\n/** Inferred type for color or expression. */\nexport type ColorOrExpression = z.infer<typeof ColorOrExpressionSchema>;\n\n/**\n * Map zoom level.\n *\n * @remarks\n * Valid range: 0 to 24\n *\n * **Common Values:**\n * - 0 - Whole world\n * - 5 - Continent\n * - 10 - City\n * - 15 - Streets\n * - 20 - Buildings\n *\n * @example\n * ```yaml\n * zoom: 12\n * minZoom: 8\n * maxZoom: 18\n * ```\n */\nexport const ZoomLevelSchema = z\n .number()\n .min(0, \"Zoom level must be >= 0\")\n .max(24, \"Zoom level must be <= 24\")\n .describe(\"Map zoom level (0-24)\");\n\n/** Inferred type for zoom level. */\nexport type ZoomLevel = z.infer<typeof ZoomLevelSchema>;\n","/**\n * @file Source schemas for maplibre-yaml\n * @module @maplibre-yaml/core/schemas/source\n *\n * @description\n * Zod schemas for all MapLibre data source types with runtime-first defaults.\n * Supports GeoJSON, vector, raster, image, and video sources with dynamic data loading.\n *\n * @example\n * ```typescript\n * import { GeoJSONSourceSchema, LayerSourceSchema } from '@maplibre-yaml/core/schemas';\n * ```\n */\n\nimport { z } from \"zod\";\nimport { LngLatSchema } from \"./base.schema\";\n\n/**\n * WebSocket or Server-Sent Events streaming configuration.\n *\n * @remarks\n * Enables real-time data updates via WebSocket or SSE connections.\n *\n * **Connection Types:**\n * - `websocket` - Bidirectional WebSocket connection\n * - `sse` - Server-Sent Events (unidirectional)\n *\n * @example WebSocket\n * ```yaml\n * stream:\n * type: websocket\n * url: \"wss://api.example.com/live-data\"\n * reconnect: true\n * reconnectMaxAttempts: 10\n * protocols: [\"json\", \"v1\"]\n * ```\n *\n * @example Server-Sent Events\n * ```yaml\n * stream:\n * type: sse\n * url: \"https://api.example.com/events\"\n * eventTypes: [\"update\", \"delete\"]\n * ```\n */\nexport const StreamConfigSchema = z.object({\n type: z.enum([\"websocket\", \"sse\"]).describe(\"Streaming connection type\"),\n url: z.string().url().optional().describe(\"WebSocket or SSE endpoint URL\"),\n reconnect: z\n .boolean()\n .default(true)\n .describe(\"Automatically reconnect on disconnect\"),\n reconnectMaxAttempts: z\n .number()\n .min(0)\n .default(10)\n .describe(\"Maximum number of reconnection attempts\"),\n reconnectDelay: z\n .number()\n .min(100)\n .default(1000)\n .describe(\"Initial delay in milliseconds before reconnecting\"),\n reconnectMaxDelay: z\n .number()\n .min(1000)\n .default(30000)\n .describe(\"Maximum delay in milliseconds for exponential backoff\"),\n eventTypes: z\n .array(z.string())\n .optional()\n .describe(\"Event types to listen for (SSE only)\"),\n protocols: z\n .union([z.string(), z.array(z.string())])\n .optional()\n .describe(\"WebSocket sub-protocols (WebSocket only)\"),\n});\n\n/** Inferred type for stream configuration. */\nexport type StreamConfig = z.infer<typeof StreamConfigSchema>;\n\n/**\n * Loading UI configuration for data fetching.\n *\n * @remarks\n * Controls the loading experience while data is being fetched.\n *\n * @example\n * ```yaml\n * loading:\n * enabled: true\n * message: \"Loading earthquake data...\"\n * showErrorOverlay: true\n * ```\n */\nexport const LoadingConfigSchema = z.object({\n enabled: z\n .boolean()\n .default(false)\n .describe(\"Enable loading UI overlays\"),\n message: z.string().optional().describe(\"Custom loading message to display\"),\n showErrorOverlay: z\n .boolean()\n .default(true)\n .describe(\"Show error overlay on fetch failure\"),\n});\n\n/** Inferred type for loading configuration. */\nexport type LoadingConfig = z.infer<typeof LoadingConfigSchema>;\n\n/**\n * Cache configuration for data fetching.\n *\n * @remarks\n * Controls HTTP caching behavior for fetched data.\n *\n * @example\n * ```yaml\n * cache:\n * enabled: true\n * ttl: 300000 # 5 minutes\n * ```\n */\nexport const CacheConfigSchema = z.object({\n enabled: z.boolean().default(true).describe(\"Enable HTTP caching\"),\n ttl: z\n .number()\n .positive()\n .optional()\n .describe(\"Cache TTL in milliseconds (overrides default)\"),\n});\n\n/** Inferred type for cache configuration. */\nexport type CacheConfig = z.infer<typeof CacheConfigSchema>;\n\n/**\n * Refresh configuration for polling updates.\n *\n * @remarks\n * Configures periodic data refresh with merge strategies.\n *\n * @example Replace Strategy\n * ```yaml\n * refresh:\n * refreshInterval: 5000\n * updateStrategy: replace\n * ```\n *\n * @example Merge Strategy\n * ```yaml\n * refresh:\n * refreshInterval: 10000\n * updateStrategy: merge\n * updateKey: \"vehicleId\"\n * ```\n *\n * @example Append-Window Strategy\n * ```yaml\n * refresh:\n * refreshInterval: 15000\n * updateStrategy: append-window\n * windowSize: 100\n * windowDuration: 3600000 # 1 hour\n * timestampField: \"timestamp\"\n * ```\n */\nexport const RefreshConfigSchema = z\n .object({\n refreshInterval: z\n .number()\n .min(1000)\n .optional()\n .describe(\"Polling interval in milliseconds (minimum 1000ms)\"),\n updateStrategy: z\n .enum([\"replace\", \"merge\", \"append-window\"])\n .default(\"replace\")\n .describe(\"How to merge incoming data with existing data\"),\n updateKey: z\n .string()\n .optional()\n .describe(\"Property key for merge strategy (required for merge)\"),\n windowSize: z\n .number()\n .positive()\n .optional()\n .describe(\"Maximum features to keep (append-window)\"),\n windowDuration: z\n .number()\n .positive()\n .optional()\n .describe(\"Maximum age in milliseconds (append-window)\"),\n timestampField: z\n .string()\n .optional()\n .describe(\"Property field containing timestamp (append-window)\"),\n })\n .refine((data) => !(data.updateStrategy === \"merge\" && !data.updateKey), {\n message: \"updateKey is required when updateStrategy is 'merge'\",\n });\n\n/** Inferred type for refresh configuration. */\nexport type RefreshConfig = z.infer<typeof RefreshConfigSchema>;\n\n/**\n * GeoJSON data source configuration.\n *\n * @remarks\n * The primary data source type for maplibre-yaml. Supports multiple data\n * loading strategies:\n *\n * **Data Sources (one required):**\n * - `url` - Fetch GeoJSON from URL at runtime\n * - `data` - Inline GeoJSON object\n * - `stream` - Real-time WebSocket or SSE connection\n *\n * **Fetch Strategy:**\n * - `runtime` (default) - Fetch when map loads, keeps bundle small\n * - `build` - Fetch at build time, bundle with app\n * - `hybrid` - Build-time with runtime refresh\n *\n * **Real-time Updates:**\n * - Use `refreshInterval` for polling (minimum 1000ms)\n * - Use `stream` for WebSocket/SSE\n * - Configure `updateStrategy` for merge vs replace\n *\n * @example Basic URL Source\n * ```yaml\n * source:\n * type: geojson\n * url: \"https://example.com/data.geojson\"\n * ```\n *\n * @example Inline Data\n * ```yaml\n * source:\n * type: geojson\n * data:\n * type: FeatureCollection\n * features:\n * - type: Feature\n * geometry:\n * type: Point\n * coordinates: [-74.006, 40.7128]\n * properties:\n * name: \"New York\"\n * ```\n *\n * @example Polling Updates\n * ```yaml\n * source:\n * type: geojson\n * url: \"https://api.example.com/live-data\"\n * refreshInterval: 15000\n * loading:\n * message: \"Loading live data...\"\n * ```\n *\n * @example WebSocket Streaming\n * ```yaml\n * source:\n * type: geojson\n * stream:\n * type: websocket\n * url: \"wss://api.example.com/stream\"\n * updateStrategy: merge\n * updateKey: \"id\"\n * ```\n *\n * @example Clustered Points\n * ```yaml\n * source:\n * type: geojson\n * url: \"https://example.com/points.geojson\"\n * cluster: true\n * clusterRadius: 50\n * clusterMaxZoom: 14\n * ```\n *\n * @see {@link StreamConfigSchema} for streaming options\n * @see {@link LoadingConfigSchema} for loading UI options\n * @see {@link https://maplibre.org/maplibre-style-spec/sources/#geojson | MapLibre GeoJSON Source}\n */\nexport const GeoJSONSourceSchema = z\n .object({\n type: z.literal(\"geojson\").describe(\"Source type\"),\n url: z.string().url().optional().describe(\"URL to fetch GeoJSON data\"),\n data: z.any().optional().describe(\"Inline GeoJSON object\"),\n prefetchedData: z\n .any()\n .optional()\n .describe(\"Pre-fetched data from build time\"),\n fetchStrategy: z\n .enum([\"runtime\", \"build\", \"hybrid\"])\n .default(\"runtime\")\n .describe(\"When to fetch data: runtime (default), build, or hybrid\"),\n stream: StreamConfigSchema.optional().describe(\n \"WebSocket/SSE streaming configuration\"\n ),\n refresh: RefreshConfigSchema.optional().describe(\n \"Polling refresh configuration\"\n ),\n // Legacy support for direct refresh properties\n refreshInterval: z\n .number()\n .min(1000)\n .optional()\n .describe(\"Polling interval in milliseconds (legacy, use refresh.refreshInterval)\"),\n updateStrategy: z\n .enum([\"replace\", \"merge\", \"append-window\"])\n .optional()\n .describe(\"Update strategy (legacy, use refresh.updateStrategy)\"),\n updateKey: z\n .string()\n .optional()\n .describe(\"Update key (legacy, use refresh.updateKey)\"),\n loading: LoadingConfigSchema.optional().describe(\n \"Loading UI configuration\"\n ),\n cache: CacheConfigSchema.optional().describe(\"Cache configuration\"),\n // MapLibre clustering options\n cluster: z.boolean().optional().describe(\"Enable point clustering\"),\n clusterRadius: z\n .number()\n .int()\n .min(0)\n .default(50)\n .describe(\"Cluster radius in pixels\"),\n clusterMaxZoom: z\n .number()\n .min(0)\n .max(24)\n .optional()\n .describe(\"Maximum zoom level to cluster points\"),\n clusterMinPoints: z\n .number()\n .int()\n .min(2)\n .optional()\n .describe(\"Minimum points to form a cluster\"),\n clusterProperties: z\n .record(z.any())\n .optional()\n .describe(\"Aggregate cluster properties\"),\n // Additional MapLibre options (passthrough)\n tolerance: z.number().optional(),\n buffer: z.number().optional(),\n lineMetrics: z.boolean().optional(),\n generateId: z.boolean().optional(),\n promoteId: z.union([z.string(), z.record(z.string())]).optional(),\n attribution: z.string().optional(),\n })\n .passthrough()\n .refine((data) => data.url || data.data || data.prefetchedData, {\n message:\n \"GeoJSON source requires at least one of: url, data, or prefetchedData. \" +\n 'Use \"url\" to fetch from an endpoint, \"data\" for inline GeoJSON, ' +\n 'or \"prefetchedData\" for build-time fetched data.',\n });\n\n/** Inferred type for GeoJSON source. */\nexport type GeoJSONSource = z.infer<typeof GeoJSONSourceSchema>;\n\n/**\n * Vector tile source configuration.\n *\n * @remarks\n * Vector tiles provide efficient rendering of large datasets.\n * Requires either a TileJSON URL or a tiles URL array.\n *\n * @example TileJSON URL\n * ```yaml\n * source:\n * type: vector\n * url: \"https://api.maptiler.com/tiles/v3/tiles.json?key=YOUR_KEY\"\n * ```\n *\n * @example Tiles Array\n * ```yaml\n * source:\n * type: vector\n * tiles:\n * - \"https://tile.example.com/{z}/{x}/{y}.pbf\"\n * minzoom: 0\n * maxzoom: 14\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/sources/#vector | MapLibre Vector Source}\n */\nexport const VectorSourceSchema = z\n .object({\n type: z.literal(\"vector\").describe(\"Source type\"),\n url: z.string().url().optional().describe(\"TileJSON URL\"),\n tiles: z\n .array(z.string().url())\n .optional()\n .describe(\"Tile URL template array\"),\n minzoom: z\n .number()\n .min(0)\n .max(24)\n .optional()\n .describe(\"Minimum zoom level\"),\n maxzoom: z\n .number()\n .min(0)\n .max(24)\n .optional()\n .describe(\"Maximum zoom level\"),\n bounds: z\n .tuple([z.number(), z.number(), z.number(), z.number()])\n .optional()\n .describe(\"Bounding box [west, south, east, north]\"),\n scheme: z\n .enum([\"xyz\", \"tms\"])\n .optional()\n .describe(\"Tile coordinate scheme\"),\n attribution: z.string().optional().describe(\"Attribution text\"),\n promoteId: z.union([z.string(), z.record(z.string())]).optional(),\n volatile: z.boolean().optional(),\n })\n .passthrough()\n .refine((data) => data.url || data.tiles, {\n message:\n 'Vector source requires either \"url\" (TileJSON) or \"tiles\" (tile URL array). ' +\n \"Provide at least one of these properties.\",\n });\n\n/** Inferred type for vector source. */\nexport type VectorSource = z.infer<typeof VectorSourceSchema>;\n\n/**\n * Raster tile source configuration.\n *\n * @remarks\n * Raster tiles for satellite imagery, hillshading, or other bitmap data.\n *\n * @example\n * ```yaml\n * source:\n * type: raster\n * tiles:\n * - \"https://tile.openstreetmap.org/{z}/{x}/{y}.png\"\n * tileSize: 256\n * maxzoom: 19\n * attribution: \"© OpenStreetMap contributors\"\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/sources/#raster | MapLibre Raster Source}\n */\nexport const RasterSourceSchema = z\n .object({\n type: z.literal(\"raster\").describe(\"Source type\"),\n url: z.string().url().optional().describe(\"TileJSON URL\"),\n tiles: z\n .array(z.string().url())\n .optional()\n .describe(\"Tile URL template array\"),\n tileSize: z\n .number()\n .int()\n .min(1)\n .default(512)\n .describe(\"Tile size in pixels\"),\n minzoom: z\n .number()\n .min(0)\n .max(24)\n .optional()\n .describe(\"Minimum zoom level\"),\n maxzoom: z\n .number()\n .min(0)\n .max(24)\n .optional()\n .describe(\"Maximum zoom level\"),\n bounds: z\n .tuple([z.number(), z.number(), z.number(), z.number()])\n .optional()\n .describe(\"Bounding box [west, south, east, north]\"),\n scheme: z\n .enum([\"xyz\", \"tms\"])\n .optional()\n .describe(\"Tile coordinate scheme\"),\n attribution: z.string().optional().describe(\"Attribution text\"),\n volatile: z.boolean().optional(),\n })\n .passthrough()\n .refine((data) => data.url || data.tiles, {\n message:\n 'Raster source requires either \"url\" (TileJSON) or \"tiles\" (tile URL array). ' +\n \"Provide at least one of these properties.\",\n });\n\n/** Inferred type for raster source. */\nexport type RasterSource = z.infer<typeof RasterSourceSchema>;\n\n/**\n * Image source configuration.\n *\n * @remarks\n * Display a single image on the map anchored to geographic coordinates.\n * Useful for overlaying maps, floor plans, or custom imagery.\n *\n * **Coordinate Order:**\n * Four corners must be specified clockwise starting from top-left:\n * 1. Top-left\n * 2. Top-right\n * 3. Bottom-right\n * 4. Bottom-left\n *\n * @example\n * ```yaml\n * source:\n * type: image\n * url: \"https://example.com/overlay.png\"\n * coordinates:\n * - [-80.425, 46.437] # top-left\n * - [-71.516, 46.437] # top-right\n * - [-71.516, 37.936] # bottom-right\n * - [-80.425, 37.936] # bottom-left\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/sources/#image | MapLibre Image Source}\n */\nexport const ImageSourceSchema = z\n .object({\n type: z.literal(\"image\").describe(\"Source type\"),\n url: z.string().url().describe(\"Image URL\"),\n coordinates: z\n .tuple([LngLatSchema, LngLatSchema, LngLatSchema, LngLatSchema])\n .describe(\n \"Four corner coordinates [topLeft, topRight, bottomRight, bottomLeft]\"\n ),\n })\n .passthrough();\n\n/** Inferred type for image source. */\nexport type ImageSource = z.infer<typeof ImageSourceSchema>;\n\n/**\n * Video source configuration.\n *\n * @remarks\n * Display video content on the map anchored to geographic coordinates.\n * Multiple URLs can be provided for browser compatibility.\n *\n * @example\n * ```yaml\n * source:\n * type: video\n * urls:\n * - \"https://example.com/video.mp4\"\n * - \"https://example.com/video.webm\"\n * coordinates:\n * - [-122.51596391201019, 37.56238816766053]\n * - [-122.51467645168304, 37.56410183312965]\n * - [-122.51309394836426, 37.563391708549425]\n * - [-122.51423120498657, 37.56161849366671]\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/sources/#video | MapLibre Video Source}\n */\nexport const VideoSourceSchema = z\n .object({\n type: z.literal(\"video\").describe(\"Source type\"),\n urls: z\n .array(z.string().url())\n .min(1)\n .describe(\"Array of video URLs for browser compatibility\"),\n coordinates: z\n .tuple([LngLatSchema, LngLatSchema, LngLatSchema, LngLatSchema])\n .describe(\n \"Four corner coordinates [topLeft, topRight, bottomRight, bottomLeft]\"\n ),\n })\n .passthrough();\n\n/** Inferred type for video source. */\nexport type VideoSource = z.infer<typeof VideoSourceSchema>;\n\n/**\n * Union of all layer source types.\n *\n * @remarks\n * Use the `type` field to determine which source type is being used.\n *\n * @example\n * ```typescript\n * const source: LayerSource = {\n * type: 'geojson',\n * url: 'https://example.com/data.geojson'\n * };\n *\n * // TypeScript knows the available fields based on type\n * if (source.type === 'geojson') {\n * console.log(source.refreshInterval); // OK\n * }\n * ```\n */\nexport const LayerSourceSchema = z.union([\n GeoJSONSourceSchema,\n VectorSourceSchema,\n RasterSourceSchema,\n ImageSourceSchema,\n VideoSourceSchema,\n]);\n\n/** Inferred type for any layer source. */\nexport type LayerSource = z.infer<typeof LayerSourceSchema>;\n","/**\n * @file Layer schemas for maplibre-yaml\n * @module @maplibre-yaml/core/schemas/layer\n *\n * @description\n * Zod schemas for all MapLibre layer types with paint/layout properties,\n * interactive events, popups, and legends.\n *\n * @example\n * ```typescript\n * import { LayerSchema, CircleLayerSchema } from '@maplibre-yaml/core/schemas';\n * ```\n */\n\nimport { z } from \"zod\";\nimport {\n ColorOrExpressionSchema,\n NumberOrExpressionSchema,\n ExpressionSchema,\n ZoomLevelSchema,\n} from \"./base.schema\";\nimport { LayerSourceSchema } from \"./source.schema\";\n\n/**\n * Content item for popup or dynamic text rendering.\n *\n * @remarks\n * Supports static strings, dynamic property interpolation, and fallback values.\n *\n * **Properties:**\n * - `str` - Static text string\n * - `property` - Feature property name to interpolate\n * - `else` - Fallback value if property is missing\n * - `format` - Number format string (e.g., \",.0f\" for thousands separator)\n * - `href` - Link URL (for anchor tags)\n * - `text` - Link text\n * - `src` - Image/iframe source URL\n * - `alt` - Image alt text\n *\n * @example Static Text\n * ```yaml\n * - str: \"Population: \"\n * ```\n *\n * @example Dynamic Property\n * ```yaml\n * - property: name\n * else: \"Unknown\"\n * ```\n *\n * @example Formatted Number\n * ```yaml\n * - property: population\n * format: \",.0f\"\n * ```\n */\nexport const PopupContentItemSchema = z\n .object({\n str: z.string().optional().describe(\"Static text string\"),\n property: z.string().optional().describe(\"Feature property name\"),\n else: z.string().optional().describe(\"Fallback value if property missing\"),\n format: z\n .string()\n .optional()\n .describe('Number format string (e.g., \",.0f\")'),\n href: z.string().url().optional().describe(\"Link URL\"),\n text: z.string().optional().describe(\"Link text\"),\n src: z.string().url().optional().describe(\"Image/iframe source\"),\n alt: z.string().optional().describe(\"Image alt text\"),\n })\n .passthrough()\n .describe(\"Popup content item with static or dynamic values\");\n\n/** Inferred type for popup content item. */\nexport type PopupContentItem = z.infer<typeof PopupContentItemSchema>;\n\n/**\n * Popup content structure.\n *\n * @remarks\n * Array of HTML elements where each element is `{ tagName: [items] }`.\n * Elements are rendered in order to build popup HTML.\n *\n * **Supported Tags:**\n * h1, h2, h3, h4, h5, h6, p, span, div, strong, em, code, pre,\n * a, img, iframe, ul, ol, li, blockquote, hr, br\n *\n * @example\n * ```yaml\n * popup:\n * - h3:\n * - property: name\n * else: \"Unknown\"\n * - p:\n * - str: \"Population: \"\n * - property: population\n * format: \",.0f\"\n * - a:\n * - href: \"https://example.com\"\n * text: \"Learn more\"\n * ```\n *\n * **Output for `{ name: \"NYC\", population: 8336817 }`:**\n * ```html\n * <h3>NYC</h3>\n * <p>Population: 8,336,817</p>\n * <a href=\"https://example.com\">Learn more</a>\n * ```\n */\nexport const PopupContentSchema = z\n .array(z.record(z.array(PopupContentItemSchema)))\n .describe(\"Popup content structure as array of HTML elements\");\n\n/** Inferred type for popup content. */\nexport type PopupContent = z.infer<typeof PopupContentSchema>;\n\n/**\n * Interactive event configuration for layers.\n *\n * @remarks\n * Defines hover and click behaviors for map features.\n *\n * **Events:**\n * - `hover` - Cursor and highlight on mouseover\n * - `click` - Popup, actions, or navigation on click\n * - `mouseenter` - Custom action on mouse enter\n * - `mouseleave` - Custom action on mouse leave\n *\n * @example Hover Cursor\n * ```yaml\n * interactive:\n * hover:\n * cursor: pointer\n * ```\n *\n * @example Click Popup\n * ```yaml\n * interactive:\n * click:\n * popup:\n * - h3:\n * - property: name\n * - p:\n * - property: description\n * ```\n *\n * @example Click with FlyTo\n * ```yaml\n * interactive:\n * click:\n * flyTo:\n * zoom: 15\n * duration: 1000\n * ```\n */\nexport const InteractiveConfigSchema = z\n .object({\n hover: z\n .object({\n cursor: z\n .string()\n .optional()\n .describe('CSS cursor style (e.g., \"pointer\")'),\n highlight: z\n .boolean()\n .optional()\n .describe(\"Highlight feature on hover\"),\n })\n .optional()\n .describe(\"Hover behavior\"),\n click: z\n .object({\n popup: PopupContentSchema.optional().describe(\n \"Popup content to display\"\n ),\n action: z.string().optional().describe(\"Custom action name to trigger\"),\n flyTo: z\n .object({\n center: z.tuple([z.number(), z.number()]).optional(),\n zoom: ZoomLevelSchema.optional(),\n duration: z.number().optional(),\n })\n .optional()\n .describe(\"Fly to location on click\"),\n })\n .optional()\n .describe(\"Click behavior\"),\n mouseenter: z\n .object({\n action: z.string().optional().describe(\"Custom action on mouse enter\"),\n })\n .optional(),\n mouseleave: z\n .object({\n action: z.string().optional().describe(\"Custom action on mouse leave\"),\n })\n .optional(),\n })\n .optional()\n .describe(\"Interactive event configuration\");\n\n/** Inferred type for interactive config. */\nexport type InteractiveConfig = z.infer<typeof InteractiveConfigSchema>;\n\n/**\n * Legend item for a layer.\n *\n * @remarks\n * Defines how the layer appears in the map legend.\n *\n * **Shape Options:**\n * - `circle` - Circular symbol\n * - `square` - Square symbol\n * - `line` - Line symbol\n * - `icon` - Custom icon\n *\n * @example\n * ```yaml\n * legend:\n * color: \"#ff0000\"\n * label: \"Earthquakes\"\n * shape: circle\n * ```\n */\nexport const LegendItemSchema = z\n .object({\n color: z.string().describe(\"CSS color value\"),\n label: z.string().describe(\"Legend label text\"),\n shape: z\n .enum([\"circle\", \"square\", \"line\", \"icon\"])\n .default(\"square\")\n .describe(\"Symbol shape\"),\n icon: z.string().optional().describe(\"Icon name or URL (for shape: icon)\"),\n })\n .describe(\"Legend item configuration\");\n\n/** Inferred type for legend item. */\nexport type LegendItem = z.infer<typeof LegendItemSchema>;\n\n/**\n * Base properties shared by all layer types.\n *\n * @remarks\n * Common configuration that applies to every layer regardless of type.\n */\nexport const BaseLayerPropertiesSchema = z.object({\n id: z.string().describe(\"Unique layer identifier\"),\n label: z.string().optional().describe(\"Human-readable layer label\"),\n source: z\n .union([LayerSourceSchema, z.string()])\n .describe(\"Layer source (inline definition or source ID reference)\"),\n \"source-layer\": z\n .string()\n .optional()\n .describe(\"Source layer name (for vector sources)\"),\n minzoom: ZoomLevelSchema.optional().describe(\n \"Minimum zoom level to show layer\"\n ),\n maxzoom: ZoomLevelSchema.optional().describe(\n \"Maximum zoom level to show layer\"\n ),\n filter: ExpressionSchema.optional().describe(\"MapLibre filter expression\"),\n visible: z.boolean().default(true).describe(\"Initial visibility state\"),\n toggleable: z\n .boolean()\n .default(true)\n .describe(\"Allow users to toggle visibility\"),\n before: z\n .string()\n .optional()\n .describe(\"Layer ID to insert this layer before\"),\n interactive: InteractiveConfigSchema.describe(\n \"Interactive event configuration\"\n ),\n legend: LegendItemSchema.optional().describe(\"Legend configuration\"),\n metadata: z.record(z.any()).optional().describe(\"Custom metadata\"),\n});\n\n/**\n * Circle layer for point data.\n *\n * @remarks\n * Renders points as circles. Supports data-driven styling via\n * MapLibre expressions for all paint properties.\n *\n * **Common Paint Properties:**\n * - `circle-radius` - Size in pixels\n * - `circle-color` - Fill color\n * - `circle-opacity` - Fill opacity (0-1)\n * - `circle-stroke-width` - Border width\n * - `circle-stroke-color` - Border color\n *\n * @example Basic Circle\n * ```yaml\n * - id: points\n * type: circle\n * source:\n * type: geojson\n * url: \"https://example.com/points.geojson\"\n * paint:\n * circle-radius: 8\n * circle-color: \"#ff0000\"\n * ```\n *\n * @example Data-Driven Radius\n * ```yaml\n * paint:\n * circle-radius:\n * - interpolate\n * - [\"linear\"]\n * - [\"get\", \"magnitude\"]\n * - 0\n * - 4\n * - 10\n * - 20\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/layers/#circle | MapLibre Circle Layer}\n */\nexport const CircleLayerSchema = BaseLayerPropertiesSchema.extend({\n type: z.literal(\"circle\").describe(\"Layer type\"),\n paint: z\n .object({\n \"circle-radius\": NumberOrExpressionSchema.optional(),\n \"circle-color\": ColorOrExpressionSchema.optional(),\n \"circle-blur\": NumberOrExpressionSchema.optional(),\n \"circle-opacity\": NumberOrExpressionSchema.optional(),\n \"circle-stroke-width\": NumberOrExpressionSchema.optional(),\n \"circle-stroke-color\": ColorOrExpressionSchema.optional(),\n \"circle-stroke-opacity\": NumberOrExpressionSchema.optional(),\n \"circle-pitch-scale\": z.enum([\"map\", \"viewport\"]).optional(),\n \"circle-pitch-alignment\": z.enum([\"map\", \"viewport\"]).optional(),\n \"circle-translate\": z.tuple([z.number(), z.number()]).optional(),\n \"circle-translate-anchor\": z.enum([\"map\", \"viewport\"]).optional(),\n })\n .passthrough()\n .optional()\n .describe(\"Circle paint properties\"),\n layout: z\n .object({})\n .passthrough()\n .optional()\n .describe(\"Circle layout properties\"),\n}).passthrough();\n\n/** Inferred type for circle layer. */\nexport type CircleLayer = z.infer<typeof CircleLayerSchema>;\n\n/**\n * Line layer for linear features.\n *\n * @remarks\n * Renders lines from LineString or Polygon geometries.\n * Supports dash patterns, gradients, and data-driven styling.\n *\n * @example Basic Line\n * ```yaml\n * - id: roads\n * type: line\n * source:\n * type: geojson\n * url: \"https://example.com/roads.geojson\"\n * paint:\n * line-color: \"#333333\"\n * line-width: 2\n * ```\n *\n * @example Dashed Line\n * ```yaml\n * paint:\n * line-color: \"#0000ff\"\n * line-width: 3\n * line-dasharray: [2, 1]\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/layers/#line | MapLibre Line Layer}\n */\nexport const LineLayerSchema = BaseLayerPropertiesSchema.extend({\n type: z.literal(\"line\").describe(\"Layer type\"),\n paint: z\n .object({\n \"line-opacity\": NumberOrExpressionSchema.optional(),\n \"line-color\": ColorOrExpressionSchema.optional(),\n \"line-width\": NumberOrExpressionSchema.optional(),\n \"line-gap-width\": NumberOrExpressionSchema.optional(),\n \"line-offset\": NumberOrExpressionSchema.optional(),\n \"line-blur\": NumberOrExpressionSchema.optional(),\n \"line-dasharray\": z.array(z.number()).optional(),\n \"line-pattern\": z.string().optional(),\n \"line-gradient\": ColorOrExpressionSchema.optional(),\n \"line-translate\": z.tuple([z.number(), z.number()]).optional(),\n \"line-translate-anchor\": z.enum([\"map\", \"viewport\"]).optional(),\n })\n .passthrough()\n .optional()\n .describe(\"Line paint properties\"),\n layout: z\n .object({\n \"line-cap\": z.enum([\"butt\", \"round\", \"square\"]).optional(),\n \"line-join\": z.enum([\"bevel\", \"round\", \"miter\"]).optional(),\n \"line-miter-limit\": z.number().optional(),\n \"line-round-limit\": z.number().optional(),\n \"line-sort-key\": NumberOrExpressionSchema.optional(),\n })\n .passthrough()\n .optional()\n .describe(\"Line layout properties\"),\n}).passthrough();\n\n/** Inferred type for line layer. */\nexport type LineLayer = z.infer<typeof LineLayerSchema>;\n\n/**\n * Fill layer for polygon data.\n *\n * @remarks\n * Renders filled polygons with optional outlines.\n *\n * @example Basic Fill\n * ```yaml\n * - id: parks\n * type: fill\n * source:\n * type: geojson\n * url: \"https://example.com/parks.geojson\"\n * paint:\n * fill-color: \"#228B22\"\n * fill-opacity: 0.5\n * fill-outline-color: \"#006400\"\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/layers/#fill | MapLibre Fill Layer}\n */\nexport const FillLayerSchema = BaseLayerPropertiesSchema.extend({\n type: z.literal(\"fill\").describe(\"Layer type\"),\n paint: z\n .object({\n \"fill-antialias\": z.boolean().optional(),\n \"fill-opacity\": NumberOrExpressionSchema.optional(),\n \"fill-color\": ColorOrExpressionSchema.optional(),\n \"fill-outline-color\": ColorOrExpressionSchema.optional(),\n \"fill-translate\": z.tuple([z.number(), z.number()]).optional(),\n \"fill-translate-anchor\": z.enum([\"map\", \"viewport\"]).optional(),\n \"fill-pattern\": z.string().optional(),\n })\n .passthrough()\n .optional()\n .describe(\"Fill paint properties\"),\n layout: z\n .object({\n \"fill-sort-key\": NumberOrExpressionSchema.optional(),\n })\n .passthrough()\n .optional()\n .describe(\"Fill layout properties\"),\n}).passthrough();\n\n/** Inferred type for fill layer. */\nexport type FillLayer = z.infer<typeof FillLayerSchema>;\n\n/**\n * Symbol layer for icons and text.\n *\n * @remarks\n * Renders icons, text labels, or both. Most complex layer type with\n * extensive styling options for typography and icon placement.\n *\n * @example Icon\n * ```yaml\n * - id: markers\n * type: symbol\n * source:\n * type: geojson\n * url: \"https://example.com/markers.geojson\"\n * layout:\n * icon-image: \"marker-15\"\n * icon-size: 1.5\n * ```\n *\n * @example Text Label\n * ```yaml\n * layout:\n * text-field: [\"get\", \"name\"]\n * text-size: 12\n * text-anchor: top\n * paint:\n * text-color: \"#000000\"\n * text-halo-color: \"#ffffff\"\n * text-halo-width: 2\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/layers/#symbol | MapLibre Symbol Layer}\n */\nexport const SymbolLayerSchema = BaseLayerPropertiesSchema.extend({\n type: z.literal(\"symbol\").describe(\"Layer type\"),\n layout: z\n .object({\n \"symbol-placement\": z.enum([\"point\", \"line\", \"line-center\"]).optional(),\n \"symbol-spacing\": z.number().optional(),\n \"symbol-avoid-edges\": z.boolean().optional(),\n \"symbol-sort-key\": NumberOrExpressionSchema.optional(),\n \"symbol-z-order\": z.enum([\"auto\", \"viewport-y\", \"source\"]).optional(),\n \"icon-allow-overlap\": z.boolean().optional(),\n \"icon-ignore-placement\": z.boolean().optional(),\n \"icon-optional\": z.boolean().optional(),\n \"icon-rotation-alignment\": z.enum([\"map\", \"viewport\", \"auto\"]).optional(),\n \"icon-size\": NumberOrExpressionSchema.optional(),\n \"icon-text-fit\": z.enum([\"none\", \"width\", \"height\", \"both\"]).optional(),\n \"icon-text-fit-padding\": z\n .tuple([z.number(), z.number(), z.number(), z.number()])\n .optional(),\n \"icon-image\": z.union([z.string(), ExpressionSchema]).optional(),\n \"icon-rotate\": NumberOrExpressionSchema.optional(),\n \"icon-padding\": z.number().optional(),\n \"icon-keep-upright\": z.boolean().optional(),\n \"icon-offset\": z.tuple([z.number(), z.number()]).optional(),\n \"icon-anchor\": z\n .enum([\n \"center\",\n \"left\",\n \"right\",\n \"top\",\n \"bottom\",\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n ])\n .optional(),\n \"icon-pitch-alignment\": z.enum([\"map\", \"viewport\", \"auto\"]).optional(),\n \"text-pitch-alignment\": z.enum([\"map\", \"viewport\", \"auto\"]).optional(),\n \"text-rotation-alignment\": z.enum([\"map\", \"viewport\", \"auto\"]).optional(),\n \"text-field\": z.union([z.string(), ExpressionSchema]).optional(),\n \"text-font\": z.array(z.string()).optional(),\n \"text-size\": NumberOrExpressionSchema.optional(),\n \"text-max-width\": NumberOrExpressionSchema.optional(),\n \"text-line-height\": z.number().optional(),\n \"text-letter-spacing\": z.number().optional(),\n \"text-justify\": z.enum([\"auto\", \"left\", \"center\", \"right\"]).optional(),\n \"text-radial-offset\": z.number().optional(),\n \"text-variable-anchor\": z\n .array(\n z.enum([\n \"center\",\n \"left\",\n \"right\",\n \"top\",\n \"bottom\",\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n ])\n )\n .optional(),\n \"text-anchor\": z\n .enum([\n \"center\",\n \"left\",\n \"right\",\n \"top\",\n \"bottom\",\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n ])\n .optional(),\n \"text-max-angle\": z.number().optional(),\n \"text-rotate\": NumberOrExpressionSchema.optional(),\n \"text-padding\": z.number().optional(),\n \"text-keep-upright\": z.boolean().optional(),\n \"text-transform\": z.enum([\"none\", \"uppercase\", \"lowercase\"]).optional(),\n \"text-offset\": z.tuple([z.number(), z.number()]).optional(),\n \"text-allow-overlap\": z.boolean().optional(),\n \"text-ignore-placement\": z.boolean().optional(),\n \"text-optional\": z.boolean().optional(),\n })\n .passthrough()\n .optional()\n .describe(\"Symbol layout properties\"),\n paint: z\n .object({\n \"icon-opacity\": NumberOrExpressionSchema.optional(),\n \"icon-color\": ColorOrExpressionSchema.optional(),\n \"icon-halo-color\": ColorOrExpressionSchema.optional(),\n \"icon-halo-width\": NumberOrExpressionSchema.optional(),\n \"icon-halo-blur\": NumberOrExpressionSchema.optional(),\n \"icon-translate\": z.tuple([z.number(), z.number()]).optional(),\n \"icon-translate-anchor\": z.enum([\"map\", \"viewport\"]).optional(),\n \"text-opacity\": NumberOrExpressionSchema.optional(),\n \"text-color\": ColorOrExpressionSchema.optional(),\n \"text-halo-color\": ColorOrExpressionSchema.optional(),\n \"text-halo-width\": NumberOrExpressionSchema.optional(),\n \"text-halo-blur\": NumberOrExpressionSchema.optional(),\n \"text-translate\": z.tuple([z.number(), z.number()]).optional(),\n \"text-translate-anchor\": z.enum([\"map\", \"viewport\"]).optional(),\n })\n .passthrough()\n .optional()\n .describe(\"Symbol paint properties\"),\n}).passthrough();\n\n/** Inferred type for symbol layer. */\nexport type SymbolLayer = z.infer<typeof SymbolLayerSchema>;\n\n/**\n * Raster layer for raster tiles or images.\n *\n * @remarks\n * Renders raster imagery with opacity and blending controls.\n *\n * @example\n * ```yaml\n * - id: satellite\n * type: raster\n * source:\n * type: raster\n * tiles: [\"https://tile.example.com/{z}/{x}/{y}.png\"]\n * paint:\n * raster-opacity: 0.8\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/layers/#raster | MapLibre Raster Layer}\n */\nexport const RasterLayerSchema = BaseLayerPropertiesSchema.extend({\n type: z.literal(\"raster\").describe(\"Layer type\"),\n paint: z\n .object({\n \"raster-opacity\": NumberOrExpressionSchema.optional(),\n \"raster-hue-rotate\": NumberOrExpressionSchema.optional(),\n \"raster-brightness-min\": NumberOrExpressionSchema.optional(),\n \"raster-brightness-max\": NumberOrExpressionSchema.optional(),\n \"raster-saturation\": NumberOrExpressionSchema.optional(),\n \"raster-contrast\": NumberOrExpressionSchema.optional(),\n \"raster-resampling\": z.enum([\"linear\", \"nearest\"]).optional(),\n \"raster-fade-duration\": z.number().optional(),\n })\n .passthrough()\n .optional()\n .describe(\"Raster paint properties\"),\n layout: z\n .object({})\n .passthrough()\n .optional()\n .describe(\"Raster layout properties\"),\n}).passthrough();\n\n/** Inferred type for raster layer. */\nexport type RasterLayer = z.infer<typeof RasterLayerSchema>;\n\n/**\n * Fill extrusion layer for 3D buildings and structures.\n *\n * @remarks\n * Renders filled polygons extruded in 3D space.\n *\n * @example 3D Buildings\n * ```yaml\n * - id: buildings\n * type: fill-extrusion\n * source:\n * type: vector\n * url: \"https://example.com/buildings.json\"\n * source-layer: buildings\n * paint:\n * fill-extrusion-color: \"#aaaaaa\"\n * fill-extrusion-height: [\"get\", \"height\"]\n * fill-extrusion-base: [\"get\", \"min_height\"]\n * fill-extrusion-opacity: 0.8\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/layers/#fill-extrusion | MapLibre Fill Extrusion Layer}\n */\nexport const FillExtrusionLayerSchema = BaseLayerPropertiesSchema.extend({\n type: z.literal(\"fill-extrusion\").describe(\"Layer type\"),\n paint: z\n .object({\n \"fill-extrusion-opacity\": NumberOrExpressionSchema.optional(),\n \"fill-extrusion-color\": ColorOrExpressionSchema.optional(),\n \"fill-extrusion-translate\": z.tuple([z.number(), z.number()]).optional(),\n \"fill-extrusion-translate-anchor\": z.enum([\"map\", \"viewport\"]).optional(),\n \"fill-extrusion-pattern\": z.string().optional(),\n \"fill-extrusion-height\": NumberOrExpressionSchema.optional(),\n \"fill-extrusion-base\": NumberOrExpressionSchema.optional(),\n \"fill-extrusion-vertical-gradient\": z.boolean().optional(),\n })\n .passthrough()\n .optional()\n .describe(\"Fill extrusion paint properties\"),\n layout: z\n .object({})\n .passthrough()\n .optional()\n .describe(\"Fill extrusion layout properties\"),\n}).passthrough();\n\n/** Inferred type for fill extrusion layer. */\nexport type FillExtrusionLayer = z.infer<typeof FillExtrusionLayerSchema>;\n\n/**\n * Heatmap layer for point density visualization.\n *\n * @remarks\n * Renders point data as a smooth heatmap with color gradients.\n *\n * @example\n * ```yaml\n * - id: earthquakes-heat\n * type: heatmap\n * source:\n * type: geojson\n * url: \"https://example.com/earthquakes.geojson\"\n * paint:\n * heatmap-intensity: 1\n * heatmap-radius: 20\n * heatmap-color:\n * - interpolate\n * - [\"linear\"]\n * - [\"heatmap-density\"]\n * - 0\n * - \"rgba(0,0,255,0)\"\n * - 0.5\n * - \"yellow\"\n * - 1\n * - \"red\"\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/layers/#heatmap | MapLibre Heatmap Layer}\n */\nexport const HeatmapLayerSchema = BaseLayerPropertiesSchema.extend({\n type: z.literal(\"heatmap\").describe(\"Layer type\"),\n paint: z\n .object({\n \"heatmap-radius\": NumberOrExpressionSchema.optional(),\n \"heatmap-weight\": NumberOrExpressionSchema.optional(),\n \"heatmap-intensity\": NumberOrExpressionSchema.optional(),\n \"heatmap-color\": ColorOrExpressionSchema.optional(),\n \"heatmap-opacity\": NumberOrExpressionSchema.optional(),\n })\n .passthrough()\n .optional()\n .describe(\"Heatmap paint properties\"),\n layout: z\n .object({})\n .passthrough()\n .optional()\n .describe(\"Heatmap layout properties\"),\n}).passthrough();\n\n/** Inferred type for heatmap layer. */\nexport type HeatmapLayer = z.infer<typeof HeatmapLayerSchema>;\n\n/**\n * Hillshade layer for terrain visualization.\n *\n * @remarks\n * Renders raster DEM data as hillshading.\n *\n * @example\n * ```yaml\n * - id: hillshade\n * type: hillshade\n * source:\n * type: raster-dem\n * url: \"https://example.com/terrain.json\"\n * paint:\n * hillshade-illumination-direction: 315\n * hillshade-exaggeration: 0.5\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/layers/#hillshade | MapLibre Hillshade Layer}\n */\nexport const HillshadeLayerSchema = BaseLayerPropertiesSchema.extend({\n type: z.literal(\"hillshade\").describe(\"Layer type\"),\n paint: z\n .object({\n \"hillshade-illumination-direction\": z.number().optional(),\n \"hillshade-illumination-anchor\": z.enum([\"map\", \"viewport\"]).optional(),\n \"hillshade-exaggeration\": NumberOrExpressionSchema.optional(),\n \"hillshade-shadow-color\": ColorOrExpressionSchema.optional(),\n \"hillshade-highlight-color\": ColorOrExpressionSchema.optional(),\n \"hillshade-accent-color\": ColorOrExpressionSchema.optional(),\n })\n .passthrough()\n .optional()\n .describe(\"Hillshade paint properties\"),\n layout: z\n .object({})\n .passthrough()\n .optional()\n .describe(\"Hillshade layout properties\"),\n}).passthrough();\n\n/** Inferred type for hillshade layer. */\nexport type HillshadeLayer = z.infer<typeof HillshadeLayerSchema>;\n\n/**\n * Background layer for solid color backgrounds.\n *\n * @remarks\n * Renders a solid color or pattern as the map background.\n * Only one background layer is typically used per style.\n *\n * @example\n * ```yaml\n * - id: background\n * type: background\n * paint:\n * background-color: \"#f0f0f0\"\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-style-spec/layers/#background | MapLibre Background Layer}\n */\nexport const BackgroundLayerSchema = z\n .object({\n id: z.string().describe(\"Unique layer identifier\"),\n type: z.literal(\"background\").describe(\"Layer type\"),\n paint: z\n .object({\n \"background-color\": ColorOrExpressionSchema.optional(),\n \"background-pattern\": z.string().optional(),\n \"background-opacity\": NumberOrExpressionSchema.optional(),\n })\n .passthrough()\n .optional()\n .describe(\"Background paint properties\"),\n layout: z\n .object({})\n .passthrough()\n .optional()\n .describe(\"Background layout properties\"),\n metadata: z.record(z.any()).optional().describe(\"Custom metadata\"),\n })\n .passthrough();\n\n/** Inferred type for background layer. */\nexport type BackgroundLayer = z.infer<typeof BackgroundLayerSchema>;\n\n/**\n * Union of all layer types.\n *\n * @remarks\n * Use the `type` field to determine which layer type is being used.\n *\n * @example\n * ```typescript\n * const layer: Layer = {\n * id: 'my-layer',\n * type: 'circle',\n * source: { type: 'geojson', url: '...' },\n * paint: { 'circle-radius': 8 }\n * };\n * ```\n */\nexport const LayerSchema = z.union([\n CircleLayerSchema,\n LineLayerSchema,\n FillLayerSchema,\n SymbolLayerSchema,\n RasterLayerSchema,\n FillExtrusionLayerSchema,\n HeatmapLayerSchema,\n HillshadeLayerSchema,\n BackgroundLayerSchema,\n]);\n\n/** Inferred type for any layer. */\nexport type Layer = z.infer<typeof LayerSchema>;\n\n/**\n * Layer reference for reusing global layer definitions.\n *\n * @remarks\n * References a layer defined in the global `layers` object using\n * JSON Pointer-like syntax: `#/layers/layerName`\n *\n * @example\n * ```yaml\n * # Global definition\n * layers:\n * bikeLayer:\n * id: bikes\n * type: line\n * # ...\n *\n * # Reference in map\n * pages:\n * - blocks:\n * - layers:\n * - $ref: \"#/layers/bikeLayer\"\n * ```\n */\nexport const LayerReferenceSchema = z\n .object({\n $ref: z\n .string()\n .describe('Reference to global layer (e.g., \"#/layers/bikeLayer\")'),\n })\n .describe(\"Layer reference\");\n\n/** Inferred type for layer reference. */\nexport type LayerReference = z.infer<typeof LayerReferenceSchema>;\n\n/**\n * Union of layer or layer reference.\n *\n * @remarks\n * Layers can be defined inline or referenced from global definitions.\n */\nexport const LayerOrReferenceSchema = z.union([\n LayerSchema,\n LayerReferenceSchema,\n]);\n\n/** Inferred type for layer or reference. */\nexport type LayerOrReference = z.infer<typeof LayerOrReferenceSchema>;\n","/**\n * @file Content schemas for maplibre-yaml\n * @module @maplibre-yaml/core/schemas/content\n *\n * @description\n * Zod schemas for non-map content blocks including text, images, iframes,\n * and other HTML elements with dynamic property interpolation.\n *\n * @example\n * ```typescript\n * import { ContentBlockSchema } from '@maplibre-yaml/core/schemas';\n * ```\n */\n\nimport { z } from \"zod\";\n\n/**\n * Valid HTML tag names for content elements.\n *\n * @remarks\n * Supports common HTML elements for rich content rendering.\n * Use semantic tags for better accessibility and SEO.\n *\n * **Heading Tags:** h1, h2, h3, h4, h5, h6\n * **Text Tags:** p, span, div, strong, em, code, pre\n * **Link Tag:** a\n * **Media Tags:** img, iframe\n * **List Tags:** ul, ol, li\n * **Other Tags:** blockquote, hr, br\n */\nexport const ValidTagNames = [\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"p\",\n \"span\",\n \"div\",\n \"a\",\n \"strong\",\n \"em\",\n \"code\",\n \"pre\",\n \"img\",\n \"iframe\",\n \"ul\",\n \"ol\",\n \"li\",\n \"blockquote\",\n \"hr\",\n \"br\",\n] as const;\n\n/**\n * Content element with styling and dynamic properties.\n *\n * @remarks\n * Defines a single element within content. Supports both static and\n * dynamic values via property interpolation.\n *\n * **Core Properties:**\n * - `str` - Static text string\n * - `property` - Feature/context property name\n * - `else` - Fallback value if property is missing\n *\n * **Styling:**\n * - `classList` - CSS class names (space-separated or array)\n * - `id` - Element ID\n * - `style` - Inline CSS styles\n *\n * **Links (a tag):**\n * - `href` - URL\n * - `target` - Link target (_blank, _self, etc.)\n *\n * **Media (img, iframe):**\n * - `src` - Source URL\n * - `alt` - Alternative text (img)\n * - `width` - Width (pixels or %)\n * - `height` - Height (pixels or %)\n *\n * @example Static Text\n * ```yaml\n * - str: \"Welcome to our site\"\n * ```\n *\n * @example Dynamic Property\n * ```yaml\n * - property: \"userName\"\n * else: \"Guest\"\n * ```\n *\n * @example Styled Element\n * ```yaml\n * - str: \"Important\"\n * classList: \"text-bold text-red\"\n * style: \"font-size: 18px;\"\n * ```\n *\n * @example Link\n * ```yaml\n * - str: \"Learn more\"\n * href: \"https://example.com\"\n * target: \"_blank\"\n * ```\n *\n * @example Image\n * ```yaml\n * - src: \"https://example.com/photo.jpg\"\n * alt: \"Photo description\"\n * width: \"100%\"\n * ```\n */\nexport const ContentElementSchema = z\n .object({\n // Content\n str: z.string().optional().describe(\"Static text string\"),\n property: z.string().optional().describe(\"Dynamic property from context\"),\n else: z.string().optional().describe(\"Fallback value if property missing\"),\n\n // Styling\n classList: z\n .union([z.string(), z.array(z.string())])\n .optional()\n .describe(\"CSS class names (space-separated string or array)\"),\n id: z.string().optional().describe(\"Element ID attribute\"),\n style: z.string().optional().describe(\"Inline CSS styles\"),\n\n // Links\n href: z.string().url().optional().describe(\"Link URL\"),\n target: z\n .string()\n .optional()\n .describe(\"Link target (_blank, _self, _parent, _top)\"),\n\n // Media\n src: z.string().url().optional().describe(\"Source URL for img or iframe\"),\n alt: z.string().optional().describe(\"Alternative text for images\"),\n width: z\n .union([z.string(), z.number()])\n .optional()\n .describe(\"Width (pixels or %)\"),\n height: z\n .union([z.string(), z.number()])\n .optional()\n .describe(\"Height (pixels or %)\"),\n })\n .passthrough()\n .describe(\"Content element with styling and properties\");\n\n/** Inferred type for content element. */\nexport type ContentElement = z.infer<typeof ContentElementSchema>;\n\n/**\n * Content item mapping tag name to element array.\n *\n * @remarks\n * Each content item is a record where the key is an HTML tag name\n * and the value is an array of content elements to render inside that tag.\n *\n * @example\n * ```yaml\n * - h1:\n * - str: \"Page Title\"\n * - p:\n * - str: \"Welcome, \"\n * - property: \"userName\"\n * else: \"Guest\"\n * ```\n */\nexport const ContentItemSchema = z\n .record(z.enum(ValidTagNames), z.array(ContentElementSchema))\n .describe(\"Content item mapping tag to elements\");\n\n/** Inferred type for content item. */\nexport type ContentItem = z.infer<typeof ContentItemSchema>;\n\n/**\n * Content block for rich text and media.\n *\n * @remarks\n * Content blocks allow you to add non-map content to your pages.\n * They render as HTML with support for dynamic property interpolation.\n *\n * **Use Cases:**\n * - Introductory text\n * - Explanatory sections\n * - Embedded images and videos\n * - Interactive elements\n * - Mixed content layouts\n *\n * **Properties are resolved from:**\n * 1. Page-level context (passed to renderer)\n * 2. Global configuration\n * 3. URL query parameters (if configured)\n *\n * @example Basic Text Content\n * ```yaml\n * type: content\n * id: intro\n * content:\n * - h1:\n * - str: \"Welcome\"\n * - p:\n * - str: \"This is a simple text block.\"\n * ```\n *\n * @example Dynamic Content\n * ```yaml\n * type: content\n * id: user-info\n * className: user-section\n * content:\n * - h2:\n * - str: \"User Profile\"\n * - p:\n * - str: \"Name: \"\n * - property: \"userName\"\n * else: \"Unknown\"\n * - p:\n * - str: \"Location: \"\n * - property: \"userCity\"\n * else: \"Not specified\"\n * ```\n *\n * @example Rich Content with Media\n * ```yaml\n * type: content\n * id: article\n * content:\n * - h1:\n * - str: \"Article Title\"\n * - img:\n * - src: \"https://example.com/header.jpg\"\n * alt: \"Header image\"\n * width: \"100%\"\n * - p:\n * - str: \"Article text goes here...\"\n * - blockquote:\n * - str: \"An inspiring quote.\"\n * - a:\n * - str: \"Read more\"\n * href: \"https://example.com/full-article\"\n * target: \"_blank\"\n * ```\n *\n * @example Styled Content\n * ```yaml\n * type: content\n * id: styled\n * className: \"card shadow\"\n * style: \"padding: 20px; background: #f5f5f5;\"\n * content:\n * - h3:\n * - str: \"Card Title\"\n * classList: \"text-primary\"\n * - p:\n * - str: \"Card content\"\n * ```\n *\n * @example List Content\n * ```yaml\n * type: content\n * id: features\n * content:\n * - h2:\n * - str: \"Features\"\n * - ul:\n * - li:\n * - str: \"Fast rendering\"\n * - li:\n * - str: \"Easy configuration\"\n * - li:\n * - str: \"Fully customizable\"\n * ```\n *\n * @example Embedded Content\n * ```yaml\n * type: content\n * id: video\n * content:\n * - h2:\n * - str: \"Tutorial Video\"\n * - iframe:\n * - src: \"https://www.youtube.com/embed/VIDEO_ID\"\n * width: \"560\"\n * height: \"315\"\n * ```\n */\nexport const ContentBlockSchema = z\n .object({\n type: z.literal(\"content\").describe(\"Block type\"),\n id: z.string().optional().describe(\"Unique block identifier\"),\n className: z\n .string()\n .optional()\n .describe(\"CSS class name for the block container\"),\n style: z\n .string()\n .optional()\n .describe(\"Inline CSS styles for the block container\"),\n content: z\n .array(ContentItemSchema)\n .describe(\"Array of content items to render\"),\n })\n .describe(\"Content block for rich text and media\");\n\n/** Inferred type for content block. */\nexport type ContentBlock = z.infer<typeof ContentBlockSchema>;\n","/**\n * @file Map block schemas for maplibre-yaml\n * @module @maplibre-yaml/core/schemas/map\n *\n * @description\n * Zod schemas for map configuration, controls, legends, and map blocks.\n *\n * @example\n * ```typescript\n * import { MapConfigSchema, MapBlockSchema } from '@maplibre-yaml/core/schemas';\n * ```\n */\n\nimport { z } from \"zod\";\nimport {\n LngLatSchema,\n LngLatBoundsSchema,\n ZoomLevelSchema,\n} from \"./base.schema\";\nimport { LayerOrReferenceSchema } from \"./layer.schema\";\n\n/**\n * Control position on the map.\n *\n * @remarks\n * Controls can be positioned in any of the four corners.\n */\nexport const ControlPositionSchema = z.enum([\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n]);\n\n/** Inferred type for control position. */\nexport type ControlPosition = z.infer<typeof ControlPositionSchema>;\n\n/**\n * Individual control configuration.\n *\n * @remarks\n * Can be a boolean (uses default position) or an object with position.\n */\nconst ControlConfigSchema = z.union([\n z.boolean(),\n z.object({\n enabled: z.boolean().describe(\"Whether control is enabled\"),\n position: ControlPositionSchema.optional().describe(\"Control position\"),\n }),\n]);\n\n/**\n * Map controls configuration.\n *\n * @remarks\n * Configure which controls are displayed and their positions.\n *\n * **Available Controls:**\n * - `navigation` - Zoom and rotation controls (default: top-right)\n * - `geolocate` - User geolocation (default: top-right)\n * - `scale` - Distance scale (default: bottom-left)\n * - `fullscreen` - Fullscreen toggle (default: top-right)\n * - `attribution` - Attribution text (default: bottom-right)\n *\n * @example Enable All Controls\n * ```yaml\n * controls:\n * navigation: true\n * geolocate: true\n * scale: true\n * fullscreen: true\n * ```\n *\n * @example Custom Positions\n * ```yaml\n * controls:\n * navigation:\n * enabled: true\n * position: top-left\n * scale:\n * enabled: true\n * position: bottom-right\n * ```\n */\nexport const ControlsConfigSchema = z\n .object({\n navigation: ControlConfigSchema.optional().describe(\n \"Navigation controls (zoom, rotation)\"\n ),\n geolocate: ControlConfigSchema.optional().describe(\"Geolocation control\"),\n scale: ControlConfigSchema.optional().describe(\"Scale control\"),\n fullscreen: ControlConfigSchema.optional().describe(\"Fullscreen control\"),\n attribution: ControlConfigSchema.optional().describe(\"Attribution control\"),\n })\n .describe(\"Map controls configuration\");\n\n/** Inferred type for controls config. */\nexport type ControlsConfig = z.infer<typeof ControlsConfigSchema>;\n\n/**\n * Legend configuration.\n *\n * @remarks\n * The legend displays layer information and can be positioned anywhere.\n * If `items` is not provided, legend items are automatically extracted\n * from layers with `legend` configuration.\n *\n * @example Automatic Legend\n * ```yaml\n * legend:\n * title: \"Map Legend\"\n * position: top-left\n * ```\n *\n * @example Custom Legend Items\n * ```yaml\n * legend:\n * title: \"Features\"\n * position: top-left\n * collapsed: false\n * items:\n * - color: \"#ff0000\"\n * label: \"High Priority\"\n * shape: circle\n * - color: \"#00ff00\"\n * label: \"Low Priority\"\n * shape: circle\n * ```\n */\nexport const LegendConfigSchema = z\n .object({\n position:\n ControlPositionSchema.default(\"top-left\").describe(\"Legend position\"),\n title: z.string().optional().describe(\"Legend title\"),\n collapsed: z.boolean().default(false).describe(\"Start collapsed\"),\n items: z\n .array(\n z.object({\n color: z.string().describe(\"Item color\"),\n label: z.string().describe(\"Item label\"),\n shape: z\n .enum([\"circle\", \"square\", \"line\", \"icon\"])\n .default(\"square\")\n .describe(\"Symbol shape\"),\n icon: z\n .string()\n .optional()\n .describe(\"Icon name/URL (for shape: icon)\"),\n })\n )\n .optional()\n .describe(\"Custom legend items (overrides layer legends)\"),\n })\n .describe(\"Legend configuration\");\n\n/** Inferred type for legend config. */\nexport type LegendConfig = z.infer<typeof LegendConfigSchema>;\n\n/**\n * Map configuration with MapLibre options.\n *\n * @remarks\n * Core map configuration including initial view, style, and interaction settings.\n * Uses `.passthrough()` to allow any MapLibre GL JS options.\n *\n * **Required:**\n * - `center` - Initial map center [lng, lat]\n * - `zoom` - Initial zoom level (0-24)\n * - `mapStyle` - MapLibre style URL or object\n *\n * **View Options:**\n * - `pitch` - Camera tilt angle (0-85)\n * - `bearing` - Camera rotation (0-360)\n * - `bounds` - Fit to bounds\n * - `minZoom`, `maxZoom` - Zoom constraints\n * - `minPitch`, `maxPitch` - Pitch constraints\n * - `maxBounds` - Geographic bounds constraint\n *\n * **Interaction:**\n * - `interactive` - Enable/disable all interactions\n * - `scrollZoom`, `boxZoom`, `dragRotate`, `dragPan` - Individual controls\n * - `keyboard`, `doubleClickZoom`, `touchZoomRotate`, `touchPitch`\n *\n * @example Basic Map\n * ```yaml\n * config:\n * center: [-74.006, 40.7128]\n * zoom: 12\n * mapStyle: \"https://demotiles.maplibre.org/style.json\"\n * ```\n *\n * @example 3D View\n * ```yaml\n * config:\n * center: [-122.4194, 37.7749]\n * zoom: 15\n * pitch: 60\n * bearing: 30\n * mapStyle: \"https://demotiles.maplibre.org/style.json\"\n * ```\n *\n * @example Constrained Map\n * ```yaml\n * config:\n * center: [-74.006, 40.7128]\n * zoom: 12\n * minZoom: 8\n * maxZoom: 18\n * maxBounds: [-74.3, 40.5, -73.7, 40.9]\n * mapStyle: \"https://demotiles.maplibre.org/style.json\"\n * ```\n *\n * @example Non-Interactive Map\n * ```yaml\n * config:\n * center: [-74.006, 40.7128]\n * zoom: 12\n * interactive: false\n * mapStyle: \"https://demotiles.maplibre.org/style.json\"\n * ```\n *\n * @see {@link https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/MapOptions/ | MapLibre Map Options}\n */\nexport const MapConfigSchema = z\n .object({\n // Required\n center: LngLatSchema.describe(\"Initial map center [longitude, latitude]\"),\n zoom: ZoomLevelSchema.describe(\"Initial zoom level (0-24)\"),\n mapStyle: z\n .union([z.string().url(), z.any()])\n .describe(\"MapLibre style URL or style object\"),\n\n // View\n pitch: z\n .number()\n .min(0)\n .max(85)\n .default(0)\n .describe(\"Camera pitch angle in degrees (0-85)\"),\n bearing: z\n .number()\n .min(-180)\n .max(180)\n .default(0)\n .describe(\"Camera bearing (rotation) in degrees (-180 to 180)\"),\n bounds: z\n .union([LngLatBoundsSchema, z.array(z.number())])\n .optional()\n .describe(\"Fit map to bounds\"),\n\n // Constraints\n minZoom: ZoomLevelSchema.optional().describe(\"Minimum zoom level\"),\n maxZoom: ZoomLevelSchema.optional().describe(\"Maximum zoom level\"),\n minPitch: z.number().min(0).max(85).optional().describe(\"Minimum pitch\"),\n maxPitch: z.number().min(0).max(85).optional().describe(\"Maximum pitch\"),\n maxBounds: LngLatBoundsSchema.optional().describe(\n \"Maximum geographic bounds\"\n ),\n\n // Interaction\n interactive: z.boolean().default(true).describe(\"Enable map interaction\"),\n scrollZoom: z.boolean().optional().describe(\"Enable scroll to zoom\"),\n boxZoom: z.boolean().optional().describe(\"Enable box zoom (shift+drag)\"),\n dragRotate: z.boolean().optional().describe(\"Enable drag to rotate\"),\n dragPan: z.boolean().optional().describe(\"Enable drag to pan\"),\n keyboard: z.boolean().optional().describe(\"Enable keyboard shortcuts\"),\n doubleClickZoom: z\n .boolean()\n .optional()\n .describe(\"Enable double-click zoom\"),\n touchZoomRotate: z\n .boolean()\n .optional()\n .describe(\"Enable touch zoom/rotate\"),\n touchPitch: z.boolean().optional().describe(\"Enable touch pitch\"),\n\n // Display\n hash: z.boolean().optional().describe(\"Sync map state with URL hash\"),\n attributionControl: z\n .boolean()\n .optional()\n .describe(\"Show attribution control\"),\n logoPosition: ControlPositionSchema.optional().describe(\n \"MapLibre logo position\"\n ),\n fadeDuration: z\n .number()\n .optional()\n .describe(\"Fade duration in milliseconds\"),\n crossSourceCollisions: z\n .boolean()\n .optional()\n .describe(\"Check for cross-source collisions\"),\n\n // Rendering\n antialias: z.boolean().optional().describe(\"Enable antialiasing\"),\n refreshExpiredTiles: z\n .boolean()\n .optional()\n .describe(\"Refresh expired tiles\"),\n renderWorldCopies: z\n .boolean()\n .optional()\n .describe(\"Render multiple world copies\"),\n locale: z.record(z.string()).optional().describe(\"Localization strings\"),\n\n // Performance\n maxTileCacheSize: z.number().optional().describe(\"Maximum tiles to cache\"),\n localIdeographFontFamily: z\n .string()\n .optional()\n .describe(\"Font for CJK characters\"),\n trackResize: z.boolean().optional().describe(\"Track container resize\"),\n preserveDrawingBuffer: z\n .boolean()\n .optional()\n .describe(\"Preserve drawing buffer\"),\n failIfMajorPerformanceCaveat: z\n .boolean()\n .optional()\n .describe(\"Fail if major performance caveat\"),\n })\n .passthrough()\n .describe(\"Map configuration with MapLibre options\");\n\n/** Inferred type for map config. */\nexport type MapConfig = z.infer<typeof MapConfigSchema>;\n\n/**\n * Standard map block.\n *\n * @remarks\n * Creates a map within a page layout. Can be sized using CSS via\n * `className` and `style` properties.\n *\n * @example Basic Map Block\n * ```yaml\n * - type: map\n * id: main-map\n * config:\n * center: [-74.006, 40.7128]\n * zoom: 12\n * mapStyle: \"https://demotiles.maplibre.org/style.json\"\n * layers:\n * - id: points\n * type: circle\n * source:\n * type: geojson\n * url: \"https://example.com/points.geojson\"\n * paint:\n * circle-radius: 8\n * circle-color: \"#ff0000\"\n * ```\n *\n * @example Map with Controls and Legend\n * ```yaml\n * - type: map\n * id: interactive-map\n * config:\n * center: [-74.006, 40.7128]\n * zoom: 12\n * mapStyle: \"https://demotiles.maplibre.org/style.json\"\n * layers:\n * - $ref: \"#/layers/bikeLayer\"\n * - $ref: \"#/layers/parkLayer\"\n * controls:\n * navigation: true\n * scale: true\n * legend:\n * title: \"Map Features\"\n * position: top-left\n * ```\n *\n * @example Sized Map\n * ```yaml\n * - type: map\n * id: small-map\n * className: \"map-container\"\n * style: \"height: 400px; width: 100%;\"\n * config:\n * center: [0, 0]\n * zoom: 2\n * mapStyle: \"https://demotiles.maplibre.org/style.json\"\n * ```\n */\nexport const MapBlockSchema: z.ZodObject<any> = z\n .object({\n type: z.literal(\"map\").describe(\"Block type\"),\n id: z.string().describe(\"Unique block identifier\"),\n className: z.string().optional().describe(\"CSS class name for container\"),\n style: z.string().optional().describe(\"Inline CSS styles for container\"),\n config: MapConfigSchema.describe(\"Map configuration\"),\n layers: z.array(LayerOrReferenceSchema).default([]).describe(\"Map layers\"),\n controls: ControlsConfigSchema.optional().describe(\"Map controls\"),\n legend: LegendConfigSchema.optional().describe(\"Legend configuration\"),\n })\n .describe(\"Standard map block\");\n\n/** Inferred type for map block. */\nexport type MapBlock = z.infer<typeof MapBlockSchema>;\n\n/**\n * Full-page map block.\n *\n * @remarks\n * Creates a map that fills the entire viewport. Automatically handles\n * viewport sizing and positioning. Ideal for map-focused pages.\n *\n * @example Full-Page Map\n * ```yaml\n * - type: map-fullpage\n * id: fullpage-map\n * config:\n * center: [-122.4194, 37.7749]\n * zoom: 13\n * pitch: 45\n * mapStyle: \"https://demotiles.maplibre.org/style.json\"\n * layers:\n * - id: buildings\n * type: fill-extrusion\n * source:\n * type: vector\n * url: \"https://example.com/buildings.json\"\n * source-layer: buildings\n * paint:\n * fill-extrusion-color: \"#aaa\"\n * fill-extrusion-height: [\"get\", \"height\"]\n * controls:\n * navigation: true\n * fullscreen: true\n * ```\n */\nexport const MapFullPageBlockSchema: z.ZodObject<any> = z\n .object({\n type: z.literal(\"map-fullpage\").describe(\"Block type\"),\n id: z.string().describe(\"Unique block identifier\"),\n className: z.string().optional().describe(\"CSS class name for container\"),\n style: z.string().optional().describe(\"Inline CSS styles for container\"),\n config: MapConfigSchema.describe(\"Map configuration\"),\n layers: z.array(LayerOrReferenceSchema).default([]).describe(\"Map layers\"),\n controls: ControlsConfigSchema.optional().describe(\"Map controls\"),\n legend: LegendConfigSchema.optional().describe(\"Legend configuration\"),\n })\n .describe(\"Full-page map block\");\n\n/** Inferred type for full-page map block. */\nexport type MapFullPageBlock = z.infer<typeof MapFullPageBlockSchema>;\n","/**\n * @file Scrollytelling schemas for maplibre-yaml\n * @module @maplibre-yaml/core/schemas/scrollytelling\n *\n * @description\n * Zod schemas for narrative scrollytelling maps with chapters, animations,\n * and layer transitions.\n *\n * @example\n * ```typescript\n * import { ScrollytellingBlockSchema, ChapterSchema } from '@maplibre-yaml/core/schemas';\n * ```\n */\n\nimport { z } from \"zod\";\nimport { LngLatSchema, ExpressionSchema } from \"./base.schema\";\nimport { MapConfigSchema } from \"./map.schema\";\nimport { LayerOrReferenceSchema } from \"./layer.schema\";\n\n/**\n * Chapter action for map state changes.\n *\n * @remarks\n * Actions are triggered when entering or exiting a chapter.\n * They can modify layer properties, filters, or trigger animations.\n *\n * **Action Types:**\n * - `setFilter` - Update layer filter\n * - `setPaintProperty` - Update layer paint property\n * - `setLayoutProperty` - Update layer layout property\n * - `flyTo` - Fly to location (handled by chapter config)\n * - `easeTo` - Ease to location (handled by chapter config)\n * - `fitBounds` - Fit to bounds\n * - `custom` - Custom action (handled by application)\n *\n * @example Set Filter\n * ```yaml\n * onChapterEnter:\n * - action: setFilter\n * layer: earthquakes\n * filter: [\">=\", [\"get\", \"magnitude\"], 5]\n * ```\n *\n * @example Set Paint Property\n * ```yaml\n * onChapterEnter:\n * - action: setPaintProperty\n * layer: buildings\n * property: fill-extrusion-height\n * value: [\"get\", \"height\"]\n * ```\n *\n * @example Fit Bounds\n * ```yaml\n * onChapterEnter:\n * - action: fitBounds\n * bounds: [-74.3, 40.5, -73.7, 40.9]\n * options:\n * padding: 50\n * duration: 1000\n * ```\n */\nexport const ChapterActionSchema = z\n .object({\n action: z\n .enum([\n \"setFilter\",\n \"setPaintProperty\",\n \"setLayoutProperty\",\n \"flyTo\",\n \"easeTo\",\n \"fitBounds\",\n \"custom\",\n ])\n .describe(\"Action type\"),\n layer: z.string().optional().describe(\"Target layer ID\"),\n property: z\n .string()\n .optional()\n .describe(\"Property name (for setPaintProperty/setLayoutProperty)\"),\n value: z.any().optional().describe(\"Property value\"),\n filter: ExpressionSchema.nullable()\n .optional()\n .describe(\"Filter expression (for setFilter, null to clear)\"),\n bounds: z\n .array(z.number())\n .optional()\n .describe(\"Bounds array (for fitBounds)\"),\n options: z.record(z.any()).optional().describe(\"Additional options\"),\n })\n .describe(\"Chapter action for map state changes\");\n\n/** Inferred type for chapter action. */\nexport type ChapterAction = z.infer<typeof ChapterActionSchema>;\n\n/**\n * Chapter layer visibility configuration.\n *\n * @remarks\n * Controls which layers are visible during this chapter.\n *\n * @example\n * ```yaml\n * layers:\n * show:\n * - earthquakes\n * - fault-lines\n * hide:\n * - buildings\n * ```\n */\nexport const ChapterLayersSchema = z\n .object({\n show: z.array(z.string()).default([]).describe(\"Layer IDs to show\"),\n hide: z.array(z.string()).default([]).describe(\"Layer IDs to hide\"),\n })\n .describe(\"Chapter layer visibility configuration\");\n\n/** Inferred type for chapter layers. */\nexport type ChapterLayers = z.infer<typeof ChapterLayersSchema>;\n\n/**\n * Scrollytelling chapter.\n *\n * @remarks\n * A chapter represents one section of the scrollytelling narrative.\n * As the user scrolls, the map transitions between chapters with\n * camera animations and layer changes.\n *\n * **Required:**\n * - `id` - Unique chapter identifier\n * - `title` - Chapter title\n * - `center` - Map center for this chapter\n * - `zoom` - Zoom level for this chapter\n *\n * **Content:**\n * - `description` - HTML description (supports markdown)\n * - `image` - Hero image URL\n * - `video` - Video URL\n *\n * **Camera:**\n * - `pitch` - Camera tilt (0-85)\n * - `bearing` - Camera rotation (-180 to 180)\n * - `animation` - Animation type (flyTo, easeTo, jumpTo)\n * - `speed`, `curve` - Animation parameters\n *\n * **Layout:**\n * - `alignment` - Content position (left, right, center, full)\n * - `hidden` - Hide chapter content (map-only)\n *\n * **Interactivity:**\n * - `layers` - Show/hide layers\n * - `onChapterEnter`, `onChapterExit` - Actions\n *\n * @example Basic Chapter\n * ```yaml\n * - id: intro\n * title: \"Welcome\"\n * description: \"This is the introduction.\"\n * center: [-74.006, 40.7128]\n * zoom: 12\n * ```\n *\n * @example Chapter with 3D View\n * ```yaml\n * - id: downtown\n * title: \"Downtown\"\n * description: \"Explore the city center in 3D.\"\n * center: [-74.006, 40.7128]\n * zoom: 16\n * pitch: 60\n * bearing: 30\n * ```\n *\n * @example Chapter with Media\n * ```yaml\n * - id: overview\n * title: \"City Overview\"\n * description: \"A bird's eye view of the city.\"\n * image: \"https://example.com/overview.jpg\"\n * center: [-74.006, 40.7128]\n * zoom: 10\n * ```\n *\n * @example Chapter with Layer Control\n * ```yaml\n * - id: earthquakes\n * title: \"Recent Earthquakes\"\n * description: \"Major earthquakes in the last month.\"\n * center: [-120, 35]\n * zoom: 6\n * layers:\n * show:\n * - earthquakes\n * - fault-lines\n * hide:\n * - cities\n * ```\n *\n * @example Chapter with Actions\n * ```yaml\n * - id: filtered\n * title: \"High Magnitude Events\"\n * center: [-120, 35]\n * zoom: 6\n * onChapterEnter:\n * - action: setFilter\n * layer: earthquakes\n * filter: [\">=\", [\"get\", \"magnitude\"], 5]\n * onChapterExit:\n * - action: setFilter\n * layer: earthquakes\n * filter: null\n * ```\n *\n * @example Full-Width Chapter\n * ```yaml\n * - id: fullwidth\n * title: \"Immersive View\"\n * alignment: full\n * center: [-74.006, 40.7128]\n * zoom: 14\n * pitch: 45\n * ```\n */\nexport const ChapterSchema = z\n .object({\n // Required\n id: z.string().describe(\"Unique chapter identifier\"),\n title: z.string().describe(\"Chapter title\"),\n center: LngLatSchema.describe(\"Map center [longitude, latitude]\"),\n zoom: z.number().describe(\"Zoom level\"),\n\n // Content\n description: z\n .string()\n .optional()\n .describe(\"Chapter description (HTML/markdown supported)\"),\n image: z.string().url().optional().describe(\"Hero image URL\"),\n video: z.string().url().optional().describe(\"Video URL\"),\n\n // Camera\n pitch: z\n .number()\n .min(0)\n .max(85)\n .default(0)\n .describe(\"Camera pitch angle (0-85)\"),\n bearing: z\n .number()\n .min(-180)\n .max(180)\n .default(0)\n .describe(\"Camera bearing (-180 to 180)\"),\n speed: z\n .number()\n .min(0)\n .max(2)\n .default(0.6)\n .describe(\"Animation speed multiplier (0-2)\"),\n curve: z\n .number()\n .min(0)\n .max(2)\n .default(1)\n .describe(\"Animation curve (0=linear, 1=default, 2=steep)\"),\n animation: z\n .enum([\"flyTo\", \"easeTo\", \"jumpTo\"])\n .default(\"flyTo\")\n .describe(\"Animation type\"),\n\n // Rotation animation\n rotateAnimation: z\n .boolean()\n .optional()\n .describe(\"Enable continuous rotation animation\"),\n spinGlobe: z\n .boolean()\n .optional()\n .describe(\"Spin globe animation (for low zoom levels)\"),\n\n // Layout\n alignment: z\n .enum([\"left\", \"right\", \"center\", \"full\"])\n .default(\"center\")\n .describe(\"Content alignment\"),\n hidden: z\n .boolean()\n .default(false)\n .describe(\"Hide chapter content (map-only)\"),\n\n // Layers\n layers: ChapterLayersSchema.optional().describe(\"Layer visibility control\"),\n\n // Actions\n onChapterEnter: z\n .array(ChapterActionSchema)\n .default([])\n .describe(\"Actions when entering chapter\"),\n onChapterExit: z\n .array(ChapterActionSchema)\n .default([])\n .describe(\"Actions when exiting chapter\"),\n\n // Custom\n callback: z.string().optional().describe(\"Custom callback function name\"),\n })\n .describe(\"Scrollytelling chapter\");\n\n/** Inferred type for chapter. */\nexport type Chapter = z.infer<typeof ChapterSchema>;\n\n/**\n * Scrollytelling block for narrative map stories.\n *\n * @remarks\n * Creates an immersive scrollytelling experience where the map\n * transitions between chapters as the user scrolls through content.\n *\n * **Features:**\n * - Smooth camera transitions\n * - Layer show/hide animations\n * - Dynamic property updates\n * - Chapter-based narrative structure\n * - Customizable themes and markers\n *\n * **Structure:**\n * 1. Base map configuration (persistent)\n * 2. Persistent layers (visible throughout)\n * 3. Chapters (individual story sections)\n * 4. Optional footer\n *\n * @example Basic Scrollytelling\n * ```yaml\n * - type: scrollytelling\n * id: story\n * config:\n * center: [-74.006, 40.7128]\n * zoom: 12\n * mapStyle: \"https://demotiles.maplibre.org/style.json\"\n * chapters:\n * - id: intro\n * title: \"Introduction\"\n * description: \"Welcome to our story.\"\n * center: [-74.006, 40.7128]\n * zoom: 12\n * - id: detail\n * title: \"A Closer Look\"\n * description: \"Let's zoom in.\"\n * center: [-74.006, 40.7128]\n * zoom: 16\n * ```\n *\n * @example Themed Scrollytelling\n * ```yaml\n * - type: scrollytelling\n * id: dark-story\n * theme: dark\n * showMarkers: true\n * markerColor: \"#ff0000\"\n * config:\n * center: [0, 0]\n * zoom: 2\n * mapStyle: \"https://demotiles.maplibre.org/style.json\"\n * chapters:\n * - id: chapter1\n * title: \"Chapter 1\"\n * center: [0, 0]\n * zoom: 3\n * ```\n *\n * @example With Persistent Layers\n * ```yaml\n * - type: scrollytelling\n * id: earthquake-story\n * config:\n * center: [-120, 35]\n * zoom: 5\n * mapStyle: \"https://demotiles.maplibre.org/style.json\"\n * layers:\n * - id: base-layer\n * type: circle\n * source:\n * type: geojson\n * url: \"https://example.com/data.geojson\"\n * paint:\n * circle-radius: 6\n * circle-color: \"#888888\"\n * chapters:\n * - id: overview\n * title: \"Overview\"\n * center: [-120, 35]\n * zoom: 5\n * - id: detail\n * title: \"Major Event\"\n * center: [-118, 34]\n * zoom: 10\n * layers:\n * show:\n * - base-layer\n * ```\n *\n * @example With Footer\n * ```yaml\n * - type: scrollytelling\n * id: story\n * config:\n * center: [0, 0]\n * zoom: 2\n * mapStyle: \"https://demotiles.maplibre.org/style.json\"\n * chapters:\n * - id: chapter1\n * title: \"Chapter 1\"\n * center: [0, 0]\n * zoom: 3\n * footer: |\n * <p>Data sources: ...</p>\n * <p>Created with maplibre-yaml</p>\n * ```\n */\nexport const ScrollytellingBlockSchema: z.ZodObject<any> = z\n .object({\n type: z.literal(\"scrollytelling\").describe(\"Block type\"),\n id: z.string().describe(\"Unique block identifier\"),\n className: z.string().optional().describe(\"CSS class name for container\"),\n style: z.string().optional().describe(\"Inline CSS styles for container\"),\n\n // Base config\n config: MapConfigSchema.describe(\"Base map configuration\"),\n\n // Theme\n theme: z.enum([\"light\", \"dark\"]).default(\"light\").describe(\"Visual theme\"),\n\n // Markers\n showMarkers: z\n .boolean()\n .default(false)\n .describe(\"Show chapter markers on map\"),\n markerColor: z.string().default(\"#3FB1CE\").describe(\"Chapter marker color\"),\n\n // Layers (persistent across all chapters)\n layers: z\n .array(LayerOrReferenceSchema)\n .default([])\n .describe(\"Persistent layers (visible throughout story)\"),\n\n // Chapters\n chapters: z\n .array(ChapterSchema)\n .min(1, \"At least one chapter is required for scrollytelling\")\n .describe(\"Story chapters\"),\n\n // Footer\n footer: z.string().optional().describe(\"Footer content (HTML)\"),\n })\n .describe(\"Scrollytelling block for narrative map stories\");\n\n/** Inferred type for scrollytelling block. */\nexport type ScrollytellingBlock = z.infer<typeof ScrollytellingBlockSchema>;\n","/**\n * @file Page and root configuration schemas for maplibre-yaml\n * @module @maplibre-yaml/core/schemas/page\n *\n * @description\n * Zod schemas for pages, global configuration, and the root schema.\n * Includes recursive MixedBlock for complex layouts.\n *\n * @example\n * ```typescript\n * import { RootSchema, PageSchema } from '@maplibre-yaml/core/schemas';\n * ```\n */\n\nimport { z } from \"zod\";\nimport { ContentBlockSchema } from \"./content.schema\";\nimport { MapBlockSchema, MapFullPageBlockSchema } from \"./map.schema\";\nimport { ScrollytellingBlockSchema } from \"./scrollytelling.schema\";\nimport { LayerSchema } from \"./layer.schema\";\nimport { LayerSourceSchema } from \"./source.schema\";\n/**\n * Mixed block for combining multiple block types.\n *\n * @remarks\n * MixedBlock allows you to create complex layouts by combining\n * content, map, and scrollytelling blocks. Uses z.lazy() for recursion.\n *\n * **Layout Options:**\n * - `row` - Horizontal layout (default)\n * - `column` - Vertical layout\n * - `grid` - CSS Grid layout\n *\n * @example Row Layout\n * ```yaml\n * - type: mixed\n * layout: row\n * blocks:\n * - type: content\n * content:\n * - h2: [{ str: \"Left Column\" }]\n * - type: map\n * id: side-map\n * config:\n * center: [0, 0]\n * zoom: 2\n * mapStyle: \"...\"\n * ```\n *\n * @example Grid Layout\n * ```yaml\n * - type: mixed\n * layout: grid\n * style: \"grid-template-columns: repeat(2, 1fr); gap: 20px;\"\n * blocks:\n * - type: content\n * content: [...]\n * - type: content\n * content: [...]\n * - type: map\n * id: map1\n * config: {...}\n * - type: map\n * id: map2\n * config: {...}\n * ```\n *\n * @example Nested Mixed Blocks\n * ```yaml\n * - type: mixed\n * layout: column\n * blocks:\n * - type: content\n * content: [...]\n * - type: mixed\n * layout: row\n * blocks:\n * - type: map\n * id: left-map\n * config: {...}\n * - type: map\n * id: right-map\n * config: {...}\n * ```\n */\nexport const MixedBlockSchema: z.ZodType<any> = z.lazy(() =>\n z\n .object({\n type: z.literal(\"mixed\").describe(\"Block type\"),\n id: z.string().optional().describe(\"Unique block identifier\"),\n className: z.string().optional().describe(\"CSS class name for container\"),\n style: z.string().optional().describe(\"Inline CSS styles for container\"),\n layout: z\n .enum([\"row\", \"column\", \"grid\"])\n .default(\"row\")\n .describe(\"Layout direction\"),\n gap: z\n .string()\n .optional()\n .describe(\"Gap between blocks (CSS gap property)\"),\n blocks: z.array(BlockSchema).describe(\"Child blocks\"),\n })\n .describe(\"Mixed block for combining multiple block types\")\n);\n\n/** Inferred type for mixed block. */\nexport type MixedBlock = {\n type: \"mixed\";\n id?: string;\n className?: string;\n style?: string;\n layout?: \"row\" | \"column\" | \"grid\";\n gap?: string;\n blocks: Block[];\n};\n\n/**\n * Union of all block types.\n *\n * @remarks\n * Blocks are the building blocks of pages. Each page contains an\n * array of blocks that are rendered in order.\n *\n * **Block Types:**\n * - `content` - Rich text and media\n * - `map` - Standard map\n * - `map-fullpage` - Full viewport map\n * - `scrollytelling` - Narrative map story\n * - `mixed` - Layout container for other blocks\n */\nexport const BlockSchema: z.ZodType<any> = z.union([\n ContentBlockSchema,\n MapBlockSchema,\n MapFullPageBlockSchema,\n ScrollytellingBlockSchema,\n MixedBlockSchema,\n]);\n\n/** Inferred type for any block. */\nexport type Block = z.infer<typeof BlockSchema>;\n\n/**\n * Page configuration.\n *\n * @remarks\n * A page represents a single route/URL in your application.\n * Pages contain blocks that define the content and maps.\n *\n * **Required:**\n * - `path` - URL path (e.g., \"/\", \"/about\", \"/map\")\n * - `title` - Page title (used for browser tab and SEO)\n * - `blocks` - Array of content/map blocks\n *\n * **Optional:**\n * - `description` - Meta description for SEO\n *\n * @example Home Page\n * ```yaml\n * - path: \"/\"\n * title: \"Home\"\n * description: \"Welcome to our mapping application\"\n * blocks:\n * - type: content\n * content:\n * - h1: [{ str: \"Welcome\" }]\n * - type: map\n * id: home-map\n * config:\n * center: [0, 0]\n * zoom: 2\n * mapStyle: \"...\"\n * ```\n *\n * @example Story Page\n * ```yaml\n * - path: \"/story\"\n * title: \"Our Story\"\n * description: \"An interactive map story\"\n * blocks:\n * - type: scrollytelling\n * id: main-story\n * config: {...}\n * chapters: [...]\n * ```\n *\n * @example Complex Layout\n * ```yaml\n * - path: \"/dashboard\"\n * title: \"Dashboard\"\n * blocks:\n * - type: content\n * content:\n * - h1: [{ str: \"Dashboard\" }]\n * - type: mixed\n * layout: row\n * blocks:\n * - type: map\n * id: map1\n * config: {...}\n * - type: map\n * id: map2\n * config: {...}\n * ```\n */\nexport const PageSchema = z\n .object({\n path: z.string().describe('URL path (e.g., \"/\", \"/about\")'),\n title: z.string().describe(\"Page title\"),\n description: z.string().optional().describe(\"Page description for SEO\"),\n blocks: z.array(BlockSchema).describe(\"Page content blocks\"),\n })\n .describe(\"Page configuration\");\n\n/** Inferred type for page. */\nexport type Page = z.infer<typeof PageSchema>;\n\n/**\n * Global configuration.\n *\n * @remarks\n * Global settings that apply across all pages.\n *\n * **General:**\n * - `title` - Application title\n * - `description` - Application description\n * - `defaultMapStyle` - Default map style for all maps\n * - `theme` - Default theme (light/dark)\n *\n * **Data Fetching:**\n * - `defaultStrategy` - Default fetch strategy (runtime, build, hybrid)\n * - `timeout` - Default fetch timeout\n * - `retryAttempts` - Default retry attempts\n *\n * @example Basic Config\n * ```yaml\n * config:\n * title: \"My Map App\"\n * description: \"Interactive maps and stories\"\n * defaultMapStyle: \"https://demotiles.maplibre.org/style.json\"\n * ```\n *\n * @example With Data Fetching\n * ```yaml\n * config:\n * title: \"My Map App\"\n * defaultMapStyle: \"https://demotiles.maplibre.org/style.json\"\n * theme: dark\n * dataFetching:\n * defaultStrategy: build\n * timeout: 15000\n * retryAttempts: 5\n * ```\n */\nexport const GlobalConfigSchema = z\n .object({\n title: z.string().optional().describe(\"Application title\"),\n description: z.string().optional().describe(\"Application description\"),\n defaultMapStyle: z\n .string()\n .url()\n .optional()\n .describe(\"Default map style URL\"),\n theme: z.enum([\"light\", \"dark\"]).default(\"light\").describe(\"Default theme\"),\n dataFetching: z\n .object({\n defaultStrategy: z\n .enum([\"runtime\", \"build\", \"hybrid\"])\n .default(\"runtime\")\n .describe(\"Default fetch strategy\"),\n timeout: z\n .number()\n .min(1000)\n .default(30000)\n .describe(\"Default timeout in milliseconds\"),\n retryAttempts: z\n .number()\n .int()\n .min(0)\n .default(3)\n .describe(\"Default retry attempts\"),\n })\n .optional()\n .describe(\"Data fetching configuration\"),\n })\n .describe(\"Global configuration\");\n\n/** Inferred type for global config. */\nexport type GlobalConfig = z.infer<typeof GlobalConfigSchema>;\n\n/**\n * Root configuration schema.\n *\n * @remarks\n * The root schema represents the entire maplibre-yaml configuration.\n * This is the top-level structure for YAML files.\n *\n * **Structure:**\n * 1. `config` - Global settings (optional)\n * 2. `layers` - Named layer definitions for reuse (optional)\n * 3. `sources` - Named source definitions for reuse (optional)\n * 4. `pages` - Page definitions (required, minimum 1)\n *\n * **Global Layers and Sources:**\n * Define layers and sources once, reference them anywhere using `$ref`.\n *\n * @example Minimal Configuration\n * ```yaml\n * pages:\n * - path: \"/\"\n * title: \"Home\"\n * blocks:\n * - type: map\n * id: main-map\n * config:\n * center: [0, 0]\n * zoom: 2\n * mapStyle: \"https://demotiles.maplibre.org/style.json\"\n * ```\n *\n * @example With Global Config\n * ```yaml\n * config:\n * title: \"My App\"\n * defaultMapStyle: \"https://demotiles.maplibre.org/style.json\"\n *\n * pages:\n * - path: \"/\"\n * title: \"Home\"\n * blocks:\n * - type: map\n * id: main-map\n * config:\n * center: [0, 0]\n * zoom: 2\n * ```\n *\n * @example With Global Layers\n * ```yaml\n * config:\n * defaultMapStyle: \"https://demotiles.maplibre.org/style.json\"\n *\n * layers:\n * bikeLayer:\n * id: bikes\n * type: line\n * source:\n * type: geojson\n * url: \"https://example.com/bikes.geojson\"\n * paint:\n * line-color: \"#00ff00\"\n * line-width: 2\n *\n * parkLayer:\n * id: parks\n * type: fill\n * source:\n * type: geojson\n * url: \"https://example.com/parks.geojson\"\n * paint:\n * fill-color: \"#228B22\"\n * fill-opacity: 0.5\n *\n * pages:\n * - path: \"/\"\n * title: \"Home\"\n * blocks:\n * - type: map\n * id: main-map\n * config:\n * center: [-74.006, 40.7128]\n * zoom: 12\n * layers:\n * - $ref: \"#/layers/bikeLayer\"\n * - $ref: \"#/layers/parkLayer\"\n * ```\n *\n * @example With Global Sources\n * ```yaml\n * sources:\n * earthquakeSource:\n * type: geojson\n * url: \"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson\"\n * refreshInterval: 60000\n *\n * layers:\n * earthquakes:\n * id: earthquakes\n * type: circle\n * source: earthquakeSource\n * paint:\n * circle-radius: 8\n * circle-color: \"#ff0000\"\n *\n * pages:\n * - path: \"/\"\n * title: \"Earthquakes\"\n * blocks:\n * - type: map\n * id: quake-map\n * config:\n * center: [0, 0]\n * zoom: 2\n * mapStyle: \"...\"\n * layers:\n * - $ref: \"#/layers/earthquakes\"\n * ```\n *\n * @example Multi-Page Application\n * ```yaml\n * config:\n * title: \"Multi-Page Map App\"\n * defaultMapStyle: \"https://demotiles.maplibre.org/style.json\"\n *\n * pages:\n * - path: \"/\"\n * title: \"Home\"\n * blocks:\n * - type: content\n * content:\n * - h1: [{ str: \"Welcome\" }]\n *\n * - path: \"/map\"\n * title: \"Interactive Map\"\n * blocks:\n * - type: map\n * id: main-map\n * config:\n * center: [0, 0]\n * zoom: 2\n *\n * - path: \"/story\"\n * title: \"Our Story\"\n * blocks:\n * - type: scrollytelling\n * id: story\n * config:\n * center: [0, 0]\n * zoom: 2\n * chapters:\n * - id: intro\n * title: \"Introduction\"\n * center: [0, 0]\n * zoom: 3\n * ```\n */\nexport const RootSchema: z.ZodType<any> = z\n .object({\n config: GlobalConfigSchema.optional().describe(\"Global configuration\"),\n layers: z\n .record(LayerSchema)\n .optional()\n .describe(\"Named layer definitions for reuse\"),\n sources: z\n .record(LayerSourceSchema)\n .optional()\n .describe(\"Named source definitions for reuse\"),\n pages: z\n .array(PageSchema)\n .min(1, \"At least one page is required\")\n .describe(\"Page definitions\"),\n })\n .describe(\"Root configuration schema\");\n\n/** Inferred type for root configuration. */\nexport type RootConfig = z.infer<typeof RootSchema>;\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@maplibre-yaml/core",
|
|
3
|
+
"version": "0.1.0-alpha.0",
|
|
4
|
+
"description": "Core library for declarative MapLibre maps with YAML",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./schemas": {
|
|
15
|
+
"types": "./dist/schemas/index.d.ts",
|
|
16
|
+
"import": "./dist/schemas/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./components": {
|
|
19
|
+
"types": "./dist/components/index.d.ts",
|
|
20
|
+
"import": "./dist/components/index.js"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"README.md"
|
|
26
|
+
],
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"maplibre-gl": "^4.1.0",
|
|
29
|
+
"yaml": "^2.4.0",
|
|
30
|
+
"zod": "^3.23.0"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/geojson": "^7946.0.14",
|
|
34
|
+
"@types/node": "^20.0.0",
|
|
35
|
+
"@vitest/coverage-v8": "^1.4.0",
|
|
36
|
+
"jsdom": "^24.0.0",
|
|
37
|
+
"tsup": "^8.0.0",
|
|
38
|
+
"typescript": "^5.4.0",
|
|
39
|
+
"vitest": "^1.4.0"
|
|
40
|
+
},
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"maplibre-gl": "^3.0.0 || ^4.0.0"
|
|
43
|
+
},
|
|
44
|
+
"peerDependenciesMeta": {
|
|
45
|
+
"maplibre-gl": {
|
|
46
|
+
"optional": false
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"keywords": [
|
|
50
|
+
"maplibre",
|
|
51
|
+
"maps",
|
|
52
|
+
"yaml",
|
|
53
|
+
"geojson",
|
|
54
|
+
"web-components",
|
|
55
|
+
"declarative"
|
|
56
|
+
],
|
|
57
|
+
"license": "MIT",
|
|
58
|
+
"publishConfig": {
|
|
59
|
+
"access": "public"
|
|
60
|
+
},
|
|
61
|
+
"repository": {
|
|
62
|
+
"type": "git",
|
|
63
|
+
"url": "https://github.com/design-practices/maplibre-yaml.git",
|
|
64
|
+
"directory": "packages/core"
|
|
65
|
+
},
|
|
66
|
+
"bugs": {
|
|
67
|
+
"url": "https://github.com/design-practices/maplibre-yaml/issues"
|
|
68
|
+
},
|
|
69
|
+
"homepage": "https://github.com/design-practices/maplibre-yaml#readme",
|
|
70
|
+
"scripts": {
|
|
71
|
+
"build": "tsup",
|
|
72
|
+
"dev": "tsup --watch",
|
|
73
|
+
"test": "vitest run",
|
|
74
|
+
"test:watch": "vitest",
|
|
75
|
+
"test:coverage": "vitest run --coverage",
|
|
76
|
+
"typecheck": "tsc --noEmit",
|
|
77
|
+
"clean": "rm -rf dist *.tsbuildinfo"
|
|
78
|
+
}
|
|
79
|
+
}
|