{"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/locale/it.ts","../src/locale/uk.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', // a\n  Range = 'range', // a-b\n  Step = 'step', // */x\n  StepFrom = `stepFrom`, // a/x\n  RangeStep = 'rangeStep', // a-b/x\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  default?: string\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\ninterface FieldContext {\n  format: CronFormat\n}\nexport class FieldWrapper {\n  field: Field\n  itemMap: Record<number, FieldItem>\n  ctx: FieldContext\n\n  constructor(field: Field, ctx: FieldContext) {\n    this.field = field\n    this.ctx = ctx\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}\n\nfunction parseRange(s: string, field: FieldWrapper): [number, number] {\n  if (s === '*') {\n    return [field.min, field.max]\n  }\n  const range = s.split('-').map((s) => parseInt(s))\n  if (range.length === 1 && field.ctx.format !== 'crontab') {\n    return [range[0], field.max]\n  }\n  return [range[0], range[1]]\n}\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.field.ctx.format !== 'crontab' && this.start !== min && max - this.end < this.step) {\n      return FieldPattern.StepFrom\n    }\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.StepFrom) {\n      return `${this.start}/${this.step}`\n    }\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 [min, max] = parseRange(rangeStr, field)\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 it from './it'\nimport ja from './ja'\nimport ko from './ko'\nimport pt from './pt'\nimport ru from './ru'\nimport uk from './uk'\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  it,\n  uk,\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      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      stepFrom: { text: '{{start.text}}/{{step.value}}' },\n    },\n    month: {\n      '*': { prefix: 'in' },\n      any: { text: 'every month' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      rangeStep: { text: '{{start.alt}}-{{end.alt}}/{{step.value}}' },\n      stepFrom: { text: '{{start.alt}}/{{step.value}}' },\n    },\n    day: {\n      '*': { prefix: 'on' },\n      any: { text: 'every day' },\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      stepFrom: { text: '{{start.alt}}/{{step.value}}' },\n      noSpecific: {\n        text: 'no specific day of the week',\n      },\n    },\n    hour: {\n      '*': { prefix: 'at' },\n      any: { text: 'every hour' },\n    },\n    minute: {\n      '*': { prefix: ':' },\n      any: { text: 'every minute' },\n    },\n    second: {\n      '*': { prefix: ':' },\n      any: { text: 'every second' },\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 type { Localization } from './types'\n\n/**\n * French localization generated with GPT-4\n */\nconst locale: Localization = {\n  '*': {\n    prefix: 'Tutti',\n    suffix: '',\n    text: 'Sconosciuto',\n    '*': {\n      value: { text: '{{value.text}}' },\n      range: { text: '{{start.text}}-{{end.text}}' },\n      step: { text: 'ogni {{step.value}}' },\n    },\n    month: {\n      '*': { prefix: 'in' },\n      any: { prefix: 'in', text: 'ogni mese' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n    },\n    day: {\n      '*': { prefix: 'il' },\n      any: { prefix: 'il', text: 'ogni giorno' },\n      step: { prefix: '', text: 'ogni {{step.value}} giorni' },\n      noSpecific: { prefix: 'il', text: 'nessun giorno specifico' },\n    },\n    dayOfWeek: {\n      '*': { prefix: 'il' },\n      any: { prefix: 'il', text: 'ogni giorno della settimana' },\n      value: { text: '{{value.alt}}' },\n      range: { text: '{{start.alt}}-{{end.alt}}' },\n      noSpecific: { prefix: 'e', text: 'nessun giorno della settimana specifico' },\n    },\n    hour: {\n      '*': { prefix: 'alle' },\n      any: { prefix: 'alle', text: 'ogni ora' },\n      step: { prefix: '', text: 'ogni {{step.value}} ore' },\n    },\n    minute: {\n      '*': { prefix: ':' },\n      any: { text: 'ogni minuto' },\n      step: { prefix: '', text: 'ogni {{step.value}} minuti' },\n    },\n    second: {\n      '*': { prefix: ':' },\n      any: { text: 'ogni secondo' },\n      step: { prefix: '', text: 'ogni {{step.value}} secondi' },\n    },\n  },\n  minute: { text: 'Minuto' },\n  hour: {\n    text: 'Ora',\n    minute: { '*': { prefix: 'al', suffix: 'minuto/i' }, any: { text: 'tutti' } },\n  },\n  day: { prefix: 'Tutti', text: 'Giorno' },\n  week: { text: 'Settimana' },\n  month: { prefix: 'Tutti', text: 'Mese' },\n  year: { prefix: 'Tutti', text: 'Anno' },\n\n  //quartz format\n  'q-second': { text: 'Secondo' },\n  'q-minute': { text: 'Minuto', second: { '*': { prefix: 'e' } } },\n  'q-hour': { text: 'Ora', minute: { '*': { prefix: 'e' } }, second: { '*': { prefix: 'e' } } },\n}\n\nexport default locale\n","import type { Localization } from './types'\n\n/**\n * Ukrainian localization\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 { 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(fields: Field[]) {\n  return fields.map((f) => f.default ?? '*').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(fields: Field[]) {\n    return createCron(fields)\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        default: format === 'quartz' ? '?' : undefined,\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)\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, { format: format }), 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)\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(\n    cron.cron,\n    (value) => {\n      emit('update:model-value', value)\n    },\n    { immediate: props.modelValue === undefined },\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","ctx","__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","parseRange","_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","fields","f","isDefined","DefaultCronOptions","locale","isQuartz","setNoSpecific","segmentMap","second","secondField","findFirstPeriod","periods","dirtyFields","_","p","visible","fid","useCron","cronDefaults","customLocale","initialValue","initialPeriod","periodPrefix","periodSuffix","computed","fromCron","strSegments","_b","_a","setupCron","props","emit","cronCoreProps","CronCore","defineComponent","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]}