{"version":3,"file":"core.umd.cjs","sources":["../src/types.ts","../src/util.ts","../src/cron.ts","../../node_modules/mustache/mustache.mjs","../src/locale/index.ts","../src/locale/en.ts","../src/locale/de.ts","../src/locale/pt.ts","../src/locale/es.ts","../src/locale/da.ts","../src/locale/cn.ts","../src/locale/he.ts","../src/locale/ru.ts","../src/locale/fr.ts","../src/locale/hi.ts","../src/locale/ja.ts","../src/locale/ko.ts","../src/components/cron-segment.ts","../src/components/cron-core.ts","../src/components/select.ts","../src/index.ts"],"sourcesContent":["import type { CronContext } from './components/cron-core'\nimport type { UseCronSegmentReturn } from './components/cron-segment'\n\nexport type CronFormat = 'crontab' | 'quartz' | 'spring'\n\nexport interface CronSegment {\n  field: FieldWrapper\n  type: FieldPattern\n  toCron: () => string\n  toArray: () => number[]\n  items: Record<string, FieldItem>\n}\n\nexport type SegmentFromArray = (arr: number[], field: FieldWrapper) => CronSegment | null\nexport type SegmentFromString = (str: string, field: FieldWrapper) => CronSegment | null\n\nexport enum FieldPattern {\n  Any = 'any',\n  Value = 'value',\n  Range = 'range',\n  Step = 'step',\n  RangeStep = 'rangeStep',\n  Combined = 'combined',\n  NoSpecific = 'noSpecific',\n}\n\nexport enum TextPosition {\n  Prefix = 'prefix',\n  Suffix = 'suffix',\n  Text = 'text',\n}\n\nexport interface FieldItem {\n  value: number\n  text: string\n  alt: string\n}\n\nexport interface Field {\n  id: string\n  items: FieldItem[]\n  onChange?: (segment: UseCronSegmentReturn, ctx: CronContext) => void\n  segmentFactories?: SegmentFromString[]\n}\n\nexport interface Period {\n  /**\n   * The id of the period\n   */\n  id: string\n\n  /**\n   * The value determines which fields are visible\n   */\n  value: string[]\n\n  /**\n   * The display name of the period\n   */\n  text?: string\n}\n\nexport class FieldWrapper {\n  field: Field\n  itemMap: Record<number, FieldItem>\n\n  constructor(field: Field) {\n    this.field = field\n\n    this.itemMap = this.field.items.reduce(\n      (acc, item) => {\n        acc[item.value] = item\n        return acc\n      },\n      {} as Record<number, FieldItem>,\n    )\n  }\n\n  get id() {\n    return this.field.id\n  }\n  get items() {\n    return this.field.items\n  }\n  get onChange() {\n    return this.field.onChange\n  }\n  get segmentFactories() {\n    return this.field.segmentFactories\n  }\n\n  get min() {\n    return this.items[0].value\n  }\n\n  get max() {\n    return this.items[this.items.length - 1].value\n  }\n\n  getItem(value: number) {\n    return this.itemMap[value]\n  }\n}\n","import type { CronFormat, FieldItem } from './types'\n\nfunction range(start: number, end: number, step = 1) {\n  const r = []\n  for (let i = start; i <= end; i += step) {\n    r.push(i)\n  }\n  return r\n}\n\nclass Range {\n  [name: string]: number\n  start: number\n  end: number\n  step: number\n\n  constructor(start: number, end: number, step = 1) {\n    this.start = start\n    this.end = end\n    this.step = step\n\n    return new Proxy(this, {\n      get: function (target, prop) {\n        const i = typeof prop === 'string' ? parseInt(prop) : prop\n        if (typeof i === 'number' && i >= 0 && i <= target.length) {\n          return target.start + target.step * i\n        }\n        return Reflect.get(target, prop)\n      },\n    })\n  }\n\n  get length() {\n    return (this.end - this.start) / this.step + 1\n  }\n\n  [Symbol.iterator]() {\n    let index = -1\n    return {\n      next: () => {\n        return { value: this[++index], done: !(this[index + 1] !== undefined) }\n      },\n    }\n  }\n}\n\nexport type toText = (value: number) => string\n\n/**\n * generate items for fields\n * @param min - first value\n * @param max - last value\n * @param genText - returns a string representation of value\n * @param genAltText - returns an alternative string representation of value\n * @returns array of items\n */\nfunction genItems(\n  min: number,\n  max: number,\n  genText: toText = (value) => {\n    return value + ''\n  },\n  genAltText: toText = (value) => {\n    return value + ''\n  },\n): FieldItem[] {\n  const res = []\n  for (const i of new Range(min, max)) {\n    res.push({\n      text: genText(i),\n      alt: genAltText(i),\n      value: i,\n    })\n  }\n  return res\n}\n\n/**\n *\n * @param locale - locale code, e.g.: en, en-GB de-DE\n * @param [format='crontab'] format of cron expression\n * @returns items for minute, hour, day, month and day of week\n */\nfunction defaultItems(localeCode: string, format: CronFormat = 'crontab') {\n  const monthName = (month: number, short: boolean = false) => {\n    return new Date(2021, month - 1, 1).toLocaleDateString(localeCode, {\n      month: short ? 'short' : 'long',\n    })\n  }\n\n  const weekdayName = (weekday: number, short: boolean = false) => {\n    // if weekday is 0, this is the first sunday in 2021\n    return new Date(2021, 0, 3 + weekday).toLocaleDateString(localeCode, {\n      weekday: short ? 'short' : 'long',\n    })\n  }\n\n  return {\n    secondItems: genItems(0, 59, (value) => pad(value, 2)),\n    minuteItems: genItems(0, 59, (value) => pad(value, 2)),\n    hourItems: genItems(0, 23, (value) => pad(value, 2)),\n    dayItems: genItems(1, 31),\n    monthItems: genItems(1, 12, monthName, (value) => monthName(value, true)),\n    dayOfWeekItems:\n      format === 'quartz'\n        ? genItems(\n            1,\n            7,\n            (value) => weekdayName(value - 1),\n            (value) => weekdayName(value - 1, true),\n          )\n        : genItems(0, 6, weekdayName, (value) => weekdayName(value, true)),\n  }\n}\n\n/**\n * pads numbers\n * @param n - number to pad\n * @param width - length of final string\n * @example\n * ```\n * //returns \"001\"\n * util.pad(1,3)\n * ```\n * @returns the padded number\n */\nfunction pad(n: number, width: number) {\n  const s = n + ''\n  return s.length < width ? new Array(width - s.length).fill('0').join('') + n : s\n}\n\n/**\n * determines whether the passed value is an object\n * @returns true if value is an object, otherwise false\n */\nfunction isObject(value: any): value is { [key: string]: any } {\n  return value && typeof value === 'object' && !Array.isArray(value)\n}\n\n/**\n * copies (deep copy) all properties from each source to target\n */\nfunction deepMerge(target: Object, ...sources: { [key: string]: any }[]) {\n  if (!isObject(target) || sources.length === 0) return\n  const source = sources.shift()\n\n  if (isObject(source)) {\n    for (const [key, value] of Object.entries(source)) {\n      if (isObject(value)) {\n        if (!isObject(target[key])) {\n          target[key] = {}\n        }\n        deepMerge(target[key], source[key])\n      } else {\n        target[key] = source[key]\n      }\n    }\n  }\n\n  if (sources.length > 0) deepMerge(target, ...sources)\n  return target\n}\n\nfunction traverse(obj: { [key: string]: any }, ...keys: string[][]): any {\n  if (keys.length === 0) {\n    return obj\n  }\n\n  for (const key of keys[0]) {\n    if (key in obj) {\n      const res = traverse(obj[key], ...keys.slice(1))\n      if (res !== undefined) {\n        return res\n      }\n    }\n  }\n}\n\nfunction isSquence(numbers: number[]) {\n  for (let i = 1; i < numbers.length; i++) {\n    if (numbers[i - 1] + 1 !== numbers[i]) {\n      return false\n    }\n  }\n  return true\n}\n\nfunction unimplemented(): never {\n  throw new Error('not implemented')\n}\n\nfunction splitArray<T>(arr: T[], chunkSize: number, fill: boolean = true): (T | null)[][] {\n  const res = []\n\n  for (let i = 0; i < arr.length; i += chunkSize) {\n    const slice: (T | null)[] = arr.slice(i, i + chunkSize)\n    while (fill && slice.length < chunkSize) {\n      slice.push(null)\n    }\n    res.push(slice)\n  }\n\n  return res\n}\n\nexport {\n  deepMerge,\n  defaultItems,\n  genItems,\n  isObject,\n  isSquence,\n  pad,\n  Range,\n  range,\n  splitArray,\n  traverse,\n  unimplemented,\n}\n","import { FieldPattern, FieldWrapper, type CronSegment, type SegmentFromString } from './types'\nimport { isSquence, range, unimplemented } from './util'\n\nclass NoSpecificSegment implements CronSegment {\n  field: FieldWrapper\n  type: FieldPattern = FieldPattern.NoSpecific\n\n  constructor(field: FieldWrapper) {\n    this.field = field\n  }\n\n  toCron() {\n    return '?'\n  }\n\n  toArray() {\n    return []\n  }\n\n  get items() {\n    return {}\n  }\n\n  static fromString(str: string, field: FieldWrapper) {\n    if (str !== '?') {\n      return null\n    }\n    return new NoSpecificSegment(field)\n  }\n}\n\nclass AnySegment implements CronSegment {\n  field: FieldWrapper\n  type: FieldPattern = FieldPattern.Any\n\n  constructor(field: FieldWrapper) {\n    this.field = field\n  }\n\n  toCron() {\n    return '*'\n  }\n\n  toArray() {\n    return []\n  }\n\n  get items() {\n    return {}\n  }\n\n  static fromString(str: string, field: FieldWrapper) {\n    if (str !== '*') {\n      return null\n    }\n    return new AnySegment(field)\n  }\n\n  static fromArray(arr: number[], field: FieldWrapper) {\n    const { items } = field\n\n    if (arr.length === 0) {\n      return new AnySegment(field)\n    }\n    if (arr.length !== items.length) {\n      return null\n    }\n\n    for (const item of items) {\n      if (!arr.includes(item.value)) {\n        return null\n      }\n    }\n    if (!isSquence(items.map((item) => item.value))) {\n      return null\n    }\n    return new AnySegment(field)\n  }\n}\n\nclass RangeSegment implements CronSegment {\n  static re = /^\\d+-\\d+$/\n\n  field: FieldWrapper\n  type: FieldPattern = FieldPattern.Range\n  start: number\n  end: number\n\n  constructor(field: FieldWrapper, start: number, end: number) {\n    this.field = field\n    this.start = start\n    this.end = end\n  }\n\n  toCron() {\n    return `${this.start}-${this.end}`\n  }\n\n  toArray() {\n    const start = this.start\n    const end = this.end\n\n    return range(start, end)\n  }\n\n  get items() {\n    return {\n      start: this.field.itemMap[this.start],\n      end: this.field.itemMap[this.end],\n    }\n  }\n\n  static fromString(str: string, field: FieldWrapper) {\n    if (!RangeSegment.re.test(str)) {\n      return null\n    }\n\n    const { min, max } = field\n    const range = str.split('-')\n    const start = parseInt(range[0])\n    const end = parseInt(range[1])\n\n    if (start > end || start < min || end > max) {\n      return null\n    }\n\n    return new RangeSegment(field, start, end)\n  }\n}\n\nfunction _rangeWithStep(n: number, min: number, max: number) {\n  const res = []\n  for (let i = min; i <= max; i += n) {\n    res.push(i)\n  }\n  return res\n}\nclass StepSegment implements CronSegment {\n  static re = /^(\\*|\\d+-\\d+)\\/\\d+$/\n\n  field: FieldWrapper\n  step: number\n  start: number\n  end: number\n\n  constructor(field: FieldWrapper, step: number, start?: number, end?: number) {\n    this.field = field\n    this.step = step\n    this.start = start ?? field.min\n    this.end = end ?? field.max\n  }\n\n  get type() {\n    const { min, max } = this.field\n    if (this.start !== min || max - this.end >= this.step) {\n      return FieldPattern.RangeStep\n    }\n    return FieldPattern.Step\n  }\n\n  toCron() {\n    if (this.type == FieldPattern.RangeStep) {\n      return `${this.start}-${this.end}/${this.step}`\n    }\n    return `*/${this.step}`\n  }\n\n  toArray() {\n    return _rangeWithStep(this.step, this.start, this.end)\n  }\n\n  get items() {\n    return {\n      step: this.field.itemMap[this.step],\n      start: this.field.itemMap[this.start],\n      end: this.field.itemMap[this.end],\n    }\n  }\n\n  static fromString(str: string, field: FieldWrapper) {\n    if (!StepSegment.re.test(str)) {\n      return null\n    }\n\n    const [rangeStr, stepStr] = str.split('/')\n    const step = parseInt(stepStr)\n\n    if (step > field.items.length) {\n      return null\n    }\n\n    const range = str.split('-').map((s) => parseInt(s))\n    const min = rangeStr == '*' ? field.min : range[0]\n    const max = rangeStr == '*' ? field.max : range[1]\n\n    if (_rangeWithStep(step, min, max).length == 0) {\n      return null\n    }\n\n    return new StepSegment(field, step, min, max)\n  }\n\n  static fromArray(arr: number[], field: FieldWrapper) {\n    if (arr.length < 3) {\n      return null\n    }\n\n    const step = arr[1] - arr[0]\n    if (step <= 1) {\n      return null\n    }\n\n    for (let i = 2; i < arr.length; i++) {\n      if (arr[i] - arr[i - 1] != step) {\n        return null\n      }\n    }\n\n    return new StepSegment(field, step, arr[0], arr[arr.length - 1])\n  }\n}\n\nclass ValueSegment implements CronSegment {\n  field: FieldWrapper\n  type: FieldPattern = FieldPattern.Value\n  value: number\n\n  constructor(field: FieldWrapper, value: number) {\n    this.field = field\n    this.value = value\n  }\n\n  toCron() {\n    return `${this.value}`\n  }\n\n  toArray() {\n    return [this.value]\n  }\n\n  get items() {\n    return {\n      value: this.field.itemMap[this.value],\n    }\n  }\n\n  static fromString(str: string, field: FieldWrapper) {\n    const { min, max } = field\n    const value = parseInt(str)\n    return String(value) === str && value >= min && value <= max\n      ? new ValueSegment(field, value)\n      : null\n  }\n\n  static fromArray(arr: number[], field: FieldWrapper) {\n    const { min, max } = field\n\n    if (arr.length != 1) {\n      return null\n    }\n\n    const value = arr[0]\n    if (value < min || value > max) {\n      return null\n    }\n\n    return value\n  }\n}\n\nclass CombinedSegment implements CronSegment {\n  static segmentFactories: SegmentFromString[] = [\n    AnySegment.fromString,\n    StepSegment.fromString,\n    RangeSegment.fromString,\n    ValueSegment.fromString,\n  ]\n\n  field: FieldWrapper\n  segments: CronSegment[]\n\n  constructor(field: FieldWrapper, segments: CronSegment[] = []) {\n    this.field = field\n    this.segments = segments\n  }\n\n  get type() {\n    if (this.segments.length == 1) {\n      return this.segments[0].type\n    }\n    return FieldPattern.Range\n  }\n\n  addSegment(segment: CronSegment) {\n    this.segments.push(segment)\n  }\n\n  toCron() {\n    return this.segments.map((c) => c.toCron()).join(',')\n  }\n\n  toArray() {\n    const values = new Set<number>()\n    for (const seg of this.segments) {\n      seg.toArray().forEach((value) => values.add(value))\n    }\n    return Array.from(values)\n  }\n\n  get items() {\n    return unimplemented()\n  }\n\n  static fromString(str: string, field: FieldWrapper) {\n    const factories = field.segmentFactories ?? CombinedSegment.segmentFactories\n    let segments: CronSegment[] = []\n    for (const strSeg of str.split(',')) {\n      if (strSeg === '*') {\n        segments = [new AnySegment(field)]\n        break\n      }\n\n      let segment = null\n      for (const fromString of factories) {\n        segment = fromString(strSeg, field)\n        if (segment !== null) {\n          break\n        }\n      }\n      if (segment === null) {\n        return null\n      }\n      segments.push(segment)\n    }\n    return new CombinedSegment(field, segments)\n  }\n\n  static fromArray(arr: number[], field: FieldWrapper) {\n    const { min, max } = field\n\n    const minValue = arr[0]\n    const maxValue = arr[arr.length - 1]\n\n    if (minValue < min) {\n      return null\n    }\n    if (maxValue > max) {\n      return null\n    }\n\n    const ranges: CronSegment[] = []\n    let start = 0\n    for (let i = 0; i < arr.length; i++) {\n      if (arr[i + 1] === undefined || arr[i + 1] - arr[i] > 1) {\n        if (i === start) {\n          ranges.push(new ValueSegment(field, arr[start]))\n        } else {\n          ranges.push(new RangeSegment(field, arr[start], arr[i]))\n        }\n        start = i + 1\n      }\n    }\n\n    return new CombinedSegment(field, ranges)\n  }\n}\n\nfunction cronToSegment(cron: string, field: FieldWrapper) {\n  return CombinedSegment.fromString(cron, field)\n}\n\nfunction arrayToSegment(arr: number[], field: FieldWrapper) {\n  for (const fromArray of [\n    AnySegment.fromArray,\n    StepSegment.fromArray,\n    CombinedSegment.fromArray,\n  ]) {\n    const seg = fromArray(arr, field)\n    if (seg != null) {\n      return seg\n    }\n  }\n  return null\n}\n\nexport {\n  AnySegment,\n  arrayToSegment,\n  CombinedSegment,\n  cronToSegment,\n  NoSpecificSegment,\n  RangeSegment,\n  StepSegment,\n  ValueSegment,\n}\n","/*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n */\n\nvar objectToString = Object.prototype.toString;\nvar isArray = Array.isArray || function isArrayPolyfill (object) {\n  return objectToString.call(object) === '[object Array]';\n};\n\nfunction isFunction (object) {\n  return typeof object === 'function';\n}\n\n/**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\nfunction typeStr (obj) {\n  return isArray(obj) ? 'array' : typeof obj;\n}\n\nfunction escapeRegExp (string) {\n  return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n}\n\n/**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\nfunction hasProperty (obj, propName) {\n  return obj != null && typeof obj === 'object' && (propName in obj);\n}\n\n/**\n * Safe way of detecting whether or not the given thing is a primitive and\n * whether it has the given property\n */\nfunction primitiveHasOwnProperty (primitive, propName) {\n  return (\n    primitive != null\n    && typeof primitive !== 'object'\n    && primitive.hasOwnProperty\n    && primitive.hasOwnProperty(propName)\n  );\n}\n\n// Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n// See https://github.com/janl/mustache.js/issues/189\nvar regExpTest = RegExp.prototype.test;\nfunction testRegExp (re, string) {\n  return regExpTest.call(re, string);\n}\n\nvar nonSpaceRe = /\\S/;\nfunction isWhitespace (string) {\n  return !testRegExp(nonSpaceRe, string);\n}\n\nvar entityMap = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  '/': '&#x2F;',\n  '`': '&#x60;',\n  '=': '&#x3D;'\n};\n\nfunction escapeHtml (string) {\n  return String(string).replace(/[&<>\"'`=\\/]/g, function fromEntityMap (s) {\n    return entityMap[s];\n  });\n}\n\nvar whiteRe = /\\s*/;\nvar spaceRe = /\\s+/;\nvar equalsRe = /\\s*=/;\nvar curlyRe = /\\s*\\}/;\nvar tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n/**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n *\n * Tokens for partials also contain two more elements: 1) a string value of\n * indendation prior to that tag and 2) the index of that tag on that line -\n * eg a value of 2 indicates the partial is the third tag on this line.\n */\nfunction parseTemplate (template, tags) {\n  if (!template)\n    return [];\n  var lineHasNonSpace = false;\n  var sections = [];     // Stack to hold section tokens\n  var tokens = [];       // Buffer to hold the tokens\n  var spaces = [];       // Indices of whitespace tokens on the current line\n  var hasTag = false;    // Is there a {{tag}} on the current line?\n  var nonSpace = false;  // Is there a non-space char on the current line?\n  var indentation = '';  // Tracks indentation for tags that use it\n  var tagIndex = 0;      // Stores a count of number of tags encountered on a line\n\n  // Strips all whitespace tokens array for the current line\n  // if there was a {{#tag}} on it and otherwise only space.\n  function stripSpace () {\n    if (hasTag && !nonSpace) {\n      while (spaces.length)\n        delete tokens[spaces.pop()];\n    } else {\n      spaces = [];\n    }\n\n    hasTag = false;\n    nonSpace = false;\n  }\n\n  var openingTagRe, closingTagRe, closingCurlyRe;\n  function compileTags (tagsToCompile) {\n    if (typeof tagsToCompile === 'string')\n      tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n    if (!isArray(tagsToCompile) || tagsToCompile.length !== 2)\n      throw new Error('Invalid tags: ' + tagsToCompile);\n\n    openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n    closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n    closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n  }\n\n  compileTags(tags || mustache.tags);\n\n  var scanner = new Scanner(template);\n\n  var start, type, value, chr, token, openSection;\n  while (!scanner.eos()) {\n    start = scanner.pos;\n\n    // Match any text between tags.\n    value = scanner.scanUntil(openingTagRe);\n\n    if (value) {\n      for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n        chr = value.charAt(i);\n\n        if (isWhitespace(chr)) {\n          spaces.push(tokens.length);\n          indentation += chr;\n        } else {\n          nonSpace = true;\n          lineHasNonSpace = true;\n          indentation += ' ';\n        }\n\n        tokens.push([ 'text', chr, start, start + 1 ]);\n        start += 1;\n\n        // Check for whitespace on the current line.\n        if (chr === '\\n') {\n          stripSpace();\n          indentation = '';\n          tagIndex = 0;\n          lineHasNonSpace = false;\n        }\n      }\n    }\n\n    // Match the opening tag.\n    if (!scanner.scan(openingTagRe))\n      break;\n\n    hasTag = true;\n\n    // Get the tag type.\n    type = scanner.scan(tagRe) || 'name';\n    scanner.scan(whiteRe);\n\n    // Get the tag value.\n    if (type === '=') {\n      value = scanner.scanUntil(equalsRe);\n      scanner.scan(equalsRe);\n      scanner.scanUntil(closingTagRe);\n    } else if (type === '{') {\n      value = scanner.scanUntil(closingCurlyRe);\n      scanner.scan(curlyRe);\n      scanner.scanUntil(closingTagRe);\n      type = '&';\n    } else {\n      value = scanner.scanUntil(closingTagRe);\n    }\n\n    // Match the closing tag.\n    if (!scanner.scan(closingTagRe))\n      throw new Error('Unclosed tag at ' + scanner.pos);\n\n    if (type == '>') {\n      token = [ type, value, start, scanner.pos, indentation, tagIndex, lineHasNonSpace ];\n    } else {\n      token = [ type, value, start, scanner.pos ];\n    }\n    tagIndex++;\n    tokens.push(token);\n\n    if (type === '#' || type === '^') {\n      sections.push(token);\n    } else if (type === '/') {\n      // Check section nesting.\n      openSection = sections.pop();\n\n      if (!openSection)\n        throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n      if (openSection[1] !== value)\n        throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n    } else if (type === 'name' || type === '{' || type === '&') {\n      nonSpace = true;\n    } else if (type === '=') {\n      // Set the tags for the next time around.\n      compileTags(value);\n    }\n  }\n\n  stripSpace();\n\n  // Make sure there are no open sections when we're done.\n  openSection = sections.pop();\n\n  if (openSection)\n    throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n  return nestTokens(squashTokens(tokens));\n}\n\n/**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\nfunction squashTokens (tokens) {\n  var squashedTokens = [];\n\n  var token, lastToken;\n  for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n    token = tokens[i];\n\n    if (token) {\n      if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n        lastToken[1] += token[1];\n        lastToken[3] = token[3];\n      } else {\n        squashedTokens.push(token);\n        lastToken = token;\n      }\n    }\n  }\n\n  return squashedTokens;\n}\n\n/**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\nfunction nestTokens (tokens) {\n  var nestedTokens = [];\n  var collector = nestedTokens;\n  var sections = [];\n\n  var token, section;\n  for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n    token = tokens[i];\n\n    switch (token[0]) {\n      case '#':\n      case '^':\n        collector.push(token);\n        sections.push(token);\n        collector = token[4] = [];\n        break;\n      case '/':\n        section = sections.pop();\n        section[5] = token[2];\n        collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n        break;\n      default:\n        collector.push(token);\n    }\n  }\n\n  return nestedTokens;\n}\n\n/**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\nfunction Scanner (string) {\n  this.string = string;\n  this.tail = string;\n  this.pos = 0;\n}\n\n/**\n * Returns `true` if the tail is empty (end of string).\n */\nScanner.prototype.eos = function eos () {\n  return this.tail === '';\n};\n\n/**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\nScanner.prototype.scan = function scan (re) {\n  var match = this.tail.match(re);\n\n  if (!match || match.index !== 0)\n    return '';\n\n  var string = match[0];\n\n  this.tail = this.tail.substring(string.length);\n  this.pos += string.length;\n\n  return string;\n};\n\n/**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\nScanner.prototype.scanUntil = function scanUntil (re) {\n  var index = this.tail.search(re), match;\n\n  switch (index) {\n    case -1:\n      match = this.tail;\n      this.tail = '';\n      break;\n    case 0:\n      match = '';\n      break;\n    default:\n      match = this.tail.substring(0, index);\n      this.tail = this.tail.substring(index);\n  }\n\n  this.pos += match.length;\n\n  return match;\n};\n\n/**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\nfunction Context (view, parentContext) {\n  this.view = view;\n  this.cache = { '.': this.view };\n  this.parent = parentContext;\n}\n\n/**\n * Creates a new context using the given view with this context\n * as the parent.\n */\nContext.prototype.push = function push (view) {\n  return new Context(view, this);\n};\n\n/**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\nContext.prototype.lookup = function lookup (name) {\n  var cache = this.cache;\n\n  var value;\n  if (cache.hasOwnProperty(name)) {\n    value = cache[name];\n  } else {\n    var context = this, intermediateValue, names, index, lookupHit = false;\n\n    while (context) {\n      if (name.indexOf('.') > 0) {\n        intermediateValue = context.view;\n        names = name.split('.');\n        index = 0;\n\n        /**\n         * Using the dot notion path in `name`, we descend through the\n         * nested objects.\n         *\n         * To be certain that the lookup has been successful, we have to\n         * check if the last object in the path actually has the property\n         * we are looking for. We store the result in `lookupHit`.\n         *\n         * This is specially necessary for when the value has been set to\n         * `undefined` and we want to avoid looking up parent contexts.\n         *\n         * In the case where dot notation is used, we consider the lookup\n         * to be successful even if the last \"object\" in the path is\n         * not actually an object but a primitive (e.g., a string, or an\n         * integer), because it is sometimes useful to access a property\n         * of an autoboxed primitive, such as the length of a string.\n         **/\n        while (intermediateValue != null && index < names.length) {\n          if (index === names.length - 1)\n            lookupHit = (\n              hasProperty(intermediateValue, names[index])\n              || primitiveHasOwnProperty(intermediateValue, names[index])\n            );\n\n          intermediateValue = intermediateValue[names[index++]];\n        }\n      } else {\n        intermediateValue = context.view[name];\n\n        /**\n         * Only checking against `hasProperty`, which always returns `false` if\n         * `context.view` is not an object. Deliberately omitting the check\n         * against `primitiveHasOwnProperty` if dot notation is not used.\n         *\n         * Consider this example:\n         * ```\n         * Mustache.render(\"The length of a football field is {{#length}}{{length}}{{/length}}.\", {length: \"100 yards\"})\n         * ```\n         *\n         * If we were to check also against `primitiveHasOwnProperty`, as we do\n         * in the dot notation case, then render call would return:\n         *\n         * \"The length of a football field is 9.\"\n         *\n         * rather than the expected:\n         *\n         * \"The length of a football field is 100 yards.\"\n         **/\n        lookupHit = hasProperty(context.view, name);\n      }\n\n      if (lookupHit) {\n        value = intermediateValue;\n        break;\n      }\n\n      context = context.parent;\n    }\n\n    cache[name] = value;\n  }\n\n  if (isFunction(value))\n    value = value.call(this.view);\n\n  return value;\n};\n\n/**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\nfunction Writer () {\n  this.templateCache = {\n    _cache: {},\n    set: function set (key, value) {\n      this._cache[key] = value;\n    },\n    get: function get (key) {\n      return this._cache[key];\n    },\n    clear: function clear () {\n      this._cache = {};\n    }\n  };\n}\n\n/**\n * Clears all cached templates in this writer.\n */\nWriter.prototype.clearCache = function clearCache () {\n  if (typeof this.templateCache !== 'undefined') {\n    this.templateCache.clear();\n  }\n};\n\n/**\n * Parses and caches the given `template` according to the given `tags` or\n * `mustache.tags` if `tags` is omitted,  and returns the array of tokens\n * that is generated from the parse.\n */\nWriter.prototype.parse = function parse (template, tags) {\n  var cache = this.templateCache;\n  var cacheKey = template + ':' + (tags || mustache.tags).join(':');\n  var isCacheEnabled = typeof cache !== 'undefined';\n  var tokens = isCacheEnabled ? cache.get(cacheKey) : undefined;\n\n  if (tokens == undefined) {\n    tokens = parseTemplate(template, tags);\n    isCacheEnabled && cache.set(cacheKey, tokens);\n  }\n  return tokens;\n};\n\n/**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n *\n * If the optional `config` argument is given here, then it should be an\n * object with a `tags` attribute or an `escape` attribute or both.\n * If an array is passed, then it will be interpreted the same way as\n * a `tags` attribute on a `config` object.\n *\n * The `tags` attribute of a `config` object must be an array with two\n * string values: the opening and closing tags used in the template (e.g.\n * [ \"<%\", \"%>\" ]). The default is to mustache.tags.\n *\n * The `escape` attribute of a `config` object must be a function which\n * accepts a string as input and outputs a safely escaped string.\n * If an `escape` function is not provided, then an HTML-safe string\n * escaping function is used as the default.\n */\nWriter.prototype.render = function render (template, view, partials, config) {\n  var tags = this.getConfigTags(config);\n  var tokens = this.parse(template, tags);\n  var context = (view instanceof Context) ? view : new Context(view, undefined);\n  return this.renderTokens(tokens, context, partials, template, config);\n};\n\n/**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\nWriter.prototype.renderTokens = function renderTokens (tokens, context, partials, originalTemplate, config) {\n  var buffer = '';\n\n  var token, symbol, value;\n  for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n    value = undefined;\n    token = tokens[i];\n    symbol = token[0];\n\n    if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate, config);\n    else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate, config);\n    else if (symbol === '>') value = this.renderPartial(token, context, partials, config);\n    else if (symbol === '&') value = this.unescapedValue(token, context);\n    else if (symbol === 'name') value = this.escapedValue(token, context, config);\n    else if (symbol === 'text') value = this.rawValue(token);\n\n    if (value !== undefined)\n      buffer += value;\n  }\n\n  return buffer;\n};\n\nWriter.prototype.renderSection = function renderSection (token, context, partials, originalTemplate, config) {\n  var self = this;\n  var buffer = '';\n  var value = context.lookup(token[1]);\n\n  // This function is used to render an arbitrary template\n  // in the current context by higher-order sections.\n  function subRender (template) {\n    return self.render(template, context, partials, config);\n  }\n\n  if (!value) return;\n\n  if (isArray(value)) {\n    for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n      buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate, config);\n    }\n  } else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') {\n    buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate, config);\n  } else if (isFunction(value)) {\n    if (typeof originalTemplate !== 'string')\n      throw new Error('Cannot use higher-order sections without the original template');\n\n    // Extract the portion of the original template that the section contains.\n    value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n    if (value != null)\n      buffer += value;\n  } else {\n    buffer += this.renderTokens(token[4], context, partials, originalTemplate, config);\n  }\n  return buffer;\n};\n\nWriter.prototype.renderInverted = function renderInverted (token, context, partials, originalTemplate, config) {\n  var value = context.lookup(token[1]);\n\n  // Use JavaScript's definition of falsy. Include empty arrays.\n  // See https://github.com/janl/mustache.js/issues/186\n  if (!value || (isArray(value) && value.length === 0))\n    return this.renderTokens(token[4], context, partials, originalTemplate, config);\n};\n\nWriter.prototype.indentPartial = function indentPartial (partial, indentation, lineHasNonSpace) {\n  var filteredIndentation = indentation.replace(/[^ \\t]/g, '');\n  var partialByNl = partial.split('\\n');\n  for (var i = 0; i < partialByNl.length; i++) {\n    if (partialByNl[i].length && (i > 0 || !lineHasNonSpace)) {\n      partialByNl[i] = filteredIndentation + partialByNl[i];\n    }\n  }\n  return partialByNl.join('\\n');\n};\n\nWriter.prototype.renderPartial = function renderPartial (token, context, partials, config) {\n  if (!partials) return;\n  var tags = this.getConfigTags(config);\n\n  var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n  if (value != null) {\n    var lineHasNonSpace = token[6];\n    var tagIndex = token[5];\n    var indentation = token[4];\n    var indentedValue = value;\n    if (tagIndex == 0 && indentation) {\n      indentedValue = this.indentPartial(value, indentation, lineHasNonSpace);\n    }\n    var tokens = this.parse(indentedValue, tags);\n    return this.renderTokens(tokens, context, partials, indentedValue, config);\n  }\n};\n\nWriter.prototype.unescapedValue = function unescapedValue (token, context) {\n  var value = context.lookup(token[1]);\n  if (value != null)\n    return value;\n};\n\nWriter.prototype.escapedValue = function escapedValue (token, context, config) {\n  var escape = this.getConfigEscape(config) || mustache.escape;\n  var value = context.lookup(token[1]);\n  if (value != null)\n    return (typeof value === 'number' && escape === mustache.escape) ? String(value) : escape(value);\n};\n\nWriter.prototype.rawValue = function rawValue (token) {\n  return token[1];\n};\n\nWriter.prototype.getConfigTags = function getConfigTags (config) {\n  if (isArray(config)) {\n    return config;\n  }\n  else if (config && typeof config === 'object') {\n    return config.tags;\n  }\n  else {\n    return undefined;\n  }\n};\n\nWriter.prototype.getConfigEscape = function getConfigEscape (config) {\n  if (config && typeof config === 'object' && !isArray(config)) {\n    return config.escape;\n  }\n  else {\n    return undefined;\n  }\n};\n\nvar mustache = {\n  name: 'mustache.js',\n  version: '4.2.0',\n  tags: [ '{{', '}}' ],\n  clearCache: undefined,\n  escape: undefined,\n  parse: undefined,\n  render: undefined,\n  Scanner: undefined,\n  Context: undefined,\n  Writer: undefined,\n  /**\n   * Allows a user to override the default caching strategy, by providing an\n   * object with set, get and clear methods. This can also be used to disable\n   * the cache by setting it to the literal `undefined`.\n   */\n  set templateCache (cache) {\n    defaultWriter.templateCache = cache;\n  },\n  /**\n   * Gets the default or overridden caching object from the default writer.\n   */\n  get templateCache () {\n    return defaultWriter.templateCache;\n  }\n};\n\n// All high-level mustache.* functions use this writer.\nvar defaultWriter = new Writer();\n\n/**\n * Clears all cached templates in the default writer.\n */\nmustache.clearCache = function clearCache () {\n  return defaultWriter.clearCache();\n};\n\n/**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\nmustache.parse = function parse (template, tags) {\n  return defaultWriter.parse(template, tags);\n};\n\n/**\n * Renders the `template` with the given `view`, `partials`, and `config`\n * using the default writer.\n */\nmustache.render = function render (template, view, partials, config) {\n  if (typeof template !== 'string') {\n    throw new TypeError('Invalid template! Template should be a \"string\" ' +\n                        'but \"' + typeStr(template) + '\" was given as the first ' +\n                        'argument for mustache#render(template, view, partials)');\n  }\n\n  return defaultWriter.render(template, view, partials, config);\n};\n\n// Export the escaping function so that the user may override it.\n// See https://github.com/janl/mustache.js/issues/244\nmustache.escape = escapeHtml;\n\n// Export these mainly for testing, but also for advanced usage.\nmustache.Scanner = Scanner;\nmustache.Context = Context;\nmustache.Writer = Writer;\n\nexport default mustache;\n","import type { FieldPattern, TextPosition } from '@/types'\nimport Mustache from 'mustache'\nimport { deepMerge, traverse } from '../util'\nimport cn from './cn'\nimport da from './da'\nimport de from './de'\nimport en from './en'\nimport es from './es'\nimport fr from './fr'\nimport he from './he'\nimport hi from './hi'\nimport ja from './ja'\nimport ko from './ko'\nimport pt from './pt'\nimport ru from './ru'\nimport type { Localization } from './types'\n\nconst locales: Record<string, Localization> = {\n  empty: {},\n  en,\n  de,\n  pt,\n  es,\n  da,\n  zh: cn,\n  he,\n  ru,\n  fr,\n  hi,\n  ja,\n  ko,\n}\n\nclass L10nEngine {\n  dict: Localization\n\n  constructor(dict: Localization) {\n    this.dict = dict\n  }\n\n  /**\n   * Gets a localization template by traversing the dictionary using provided keys.\n   * @param keys - Array of keys to traverse through the localization dictionary\n   * @returns The found template string or empty string if not found\n   */\n  getTemplate(...keys: string[]) {\n    const k = keys.map((key) => [key, '*'])\n    return traverse(this.dict, ...k) || ''\n  }\n\n  /**\n   * Renders a localization template with the provided parameters using Mustache.\n   * @param periodId - The period identifier (e.g. 'year', 'month')\n   * @param fieldId - The field identifier (e.g. 'hour', 'minute')\n   * @param fieldPattern - The pattern type of the field\n   * @param position - The text position\n   * @param params - Parameters to be interpolated into the template\n   * @returns The rendered localization string\n   */\n  render(\n    periodId: string,\n    fieldId: string,\n    fieldPattern: FieldPattern,\n    position: TextPosition,\n    params: any,\n  ) {\n    const template = this.getTemplate(periodId, fieldId, fieldPattern, position)\n    return Mustache.render(template, params || {})\n  }\n}\n\n/**\n * Creates a localization engine for the specified locale.\n * @param localeCode - Locale code (e.g. 'en', 'en-GB', 'de-DE')\n * @param mixin - Optional dictionary to override default locale strings\n * @returns A new L10nEngine instance for the specified locale with English as fallback\n */\nfunction createL10n(localeCode: string, mixin?: Localization) {\n  const [language] = localeCode.split('-')\n  const l = locales[localeCode.toLowerCase()] || locales[language.toLowerCase()] || locales.en\n  // Note: always use an empty object as target\n  const dict = deepMerge({}, locales.en, l, mixin || {}) as Localization\n  return new L10nEngine(dict)\n}\n\nexport { createL10n, L10nEngine }\n\n// The following prompt was used for localizations translated with GPT-4:\n//\n// You are a service that translates user requests into JSON objects of type \"Localizations\" according to the following TypeScript definitions:\n// ```typescript\n// export type PartialRecord<K extends keyof any, T> = Partial<Record<K, T>>\n\n// export type PositionedLocalization = PartialRecord<TextPosition, string>\n// export type CronLocalization = PartialRecord<FieldPattern | '*', PositionedLocalization>\n\n// export interface FieldLocalization {\n//   // Allow custom field ids\n//   [fieldId: string]: unknown\n\n//   /** `*` is used as a wildcard and matches any field id */\n//   '*'?: CronLocalization\n//   second?: CronLocalization\n//   minute?: CronLocalization\n//   hour?: CronLocalization\n//   day?: CronLocalization\n//   month?: CronLocalization\n//   dayOfWeek?: CronLocalization\n// }\n\n// export type PeriodLocalization = PositionedLocalization | FieldLocalization\n\n// /**\n//  * Interface to define localizations for vue-js-cron\n//  * The localization strings are accessed by {periodId}.{fieldId}.{fieldPattern}.{position}\n//  */\n// export interface Localization {\n//   /** Allows custom period ids */\n//   [periodId: string]: unknown\n\n//   /** `*` is used as a wildcard and matches any period id */\n//   '*'?: PeriodLocalization\n//   minute?: PeriodLocalization\n//   hour?: PeriodLocalization\n//   day?: PeriodLocalization\n//   week?: PeriodLocalization\n//   month?: PeriodLocalization\n//   year?: PeriodLocalization\n// }\n// ```\n// The following is a user request:\n// \"\"\"\n// Translate the following Javascript object from German into Russian:\n// {\n//   '*': {\n//     prefix: 'Jede',\n//     suffix: '',\n//     text: 'Unknown',\n//     '*': {\n//       value: { text: '{{value.text}}' },\n//       range: { text: '{{start.text}}-{{end.text}}' },\n//       step: { text: 'alle {{step.value}}' },\n//     },\n//     month: {\n//       '*': { prefix: 'im' },\n//       any: {\n//         prefix: 'in',\n//         text: 'jedem Monat',\n//       },\n//       value: { text: '{{value.alt}}' },\n//       range: { text: '{{start.alt}}-{{end.alt}}' },\n//     },\n//     day: {\n//       '*': { prefix: 'den' },\n//       any: {\n//         prefix: 'an',\n//         text: 'jedem Tag',\n//       },\n//       step: {\n//         prefix: '',\n//         text: 'alle {{step.value}} Tage',\n//       },\n//       noSpecific: {\n//         prefix: 'an',\n//         text: 'keinem bestimmten Tag',\n//       },\n//     },\n//     dayOfWeek: {\n//       '*': { prefix: 'am' },\n//       any: {\n//         prefix: 'an',\n//         text: 'jedem Wochentag',\n//       },\n//       value: { text: '{{value.alt}}' },\n//       range: { text: '{{start.alt}}-{{end.alt}}' },\n//       noSpecific: {\n//         prefix: 'und',\n//         text: 'keinem bestimmten Wochentag',\n//       },\n//     },\n//     hour: {\n//       '*': { prefix: 'um' },\n//       any: {\n//         prefix: 'zu',\n//         text: 'jeder Stunde',\n//       },\n//       step: {\n//         prefix: '',\n//         text: 'alle {{step.value}} Stunden',\n//       },\n//     },\n//     minute: {\n//       '*': { prefix: ':' },\n//       any: { text: 'jede Minute' },\n//       step: {\n//         prefix: '',\n//         text: 'alle {{step.value}} Minuten',\n//       },\n//     },\n//     second: {\n//       '*': { prefix: ':' },\n//       any: { text: 'jede Sekunde' },\n//       step: {\n//         prefix: '',\n//         text: 'alle {{step.value}} Sekunden',\n//       },\n//     },\n//   },\n//   minute: {\n//     text: 'Minute',\n//   },\n//   hour: {\n//     text: 'Stunde',\n//     minute: {\n//       '*': {\n//         prefix: 'zu',\n//         suffix: 'Minute(n)',\n//       },\n//       any: { text: 'jeder' },\n//     },\n//   },\n//   day: {\n//     prefix: 'Jeden',\n//     text: 'Tag',\n//   },\n//   week: {\n//     text: 'Woche',\n//   },\n//   month: {\n//     prefix: 'Jedes',\n//     text: 'Monat',\n//   },\n//   year: {\n//     prefix: 'Jedes',\n//     text: 'Jahr',\n//   },\n\n//   //quartz format\n//   'q-second': {\n//     text: 'Sekunde',\n//   },\n//   'q-minute': {\n//     text: 'Minute',\n//     second: {\n//       '*': {\n//         prefix: 'und',\n//       },\n//     },\n//   },\n//   'q-hour': {\n//     text: 'Stunde',\n//     minute: {\n//       '*': {\n//         prefix: 'und',\n//       },\n//     },\n//     second: {\n//       '*': {\n//         prefix: 'und',\n//       },\n//     },\n//   },\n// }\n// \"\"\"\n// The following is the user request translated into a JSON object with 2 spaces of indentation and no properties with the value undefined:\n","import type { Localization } from './types'\n\nconst locale: Localization = {\n  '*': {\n    prefix: 'Every',\n    suffix: '',\n    text: 'Unknown',\n    '*': {\n      any: { text: 'every {{field.id}}' },\n      value: { text: '{{value.text}}' },\n      range: { text: '{{start.text}}-{{end.text}}' },\n      step: { text: 'every {{step.value}}' },\n      rangeStep: { text: '{{start.text}}-{{end.text}}/{{step.value}}' },\n    },\n    month: {\n      '*': { prefix: 'in' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      rangeStep: { text: '{{start.alt}}-{{end.alt}}/{{step.value}}' },\n    },\n    day: {\n      '*': { prefix: 'on' },\n      noSpecific: {\n        text: 'no specific day',\n      },\n    },\n    dayOfWeek: {\n      '*': { prefix: 'on' },\n      any: { text: 'every day of the week' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      rangeStep: { text: '{{start.alt}}-{{end.alt}}/{{step.value}}' },\n      noSpecific: {\n        text: 'no specific day of the week',\n      },\n    },\n    hour: {\n      '*': { prefix: 'at' },\n    },\n    minute: {\n      '*': { prefix: ':' },\n    },\n    second: {\n      '*': { prefix: ':' },\n    },\n  },\n  minute: {\n    text: 'Minute',\n  },\n  hour: {\n    text: 'Hour',\n    minute: {\n      '*': {\n        prefix: 'at',\n        suffix: 'minute(s)',\n      },\n      any: { text: 'every' },\n    },\n  },\n  day: {\n    text: 'Day',\n  },\n  week: {\n    text: 'Week',\n  },\n  month: {\n    text: 'Month',\n    dayOfWeek: {\n      '*': { prefix: 'and' },\n    },\n  },\n  year: {\n    text: 'Year',\n    dayOfWeek: {\n      '*': { prefix: 'and' },\n    },\n  },\n\n  //quartz format\n  'q-second': {\n    text: 'Second',\n  },\n  'q-minute': {\n    text: 'Minute',\n    second: {\n      '*': {\n        prefix: 'at',\n        suffix: 'second(s)',\n      },\n      any: { text: 'every' },\n    },\n  },\n  'q-hour': {\n    text: 'Hour',\n    minute: {\n      '*': {\n        prefix: 'at',\n      },\n    },\n  },\n}\n\nexport default locale\n","import type { Localization } from './types'\n\nconst locale: Localization = {\n  '*': {\n    prefix: 'Jede',\n    suffix: '',\n    text: 'Unknown',\n    '*': {\n      value: { text: '{{value.text}}' },\n      range: { text: '{{start.text}}-{{end.text}}' },\n      step: { text: 'alle {{step.value}}' },\n    },\n    month: {\n      '*': { prefix: 'im' },\n      any: {\n        prefix: 'in',\n        text: 'jedem Monat',\n      },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n    },\n    day: {\n      '*': { prefix: 'den' },\n      any: {\n        prefix: 'an',\n        text: 'jedem Tag',\n      },\n      step: {\n        prefix: '',\n        text: 'alle {{step.value}} Tage',\n      },\n      noSpecific: {\n        prefix: 'an',\n        text: 'keinem bestimmten Tag',\n      },\n    },\n    dayOfWeek: {\n      '*': { prefix: 'am' },\n      any: {\n        prefix: 'an',\n        text: 'jedem Wochentag',\n      },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      noSpecific: {\n        prefix: 'und',\n        text: 'keinem bestimmten Wochentag',\n      },\n    },\n    hour: {\n      '*': { prefix: 'um' },\n      any: {\n        prefix: 'zu',\n        text: 'jeder Stunde',\n      },\n      step: {\n        prefix: '',\n        text: 'alle {{step.value}} Stunden',\n      },\n    },\n    minute: {\n      '*': { prefix: ':' },\n      any: { text: 'jede Minute' },\n      step: {\n        prefix: '',\n        text: 'alle {{step.value}} Minuten',\n      },\n    },\n    second: {\n      '*': { prefix: ':' },\n      any: { text: 'jede Sekunde' },\n      step: {\n        prefix: '',\n        text: 'alle {{step.value}} Sekunden',\n      },\n    },\n  },\n  minute: {\n    text: 'Minute',\n  },\n  hour: {\n    text: 'Stunde',\n    minute: {\n      '*': {\n        prefix: 'zu',\n        suffix: 'Minute(n)',\n      },\n      any: { text: 'jeder' },\n    },\n  },\n  day: {\n    prefix: 'Jeden',\n    text: 'Tag',\n  },\n  week: {\n    text: 'Woche',\n  },\n  month: {\n    prefix: 'Jedes',\n    text: 'Monat',\n  },\n  year: {\n    prefix: 'Jedes',\n    text: 'Jahr',\n  },\n\n  //quartz format\n  'q-second': {\n    text: 'Sekunde',\n  },\n  'q-minute': {\n    text: 'Minute',\n    second: {\n      '*': {\n        prefix: 'und',\n      },\n    },\n  },\n  'q-hour': {\n    text: 'Stunde',\n    minute: {\n      '*': {\n        prefix: 'und',\n      },\n    },\n    second: {\n      '*': {\n        prefix: 'und',\n      },\n    },\n  },\n}\n\nexport default locale\n","import type { Localization } from './types'\n\nconst locale: Localization = {\n  '*': {\n    prefix: 'Todo(a)',\n    suffix: '',\n    text: 'Desconhecido',\n    '*': {\n      any: { text: 'todo {{field.id}}' },\n      value: { text: '{{value.text}}' },\n      range: { text: '{{start.text}}-{{end.text}}' },\n      step: { text: 'todo {{step.value}}' },\n    },\n    month: {\n      '*': { prefix: 'de' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      any: { text: 'todo mês' },\n    },\n    day: {\n      '*': { prefix: 'no(s) dia(s)' },\n      any: { text: 'todos' },\n    },\n    dayOfWeek: {\n      '*': { prefix: 'de' },\n      any: { text: 'todos dias da semana' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n    },\n    hour: {\n      '*': { prefix: 'às' },\n      any: { text: 'cada hora' },\n    },\n    minute: {\n      '*': { prefix: ':' },\n      any: { text: 'cada minuto' },\n    },\n  },\n  minute: {\n    text: 'Minuto',\n  },\n  hour: {\n    text: 'Hora',\n    minute: {\n      '*': {\n        prefix: 'e',\n        suffix: 'minuto(s)',\n      },\n      any: { text: 'cada' },\n    },\n  },\n  day: {\n    text: 'Dia',\n  },\n  week: {\n    text: 'Semana',\n  },\n  month: {\n    text: 'Mês',\n    dayOfWeek: {\n      '*': { prefix: 'e de' },\n    },\n  },\n  year: {\n    text: 'Ano',\n    dayOfWeek: {\n      '*': { prefix: 'e de' },\n    },\n  },\n}\n\nexport default locale\n","import type { Localization } from './types'\n\nconst locale: Localization = {\n  '*': {\n    prefix: 'todos los',\n    suffix: '',\n    text: 'Desconocido',\n    '*': {\n      any: { text: 'todos los {{ field.id }}' },\n      value: { text: '{{ value.text }}' },\n      range: { text: '{{ start.text }}-{{ end.text }}' },\n      step: { text: 'todos/as {{ step.value }}' },\n    },\n    month: {\n      '*': { prefix: 'en' },\n      any: { text: 'todos los meses' },\n      value: { text: '{{ value.alt }}' },\n      range: { text: '{{ start.alt }}-{{ end.alt }}' },\n    },\n    day: {\n      '*': { prefix: 'en' },\n      any: { text: 'todos los días' },\n      value: { text: 'los días {{ value.alt }}' },\n    },\n    dayOfWeek: {\n      '*': { prefix: 'de' },\n      any: { text: 'todos los días de la semana' },\n      value: { text: 'los {{ value.alt }}' },\n      range: { text: '{{ start.alt }}-{{ end.alt }}' },\n    },\n    hour: {\n      '*': { prefix: 'a' },\n      any: { text: 'todas las horas' },\n      value: { text: 'las {{ value.text }}' },\n    },\n    minute: {\n      '*': { prefix: ':' },\n      any: { text: 'todos los minutos' },\n    },\n  },\n  minute: {\n    prefix: 'todos los',\n    text: 'minutos',\n  },\n  hour: {\n    prefix: 'todas las',\n    text: 'horas',\n    minute: {\n      '*': {\n        prefix: 'a los',\n        suffix: 'minutos',\n      },\n      any: { text: 'todos', prefix: 'a', suffix: 'los minutos' },\n    },\n  },\n  day: {\n    text: 'Días',\n  },\n  week: {\n    text: 'Semanas',\n  },\n  month: {\n    text: 'Meses',\n    dayOfWeek: {\n      '*': { prefix: 'y' },\n    },\n  },\n  year: {\n    text: 'años',\n    dayOfWeek: {\n      '*': { prefix: 'y' },\n    },\n  },\n}\n\nexport default locale\n","import type { Localization } from './types'\n\nconst locale: Localization = {\n  '*': {\n    prefix: 'Hver',\n    suffix: '',\n    text: 'Ukendt',\n    '*': {\n      value: { text: '{{value.text}}' },\n      range: { text: '{{start.text}}-{{end.text}}' },\n      step: { text: 'hver {{step.value}}' },\n    },\n    month: {\n      '*': { prefix: 'i' },\n      any: { text: 'hver måned' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n    },\n    day: {\n      '*': { prefix: 'og' },\n      any: { text: 'hver dag i måneden' },\n      value: { text: '{{value.alt}}.' },\n      range: { text: '{{start.alt}}.-{{end.alt}}.' },\n      noSpecific: {\n        text: 'ingen specifik dag',\n      },\n    },\n\n    dayOfWeek: {\n      '*': { prefix: 'på' },\n      any: { text: 'hver dag i ugen' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      noSpecific: {\n        text: 'ingen specifik dag i ugen',\n      },\n    },\n    hour: {\n      '*': { prefix: 'klokken' },\n      any: { text: 'hver time' },\n    },\n    minute: {\n      '*': { prefix: ':' },\n      any: { text: 'hvert minut' },\n    },\n    second: {\n      '*': { prefix: ':' },\n      any: { text: 'hvert sekund' },\n    },\n  },\n  second: {\n    prefix: 'Hvert',\n  },\n  minute: {\n    prefix: 'Hvert',\n    text: 'Minut',\n  },\n  hour: {\n    text: 'Time',\n    minute: {\n      '*': {\n        prefix: 'ved',\n        suffix: 'minutter',\n      },\n      any: { text: 'alle' },\n    },\n  },\n  day: {\n    text: 'Dag',\n  },\n  week: {\n    text: 'Uge',\n  },\n  month: {\n    text: 'Måned',\n    dayOfWeek: {\n      '*': { prefix: 'og' },\n    },\n  },\n  year: {\n    prefix: 'Hvert',\n    text: 'År',\n    dayOfWeek: {\n      '*': { prefix: 'og' },\n    },\n  },\n\n  // quartz format\n  'q-second': {\n    text: 'Sekund',\n  },\n  'q-minute': {\n    text: 'Minut',\n    second: {\n      '*': {\n        suffix: 'sekund(er)',\n      },\n      any: { text: 'hvert' },\n    },\n  },\n  'q-hour': {\n    text: 'Time',\n    minute: {\n      '*': {\n        prefix: 'på',\n      },\n    },\n  },\n}\n\nexport default locale\n","import type { Localization } from './types'\n\nconst locale: Localization = {\n  '*': {\n    prefix: '每',\n    suffix: '',\n    text: '未知',\n    '*': {\n      any: { text: '每 {{field.id}}' },\n      value: { text: '{{value.text}}' },\n      range: { text: '{{start.text}}-{{end.text}}' },\n      step: { text: '每 {{step.value}}' },\n    },\n    month: {\n      '*': { prefix: '的' },\n      any: { text: '每月' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n    },\n    day: {\n      '*': { prefix: '的' },\n      any: { text: '每日' },\n      value: { text: '{{value.alt}}号' },\n      range: { text: '{{start.alt}}号-{{end.alt}}号' },\n      noSpecific: {\n        text: '无特定日期',\n      },\n    },\n    dayOfWeek: {\n      '*': { prefix: '的' },\n      any: { text: '一周的每一天' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      noSpecific: {\n        text: '无特定星期几',\n      },\n    },\n    hour: {\n      '*': { prefix: '的' },\n      any: { text: '每小时' },\n    },\n    minute: {\n      '*': { prefix: ':' },\n      any: { text: '每分钟' },\n    },\n    second: {\n      '*': { prefix: ':' },\n      any: { text: '每秒' },\n    },\n  },\n  minute: {\n    text: '分',\n  },\n  hour: {\n    text: '小时',\n    minute: {\n      '*': {\n        prefix: ':',\n        suffix: '分钟',\n      },\n      any: { text: '每' },\n    },\n  },\n  day: {\n    text: '天',\n  },\n  week: {\n    text: '周',\n    dayOfWeek: {\n      '*': { prefix: '的' },\n      any: { text: '每天' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n    },\n  },\n  month: {\n    text: '月',\n    dayOfWeek: {\n      '*': { prefix: '和' },\n    },\n    day: {\n      '*': { prefix: '的' },\n    },\n  },\n  year: {\n    text: '年',\n    dayOfWeek: {\n      '*': { prefix: '和' },\n    },\n  },\n\n  //quartz format\n  'q-second': {\n    text: '秒',\n  },\n  'q-minute': {\n    text: '分钟',\n    second: {\n      '*': {\n        prefix: ':',\n        suffix: '秒',\n      },\n      any: { text: '每' },\n    },\n  },\n  'q-hour': {\n    text: '小时',\n    minute: {\n      '*': {\n        prefix: ':',\n      },\n    },\n  },\n}\n\nexport default locale\n","import type { Localization } from './types'\n\nconst locale: Localization = {\n  '*': {\n    prefix: 'בכל',\n    suffix: '',\n    text: 'לא ידוע',\n    '*': {\n      value: { text: '{{value.text}}' },\n      range: { text: '{{start.text}}-{{end.text}}' },\n      step: { text: 'כל {{step.value}}' },\n    },\n    month: {\n      '*': { prefix: 'ב' },\n      any: { text: 'כל חודש' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n    },\n    day: {\n      '*': { prefix: 'ב' },\n      any: { text: 'כל יום' },\n      value: { text: 'יום {{value.alt}} לחודש' },\n      noSpecific: {\n        text: 'ללא יום מוגדר',\n      },\n    },\n    dayOfWeek: {\n      '*': { prefix: 'ב' },\n      any: { text: 'כל יום מימות השבוע' },\n      value: { text: 'ימי {{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      noSpecific: {\n        text: 'ללא יום בשבוע מוגדר',\n      },\n    },\n    hour: {\n      '*': { prefix: 'ב' },\n      any: { text: 'כל שעה' },\n      value: { text: 'שעה {{value.text}}' },\n    },\n    minute: {\n      '*': { prefix: ':' },\n      any: { text: 'כל דקה' },\n    },\n    second: {\n      '*': { prefix: ':' },\n      any: { text: 'כל שניה' },\n    },\n  },\n  minute: {\n    text: 'דקה',\n  },\n  hour: {\n    text: 'שעה',\n    minute: {\n      '*': {\n        prefix: 'ב',\n        suffix: 'דקות',\n      },\n      any: { text: 'כל' },\n    },\n  },\n  day: {\n    text: 'יום',\n  },\n  week: {\n    text: 'שבוע',\n  },\n  month: {\n    text: 'חודש',\n    dayOfWeek: {\n      '*': { prefix: 'ו' },\n    },\n  },\n  year: {\n    text: 'שנה',\n    dayOfWeek: {\n      '*': { prefix: 'ו' },\n    },\n  },\n\n  //quartz format\n  'q-second': {\n    text: 'שניה',\n  },\n  'q-minute': {\n    text: 'דקה',\n    second: {\n      '*': {\n        prefix: 'ב',\n        suffix: 'שניות',\n      },\n      any: { text: 'כל' },\n    },\n  },\n  'q-hour': {\n    text: 'שעה',\n    minute: {\n      '*': {\n        prefix: 'ב',\n      },\n    },\n  },\n}\n\nexport default locale\n","import type { Localization } from './types'\n\n/**\n * Russian localization generated with GPT-4\n */\nconst locale: Localization = {\n  '*': {\n    prefix: 'Каждый',\n    suffix: '',\n    text: 'Неизвестно',\n    '*': {\n      value: { text: '{{value.text}}' },\n      range: { text: '{{start.text}}-{{end.text}}' },\n      step: { text: 'каждый {{step.value}}' },\n    },\n    month: {\n      '*': { prefix: 'в' },\n      any: { prefix: 'в', text: 'каждом месяце' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n    },\n    day: {\n      '*': { prefix: 'в' },\n      any: { prefix: 'в', text: 'каждый день' },\n      step: { prefix: '', text: 'каждые {{step.value}} дня' },\n      noSpecific: { prefix: 'в', text: 'нет определенного дня' },\n    },\n    dayOfWeek: {\n      '*': { prefix: 'по' },\n      any: { prefix: 'по', text: 'каждому дню недели' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      noSpecific: { prefix: 'и', text: 'нет определенного дня недели' },\n    },\n    hour: {\n      '*': { prefix: 'в' },\n      any: { prefix: 'в', text: 'каждый час' },\n      step: { prefix: '', text: 'каждые {{step.value}} часа' },\n    },\n    minute: {\n      '*': { prefix: ':' },\n      any: { text: 'каждую минуту' },\n      step: { prefix: '', text: 'каждые {{step.value}} минуты' },\n    },\n    second: {\n      '*': { prefix: ':' },\n      any: { text: 'каждую секунду' },\n      step: { prefix: '', text: 'каждые {{step.value}} секунды' },\n    },\n  },\n  minute: { text: 'Минута' },\n  hour: {\n    text: 'Час',\n    minute: { '*': { prefix: 'в', suffix: 'минут(а/ы)' }, any: { text: 'каждый' } },\n  },\n  day: { prefix: 'Каждый', text: 'День' },\n  week: { text: 'Неделя' },\n  month: { prefix: 'Каждый', text: 'Месяц' },\n  year: { prefix: 'Каждый', text: 'Год' },\n\n  //quartz format\n  'q-second': { text: 'Секунда' },\n  'q-minute': { text: 'Минута', second: { '*': { prefix: 'и' } } },\n  'q-hour': { text: 'Час', minute: { '*': { prefix: 'и' } }, second: { '*': { prefix: 'и' } } },\n}\n\nexport default locale\n","import type { Localization } from './types'\n\n/**\n * French localization generated with GPT-4\n */\nconst locale: Localization = {\n  '*': {\n    prefix: 'Toutes',\n    suffix: '',\n    text: 'Inconnu',\n    '*': {\n      value: { text: '{{value.text}}' },\n      range: { text: '{{start.text}}-{{end.text}}' },\n      step: { text: 'tous les {{step.value}}' },\n    },\n    month: {\n      '*': { prefix: 'en' },\n      any: { prefix: 'en', text: 'tous les mois' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n    },\n    day: {\n      '*': { prefix: 'le' },\n      any: { prefix: 'à', text: 'tous les jours' },\n      step: { prefix: '', text: 'tous les {{step.value}} jours' },\n      noSpecific: { prefix: 'à', text: 'aucun jour particulier' },\n    },\n    dayOfWeek: {\n      '*': { prefix: 'le' },\n      any: { prefix: 'à', text: 'tous les jours de la semaine' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      noSpecific: { prefix: 'et', text: 'aucun jour de la semaine particulier' },\n    },\n    hour: {\n      '*': { prefix: 'à' },\n      any: { prefix: 'à', text: 'toutes les heures' },\n      step: { prefix: '', text: 'toutes les {{step.value}} heures' },\n    },\n    minute: {\n      '*': { prefix: ':' },\n      any: { text: 'toutes les minutes' },\n      step: { prefix: '', text: 'toutes les {{step.value}} minutes' },\n    },\n    second: {\n      '*': { prefix: ':' },\n      any: { text: 'toutes les secondes' },\n      step: { prefix: '', text: 'toutes les {{step.value}} secondes' },\n    },\n  },\n  minute: { text: 'Minute' },\n  hour: {\n    text: 'Heure',\n    minute: { '*': { prefix: 'à', suffix: 'minute(s)' }, any: { text: 'toutes' } },\n  },\n  day: { prefix: 'Tous', text: 'Jour' },\n  week: { text: 'Semaine' },\n  month: { prefix: 'Tous', text: 'Mois' },\n  year: { prefix: 'Tous', text: 'Année' },\n\n  //quartz format\n  'q-second': { text: 'Seconde' },\n  'q-minute': { text: 'Minute', second: { '*': { prefix: 'et' } } },\n  'q-hour': { text: 'Heure', minute: { '*': { prefix: 'et' } }, second: { '*': { prefix: 'et' } } },\n}\n\nexport default locale\n","import type { Localization } from './types'\n\n/**\n * Hindi localization generated with GPT-4\n */\nconst locale: Localization = {\n  '*': {\n    prefix: 'हर',\n    suffix: '',\n    text: 'अज्ञात',\n    '*': {\n      value: { text: '{{value.text}}' },\n      range: { text: '{{start.text}}-{{end.text}}' },\n      step: { text: '{{step.value}} हर' },\n    },\n    month: {\n      '*': { prefix: 'में' },\n      any: { prefix: 'के', text: 'हर महीने' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n    },\n    day: {\n      '*': { prefix: 'के' },\n      any: { prefix: 'पर', text: 'हर दिन' },\n      step: { prefix: '', text: '{{step.value}} दिन हर' },\n      noSpecific: { prefix: 'पर', text: 'कोई विशेष दिन नहीं' },\n    },\n    dayOfWeek: {\n      '*': { prefix: 'पर' },\n      any: { prefix: 'पर', text: 'हर सप्ताह' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      noSpecific: { prefix: 'और', text: 'कोई विशेष सप्ताह नहीं' },\n    },\n    hour: {\n      '*': { prefix: 'को' },\n      any: { prefix: 'पर', text: 'हर घंटे' },\n      step: { prefix: '', text: '{{step.value}} घंटे हर' },\n    },\n    minute: {\n      '*': { prefix: ':' },\n      any: { text: 'हर मिनट' },\n      step: { prefix: '', text: '{{step.value}} मिनट हर' },\n    },\n    second: {\n      '*': { prefix: ':' },\n      any: { text: 'हर सेकंड' },\n      step: { prefix: '', text: '{{step.value}} सेकंड हर' },\n    },\n  },\n  minute: { text: 'मिनट' },\n  hour: { text: 'घंटा', minute: { '*': { prefix: 'पर', suffix: 'मिनट' }, any: { text: 'हर' } } },\n  day: { prefix: 'हर', text: 'दिन' },\n  week: { text: 'सप्ताह' },\n  month: { prefix: 'हर', text: 'महीना' },\n  year: { prefix: 'हर', text: 'साल' },\n\n  //quartz format\n  'q-second': { text: 'सेकंड' },\n  'q-minute': { text: 'मिनट', second: { '*': { prefix: 'और' } } },\n  'q-hour': { text: 'घंटा', minute: { '*': { prefix: 'और' } }, second: { '*': { prefix: 'और' } } },\n}\n\nexport default locale\n","import type { Localization } from './types'\n\n/**\n * Japanese localization generated with GPT-4\n */\nconst locale: Localization = {\n  '*': {\n    prefix: '毎',\n    suffix: '',\n    text: '不明',\n    '*': {\n      value: { text: '{{value.text}}' },\n      range: { text: '{{start.text}}-{{end.text}}' },\n      step: { text: '{{step.value}}ごとに' },\n    },\n    month: {\n      '*': { prefix: 'に' },\n      any: { prefix: 'の', text: '毎月' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n    },\n    day: {\n      '*': { prefix: 'の' },\n      any: { prefix: 'に', text: '毎日' },\n      step: { prefix: '', text: '{{step.value}}日ごとに' },\n      noSpecific: { prefix: 'に', text: '特定の日はなし' },\n    },\n    dayOfWeek: {\n      '*': { prefix: 'の' },\n      any: { prefix: 'に', text: '毎週' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      noSpecific: { prefix: 'と', text: '特定の曜日はなし' },\n    },\n    hour: {\n      '*': { prefix: 'の' },\n      any: { prefix: 'に', text: '毎時' },\n      step: { prefix: '', text: '{{step.value}}時間ごとに' },\n    },\n    minute: {\n      '*': { prefix: ':' },\n      any: { text: '毎分' },\n      step: { prefix: '', text: '{{step.value}}分ごとに' },\n    },\n    second: {\n      '*': { prefix: ':' },\n      any: { text: '毎秒' },\n      step: { prefix: '', text: '{{step.value}}秒ごとに' },\n    },\n  },\n  minute: { text: '分' },\n  hour: { text: '時', minute: { '*': { prefix: 'に', suffix: '分' }, any: { text: '毎' } } },\n  day: { prefix: '毎', text: '日' },\n  week: { text: '週' },\n  month: { prefix: '毎', text: '月' },\n  year: { prefix: '毎', text: '年' },\n\n  //quartz format\n  'q-second': { text: '秒' },\n  'q-minute': { text: '分', second: { '*': { prefix: 'と' } } },\n  'q-hour': { text: '時', minute: { '*': { prefix: 'と' } }, second: { '*': { prefix: 'と' } } },\n}\n\nexport default locale\n","import type { Localization } from './types'\n\nconst locale: Localization = {\n  '*': {\n    prefix: '매',\n    suffix: '',\n    text: '알 수 없음',\n    '*': {\n      value: { text: '{{value.text}}' },\n      range: { text: '{{start.text}}-{{end.text}}' },\n      step: { text: '{{step.value}}마다' },\n    },\n    month: {\n      '*': { prefix: '에' },\n      any: { prefix: '의', text: '매월' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n    },\n    day: {\n      '*': { prefix: '의' },\n      any: { prefix: '에', text: '매일' },\n      step: { prefix: '', text: '{{step.value}}일마다' },\n      noSpecific: { prefix: '에', text: '특정한 날 없음' },\n    },\n    dayOfWeek: {\n      '*': { prefix: '의' },\n      any: { prefix: '에', text: '매주' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      noSpecific: { prefix: '과', text: '특정한 요일 없음' },\n    },\n    hour: {\n      '*': { prefix: '의' },\n      any: { prefix: '에', text: '매시' },\n      step: { prefix: '', text: '{{step.value}}시간마다' },\n    },\n    minute: {\n      '*': { prefix: ':' },\n      any: { text: '매분' },\n      step: { prefix: '', text: '{{step.value}}분마다' },\n    },\n    second: {\n      '*': { prefix: ':' },\n      any: { text: '매초' },\n      step: { prefix: '', text: '{{step.value}}초마다' },\n    },\n  },\n  minute: { text: '분' },\n  hour: { text: '시', minute: { '*': { prefix: '에', suffix: '분' }, any: { text: '매' } } },\n  day: { prefix: '매', text: '일' },\n  week: { text: '주' },\n  month: { prefix: '매', text: '월' },\n  year: { prefix: '매', text: '년' },\n\n  //quartz format\n  'q-second': { text: '초' },\n  'q-minute': { text: '분', second: { '*': { prefix: '와' } } },\n  'q-hour': { text: '시', minute: { '*': { prefix: '와' } }, second: { '*': { prefix: '와' } } },\n}\n\nexport default locale\n","import { CombinedSegment, arrayToSegment, cronToSegment } from '@/cron'\nimport type { L10nEngine } from '@/locale'\nimport { TextPosition, type CronSegment, type FieldWrapper, type Period } from '@/types'\nimport { ref, watch, type Ref } from 'vue'\n\nexport interface FieldOptions {\n  l10n: L10nEngine\n  period: Ref<Period>\n  field: FieldWrapper\n  initialCron?: string\n}\n\nexport function useCronSegment(options: FieldOptions) {\n  const { period, field, initialCron = '*', l10n } = options\n\n  const cron = ref(initialCron)\n  const error = ref('')\n  const selected = ref<number[]>([])\n\n  const text = ref('')\n  const prefix = ref('')\n  const suffix = ref('')\n\n  const translate = (seg: CronSegment) => {\n    const segments = seg instanceof CombinedSegment ? seg.segments : [seg]\n\n    text.value = segments\n      .map((seg) => {\n        return l10n.render(period.value.id, field.id, seg.type, TextPosition.Text, {\n          field: field,\n          ...seg.items,\n        })\n      })\n      .join(',')\n\n    prefix.value = l10n.getTemplate(period.value.id, field.id, seg.type, TextPosition.Prefix)\n    suffix.value = l10n.getTemplate(period.value.id, field.id, seg.type, TextPosition.Suffix)\n  }\n\n  const parseCron = (cron: string) => {\n    const seg = cronToSegment(cron, field)\n    if (seg != null) {\n      selected.value = seg.toArray()\n      translate(seg)\n    } else {\n      error.value = `${cron} is not a valid cron segment (${field.id})`\n    }\n  }\n\n  const toCron = (value: number[]) => {\n    if (cron.value == '?' && value.length == 0) {\n      return\n    }\n\n    const seg = arrayToSegment(value, field)\n    if (seg != null) {\n      cron.value = seg.toCron()\n      translate(seg)\n    } else {\n      error.value = `failed to convert ${value} to cron (${field.id})`\n    }\n  }\n\n  parseCron(initialCron)\n\n  const select = (evt: number[]) => {\n    const sorted = Array.from(evt).sort((a, b) => {\n      return a > b ? 1 : -1\n    })\n    selected.value = sorted\n  }\n\n  watch(cron, (value) => {\n    parseCron(value)\n  })\n\n  watch(selected, (value) => {\n    toCron(value)\n  })\n\n  watch(period, () => {\n    const seg = cronToSegment(cron.value, field)\n    if (seg != null) {\n      translate(seg)\n    }\n  })\n\n  return {\n    id: field.id,\n    items: field.items,\n    cron,\n    selected,\n    error,\n    select,\n    text,\n    prefix,\n    suffix,\n  }\n}\n\nexport type UseCronSegmentReturn = ReturnType<typeof useCronSegment>\n","import { AnySegment, NoSpecificSegment, RangeSegment, StepSegment, ValueSegment } from '@/cron'\nimport { createL10n } from '@/locale'\nimport type { Localization } from '@/locale/types'\nimport {\n  computed,\n  defineComponent,\n  ref,\n  watch,\n  type ExtractPropTypes,\n  type PropType,\n  type SetupContext,\n} from 'vue'\nimport { FieldWrapper, TextPosition, type CronFormat, type Field, type Period } from '../types'\nimport { defaultItems } from '../util'\nimport { useCronSegment, type UseCronSegmentReturn } from './cron-segment'\n\nexport interface CronOptions {\n  initialValue?: string\n  initialPeriod?: string\n  locale?: string\n  fields?: Field[]\n  periods?: Period[]\n  customLocale?: Localization\n  format?: CronFormat\n}\n\nexport interface CronContext {\n  segmentMap: Map<string, UseCronSegmentReturn>\n}\n\nfunction createCron(len: number, seg: string = '*') {\n  return new Array(len).fill(seg).join(' ')\n}\n\nfunction isDefined<T>(obj: T | undefined): obj is T {\n  return obj !== undefined\n}\n\nexport class DefaultCronOptions {\n  locale = 'en'\n\n  format: CronFormat = 'crontab'\n\n  initialValue(len: number, seg: string = '*') {\n    return createCron(len, seg)\n  }\n\n  fields(format: CronFormat, locale: string): Field[] {\n    const isQuartz = format == 'quartz' || format == 'spring'\n    const items = defaultItems(locale, format)\n\n    const setNoSpecific = (fieldId: string) => {\n      return (value: UseCronSegmentReturn, { segmentMap }: CronContext) => {\n        if (value.cron.value == '?') {\n          return\n        }\n\n        const segment = segmentMap.get(fieldId)\n        if (!segment) {\n          return\n        }\n        segment.cron.value = '?'\n      }\n    }\n\n    return [\n      ...(isQuartz ? [{ id: 'second', items: items.secondItems }] : []),\n      { id: 'minute', items: items.minuteItems },\n      { id: 'hour', items: items.hourItems },\n      {\n        id: 'day',\n        items: items.dayItems,\n        onChange: isQuartz ? setNoSpecific('dayOfWeek') : undefined,\n        segmentFactories: isQuartz\n          ? [\n              AnySegment.fromString,\n              NoSpecificSegment.fromString,\n              StepSegment.fromString,\n              RangeSegment.fromString,\n              ValueSegment.fromString,\n            ]\n          : undefined,\n      },\n      { id: 'month', items: items.monthItems },\n      {\n        id: 'dayOfWeek',\n        items: items.dayOfWeekItems,\n        onChange: isQuartz ? setNoSpecific('day') : undefined,\n        segmentFactories: isQuartz\n          ? [\n              AnySegment.fromString,\n              NoSpecificSegment.fromString,\n              StepSegment.fromString,\n              RangeSegment.fromString,\n              ValueSegment.fromString,\n            ]\n          : undefined,\n      },\n    ]\n  }\n\n  periods(format: CronFormat): Period[] {\n    const isQuartz = format == 'quartz' || format == 'spring'\n    const second = isQuartz ? [{ id: 'q-second', value: [] }] : []\n    const secondField = isQuartz ? ['second'] : []\n    const prefix = isQuartz ? 'q-' : ''\n\n    return [\n      ...second,\n      { id: prefix + 'minute', value: [...secondField] },\n      { id: prefix + 'hour', value: ['minute', ...secondField] },\n      { id: 'day', value: ['hour', 'minute', ...secondField] },\n      { id: 'week', value: ['dayOfWeek', 'hour', 'minute', ...secondField] },\n      { id: 'month', value: ['day', 'dayOfWeek', 'hour', 'minute', ...secondField] },\n      { id: 'year', value: ['month', 'day', 'dayOfWeek', 'hour', 'minute', ...secondField] },\n    ]\n  }\n}\n\nexport function findFirstPeriod(\n  periods: Period[],\n  cron: string,\n  fields: Field[],\n): Period | undefined {\n  const segments = cron.split(' ')\n  if (segments.length !== fields.length) {\n    return\n  }\n  const dirtyFields = fields.filter((_, i) => !['*', '?'].includes(segments[i])).map((f) => f.id)\n  // find the first period, which includes all dirty fields\n  return periods.find((p) => {\n    const visible = new Set(p.value)\n    return dirtyFields.every((fid) => visible.has(fid))\n  })\n}\n\nexport function useCron(options: CronOptions) {\n  const cronDefaults = new DefaultCronOptions()\n\n  const locale = options.locale ?? cronDefaults.locale\n  const format = options.format ?? cronDefaults.format\n  const { customLocale, fields = cronDefaults.fields(format, locale) } = options\n  const initialValue = options.initialValue ?? cronDefaults.initialValue(fields.length)\n\n  const l10n = createL10n(locale, customLocale)\n  const periods = (options.periods ?? cronDefaults.periods(format)).map((p) => {\n    return {\n      ...p,\n      text: p.text ?? l10n.getTemplate(p.id, TextPosition.Text),\n    }\n  })\n  const initialPeriod =\n    (options.initialPeriod ? periods.find((p) => p.id == options.initialPeriod) : undefined) ??\n    findFirstPeriod([...periods].reverse(), initialValue, fields) ??\n    periods[periods.length - 1]\n\n  const cron = ref(initialValue)\n  const error = ref('')\n  const period = ref(initialPeriod)\n  const periodPrefix = ref('')\n  const periodSuffix = ref('')\n  const segments = fields.map((f) => {\n    return useCronSegment({ field: new FieldWrapper(f), l10n, period })\n  })\n\n  const segmentMap = new Map(segments.map((s) => [s.id, s]))\n  const selected = computed(() => {\n    return period.value.value.map((fieldId) => {\n      const segment = segmentMap.get(fieldId)\n      if (isDefined(segment)) {\n        return segment\n      }\n      throw Error('${fieldId} not found')\n    })\n  })\n\n  const fromCron = (value: string) => {\n    if (!value) {\n      cron.value = createCron(fields.length)\n      return\n    }\n\n    const strSegments = value.split(' ')\n\n    if (strSegments.length !== fields.length) {\n      error.value = 'invalid pattern'\n      return\n    }\n\n    for (let i = 0; i < strSegments.length; i++) {\n      if (segments[i].cron.value != strSegments[i]) {\n        segments[i].cron.value = strSegments[i]\n      }\n    }\n    error.value = ''\n  }\n  fromCron(initialValue)\n\n  const toCron = () => {\n    cron.value = segments\n      .map((s) => {\n        return period.value.value.includes(s.id) || s.cron.value == '?' ? s.cron.value : '*'\n      })\n      .join(' ')\n  }\n\n  const translate = () => {\n    periodPrefix.value = l10n.getTemplate(period.value.id, TextPosition.Prefix)\n    periodSuffix.value = l10n.getTemplate(period.value.id, TextPosition.Suffix)\n  }\n  translate()\n\n  watch(cron, fromCron)\n  watch(period, () => {\n    toCron()\n    translate()\n  })\n\n  segments.forEach((s, i) => {\n    watch(s.cron, () => {\n      fields[i].onChange?.(s, { segmentMap })\n      toCron()\n    })\n    watch(s.error, (value) => {\n      error.value = value\n    })\n  })\n\n  return {\n    cron,\n    error,\n    segments,\n    selected,\n    period: {\n      select: (periodId: string) => {\n        const i = periods.map((p) => p.id).indexOf(periodId)\n        if (i == -1) {\n          return\n        }\n        period.value = periods[i]\n      },\n      selected: period,\n      items: periods,\n      prefix: periodPrefix,\n      suffix: periodSuffix,\n    },\n  }\n}\n\n/**\n * @interface\n */\nexport type UseCronReturn = ReturnType<typeof useCron>\n\nexport function setupCron(\n  props: CronCoreProps,\n  { emit }: SetupContext<['update:model-value', 'update:period', 'error']>,\n): UseCronReturn {\n  const options: CronOptions = {\n    ...props,\n    initialValue: props.modelValue,\n    initialPeriod: props.period,\n  }\n\n  const cron = useCron(options)\n\n  watch(\n    () => props.modelValue,\n    (value) => {\n      if (value) {\n        cron.cron.value = value\n      }\n    },\n  )\n\n  watch(\n    () => props.period,\n    (value) => {\n      if (value) {\n        cron.period.select(value)\n      }\n    },\n  )\n\n  watch(cron.cron, (value) => {\n    emit('update:model-value', value)\n  })\n\n  watch(cron.period.selected, (value) => {\n    emit('update:period', value.id)\n  })\n\n  watch(cron.error, (error) => {\n    emit('error', error)\n  })\n\n  return cron\n}\n\nexport const cronCoreProps = () => ({\n  /**\n   * The value of the cron expression\n   *\n   * @defaultValue crontab: `* * * * *`, quartz: `* * * * * *`\n   */\n  modelValue: {\n    type: String,\n  },\n  /**\n   * The id of a period to select\n   *\n   * @defaultValue last entry of `CronCoreProps.periods`\n   */\n  period: {\n    type: String,\n  },\n  /**\n   * The format of the cron expression, either crontab or quartz\n   *\n   * @defaultValue `crontab`\n   */\n  format: {\n    type: String as PropType<CronFormat>,\n  },\n  /**\n   * The locale of the component, such as `en`, `de`, etc.\n   *\n   * @defaultValue `en`\n   */\n  locale: {\n    type: String,\n  },\n  /** The segments of the cron expression, such as second, minute, hour, etc. */\n  fields: {\n    type: Array as PropType<Field[]>,\n  },\n  /** The periods to select, e.g. Every month, day, etc.  */\n  periods: {\n    type: Array as PropType<Period[]>,\n  },\n  /** The custom locale object, used to override values of the current {@link Localization} */\n  customLocale: {\n    type: Object as PropType<Localization>,\n  },\n  /** Number of columns in the dropdown,\n   * e.g. the possible values of minute (0-59) will be displayed in a grid with 5 columns\n   *\n   * @defaultValue\n   * ```\n   * {\n   *    second: 5,\n   *    minute: 5,\n   *    hour: 4,\n   *    day: 4,\n   *  }\n   * ```\n   */\n  cols: {\n    type: Object as PropType<Record<string, number>>,\n    default: () => {\n      return {\n        second: 5,\n        minute: 5,\n        hour: 4,\n        day: 4,\n      }\n    },\n  },\n  /** Disable the cron editor */\n  disabled: {\n    type: Boolean,\n    default: false,\n  },\n})\n\n/**\n * Properties of {@link CronCore}.\n * These properties are shared across all cron components\n *\n * @interface\n */\nexport type CronCoreProps = Partial<ExtractPropTypes<ReturnType<typeof cronCoreProps>>>\n\nexport const CronCore = defineComponent({\n  name: 'VueCronCore',\n  props: cronCoreProps(),\n  emits: ['update:model-value', 'update:period', 'error'],\n  setup(props, ctx) {\n    const { error, selected, period } = setupCron(props, ctx)\n\n    return () => {\n      const slotProps = {\n        error: error,\n        fields: selected.value.map((s) => {\n          return {\n            id: s.id,\n            items: s.items,\n            cron: s.cron.value,\n            selectedStr: s.text.value,\n            events: {\n              'update:model-value': s.select,\n            },\n            attrs: {\n              modelValue: s.selected.value,\n            },\n            prefix: s.prefix.value,\n            suffix: s.suffix.value,\n          }\n        }),\n\n        period: {\n          attrs: {\n            modelValue: period.selected.value.id,\n          },\n          events: {\n            'update:model-value': period.select,\n          },\n          items: period.items,\n          prefix: period.prefix.value,\n          suffix: period.suffix.value,\n        },\n      }\n\n      return ctx.slots.default?.(slotProps)\n    }\n  },\n})\n","import {\n  computed,\n  defineComponent,\n  ref,\n  watch,\n  type PropType,\n  type Ref,\n  type SetupContext,\n  type WatchSource,\n} from 'vue'\nimport { splitArray } from '..'\n\ninterface SetOptions<T> {\n  items: T[]\n}\n\nexport function useSet<T>(options: SetOptions<T>) {\n  const { items } = options\n\n  const values = new Set<T>()\n  const updated = ref(0)\n\n  const forceUpdate = () => {\n    updated.value = updated.value + 1\n  }\n\n  const add = (item: T) => {\n    if (items.indexOf(item) == -1) {\n      return\n    }\n    values.add(item)\n    forceUpdate()\n  }\n\n  const has = (item: T) => {\n    return values.has(item)\n  }\n\n  const remove = (item: T) => {\n    if (values.delete(item)) {\n      forceUpdate()\n    }\n  }\n\n  const clear = () => {\n    values.clear()\n    forceUpdate()\n  }\n\n  const toggle = (item: T) => {\n    if (has(item)) {\n      remove(item)\n    } else {\n      add(item)\n    }\n  }\n\n  const equals = (items: T[]) => {\n    if (items.length != values.size) {\n      return false\n    }\n    for (const item of items) {\n      if (!values.has(item)) {\n        return false\n      }\n    }\n    return true\n  }\n\n  return {\n    values,\n    add,\n    toggle,\n    remove,\n    clear,\n    updated,\n    equals,\n  }\n}\n\nexport interface SelectOptions<T, V> extends SetOptions<T> {\n  multiple?: boolean\n  itemText?: string | ((item: T) => string)\n  itemValue?: string | ((item: T) => V)\n  cols?: number\n}\n\nexport function selectProps<T, V>() {\n  return {\n    modelValue: {\n      type: [String, Number, Array] as PropType<V | V[]>,\n    },\n    selection: {\n      type: String,\n    },\n    clearable: {\n      type: Boolean,\n      default: false,\n    },\n    items: {\n      type: Array as PropType<Array<T>>,\n      default: () => [],\n    },\n    multiple: {\n      type: Boolean,\n      default: false,\n    },\n    cols: {\n      type: Number,\n      default: 1,\n    },\n    itemText: {\n      type: [String, Function] as PropType<string | ((item: T) => string)>,\n      default: 'text',\n    },\n    itemValue: {\n      type: [String, Function] as PropType<string | ((item: T) => V)>,\n      default: 'value',\n    },\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  }\n}\n\nexport function useSelect<T, V>(options: SelectOptions<T, V>) {\n  const { items, cols = 1, multiple = false, itemText = 'text', itemValue = 'value' } = options\n  const s = useSet<T>(options)\n  const selected: Ref<V[] | V> = multiple ? ref<Array<any>>([]) : ref<any>(null)\n  const selectedStr = ref('')\n\n  const select = (item: T) => {\n    if (multiple) {\n      s.toggle(item)\n    } else {\n      s.clear()\n      s.add(item)\n    }\n  }\n\n  const has = (item: T | null): boolean => {\n    if (item === null) {\n      return false\n    }\n    const value = getValue(item)\n    if (Array.isArray(selected.value)) {\n      return selected.value.includes(value)\n    } else {\n      return selected.value === value\n    }\n  }\n\n  const getValue = (item: any): V => {\n    if (typeof itemValue == 'function') {\n      return itemValue(item)\n    } else {\n      return item[itemValue]\n    }\n  }\n\n  const getText = (item: any): string => {\n    if (typeof itemText == 'function') {\n      return itemText(item)\n    } else {\n      return item[itemText]\n    }\n  }\n\n  const itemMap = new Map(items.map((i) => [getValue(i), i]))\n\n  const setItems = (items: T[]) => {\n    if (s.equals(items)) {\n      return\n    }\n    s.clear()\n    items.forEach((i) => select(i))\n  }\n\n  const setValues = (values: V[] | V) => {\n    values = Array.isArray(values) ? values : [values]\n    const items = values.map((v) => itemMap.get(v)).filter((item): item is T => !!item)\n    setItems(items)\n  }\n\n  watch(s.updated, () => {\n    const items = Array.from(s.values)\n    selected.value = multiple ? items.map(getValue) : getValue(items[0])\n    selectedStr.value = items.map(getText).join(',')\n  })\n\n  const isEmpty = computed(() => {\n    return multiple\n      ? !Array.isArray(selected.value) || selected.value.length == 0\n      : !!selected.value\n  })\n\n  return {\n    ...s,\n    select,\n    selected,\n    selectedStr,\n    itemRows: splitArray(items, cols),\n    setItems,\n    setValues,\n    isEmpty,\n    has,\n  }\n}\n\n/**\n * @interface\n */\nexport type UseSelectReturn<T, V> = ReturnType<typeof useSelect<T, V>>\n\nexport function setupSelect<T, V>(\n  options: SelectOptions<T, V>,\n  modelValue: WatchSource<V>,\n  { emit }: SetupContext<['update:model-value']>,\n): UseSelectReturn<T, V> {\n  const s = useSelect(options)\n\n  watch(s.selected, () => {\n    emit('update:model-value', s.selected.value)\n  })\n\n  watch(\n    modelValue,\n    (value) => {\n      if (value) {\n        s.setValues(value)\n      }\n    },\n    { immediate: true },\n  )\n\n  return s\n}\n\nexport const RenderlessSelect = defineComponent({\n  name: 'RenderlessSelect',\n  props: {\n    ...selectProps<any, any>(),\n    modelValue: {\n      type: [String, Number, Array],\n    },\n    selection: {\n      type: String,\n    },\n    clearable: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: ['update:modelValue'],\n  setup(props, { emit, slots }) {\n    const s = useSelect<any, any>(props)\n\n    watch(s.selected, () => {\n      emit('update:modelValue', s.selected.value)\n    })\n\n    watch(\n      () => props.modelValue,\n      (value) => {\n        if (value) {\n          s.setValues(value)\n        }\n      },\n      { immediate: true },\n    )\n\n    return () => {\n      const slotProps = {\n        selectedStr: props.selection || s.selectedStr.value,\n        modelValue: props.modelValue,\n        items: props.items,\n        select: s.select,\n        isSelected: s.has,\n        clearable: props.clearable && !s.isEmpty.value,\n        clear: s.clear,\n        cols: props.cols,\n        rows: s.itemRows.length,\n        itemRows: s.itemRows,\n        multiple: props.multiple,\n        itemText: props.itemText,\n        itemValue: props.itemValue,\n      }\n\n      return slots.default?.(slotProps)\n    }\n  },\n})\n","import { type App } from 'vue'\nimport { CronCore } from './components/cron-core'\n\nexport {\n  CronCore,\n  cronCoreProps,\n  setupCron,\n  useCron,\n  type CronContext,\n  type CronCoreProps,\n  type CronOptions,\n  type UseCronReturn,\n} from './components/cron-core'\nexport {\n  RenderlessSelect,\n  selectProps,\n  setupSelect,\n  useSelect,\n  type SelectOptions,\n  type UseSelectReturn,\n} from './components/select'\nexport { createL10n, L10nEngine } from './locale'\nexport type * from './locale/types'\nexport type * from './types'\nexport { FieldPattern, FieldWrapper, TextPosition } from './types'\nexport { defaultItems, genItems, pad, splitArray, type toText } from './util'\n\nexport const CronCorePlugin = {\n  install: (app: App) => {\n    app.component('CronCore', CronCore)\n  },\n}\nexport default CronCorePlugin\n"],"names":["FieldPattern","TextPosition","FieldWrapper","field","__publicField","acc","item","value","range","start","end","step","r","i","Range","target","prop","index","genItems","min","max","genText","genAltText","res","defaultItems","localeCode","format","monthName","month","short","weekdayName","weekday","pad","n","width","s","isObject","deepMerge","sources","source","key","traverse","obj","keys","isSquence","numbers","unimplemented","splitArray","arr","chunkSize","fill","slice","NoSpecificSegment","str","AnySegment","items","_RangeSegment","RangeSegment","_rangeWithStep","_StepSegment","rangeStr","stepStr","StepSegment","ValueSegment","_CombinedSegment","segments","segment","c","values","seg","factories","strSeg","fromString","minValue","maxValue","ranges","CombinedSegment","cronToSegment","cron","arrayToSegment","fromArray","objectToString","isArray","object","isFunction","typeStr","escapeRegExp","string","hasProperty","propName","primitiveHasOwnProperty","primitive","regExpTest","testRegExp","re","nonSpaceRe","isWhitespace","entityMap","escapeHtml","whiteRe","spaceRe","equalsRe","curlyRe","tagRe","parseTemplate","template","tags","lineHasNonSpace","sections","tokens","spaces","hasTag","nonSpace","indentation","tagIndex","stripSpace","openingTagRe","closingTagRe","closingCurlyRe","compileTags","tagsToCompile","mustache","scanner","Scanner","type","chr","token","openSection","valueLength","nestTokens","squashTokens","squashedTokens","lastToken","numTokens","nestedTokens","collector","section","match","Context","view","parentContext","name","cache","context","intermediateValue","names","lookupHit","Writer","cacheKey","isCacheEnabled","partials","config","originalTemplate","buffer","symbol","self","subRender","j","partial","filteredIndentation","partialByNl","indentedValue","escape","defaultWriter","locales","L10nEngine","dict","k","periodId","fieldId","fieldPattern","position","params","Mustache","createL10n","mixin","language","l","useCronSegment","options","period","initialCron","l10n","ref","error","selected","text","prefix","suffix","translate","parseCron","toCron","select","evt","sorted","a","b","watch","createCron","len","isDefined","DefaultCronOptions","locale","isQuartz","setNoSpecific","segmentMap","second","secondField","findFirstPeriod","periods","fields","dirtyFields","_","f","p","visible","fid","useCron","cronDefaults","customLocale","initialValue","initialPeriod","periodPrefix","periodSuffix","computed","fromCron","strSegments","_b","_a","setupCron","props","emit","cronCoreProps","CronCore","defineComponent","ctx","slotProps","useSet","updated","forceUpdate","add","has","remove","selectProps","useSelect","cols","multiple","itemText","itemValue","selectedStr","getValue","getText","itemMap","setItems","setValues","v","isEmpty","setupSelect","modelValue","RenderlessSelect","slots","CronCorePlugin","app"],"mappings":"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","x_google_ignoreList":[3]}