{"version":3,"file":"layouts-BjVGZ985.mjs","names":[],"sources":["../src/helpers/templates/editor/layouts/templates.ts","../src/helpers/templates/editor/layouts/tasks.ts","../src/helpers/templates/editor/layouts/index.ts"],"sourcesContent":["import { nanoid } from 'nanoid/non-secure';\nimport objectHash from 'object-hash';\n\nimport type { TemplateBodyLayout } from '~/modules/templates';\nimport {\n  createFigureHelperFrom,\n  figureHelperToJSON,\n  type AnyFigureHelper,\n} from '../figures';\n\nexport interface LayoutHelper {\n  readonly id: string;\n  figures: AnyFigureHelper[];\n  readonly hash: string;\n}\n\nexport function hashLayout(layout: LayoutHelper | TemplateBodyLayout): string {\n  return objectHash({ figures: layout.figures });\n}\n\nexport function createLayoutHelper(figures: AnyFigureHelper[]): LayoutHelper {\n  const layout = {\n    id: nanoid(),\n    figures,\n    hash: '',\n  };\n\n  layout.hash = hashLayout(layout);\n\n  return layout;\n}\n\nexport function createLayoutHelperFrom(\n  layout: TemplateBodyLayout\n): LayoutHelper {\n  return createLayoutHelper(\n    layout.figures.map((fig) => createFigureHelperFrom(fig))\n  );\n}\n\nexport function layoutHelperToJSON(layout: LayoutHelper): TemplateBodyLayout {\n  return {\n    figures: layout.figures.map((fig) => figureHelperToJSON(fig)),\n  };\n}\n","import type { TaskBodyLayout } from '~/modules/tasks';\n\nimport type { AnyFigureHelper } from '../figures';\nimport {\n  type LayoutHelper,\n  createLayoutHelper,\n  createLayoutHelperFrom,\n  layoutHelperToJSON,\n} from './templates';\n\nexport interface TaskLayoutHelper extends LayoutHelper {\n  at: number;\n}\n\nexport function createTaskLayoutHelper(\n  figures: AnyFigureHelper[],\n  at: number\n): TaskLayoutHelper {\n  const layout = createLayoutHelper(figures);\n  return {\n    ...layout,\n    at,\n  };\n}\n\nexport function createTaskLayoutHelperFrom(\n  layout: TaskBodyLayout\n): TaskLayoutHelper {\n  const base = createLayoutHelperFrom(layout);\n  return createTaskLayoutHelper(base.figures, layout.at);\n}\n\nexport function taskLayoutHelperToJSON(\n  layout: TaskLayoutHelper\n): TaskBodyLayout {\n  return {\n    ...layoutHelperToJSON(layout),\n    at: layout.at,\n  };\n}\n","import type { AnyFigureHelper } from '../figures';\nimport { hashLayout, type LayoutHelper } from './templates';\nimport type { TaskLayoutHelper } from './tasks';\n\nexport type AnyLayoutHelper = LayoutHelper | TaskLayoutHelper;\n\nexport function isTaskLayoutHelper(\n  layout: AnyLayoutHelper\n): layout is TaskLayoutHelper {\n  return 'at' in layout;\n}\n\nexport function isTemplateLayoutHelper(\n  layout: AnyLayoutHelper\n): layout is LayoutHelper {\n  return !isTaskLayoutHelper(layout);\n}\n\nexport function hasLayoutHelperChanged(layout: AnyLayoutHelper): boolean {\n  return layout.hash !== hashLayout(layout);\n}\n\nexport function addFigureOfHelper(\n  layout: AnyLayoutHelper,\n  figure: AnyFigureHelper,\n  index?: number\n): AnyFigureHelper {\n  if (layout.figures.some((fig) => fig.id === figure.id)) {\n    throw new Error(`Figure \"${figure.id}\" already exists`);\n  }\n  layout.figures.splice(index ?? layout.figures.length, 0, figure);\n  return figure;\n}\n\nexport function removeFigureOfHelper(\n  layout: AnyLayoutHelper,\n  figure: AnyFigureHelper\n): AnyLayoutHelper {\n  const lay = layout;\n  lay.figures = layout.figures.filter((fig) => fig.id !== figure.id);\n  return layout;\n}\n\nexport function updateFigureOfHelper(\n  layout: AnyLayoutHelper,\n  oldFigure: AnyFigureHelper,\n  newFigure: AnyFigureHelper\n): AnyLayoutHelper {\n  const index = layout.figures.findIndex((fig) => fig.id === oldFigure.id);\n  if (index < 0) {\n    throw new Error(`Figure \"${oldFigure.id}\" not found`);\n  }\n  const lay = layout;\n  lay.figures[index] = newFigure;\n  return layout;\n}\n\nexport * from './templates';\nexport * from './tasks';\n"],"mappings":";;;;;;AAgBA,SAAgB,WAAW,QAAmD;AAC5E,QAAO,WAAW,EAAE,SAAS,OAAO,SAAS,CAAC;;AAGhD,SAAgB,mBAAmB,SAA0C;CAC3E,MAAM,SAAS;EACb,IAAI,QAAQ;EACZ;EACA,MAAM;EACP;AAED,QAAO,OAAO,WAAW,OAAO;AAEhC,QAAO;;AAGT,SAAgB,uBACd,QACc;AACd,QAAO,mBACL,OAAO,QAAQ,KAAK,QAAQ,uBAAuB,IAAI,CAAC,CACzD;;AAGH,SAAgB,mBAAmB,QAA0C;AAC3E,QAAO,EACL,SAAS,OAAO,QAAQ,KAAK,QAAQ,mBAAmB,IAAI,CAAC,EAC9D;;;;;AC7BH,SAAgB,uBACd,SACA,IACkB;AAElB,0CADe,mBAAmB,QAAQ,SAGxC;;AAIJ,SAAgB,2BACd,QACkB;AAElB,QAAO,uBADM,uBAAuB,OAAO,CACR,SAAS,OAAO,GAAG;;AAGxD,SAAgB,uBACd,QACgB;AAChB,0CACK,mBAAmB,OAAO,SAC7B,IAAI,OAAO;;;;;AC/Bf,SAAgB,mBACd,QAC4B;AAC5B,QAAO,QAAQ;;AAGjB,SAAgB,uBACd,QACwB;AACxB,QAAO,CAAC,mBAAmB,OAAO;;AAGpC,SAAgB,uBAAuB,QAAkC;AACvE,QAAO,OAAO,SAAS,WAAW,OAAO;;AAG3C,SAAgB,kBACd,QACA,QACA,OACiB;AACjB,KAAI,OAAO,QAAQ,MAAM,QAAQ,IAAI,OAAO,OAAO,GAAG,CACpD,OAAM,IAAI,MAAM,WAAW,OAAO,GAAG,kBAAkB;AAEzD,QAAO,QAAQ,OAAO,6CAAS,OAAO,QAAQ,QAAQ,GAAG,OAAO;AAChE,QAAO;;AAGT,SAAgB,qBACd,QACA,QACiB;CACjB,MAAM,MAAM;AACZ,KAAI,UAAU,OAAO,QAAQ,QAAQ,QAAQ,IAAI,OAAO,OAAO,GAAG;AAClE,QAAO;;AAGT,SAAgB,qBACd,QACA,WACA,WACiB;CACjB,MAAM,QAAQ,OAAO,QAAQ,WAAW,QAAQ,IAAI,OAAO,UAAU,GAAG;AACxE,KAAI,QAAQ,EACV,OAAM,IAAI,MAAM,WAAW,UAAU,GAAG,aAAa;CAEvD,MAAM,MAAM;AACZ,KAAI,QAAQ,SAAS;AACrB,QAAO"}