{"version":3,"file":"index.mjs","names":[],"sources":["../packages/react/src/components/Config/Config.tsx","../packages/dom/src/timing.ts","../packages/dom/src/measure.ts","../packages/react/src/hooks/useMeasure.ts","../packages/dom/src/virtual.ts","../packages/react/src/hooks/useVirtual.ts","../packages/react/src/hooks/useBaseline.ts","../packages/dom/src/viewport.ts","../packages/react/src/hooks/useGuide.ts","../packages/react/src/hooks/useConfig.ts","../packages/react/src/hooks/useDebug.ts","../packages/react/src/hooks/useIsClient.ts","../packages/react/src/utils/ssr.tsx","../packages/react/src/utils/merge.ts","../packages/react/src/components/Baseline/styles.module.css","../packages/react/src/components/Baseline/Baseline.tsx","../packages/react/src/components/Guide/styles.module.css","../packages/react/src/components/Guide/Guide.tsx","../packages/dom/src/ssr.ts","../packages/react/src/components/Spacer/styles.module.css","../packages/react/src/components/Spacer/Spacer.tsx","../packages/react/src/components/Padder/styles.module.css","../packages/react/src/components/Padder/Padder.tsx","../packages/react/src/components/Box/styles.module.css","../packages/react/src/components/Box/Box.tsx"],"sourcesContent":["import * as React from 'react'\nimport type { ConfigSchema } from '@baseline-kit/core/config/schema'\nimport { DEFAULT_CONFIG } from '@baseline-kit/core/config/defaults'\nimport {\n  mergeConfig,\n  createCSSVariables,\n} from '@baseline-kit/core/config/merge'\n\n// Re-export types that consumers need\nexport type { DebuggingMode } from '@baseline-kit/core/types'\nexport type { ConfigSchema } from '@baseline-kit/core/config/schema'\n\n// Create the context\nconst ConfigContext = React.createContext<ConfigSchema>(DEFAULT_CONFIG)\nConfigContext.displayName = 'ConfigContext'\n\n// Update to use React 19's use hook instead of useContext\nexport const useDefaultConfig = () => React.use(ConfigContext)\n\ntype ConfigProps = {\n  children: React.ReactNode\n  base?: number\n  baseline?: Partial<ConfigSchema['baseline']>\n  guide?: Partial<ConfigSchema['guide']>\n  spacer?: Partial<ConfigSchema['spacer']>\n  box?: Partial<ConfigSchema['box']>\n  padder?: Partial<ConfigSchema['padder']>\n}\n\n/**\n * Configuration provider for baseline-kit components.\n */\nexport function Config({\n  children,\n  base,\n  baseline,\n  guide,\n  spacer,\n  box,\n  padder,\n}: ConfigProps) {\n  const parentConfig = useDefaultConfig()\n\n  const value = React.useMemo(() => {\n    return mergeConfig({\n      parentConfig,\n      base,\n      baseline,\n      guide,\n      spacer,\n      box,\n      padder,\n    })\n  }, [parentConfig, base, baseline, guide, spacer, box, padder])\n\n  return <ConfigContext value={value}>{children}</ConfigContext>\n}\n\n// Re-export createCSSVariables and mergeConfig for consumers\nexport { createCSSVariables, mergeConfig }\n","export const debounce = <T extends (...args: unknown[]) => void>(\n  fn: T,\n  delay: number\n): [T, () => void] => {\n  let timer: ReturnType<typeof setTimeout> | null = null\n\n  const cancel = () => {\n    if (timer) {\n      clearTimeout(timer)\n      timer = null\n    }\n  }\n\n  const debounced = ((...args) => {\n    cancel()\n    timer = setTimeout(() => fn(...args), delay)\n  }) as T\n\n  return [debounced, cancel]\n}\n\nexport const rafThrottle = <T extends (...args: never[]) => void>(\n  fn: T\n): [T, () => void] => {\n  let rafId: number | null = null\n  let lastArgs: Parameters<T> | null = null\n\n  const cancel = () => {\n    if (rafId !== null) {\n      cancelAnimationFrame(rafId)\n      rafId = null\n      lastArgs = null\n    }\n  }\n\n  const throttled = (...args: Parameters<T>) => {\n    lastArgs = args\n\n    if (rafId !== null) {\n      cancelAnimationFrame(rafId)\n    }\n\n    rafId = requestAnimationFrame(() => {\n      fn(...lastArgs!)\n      rafId = null\n      lastArgs = null\n    })\n  }\n\n  return [throttled as T, cancel]\n}\n","/**\n * Element measurement observer.\n */\n\nimport { rafThrottle } from './timing'\n\nexport interface MeasureRect {\n  width: number\n  height: number\n}\n\nexport interface MeasureObserverHandle {\n  /** Force an immediate re-measure */\n  refresh(): void\n  /** Stop observing */\n  disconnect(): void\n}\n\n/**\n * Observes an element's dimensions via ResizeObserver.\n * Calls `onChange` with rounded width/height whenever the size changes.\n */\nexport function createMeasureObserver(\n  el: Element,\n  onChange: (rect: MeasureRect) => void\n): MeasureObserverHandle {\n  let prev: MeasureRect = { width: 0, height: 0 }\n\n  const measure = () => {\n    try {\n      const rect = el.getBoundingClientRect()\n      const next: MeasureRect = {\n        width: Math.round(rect.width),\n        height: Math.round(rect.height),\n      }\n      if (next.width !== prev.width || next.height !== prev.height) {\n        prev = next\n        onChange(next)\n      }\n    } catch {\n      // element may have been removed\n    }\n  }\n\n  const [throttledMeasure, cancelMeasure] = rafThrottle(measure)\n\n  // Initial measurement\n  measure()\n\n  const observer = new ResizeObserver(throttledMeasure)\n  observer.observe(el)\n\n  return {\n    refresh: throttledMeasure,\n    disconnect() {\n      observer.disconnect()\n      cancelMeasure()\n    },\n  }\n}\n","import * as React from 'react'\nimport { createMeasureObserver } from '@baseline-kit/dom/measure'\nimport type { MeasureRect } from '@baseline-kit/dom/measure'\n\nexport interface MeasureResult extends MeasureRect {\n  refresh: () => void\n}\n\nconst ZERO: MeasureRect = { width: 0, height: 0 }\n\n/**\n * Hook for measuring and tracking DOM element dimensions.\n * Thin wrapper around the imperative createMeasureObserver from @baseline-kit/dom.\n */\nexport function useMeasure(\n  ref: React.RefObject<HTMLElement | null>\n): MeasureResult {\n  const [dimensions, setDimensions] = React.useState<MeasureRect>(ZERO)\n  const handleRef = React.useRef<ReturnType<\n    typeof createMeasureObserver\n  > | null>(null)\n\n  React.useLayoutEffect(() => {\n    if (typeof window === 'undefined' || !ref.current) return\n\n    const handle = createMeasureObserver(ref.current, (rect) => {\n      setDimensions((prev) =>\n        prev.width === rect.width && prev.height === rect.height ? prev : rect\n      )\n    })\n    handleRef.current = handle\n\n    return () => {\n      handle.disconnect()\n      handleRef.current = null\n    }\n  }, [ref])\n\n  const refresh = React.useCallback(() => {\n    handleRef.current?.refresh()\n  }, [])\n\n  return { ...dimensions, refresh }\n}\n","/**\n * Virtual scroll range tracker.\n */\n\nimport { rafThrottle } from './timing'\n\nexport interface VirtualRange {\n  start: number\n  end: number\n}\n\nexport interface VirtualTrackerOptions {\n  totalItems: number\n  itemHeight: number\n  buffer?: number\n}\n\nexport interface VirtualTrackerHandle {\n  /** Force recalculation */\n  refresh(): void\n  /** Stop tracking */\n  disconnect(): void\n}\n\n/**\n * Tracks which slice of a virtual list is visible in the viewport.\n * Uses IntersectionObserver + window scroll/resize events.\n */\nexport function createVirtualTracker(\n  el: Element,\n  options: VirtualTrackerOptions,\n  onChange: (range: VirtualRange) => void\n): VirtualTrackerHandle {\n  const { totalItems, itemHeight, buffer = 0 } = options\n\n  if (!Number.isFinite(itemHeight) || itemHeight <= 0) {\n    throw new Error(\n      'createVirtualTracker requires itemHeight to be greater than 0'\n    )\n  }\n\n  if (!Number.isFinite(totalItems) || totalItems < 0) {\n    throw new Error(\n      'createVirtualTracker requires totalItems to be 0 or greater'\n    )\n  }\n\n  const calculateRange = (): VirtualRange => {\n    const rect = el.getBoundingClientRect()\n    const offsetTop = rect.top + window.scrollY\n    const viewportTop = Math.max(0, window.scrollY - offsetTop - buffer)\n    const viewportBottom = viewportTop + window.innerHeight + buffer * 2\n\n    const start = Math.max(0, Math.floor(viewportTop / itemHeight))\n    const end = Math.min(totalItems, Math.ceil(viewportBottom / itemHeight))\n    return { start, end }\n  }\n\n  let prev: VirtualRange = { start: 0, end: totalItems }\n\n  const update = () => {\n    const next = calculateRange()\n    if (next.start !== prev.start || next.end !== prev.end) {\n      prev = next\n      onChange(next)\n    }\n  }\n\n  const [throttledUpdate, cancelUpdate] = rafThrottle(update)\n\n  const listenerOptions: AddEventListenerOptions = { passive: true }\n\n  window.addEventListener('scroll', throttledUpdate, listenerOptions)\n  window.addEventListener('resize', throttledUpdate, listenerOptions)\n\n  const intersectionObserver = new IntersectionObserver(throttledUpdate, {\n    threshold: 0,\n  })\n  intersectionObserver.observe(el)\n\n  throttledUpdate()\n\n  return {\n    refresh: throttledUpdate,\n    disconnect() {\n      window.removeEventListener('scroll', throttledUpdate, listenerOptions)\n      window.removeEventListener('resize', throttledUpdate, listenerOptions)\n      intersectionObserver.disconnect()\n      cancelUpdate()\n    },\n  }\n}\n","import { RefObject, useCallback, useLayoutEffect, useState } from 'react'\nimport { createVirtualTracker } from '@baseline-kit/dom/virtual'\nimport type { VirtualRange } from '@baseline-kit/dom/virtual'\n\ntype VirtualOptions = {\n  totalLines: number\n  lineHeight: number\n  containerRef: RefObject<HTMLDivElement | null>\n  buffer?: number | string\n}\n\n/**\n * Hook for optimizing large lists through virtual scrolling.\n * Thin wrapper around the imperative createVirtualTracker from @baseline-kit/dom.\n */\nexport function useVirtual({\n  totalLines,\n  lineHeight,\n  containerRef,\n  buffer = 0,\n}: VirtualOptions) {\n  const numericBuffer =\n    typeof buffer === 'number' ? buffer : parseInt(buffer, 10) || 0\n\n  const [visibleRange, setVisibleRange] = useState<VirtualRange>({\n    start: 0,\n    end: totalLines,\n  })\n\n  const updateRange = useCallback((range: VirtualRange) => {\n    setVisibleRange((prev) =>\n      prev.start === range.start && prev.end === range.end ? prev : range\n    )\n  }, [])\n\n  useLayoutEffect(() => {\n    if (!containerRef.current) return\n\n    const handle = createVirtualTracker(\n      containerRef.current,\n      { totalItems: totalLines, itemHeight: lineHeight, buffer: numericBuffer },\n      updateRange\n    )\n\n    return () => handle.disconnect()\n  }, [containerRef, totalLines, lineHeight, numericBuffer, updateRange])\n\n  return visibleRange\n}\n","import * as React from 'react'\nimport type { SnappingMode, Padding } from '@baseline-kit/core'\nimport { parsePadding, calculateSnappedSpacing } from '@baseline-kit/core'\nimport { useMeasure } from './useMeasure'\n\nexport interface BaselineOptions {\n  base?: number\n  snapping?: SnappingMode\n  spacing?: Partial<Padding> | number\n}\n\nexport interface BaselineResult {\n  padding: Padding\n  isAligned: boolean\n  height: number\n}\n\n/**\n * Hook for managing baseline grid alignment in components.\n *\n * Snapping notes\n * --------------\n * `clamp` mode would oscillate without a latch: each snap tweaks the\n * element's padding which changes its measured height, which would\n * trigger another snap, and so on. We snap exactly once per mount on\n * the *first non-zero* measurement, then keep returning the snapped\n * padding for the rest of the element's life. Resizes after the first\n * snap intentionally do not re-snap (avoids visual jitter and the\n * `clamp` oscillation).\n */\nexport function useBaseline(\n  ref: React.RefObject<HTMLElement | null>,\n  { base = 8, snapping = 'none', spacing = {} }: BaselineOptions = {}\n): BaselineResult {\n  if (base < 1) {\n    throw new Error('Base must be >= 1 for baseline alignment.')\n  }\n\n  const { height } = useMeasure(ref)\n  const snappedPaddingRef = React.useRef<Padding | null>(null)\n\n  return React.useMemo(() => {\n    const initialPadding = parsePadding({ padding: spacing })\n    const isAligned = height % base === 0\n\n    if (snapping === 'none') {\n      return { padding: initialPadding, isAligned, height }\n    }\n\n    // Reuse the cached snap on subsequent renders.\n    if (snappedPaddingRef.current) {\n      return { padding: snappedPaddingRef.current, isAligned, height }\n    }\n\n    // Wait for a real measurement before snapping. Without this guard\n    // the very first render (height = 0, before useMeasure settles)\n    // would compute a no-op snap and prematurely poison the cache,\n    // making real measurements never get snapped.\n    if (height === 0) {\n      return { padding: initialPadding, isAligned, height }\n    }\n\n    const finalPadding = calculateSnappedSpacing(\n      height,\n      base,\n      initialPadding,\n      snapping\n    )\n    snappedPaddingRef.current = finalPadding\n\n    return { padding: finalPadding, isAligned, height }\n  }, [base, snapping, spacing, height])\n}\n","import type { ConversionContext } from '@baseline-kit/core'\n\n/**\n * Returns the current browser viewport for vw/vh/vmin/vmax conversion.\n * Returns an empty object on the server so callers fall back to the\n * core defaults without crashing.\n */\nexport function getViewportContext(): Partial<ConversionContext> {\n  if (typeof window === 'undefined') return {}\n  return {\n    viewportWidth: window.innerWidth,\n    viewportHeight: window.innerHeight,\n  }\n}\n","import * as React from 'react'\nimport type { GuideConfig } from '@baseline-kit/core/types'\nimport { calculateGuideTemplate } from '@baseline-kit/core/utils/grid'\nimport { getViewportContext } from '@baseline-kit/dom/viewport'\nimport { useMeasure } from './useMeasure'\n\nexport type { GuideResult } from '@baseline-kit/core/utils/grid'\n\n/**\n * Hook for calculating grid layout parameters based on container dimensions.\n */\nexport function useGuide(\n  ref: React.RefObject<HTMLElement | null>,\n  config: GuideConfig\n) {\n  const { width } = useMeasure(ref)\n  return React.useMemo(\n    () => calculateGuideTemplate(width, config, getViewportContext()),\n    [config, width]\n  )\n}\n","import { useMemo } from 'react'\nimport type { ConfigSchema } from '@baseline-kit/core/config/schema'\nimport { useDefaultConfig } from '../components/Config/Config'\n\n/** Type helper that merges base configuration with component-specific settings. */\nexport type ComponentConfig<K extends keyof ConfigSchema> = ConfigSchema[K] & {\n  base: number\n}\n\n/**\n * Hook for accessing component-specific theme configuration.\n */\nexport function useConfig<K extends keyof ConfigSchema>(\n  component: K\n): ComponentConfig<K> {\n  const defaultConfig = useDefaultConfig()\n  return useMemo(() => {\n    return Object.assign(\n      { base: defaultConfig.base },\n      defaultConfig[component]\n    ) as ComponentConfig<K>\n  }, [defaultConfig, component])\n}\n","import { useMemo } from 'react'\nimport { resolveDebugState } from '@baseline-kit/core/utils/merge'\nimport type { DebuggingMode } from '@baseline-kit/core/types'\n\n/**\n * Hook for managing component debug state and visibility.\n * Delegates to pure resolveDebugState in core.\n */\nexport function useDebug(\n  debuggingProp?: DebuggingMode,\n  debuggingConfig?: DebuggingMode\n) {\n  return useMemo(\n    () => resolveDebugState(debuggingProp, debuggingConfig),\n    [debuggingProp, debuggingConfig]\n  )\n}\n","import { useEffect, useState } from 'react'\n\n/**\n * Hook to determine if the code is running on the client side.\n */\nexport function useIsClient() {\n  const [isClient, setIsClient] = useState(false)\n\n  useEffect(() => {\n    setIsClient(true)\n  }, [])\n\n  return isClient\n}\n","/**\n * React-specific SSR utilities (ClientOnly component)\n */\nimport * as React from 'react'\nimport { useIsClient } from '../hooks/useIsClient'\n\ninterface ClientOnlyProps {\n  children: React.ReactNode\n  fallback?: React.ReactNode\n}\n\n/**\n * A utility component that only renders its children on the client side.\n * @internal Not part of the public API\n */\nexport function ClientOnly({ children, fallback = null }: ClientOnlyProps) {\n  const isClient = useIsClient()\n\n  if (!isClient) {\n    return <>{fallback}</>\n  }\n\n  return <>{children}</>\n}\n","import * as React from 'react'\n\n/**\n * Combines descriptor style records and React style objects.\n * Accepts Record<string, string> from descriptors and React.CSSProperties.\n */\nexport function mergeStyles(\n  ...styles: Array<Record<string, string> | React.CSSProperties | undefined>\n): React.CSSProperties {\n  return Object.assign({}, ...styles.filter(Boolean))\n}\n\n/**\n * Merges multiple React refs into a single callback ref.\n */\nexport function mergeRefs<T>(\n  ...refs: Array<React.Ref<T> | null | undefined>\n): React.RefCallback<T> {\n  return (node: T | null) => {\n    refs.forEach((ref) => {\n      if (!ref) return\n      if (typeof ref === 'function') {\n        ref(node)\n      } else {\n        Object.assign(ref, { current: node })\n      }\n    })\n  }\n}\n",".bas {\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n  width: var(--bkbl-w);\n  height: var(--bkbl-h);\n  overflow: hidden;\n  contain: layout style paint;\n}\n\n.v {\n  opacity: 1;\n  visibility: visible;\n  transition:\n    opacity var(--bk-transition-base),\n    visibility 0ms linear;\n}\n\n.h {\n  opacity: 0;\n  visibility: hidden;\n  transition:\n    opacity var(--bk-transition-base),\n    visibility 0ms linear 180ms;\n}\n\n.row {\n  left: 0;\n  right: 0;\n  position: absolute;\n  top: var(--bkbl-rt);\n  height: var(--bkbl-rh);\n  background-color: var(--bkbl-c);\n}\n\n/* Style for SSR rendering */\n.ssr {\n  box-sizing: border-box;\n  display: grid;\n  position: relative;\n  z-index: 1;\n  pointer-events: none;\n}\n","import * as React from 'react'\nimport { ComponentsProps } from '../types'\nimport { useConfig, useDebug, useVirtual, useMeasure } from '../../hooks'\nimport { cx, createBaselineDescriptor } from '@baseline-kit/core'\nimport type { BaselineVariant } from '@baseline-kit/core'\nimport { ClientOnly } from '../../utils/ssr'\nimport { mergeStyles } from '../../utils/merge'\nimport styles from './styles.module.css'\n\nexport type { BaselineVariant }\n\nexport type BaselineProps = {\n  variant?: BaselineVariant\n  width?: number | string\n  height?: number | string\n  base?: number\n  color?: string\n  ssrMode?: boolean\n} & ComponentsProps\n\nconst BaselineImpl = React.memo(function BaselineImpl({\n  className,\n  debugging,\n  style,\n  variant,\n  height: heightProp,\n  width: widthProp,\n  base,\n  color: colorProp,\n  ...spacingProps\n}: BaselineProps) {\n  const config = useConfig('baseline')\n  const { isShown } = useDebug(debugging, config.debugging)\n  const containerRef = React.useRef<HTMLDivElement | null>(null)\n  const { width: containerWidth, height: containerHeight } =\n    useMeasure(containerRef)\n\n  const resolvedBase = base || config.base\n\n  const descriptor = React.useMemo(\n    () =>\n      createBaselineDescriptor({\n        base: resolvedBase,\n        colors: config.colors,\n        variant: (variant as BaselineVariant) ?? config.variant,\n        width: widthProp,\n        height: heightProp,\n        color: colorProp,\n        containerWidth,\n        containerHeight,\n        spacing: spacingProps,\n        isVisible: isShown,\n      }),\n    [\n      resolvedBase,\n      config.colors,\n      config.variant,\n      variant,\n      widthProp,\n      heightProp,\n      colorProp,\n      containerWidth,\n      containerHeight,\n      spacingProps,\n      isShown,\n    ]\n  )\n\n  const { start, end } = useVirtual({\n    totalLines: descriptor.rowCount,\n    lineHeight: resolvedBase,\n    containerRef,\n    buffer: 160,\n  })\n\n  const containerStyles = React.useMemo(\n    () => mergeStyles(descriptor.containerStyle, style),\n    [descriptor.containerStyle, style]\n  )\n\n  return (\n    <div\n      ref={containerRef}\n      data-testid=\"baseline\"\n      aria-hidden=\"true\"\n      className={cx(...descriptor.classTokens.map((t) => styles[t]), className)}\n      style={containerStyles}\n      {...spacingProps}\n    >\n      {isShown &&\n        Array.from({ length: end - start }, (_, i) => {\n          const rowIndex = i + start\n          return (\n            <div\n              className={styles.row}\n              key={rowIndex}\n              data-row-index={rowIndex}\n              style={descriptor.getRowStyle(rowIndex)}\n            />\n          )\n        })}\n    </div>\n  )\n})\n\nexport const Baseline = React.memo(function Baseline({\n  className,\n  debugging,\n  style,\n  variant: variantProp,\n  height: heightProp,\n  width: widthProp,\n  base: baseProp,\n  color: colorProp,\n  ssrMode = false,\n  ...spacingProps\n}: BaselineProps) {\n  const config = useConfig('baseline')\n  const variant = variantProp ?? config.variant\n  const base = baseProp ?? config.base\n  const { isShown } = useDebug(debugging, config.debugging)\n\n  if (!isShown) {\n    return (\n      <div\n        className={cx(styles.bas, styles.h, className)}\n        style={style}\n        data-testid=\"baseline\"\n        aria-hidden=\"true\"\n        {...spacingProps}\n      />\n    )\n  }\n\n  const ssrFallback = (\n    <div\n      className={cx(styles.bas, styles.h, styles.ssr, className)}\n      style={{\n        width: widthProp ?? '100%',\n        height: heightProp ?? '100%',\n        ...style,\n      }}\n      data-testid=\"baseline\"\n      aria-hidden=\"true\"\n    />\n  )\n\n  if (ssrMode) {\n    return ssrFallback\n  }\n\n  return (\n    <ClientOnly fallback={ssrFallback}>\n      <BaselineImpl\n        className={className}\n        debugging={debugging}\n        style={style}\n        variant={variant}\n        height={heightProp}\n        width={widthProp}\n        base={base}\n        color={colorProp}\n        {...spacingProps}\n      />\n    </ClientOnly>\n  )\n})\n",".gde {\n  position: absolute;\n  inset: 0;\n  box-sizing: border-box;\n  width: var(--bkgd-w, 100%);\n  height: var(--bkgd-h, 100%);\n  max-width: var(--bkgd-mw, none);\n  margin-inline: auto;\n  pointer-events: none;\n  padding: var(--bkgd-pb, 0) var(--bkgd-pi, 0);\n}\n\n.v {\n  opacity: 1;\n  visibility: visible;\n  transition:\n    opacity var(--bk-transition-base),\n    visibility 0ms linear;\n}\n\n.h {\n  opacity: 0;\n  visibility: hidden;\n  transition:\n    opacity var(--bk-transition-base),\n    visibility 0ms linear 180ms;\n}\n\n.line {\n  left: -0.5px; /* Alignment correction for line variant */\n}\n\n.cols {\n  position: absolute;\n  inset: 0;\n  display: grid;\n  column-gap: var(--bkgd-g);\n  grid-template-rows: 1fr;\n  grid-template-columns: var(--bkgd-t);\n  justify-content: var(--bkgd-j);\n  width: var(--bk-wf);\n  height: var(--bk-hf);\n  overflow: hidden;\n  contain: layout style paint;\n}\n\n.col {\n  min-width: 0;\n  width: var(--bk-wf);\n  height: var(--bk-hf);\n}\n\n/* Variant-specific styles */\n.col[data-variant='line'] {\n  width: 1px;\n  background-color: var(--bkgd-cl);\n}\n\n.cols[data-variant='line'] {\n  display: block;\n  background-image: repeating-linear-gradient(\n    to right,\n    var(--bkgd-line-color, var(--bkgd-cl)) 0 1px,\n    transparent 1px var(--bkgd-line-period, 1px)\n  );\n}\n\n.col[data-variant='pattern'] {\n  background-color: var(--bkgd-cp);\n}\n\n.col[data-variant='auto'] {\n  background-color: var(--bkgd-ca);\n  overflow: hidden;\n}\n\n.col[data-variant='fixed'] {\n  background-color: var(--bkgd-cf);\n}\n\n/* Style for SSR rendering */\n.ssr {\n  box-sizing: border-box;\n  display: grid;\n  position: relative;\n  z-index: 1;\n  pointer-events: none;\n  min-height: 100px; /* Ensures a minimum height during SSR */\n}\n","import * as React from 'react'\nimport type { ComponentsProps } from '../types'\nimport { useConfig } from '../../hooks/useConfig'\nimport { useDebug } from '../../hooks/useDebug'\nimport { useMeasure } from '../../hooks/useMeasure'\nimport { useGuide } from '../../hooks/useGuide'\nimport { cx } from '@baseline-kit/core/utils/merge'\nimport {\n  createGuideDescriptor,\n  createGuideConfig,\n} from '@baseline-kit/core/descriptors/guide'\nimport type { GuideVariant, GuideConfig } from '@baseline-kit/core/types'\nimport { ClientOnly } from '../../utils/ssr'\nimport { mergeStyles } from '../../utils/merge'\nimport styles from './styles.module.css'\n\nexport type { GuideConfig }\n\nexport type GuideProps = {\n  align?: React.CSSProperties['justifyContent']\n  variant?: GuideVariant\n  columns?: number | readonly (string | number | undefined | 'auto')[]\n  columnWidth?: React.CSSProperties['width']\n  maxWidth?: React.CSSProperties['maxWidth']\n  color?: React.CSSProperties['color']\n  children?: React.ReactNode\n  gap?: number\n  ssrMode?: boolean\n} & ComponentsProps &\n  Omit<GuideConfig, 'columns' | 'columnWidth' | 'gap'>\n\nexport const Guide = React.memo(function Guide({\n  className,\n  debugging,\n  style,\n  variant: variantProp,\n  align = 'center',\n  gap: gapProp,\n  height,\n  width,\n  columns,\n  columnWidth,\n  maxWidth,\n  color,\n  children,\n  ssrMode = false,\n  ...props\n}: GuideProps) {\n  const config = useConfig('guide')\n  const variant = variantProp ?? config.variant\n  const gap = typeof gapProp === 'number' ? gapProp : 0\n  const { isShown } = useDebug(debugging, config.debugging)\n\n  if (!isShown) {\n    return (\n      <div\n        className={cx(styles.gde, styles.h, className)}\n        style={style}\n        data-testid=\"guide\"\n        data-variant={variant}\n        aria-hidden=\"true\"\n        {...props}\n      >\n        {children}\n      </div>\n    )\n  }\n\n  const ssrFallback = (\n    <div\n      className={cx(styles.gde, styles.h, styles.ssr, className)}\n      style={{\n        width: width ?? '100%',\n        height: height ?? '100%',\n        maxWidth: maxWidth ?? 'none',\n        ...style,\n      }}\n      data-testid=\"guide\"\n      data-variant={variant}\n      aria-hidden=\"true\"\n    >\n      {children}\n    </div>\n  )\n\n  if (ssrMode) {\n    return ssrFallback\n  }\n\n  return (\n    <ClientOnly fallback={ssrFallback}>\n      <GuideImpl\n        className={className}\n        debugging={debugging}\n        style={style}\n        variant={variant}\n        align={align}\n        gap={gap}\n        height={height}\n        width={width}\n        columns={columns}\n        columnWidth={columnWidth}\n        maxWidth={maxWidth}\n        color={color}\n        {...props}\n      >\n        {children}\n      </GuideImpl>\n    </ClientOnly>\n  )\n})\n\nconst GuideImpl = React.memo(function GuideImpl({\n  className,\n  debugging,\n  style,\n  variant,\n  align = 'center',\n  gap,\n  height,\n  width,\n  columns,\n  columnWidth,\n  maxWidth,\n  color,\n  children,\n  ...props\n}: GuideProps) {\n  const config = useConfig('guide')\n  const { isShown } = useDebug(debugging, config.debugging)\n  const containerRef = React.useRef<HTMLDivElement | null>(null)\n  useMeasure(containerRef)\n\n  const resolvedVariant = (variant ?? config.variant) as GuideVariant\n  const resolvedGap = typeof gap === 'number' ? gap : 0\n\n  const gridConfig = React.useMemo(\n    () =>\n      createGuideConfig({\n        variant: resolvedVariant,\n        base: config.base,\n        gap: resolvedGap,\n        columns,\n        columnWidth: columnWidth as number | string | undefined,\n      }),\n    [resolvedVariant, config.base, resolvedGap, columns, columnWidth]\n  )\n\n  const { template, columnsCount, calculatedGap } = useGuide(\n    containerRef,\n    gridConfig\n  )\n\n  const descriptor = React.useMemo(\n    () =>\n      createGuideDescriptor({\n        base: config.base,\n        colors: config.colors,\n        variant: resolvedVariant,\n        align: align || 'center',\n        width,\n        height,\n        columnWidth,\n        maxWidth,\n        color,\n        template,\n        columnsCount,\n        calculatedGap,\n        isVisible: isShown,\n      }),\n    [\n      config.base,\n      config.colors,\n      resolvedVariant,\n      align,\n      width,\n      height,\n      columnWidth,\n      maxWidth,\n      color,\n      template,\n      columnsCount,\n      calculatedGap,\n      isShown,\n    ]\n  )\n\n  const containerStyles = React.useMemo(\n    () => mergeStyles(descriptor.containerStyle, style),\n    [descriptor.containerStyle, style]\n  )\n\n  return (\n    <div\n      ref={containerRef}\n      data-testid=\"guide\"\n      aria-hidden=\"true\"\n      className={cx(...descriptor.classTokens.map((t) => styles[t]), className)}\n      data-variant={variant}\n      style={containerStyles}\n      {...props}\n    >\n      {isShown && (\n        <div className={styles.cols} data-variant={variant}>\n          {!descriptor.isLineVariant &&\n            Array.from({ length: descriptor.columnsCount }, (_, i) => (\n              <div\n                key={i}\n                className={styles.col}\n                data-column-index={i}\n                data-variant={variant}\n                style={{ backgroundColor: descriptor.columnColor }}\n              />\n            ))}\n        </div>\n      )}\n      {children}\n    </div>\n  )\n})\n","/**\n * Detects if code is running in a server-side environment\n */\nexport const isSSR = typeof window === 'undefined'\n\n/**\n * Default dimensions to use during server-side rendering\n */\nexport const SSR_DIMENSIONS = {\n  width: 1024,\n  height: 768,\n}\n\n/**\n * Safe window-using function that works in both server and client\n */\nexport function safeClientValue<T>(clientFn: () => T, fallback: T): T {\n  if (isSSR) {\n    return fallback\n  }\n\n  try {\n    return clientFn()\n  } catch {\n    return fallback\n  }\n}\n\n/**\n * Returns a stable value during SSR and initial render, then switches to\n * the dynamic value after hydration\n */\nexport function hydratedValue<T>(\n  isHydrated: boolean,\n  ssrValue: T,\n  dynamicValue: T\n): T {\n  return !isHydrated || isSSR ? ssrValue : dynamicValue\n}\n",".spr {\n  position: relative;\n  box-sizing: border-box;\n  width: var(--bksp-w, 100%);\n  height: var(--bksp-h, auto);\n  flex-shrink: 0;\n  display: block;\n  margin: 0;\n  padding: 0;\n}\n\n.line::after {\n  content: '';\n  position: absolute;\n  inset: 0;\n  border: 1px solid var(--bksp-cl, hsla(270, 60%, 40%, 0.6));\n  z-index: calc(var(--bk-zi, 1));\n}\n\n.flat {\n  background-color: var(--bksp-cf, hsla(230, 100%, 70%, 0.2));\n}\n","import * as React from 'react'\nimport { useConfig, useDebug, useIsClient } from '../../hooks'\nimport { cx, createSpacerDescriptor } from '@baseline-kit/core'\nimport { hydratedValue } from '@baseline-kit/dom'\nimport { ComponentsProps, Variant } from '../types'\nimport { mergeStyles } from '../../utils/merge'\nimport styles from './styles.module.css'\n\nexport type IndicatorNode = (\n  value: number,\n  type: 'width' | 'height'\n) => React.ReactNode\n\nexport type SpacerProps = {\n  width?: React.CSSProperties['width']\n  height?: React.CSSProperties['height']\n  variant?: Variant\n  color?: string\n  base?: number\n  children?: React.ReactNode\n  indicatorNode?: IndicatorNode\n  ssrMode?: boolean\n} & ComponentsProps\n\nexport const Spacer = React.memo(function Spacer({\n  height: heightProp,\n  width: widthProp,\n  indicatorNode,\n  debugging: debuggingProp,\n  variant: variantProp,\n  base: baseProp,\n  color: colorProp,\n  className,\n  style,\n  children,\n  ssrMode = false,\n  ...props\n}: SpacerProps) {\n  const ref = React.useRef<HTMLDivElement>(null)\n  const config = useConfig('spacer')\n  const { isShown } = useDebug(debuggingProp, config.debugging)\n  const variant = variantProp ?? config.variant\n  const base = baseProp ?? config.base\n\n  const isHydrated = useIsClient()\n\n  const descriptor = React.useMemo(\n    () =>\n      createSpacerDescriptor({\n        base,\n        colors: config.colors,\n        width: widthProp as number | string | undefined,\n        height: heightProp as number | string | undefined,\n        color: colorProp,\n        variant,\n        isVisible: isShown,\n      }),\n    [base, config.colors, widthProp, heightProp, colorProp, variant, isShown]\n  )\n\n  const shouldShowMeasurements = hydratedValue(\n    isHydrated && !ssrMode,\n    false,\n    isShown && indicatorNode !== undefined\n  )\n\n  const measurements = React.useMemo(() => {\n    if (!shouldShowMeasurements) return null\n    const w = descriptor.normWidth\n    const h = descriptor.normHeight\n    return (\n      <>\n        {h !== 0 && (\n          <span key=\"height\" aria-hidden=\"true\">\n            {indicatorNode!(h, 'height')}\n          </span>\n        )}\n        {w !== 0 && (\n          <span key=\"width\" aria-hidden=\"true\">\n            {indicatorNode!(w, 'width')}\n          </span>\n        )}\n      </>\n    )\n  }, [\n    shouldShowMeasurements,\n    indicatorNode,\n    descriptor.normWidth,\n    descriptor.normHeight,\n  ])\n\n  const baseStyles = React.useMemo(\n    () => mergeStyles(descriptor.style, style),\n    [descriptor.style, style]\n  )\n\n  return (\n    <div\n      ref={ref}\n      data-testid=\"spacer\"\n      className={cx(...descriptor.classTokens.map((t) => styles[t]), className)}\n      data-variant={variant}\n      data-height={\n        typeof descriptor.normHeight === 'number'\n          ? `${descriptor.normHeight}px`\n          : descriptor.normHeight\n      }\n      style={baseStyles}\n      {...props}\n    >\n      {measurements}\n      {children}\n    </div>\n  )\n})\n",".pad {\n  position: relative;\n  display: grid;\n  grid-template-columns: auto 1fr auto;\n  grid-template-rows: auto 1fr auto;\n  width: var(--bkpd-w, auto);\n  height: var(--bkpd-h, auto);\n}\n\n.lay .line::after,\n.stk .line::after {\n  border: none;\n}\n\n.v::after {\n  content: '';\n  position: absolute;\n  inset: 0;\n  border: 1px solid var(--bkpd-c, var(--bk-padder-color-theme));\n  pointer-events: none;\n  z-index: var(--bk-zi);\n}\n","import * as React from 'react'\nimport { useConfig, useDebug, useBaseline, useIsClient } from '../../hooks'\nimport { cx, parsePadding, createPadderDescriptor } from '@baseline-kit/core'\nimport { hydratedValue } from '@baseline-kit/dom'\nimport { mergeStyles, mergeRefs } from '../../utils/merge'\nimport { ComponentsProps, Variant } from '../types'\nimport { Spacer, IndicatorNode } from '../Spacer'\nimport type { DebuggingMode } from '../types'\nimport styles from './styles.module.css'\n\nexport type PadderProps = {\n  indicatorNode?: IndicatorNode\n  ssrMode?: boolean\n  children?: React.ReactNode\n} & ComponentsProps\n\nconst createRenderSpacerFn = (\n  variant: Variant | undefined,\n  debugging: DebuggingMode | undefined,\n  indicatorNode?: IndicatorNode\n) => {\n  const safeVariant = variant || 'line'\n  const safeDebugging = debugging || 'none'\n\n  const SpacerElement = (\n    widthVal: React.CSSProperties['width'],\n    heightVal: React.CSSProperties['height']\n  ) => (\n    <Spacer\n      variant={safeVariant}\n      debugging={heightVal === 0 || widthVal === 0 ? 'none' : safeDebugging}\n      indicatorNode={indicatorNode}\n      height={heightVal !== '100%' ? heightVal : undefined}\n      width={widthVal !== '100%' ? widthVal : undefined}\n    />\n  )\n  SpacerElement.displayName = 'PadderSpacer'\n  return SpacerElement\n}\n\n// Static grid position styles — hoisted to avoid re-creation on render\nconst GRID_FULL_ROW: React.CSSProperties = { gridColumn: '1 / -1' }\nconst GRID_MID_COL: React.CSSProperties = { gridRow: '2 / 3' }\nconst GRID_CENTER: React.CSSProperties = {\n  gridRow: '2 / 3',\n  gridColumn: '2 / 3',\n}\n\nexport const Padder = React.memo(\n  React.forwardRef<HTMLDivElement, PadderProps>(function Padder(\n    {\n      children,\n      className,\n      debugging: debuggingProp,\n      height,\n      indicatorNode,\n      style,\n      width,\n      ssrMode = false,\n      ...spacingProps\n    },\n    ref\n  ) {\n    const config = useConfig('padder')\n    const { variant } = useConfig('spacer')\n    const initialPadding = React.useMemo(\n      () => parsePadding(spacingProps),\n      [spacingProps]\n    )\n    const { isShown, isNone, debugging } = useDebug(\n      debuggingProp,\n      config.debugging\n    )\n    const enableSpacers = !isNone\n\n    const isHydrated = useIsClient()\n    const internalRef = React.useRef<HTMLDivElement | null>(null)\n\n    const baselinePadding = useBaseline(internalRef, {\n      base: config.base,\n      snapping: 'height',\n      spacing: initialPadding,\n    })\n\n    const stablePadding = {\n      padding: {\n        top: initialPadding.top || 0,\n        right: initialPadding.right || 0,\n        bottom: initialPadding.bottom || 0,\n        left: initialPadding.left || 0,\n      },\n    }\n    const { padding } = hydratedValue(\n      isHydrated && !ssrMode,\n      stablePadding,\n      baselinePadding\n    )\n\n    const setRefs = mergeRefs(ref, internalRef)\n\n    const descriptor = React.useMemo(\n      () =>\n        createPadderDescriptor({\n          base: config.base,\n          color: config.color,\n          width: width as number | string | undefined,\n          height: height as number | string | undefined,\n          padding,\n          enableSpacers,\n          isVisible: isShown,\n        }),\n      [\n        config.base,\n        config.color,\n        width,\n        height,\n        padding,\n        enableSpacers,\n        isShown,\n      ]\n    )\n\n    const containerStyles = React.useMemo(\n      () => mergeStyles(descriptor.containerStyle, style),\n      [descriptor.containerStyle, style]\n    )\n\n    const renderSpacer = React.useMemo(\n      () => createRenderSpacerFn(variant, debugging, indicatorNode),\n      [variant, debugging, indicatorNode]\n    )\n\n    if (!enableSpacers) {\n      return (\n        <div\n          ref={setRefs}\n          data-testid=\"padder\"\n          className={cx(\n            ...descriptor.classTokens.map((t) => styles[t]),\n            className\n          )}\n          style={containerStyles}\n        >\n          {children}\n        </div>\n      )\n    }\n\n    return (\n      <div\n        ref={setRefs}\n        data-testid=\"padder\"\n        className={cx(\n          ...descriptor.classTokens.map((t) => styles[t]),\n          className\n        )}\n        style={containerStyles}\n      >\n        <>\n          {padding.top >= 0 && (\n            <div style={GRID_FULL_ROW}>{renderSpacer('100%', padding.top)}</div>\n          )}\n          {padding.left >= 0 && (\n            <div style={GRID_MID_COL}>{renderSpacer(padding.left, '100%')}</div>\n          )}\n        </>\n        <div style={GRID_CENTER}>{children}</div>\n        <>\n          {padding.right >= 0 && (\n            <div style={GRID_MID_COL}>\n              {renderSpacer(padding.right, '100%')}\n            </div>\n          )}\n          {padding.bottom >= 0 && (\n            <div style={GRID_FULL_ROW}>\n              {renderSpacer('100%', padding.bottom)}\n            </div>\n          )}\n        </>\n      </div>\n    )\n  })\n)\n",".box {\n  position: relative;\n  width: var(--bkbx-w);\n  height: var(--bkbx-h);\n}\n\n.v::after {\n  content: '';\n  position: absolute;\n  inset: 0;\n  border: 1px solid var(--bkbx-cl);\n  pointer-events: none;\n  z-index: var(--bk-zi);\n}\n","import * as React from 'react'\nimport { useConfig, useDebug, useBaseline, useIsClient } from '../../hooks'\nimport { cx, parsePadding, createBoxDescriptor } from '@baseline-kit/core'\nimport type { SnappingMode } from '@baseline-kit/core'\nimport { hydratedValue } from '@baseline-kit/dom'\nimport { mergeStyles, mergeRefs } from '../../utils/merge'\nimport { Config } from '../Config/Config'\nimport { Padder } from '../Padder'\nimport { ComponentsProps } from '../types'\nimport styles from './styles.module.css'\n\nexport type { SnappingMode }\n\nexport type BoxProps = {\n  colSpan?: number\n  rowSpan?: number\n  span?: number\n  snapping?: SnappingMode\n  ssrMode?: boolean\n  children?: React.ReactNode\n} & ComponentsProps\n\nexport const Box = React.memo(\n  React.forwardRef<HTMLDivElement, BoxProps>(function Box(\n    {\n      children,\n      snapping = 'clamp',\n      debugging: debuggingProp,\n      className,\n      colSpan,\n      rowSpan,\n      span,\n      width,\n      height,\n      style,\n      ssrMode = false,\n      ...spacingProps\n    },\n    ref\n  ) {\n    const config = useConfig('box')\n    const { isShown, debugging } = useDebug(debuggingProp, config.debugging)\n\n    const isHydrated = useIsClient()\n    const internalRef = React.useRef<HTMLDivElement | null>(null)\n    const { top, bottom, left, right } = parsePadding(spacingProps)\n\n    const baselinePadding = useBaseline(internalRef, {\n      base: config.base,\n      snapping,\n      spacing: { top, bottom, left, right },\n    })\n\n    const stablePadding = {\n      padding: {\n        top: top || 0,\n        right: right || 0,\n        bottom: bottom || 0,\n        left: left || 0,\n      },\n    }\n    const { padding } = hydratedValue(\n      isHydrated && !ssrMode,\n      stablePadding,\n      baselinePadding\n    )\n\n    const descriptor = React.useMemo(\n      () =>\n        createBoxDescriptor({\n          base: config.base,\n          lineColor: config.colors.line,\n          width,\n          height,\n          span,\n          colSpan,\n          rowSpan,\n          isVisible: isShown,\n        }),\n      [\n        config.base,\n        config.colors.line,\n        width,\n        height,\n        span,\n        colSpan,\n        rowSpan,\n        isShown,\n      ]\n    )\n\n    const boxStyles = React.useMemo(\n      () => mergeStyles(descriptor.boxStyle, style),\n      [descriptor.boxStyle, style]\n    )\n\n    return (\n      <div\n        ref={mergeRefs(ref, internalRef)}\n        data-testid=\"box\"\n        className={cx(\n          ...descriptor.classTokens.map((t) => styles[t]),\n          className\n        )}\n        style={mergeStyles(boxStyles, descriptor.gridSpanStyle)}\n      >\n        <Config base={1} spacer={{ variant: 'flat' }}>\n          <Padder\n            block={[padding.top, padding.bottom]}\n            inline={[padding.left, padding.right]}\n            width=\"fit-content\"\n            height={height}\n            debugging={debugging}\n            ssrMode={ssrMode}\n          >\n            {children}\n          </Padder>\n        </Config>\n      </div>\n    )\n  })\n)\n"],"mappings":"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"}