{"version":3,"file":"composeFamilyValidation.js","names":[],"sources":["esm/platform/composeFamilyValidation.js"],"sourcesContent":["import { isSyncState } from \"./syncStore\";\nimport { validateDatePickerProps } from \"./composeValidation\";\nfunction composeRangeDay(date) {\n  return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n}\nfunction localRangeDay(date) {\n  return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n}\nfunction validateComposeFamily(kind, props) {\n  const fail = (key) => {\n    throw new Error(`Compose ${kind} invalid ${key}`);\n  };\n  const number = (key, minimum = 0, maximum = Infinity) => {\n    const value = props[key];\n    if (value !== void 0 && (typeof value !== \"number\" || !Number.isFinite(value) || value < minimum || value > maximum))\n      fail(key);\n  };\n  const boolean = (key) => {\n    if (props[key] !== void 0 && typeof props[key] !== \"boolean\") fail(key);\n  };\n  const callback = (key) => {\n    if (props[key] !== void 0 && typeof props[key] !== \"function\") fail(key);\n  };\n  if (kind.endsWith(\"carousel\")) {\n    for (const key of [\n      \"maxItemWidth\",\n      \"preferredItemWidth\",\n      \"itemWidth\",\n      \"minSmallItemWidth\",\n      \"maxSmallItemWidth\"\n    ])\n      number(key, Number.MIN_VALUE);\n    number(\"itemSpacing\");\n    boolean(\"userScrollEnabled\");\n    if (kind === \"multibrowsecarousel\" && props.preferredItemWidth === void 0)\n      fail(\"preferredItemWidth\");\n    if (kind === \"uncontainedcarousel\" && props.itemWidth === void 0) fail(\"itemWidth\");\n    if (props.minSmallItemWidth !== void 0 && props.maxSmallItemWidth !== void 0 && props.minSmallItemWidth > props.maxSmallItemWidth)\n      fail(\"small item widths\");\n    if (props.flingBehavior !== void 0 && ![\"singleAdvance\", \"noSnap\"].includes(props.flingBehavior))\n      fail(\"flingBehavior\");\n    if (typeof props.contentPadding === \"number\") {\n      if (!Number.isFinite(props.contentPadding) || props.contentPadding < 0)\n        fail(\"contentPadding\");\n    } else if (props.contentPadding !== void 0) {\n      if (!props.contentPadding || typeof props.contentPadding !== \"object\")\n        fail(\"contentPadding\");\n      for (const value of Object.values(props.contentPadding))\n        if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0)\n          fail(\"contentPadding\");\n    }\n  } else if (kind === \"shape\") {\n    for (const key of [\"smoothing\", \"cornerRounding\", \"innerRadius\", \"radius\"])\n      number(key, 0, 1);\n    number(\"verticesCount\", 3);\n    if (props.verticesCount !== void 0 && !Number.isInteger(props.verticesCount))\n      fail(\"verticesCount\");\n    for (const key of [\"topStart\", \"topEnd\", \"bottomStart\", \"bottomEnd\"]) number(key);\n  } else if (kind === \"dialog\") {\n    callback(\"onDismissRequest\");\n    if (props.properties !== void 0) {\n      if (!props.properties || typeof props.properties !== \"object\") fail(\"properties\");\n      for (const [key, value] of Object.entries(props.properties)) {\n        if (![\n          \"dismissOnBackPress\",\n          \"dismissOnClickOutside\",\n          \"usePlatformDefaultWidth\",\n          \"decorFitsSystemWindows\"\n        ].includes(key) || typeof value !== \"boolean\")\n          fail(key);\n      }\n    }\n  } else if (kind === \"toolbar\") {\n    if (props.variant !== void 0 && ![\"standard\", \"vibrant\"].includes(props.variant))\n      fail(\"variant\");\n  } else if (kind === \"syncswitch\") {\n    if (!isSyncState(props.isOn) || typeof props.isOn.value !== \"boolean\")\n      fail(\"isOn (requires NativeState<boolean>)\");\n    boolean(\"enabled\");\n  } else if (kind === \"range\") {\n    const date = (key) => {\n      const value = props[key];\n      if (value == null) return void 0;\n      if (typeof value !== \"string\" || !Number.isFinite(new Date(value).getTime()))\n        fail(key);\n      return new Date(value);\n    };\n    const start = date(\"initialStartDate\");\n    const end = date(\"initialEndDate\");\n    if (end && (!start || composeRangeDay(end) < composeRangeDay(start)))\n      fail(\"initialEndDate\");\n    callback(\"onDateRangeSelected\");\n    for (const key of [\"showTitle\", \"showHeadline\", \"showVariantToggle\"]) boolean(key);\n    validateDatePickerProps({\n      selection: localRangeDay(\n        start ?? props.selectableDates?.start ?? props.selectableDates?.end ?? /* @__PURE__ */ new Date()\n      ),\n      minimumDate: props.selectableDates?.start && localRangeDay(props.selectableDates.start),\n      maximumDate: props.selectableDates?.end && localRangeDay(props.selectableDates.end),\n      variant: props.variant,\n      colors: props.elementColors,\n      color: props.color\n    });\n    if (end)\n      validateDatePickerProps({\n        selection: localRangeDay(end),\n        minimumDate: props.selectableDates?.start && localRangeDay(props.selectableDates.start),\n        maximumDate: props.selectableDates?.end && localRangeDay(props.selectableDates.end)\n      });\n  }\n}\nexport {\n  composeRangeDay,\n  validateComposeFamily\n};\n//# sourceMappingURL=composeFamilyValidation.js.map\n"],"mappings":"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"}