{"version":3,"file":"EvaluationCriterion.bs-DQ1Pe0ga.js","sources":["../../../app/frontend/shared/utils/LevelLabel.bs.js","../../../app/frontend/shared/types/ContentBlock.bs.js","../../../app/frontend/shared/components/ClickToCopy.bs.js","../../../app/frontend/shared/components/TargetContentView.bs.js","../../../node_modules/@glennsl/bs-json/src/Json_encode.bs.js","../../../app/frontend/schools/courses/types/curriculum_editor/TargetChecklistItem.bs.js","../../../app/frontend/shared/components/Sorter.bs.js","../../../app/frontend/shared/types/IssuedCertificate.bs.js","../../../node_modules/qrcode.react/lib/esm/index.js","../../../app/frontend/issued_certificates/IssuedCertificate__Root.bs.js","../../../app/frontend/shared/types/GradeLabel.bs.js","../../../app/frontend/shared/types/EvaluationCriterion.bs.js"],"sourcesContent":["// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"./I18n.bs.js\";\n\nvar partial_arg = \"shared.level_label\";\n\nfunction ts(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction format(shortOpt, name, number) {\n var $$short = shortOpt !== undefined ? shortOpt : false;\n if (name !== undefined) {\n if ($$short) {\n return ts([\n [\n \"number\",\n number\n ],\n [\n \"name\",\n name\n ]\n ], undefined, \"short_with_name\");\n } else {\n return ts([\n [\n \"number\",\n number\n ],\n [\n \"name\",\n name\n ]\n ], undefined, \"long_with_name\");\n }\n } else if ($$short) {\n return ts([[\n \"number\",\n number\n ]], undefined, \"short_without_name\");\n } else {\n return ts([[\n \"number\",\n number\n ]], undefined, \"long_without_name\");\n }\n}\n\nfunction searchString(number, name) {\n return ts([\n [\n \"number\",\n number\n ],\n [\n \"name\",\n name\n ]\n ], undefined, \"long_with_name\");\n}\n\nexport {\n ts ,\n format ,\n searchString ,\n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as List from \"../../../../node_modules/rescript/lib/es6/list.js\";\nimport * as $$Array from \"../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as DateFns from \"../utils/DateFns.bs.js\";\nimport * as Js_array from \"../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as ListUtils from \"../utils/ListUtils.bs.js\";\nimport * as ArrayUtils from \"../utils/ArrayUtils.bs.js\";\nimport * as Belt_Option from \"../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Json_decode from \"../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as GraphqlQuery from \"../utils/GraphqlQuery.bs.js\";\nimport * as Caml_exceptions from \"../../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\n\nvar UnexpectedBlockType = /* @__PURE__ */Caml_exceptions.create(\"ContentBlock.UnexpectedBlockType\");\n\nvar UnexpectedRequestSource = /* @__PURE__ */Caml_exceptions.create(\"ContentBlock.UnexpectedRequestSource\");\n\nfunction widthToClass(width) {\n switch (width) {\n case /* Auto */0 :\n return \"w-auto\";\n case /* Full */1 :\n return \"w-full\";\n case /* FourFifths */2 :\n return \"w-4/5\";\n case /* ThreeFifths */3 :\n return \"w-3/5\";\n case /* TwoFifths */4 :\n return \"w-2/5\";\n \n }\n}\n\nfunction decodeMarkdownContent(json) {\n return Json_decode.field(\"markdown\", Json_decode.string, json);\n}\n\nfunction decodeFileContent(json) {\n return Json_decode.field(\"title\", Json_decode.string, json);\n}\n\nfunction decodeImageContent(json) {\n var widthString = Json_decode.field(\"width\", Json_decode.string, json);\n var width;\n switch (widthString) {\n case \"Auto\" :\n width = /* Auto */0;\n break;\n case \"FourFifths\" :\n width = /* FourFifths */2;\n break;\n case \"Full\" :\n width = /* Full */1;\n break;\n case \"ThreeFifths\" :\n width = /* ThreeFifths */3;\n break;\n case \"TwoFifths\" :\n width = /* TwoFifths */4;\n break;\n default:\n Rollbar.error(\"Encountered unexpected width for image content block: \" + widthString);\n width = /* Auto */0;\n }\n return [\n Json_decode.field(\"caption\", Json_decode.string, json),\n width\n ];\n}\n\nfunction decodeEmbedContent(json) {\n var requestSourceString = Json_decode.field(\"requestSource\", Json_decode.string, json);\n var requestSource;\n switch (requestSourceString) {\n case \"User\" :\n requestSource = \"User\";\n break;\n case \"VimeoUpload\" :\n requestSource = \"VimeoUpload\";\n break;\n default:\n Rollbar.error(\"Unexpected requestSource encountered in ContentBlock.re: \" + requestSourceString);\n throw {\n RE_EXN_ID: UnexpectedRequestSource,\n _1: requestSourceString,\n Error: new Error()\n };\n }\n return [\n Json_decode.field(\"url\", Json_decode.string, json),\n Json_decode.optional((function (param) {\n return Json_decode.field(\"embedCode\", Json_decode.string, param);\n }), json),\n requestSource,\n Json_decode.optional((function (param) {\n return Json_decode.field(\"lastResolvedAt\", DateFns.decodeISO, param);\n }), json)\n ];\n}\n\nfunction decode(json) {\n var unknownBlockType = Json_decode.field(\"blockType\", Json_decode.string, json);\n var blockType;\n switch (unknownBlockType) {\n case \"audio\" :\n var title = Json_decode.field(\"content\", decodeFileContent, json);\n var url = Json_decode.field(\"fileUrl\", Json_decode.string, json);\n var filename = Json_decode.field(\"filename\", Json_decode.string, json);\n blockType = {\n TAG: /* Audio */4,\n _0: url,\n _1: title,\n _2: filename\n };\n break;\n case \"embed\" :\n var match = Json_decode.field(\"content\", decodeEmbedContent, json);\n blockType = {\n TAG: /* Embed */3,\n _0: match[0],\n _1: match[1],\n _2: match[2],\n _3: match[3]\n };\n break;\n case \"file\" :\n var title$1 = Json_decode.field(\"content\", decodeFileContent, json);\n var url$1 = Json_decode.field(\"fileUrl\", Json_decode.string, json);\n var filename$1 = Json_decode.field(\"filename\", Json_decode.string, json);\n blockType = {\n TAG: /* File */1,\n _0: url$1,\n _1: title$1,\n _2: filename$1\n };\n break;\n case \"image\" :\n var match$1 = Json_decode.field(\"content\", decodeImageContent, json);\n var url$2 = Json_decode.field(\"fileUrl\", Json_decode.string, json);\n blockType = {\n TAG: /* Image */2,\n _0: url$2,\n _1: match$1[0],\n _2: match$1[1]\n };\n break;\n case \"markdown\" :\n var markdown = Json_decode.field(\"content\", decodeMarkdownContent, json);\n blockType = {\n TAG: /* Markdown */0,\n _0: markdown\n };\n break;\n default:\n throw {\n RE_EXN_ID: UnexpectedBlockType,\n _1: unknownBlockType,\n Error: new Error()\n };\n }\n return {\n id: Json_decode.field(\"id\", Json_decode.string, json),\n blockType: blockType,\n sortIndex: Json_decode.field(\"sortIndex\", Json_decode.$$int, json)\n };\n}\n\nfunction sort(blocks) {\n return ArrayUtils.copyAndSort((function (x, y) {\n return x.sortIndex - y.sortIndex | 0;\n }), blocks);\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction blockType(t) {\n return t.blockType;\n}\n\nfunction sortIndex(t) {\n return t.sortIndex;\n}\n\nfunction makeMarkdownBlock(markdown) {\n return {\n TAG: /* Markdown */0,\n _0: markdown\n };\n}\n\nfunction makeImageBlock(fileUrl, caption, width) {\n return {\n TAG: /* Image */2,\n _0: fileUrl,\n _1: caption,\n _2: width\n };\n}\n\nfunction makeFileBlock(fileUrl, title, fileName) {\n return {\n TAG: /* File */1,\n _0: fileUrl,\n _1: title,\n _2: fileName\n };\n}\n\nfunction makeEmbedBlock(url, embedCode, requestSource, lastResolvedAt) {\n return {\n TAG: /* Embed */3,\n _0: url,\n _1: embedCode,\n _2: requestSource,\n _3: lastResolvedAt\n };\n}\n\nfunction makeAudioBlock(fileUrl, title, fileName) {\n return {\n TAG: /* Audio */4,\n _0: fileUrl,\n _1: title,\n _2: fileName\n };\n}\n\nfunction make(id, blockType, sortIndex) {\n return {\n id: id,\n blockType: blockType,\n sortIndex: sortIndex\n };\n}\n\nfunction makeFromJs(js) {\n var id = js.id;\n var sortIndex = js.sortIndex;\n var match = js.content;\n var variant = match.NAME;\n var blockType;\n if (variant === \"FileBlock\") {\n var content = match.VAL;\n blockType = {\n TAG: /* File */1,\n _0: content.url,\n _1: content.title,\n _2: content.filename\n };\n } else if (variant === \"MarkdownBlock\") {\n blockType = {\n TAG: /* Markdown */0,\n _0: match.VAL.markdown\n };\n } else if (variant === \"EmbedBlock\") {\n var content$1 = match.VAL;\n blockType = {\n TAG: /* Embed */3,\n _0: content$1.url,\n _1: content$1.embedCode,\n _2: content$1.requestSource,\n _3: Belt_Option.map(content$1.lastResolvedAt, DateFns.parseISO)\n };\n } else if (variant === \"ImageBlock\") {\n var content$2 = match.VAL;\n var match$1 = content$2.width;\n blockType = {\n TAG: /* Image */2,\n _0: content$2.url,\n _1: content$2.caption,\n _2: match$1 === \"ThreeFifths\" ? /* ThreeFifths */3 : (\n match$1 === \"TwoFifths\" ? /* TwoFifths */4 : (\n match$1 === \"Auto\" ? /* Auto */0 : (\n match$1 === \"Full\" ? /* Full */1 : /* FourFifths */2\n )\n )\n )\n };\n } else {\n var content$3 = match.VAL;\n blockType = {\n TAG: /* Audio */4,\n _0: content$3.url,\n _1: content$3.title,\n _2: content$3.filename\n };\n }\n return {\n id: id,\n blockType: blockType,\n sortIndex: sortIndex\n };\n}\n\nfunction blockTypeAsString(blockType) {\n switch (blockType.TAG | 0) {\n case /* Markdown */0 :\n return \"markdown\";\n case /* File */1 :\n return \"file\";\n case /* Image */2 :\n return \"image\";\n case /* Embed */3 :\n return \"embed\";\n case /* Audio */4 :\n return \"audio\";\n \n }\n}\n\nfunction incrementSortIndex(t) {\n return {\n id: t.id,\n blockType: t.blockType,\n sortIndex: t.sortIndex + 1 | 0\n };\n}\n\nfunction reindex(ts) {\n return List.mapi((function (sortIndex, t) {\n return {\n id: t.id,\n blockType: t.blockType,\n sortIndex: sortIndex\n };\n }), ts);\n}\n\nfunction moveUp(t, ts) {\n return $$Array.of_list(reindex(ListUtils.swapUp(t, $$Array.to_list(sort(ts)))));\n}\n\nfunction moveDown(t, ts) {\n return $$Array.of_list(reindex(ListUtils.swapDown(t, $$Array.to_list(sort(ts)))));\n}\n\nfunction updateFile(title, t) {\n var match = t.blockType;\n if (match.TAG === /* File */1) {\n return {\n id: t.id,\n blockType: {\n TAG: /* File */1,\n _0: match._0,\n _1: title,\n _2: match._2\n },\n sortIndex: t.sortIndex\n };\n } else {\n return t;\n }\n}\n\nfunction updateImageCaption(t, caption) {\n var match = t.blockType;\n if (match.TAG === /* Image */2) {\n return {\n id: t.id,\n blockType: {\n TAG: /* Image */2,\n _0: match._0,\n _1: caption,\n _2: match._2\n },\n sortIndex: t.sortIndex\n };\n } else {\n return t;\n }\n}\n\nfunction updateImageWidth(t, width) {\n var match = t.blockType;\n if (match.TAG === /* Image */2) {\n return {\n id: t.id,\n blockType: {\n TAG: /* Image */2,\n _0: match._0,\n _1: match._1,\n _2: width\n },\n sortIndex: t.sortIndex\n };\n } else {\n return t;\n }\n}\n\nfunction updateMarkdown(markdown, t) {\n var match = t.blockType;\n if (match.TAG === /* Markdown */0) {\n return {\n id: t.id,\n blockType: {\n TAG: /* Markdown */0,\n _0: markdown\n },\n sortIndex: t.sortIndex\n };\n } else {\n return t;\n }\n}\n\nvar Raw = {};\n\nvar query = \"query ContentBlocksWithVersionsQuery($targetId: ID!, $targetVersionId: ID) {\\ncontentBlocks(targetId: $targetId, targetVersionId: $targetVersionId) {\\nid \\nblockType \\nsortIndex \\ncontent {\\n__typename\\n...on ImageBlock {\\ncaption \\nurl \\nfilename \\nwidth \\n}\\n\\n...on FileBlock {\\ntitle \\nurl \\nfilename \\n}\\n\\n...on AudioBlock {\\ntitle \\nurl \\nfilename \\n}\\n\\n...on MarkdownBlock {\\nmarkdown \\n}\\n\\n...on EmbedBlock {\\nurl \\nembedCode \\nrequestSource \\nlastResolvedAt \\n}\\n\\n}\\n\\n}\\n\\ntargetVersions(targetId: $targetId) {\\nid \\ncreatedAt \\nupdatedAt \\n}\\n\\n}\\n\";\n\nfunction parse(value) {\n var value$1 = value.contentBlocks;\n var value$2 = value.targetVersions;\n return {\n contentBlocks: Js_array.map((function (value) {\n var value$1 = value.content;\n var typename = value$1[\"__typename\"];\n var tmp;\n switch (typename) {\n case \"AudioBlock\" :\n tmp = {\n NAME: \"AudioBlock\",\n VAL: {\n title: value$1.title,\n url: value$1.url,\n filename: value$1.filename\n }\n };\n break;\n case \"EmbedBlock\" :\n var value$2 = value$1.embedCode;\n var value$3 = value$1.requestSource;\n var tmp$1;\n switch (value$3) {\n case \"User\" :\n tmp$1 = \"User\";\n break;\n case \"VimeoUpload\" :\n tmp$1 = \"VimeoUpload\";\n break;\n default:\n tmp$1 = {\n NAME: \"FutureAddedValue\",\n VAL: value$3\n };\n }\n var value$4 = value$1.lastResolvedAt;\n tmp = {\n NAME: \"EmbedBlock\",\n VAL: {\n url: value$1.url,\n embedCode: !(value$2 == null) ? value$2 : undefined,\n requestSource: tmp$1,\n lastResolvedAt: !(value$4 == null) ? value$4 : undefined\n }\n };\n break;\n case \"FileBlock\" :\n tmp = {\n NAME: \"FileBlock\",\n VAL: {\n title: value$1.title,\n url: value$1.url,\n filename: value$1.filename\n }\n };\n break;\n case \"ImageBlock\" :\n var value$5 = value$1.width;\n var tmp$2;\n switch (value$5) {\n case \"Auto\" :\n tmp$2 = \"Auto\";\n break;\n case \"FourFifths\" :\n tmp$2 = \"FourFifths\";\n break;\n case \"Full\" :\n tmp$2 = \"Full\";\n break;\n case \"ThreeFifths\" :\n tmp$2 = \"ThreeFifths\";\n break;\n case \"TwoFifths\" :\n tmp$2 = \"TwoFifths\";\n break;\n default:\n tmp$2 = {\n NAME: \"FutureAddedValue\",\n VAL: value$5\n };\n }\n tmp = {\n NAME: \"ImageBlock\",\n VAL: {\n caption: value$1.caption,\n url: value$1.url,\n filename: value$1.filename,\n width: tmp$2\n }\n };\n break;\n case \"MarkdownBlock\" :\n tmp = {\n NAME: \"MarkdownBlock\",\n VAL: {\n markdown: value$1.markdown\n }\n };\n break;\n default:\n tmp = {\n NAME: \"FutureAddedValue\",\n VAL: value$1\n };\n }\n return {\n id: value.id,\n blockType: value.blockType,\n sortIndex: value.sortIndex,\n content: tmp\n };\n }), value$1),\n targetVersions: Js_array.map((function (value) {\n return {\n id: value.id,\n createdAt: value.createdAt,\n updatedAt: value.updatedAt\n };\n }), value$2)\n };\n}\n\nfunction serialize(value) {\n var value$1 = value.targetVersions;\n var targetVersions = Js_array.map((function (value) {\n var value$1 = value.updatedAt;\n var value$2 = value.createdAt;\n var value$3 = value.id;\n return {\n id: value$3,\n createdAt: value$2,\n updatedAt: value$1\n };\n }), value$1);\n var value$2 = value.contentBlocks;\n var contentBlocks = Js_array.map((function (value) {\n var value$1 = value.content;\n var variant = value$1.NAME;\n var content;\n if (variant === \"FileBlock\") {\n var value$2 = value$1.VAL;\n var value$3 = value$2.filename;\n var value$4 = value$2.url;\n var value$5 = value$2.title;\n content = {\n __typename: \"FileBlock\",\n title: value$5,\n url: value$4,\n filename: value$3\n };\n } else if (variant === \"MarkdownBlock\") {\n var value$6 = value$1.VAL.markdown;\n content = {\n __typename: \"MarkdownBlock\",\n markdown: value$6\n };\n } else if (variant === \"FutureAddedValue\") {\n content = value$1.VAL;\n } else if (variant === \"EmbedBlock\") {\n var value$7 = value$1.VAL;\n var value$8 = value$7.lastResolvedAt;\n var lastResolvedAt = value$8 !== undefined ? value$8 : null;\n var value$9 = value$7.requestSource;\n var requestSource = typeof value$9 === \"object\" ? value$9.VAL : (\n value$9 === \"User\" ? \"User\" : \"VimeoUpload\"\n );\n var value$10 = value$7.embedCode;\n var embedCode = value$10 !== undefined ? value$10 : null;\n var value$11 = value$7.url;\n content = {\n __typename: \"EmbedBlock\",\n url: value$11,\n embedCode: embedCode,\n requestSource: requestSource,\n lastResolvedAt: lastResolvedAt\n };\n } else if (variant === \"ImageBlock\") {\n var value$12 = value$1.VAL;\n var value$13 = value$12.width;\n var width = typeof value$13 === \"object\" ? value$13.VAL : (\n value$13 === \"ThreeFifths\" ? \"ThreeFifths\" : (\n value$13 === \"TwoFifths\" ? \"TwoFifths\" : (\n value$13 === \"Auto\" ? \"Auto\" : (\n value$13 === \"Full\" ? \"Full\" : \"FourFifths\"\n )\n )\n )\n );\n var value$14 = value$12.filename;\n var value$15 = value$12.url;\n var value$16 = value$12.caption;\n content = {\n __typename: \"ImageBlock\",\n caption: value$16,\n url: value$15,\n filename: value$14,\n width: width\n };\n } else {\n var value$17 = value$1.VAL;\n var value$18 = value$17.filename;\n var value$19 = value$17.url;\n var value$20 = value$17.title;\n content = {\n __typename: \"AudioBlock\",\n title: value$20,\n url: value$19,\n filename: value$18\n };\n }\n var value$21 = value.sortIndex;\n var value$22 = value.blockType;\n var value$23 = value.id;\n return {\n id: value$23,\n blockType: value$22,\n sortIndex: value$21,\n content: content\n };\n }), value$2);\n return {\n contentBlocks: contentBlocks,\n targetVersions: targetVersions\n };\n}\n\nfunction serializeVariables(inp) {\n var a = inp.targetVersionId;\n return {\n targetId: inp.targetId,\n targetVersionId: a !== undefined ? a : undefined\n };\n}\n\nfunction makeVariables(targetId, targetVersionId, param) {\n return {\n targetId: targetId,\n targetVersionId: targetVersionId\n };\n}\n\nvar Query_inner = {\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables\n};\n\nvar include = GraphqlQuery.Extender({\n Raw: Raw,\n query: query,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n variablesToJson: (function (prim) {\n return prim;\n }),\n toJson: (function (prim) {\n return prim;\n })\n });\n\nvar Query_Graphql_error = include.Graphql_error;\n\nvar Query_decodeNotification = include.decodeNotification;\n\nvar Query_decodeObject = include.decodeObject;\n\nvar Query_decodeNotifications = include.decodeNotifications;\n\nvar Query_decodeErrors = include.decodeErrors;\n\nvar Query_flashNotifications = include.flashNotifications;\n\nvar Query_sendQuery = include.sendQuery;\n\nvar Query_query = include.query;\n\nvar Query_fetch = include.$$fetch;\n\nvar Query_make = include.make;\n\nvar Query = {\n Query_inner: Query_inner,\n Raw: Raw,\n parse: parse,\n serialize: serialize,\n serializeVariables: serializeVariables,\n makeVariables: makeVariables,\n Graphql_error: Query_Graphql_error,\n decodeNotification: Query_decodeNotification,\n decodeObject: Query_decodeObject,\n decodeNotifications: Query_decodeNotifications,\n decodeErrors: Query_decodeErrors,\n flashNotifications: Query_flashNotifications,\n sendQuery: Query_sendQuery,\n query: Query_query,\n $$fetch: Query_fetch,\n make: Query_make\n};\n\nvar Raw$1 = {};\n\nfunction parse$1(value) {\n var value$1 = value.content;\n var typename = value$1[\"__typename\"];\n var tmp;\n switch (typename) {\n case \"AudioBlock\" :\n tmp = {\n NAME: \"AudioBlock\",\n VAL: {\n title: value$1.title,\n url: value$1.url,\n filename: value$1.filename\n }\n };\n break;\n case \"EmbedBlock\" :\n var value$2 = value$1.embedCode;\n var value$3 = value$1.requestSource;\n var tmp$1;\n switch (value$3) {\n case \"User\" :\n tmp$1 = \"User\";\n break;\n case \"VimeoUpload\" :\n tmp$1 = \"VimeoUpload\";\n break;\n default:\n tmp$1 = {\n NAME: \"FutureAddedValue\",\n VAL: value$3\n };\n }\n var value$4 = value$1.lastResolvedAt;\n tmp = {\n NAME: \"EmbedBlock\",\n VAL: {\n url: value$1.url,\n embedCode: !(value$2 == null) ? value$2 : undefined,\n requestSource: tmp$1,\n lastResolvedAt: !(value$4 == null) ? value$4 : undefined\n }\n };\n break;\n case \"FileBlock\" :\n tmp = {\n NAME: \"FileBlock\",\n VAL: {\n title: value$1.title,\n url: value$1.url,\n filename: value$1.filename\n }\n };\n break;\n case \"ImageBlock\" :\n var value$5 = value$1.width;\n var tmp$2;\n switch (value$5) {\n case \"Auto\" :\n tmp$2 = \"Auto\";\n break;\n case \"FourFifths\" :\n tmp$2 = \"FourFifths\";\n break;\n case \"Full\" :\n tmp$2 = \"Full\";\n break;\n case \"ThreeFifths\" :\n tmp$2 = \"ThreeFifths\";\n break;\n case \"TwoFifths\" :\n tmp$2 = \"TwoFifths\";\n break;\n default:\n tmp$2 = {\n NAME: \"FutureAddedValue\",\n VAL: value$5\n };\n }\n tmp = {\n NAME: \"ImageBlock\",\n VAL: {\n caption: value$1.caption,\n url: value$1.url,\n filename: value$1.filename,\n width: tmp$2\n }\n };\n break;\n case \"MarkdownBlock\" :\n tmp = {\n NAME: \"MarkdownBlock\",\n VAL: {\n markdown: value$1.markdown\n }\n };\n break;\n default:\n tmp = {\n NAME: \"FutureAddedValue\",\n VAL: value$1\n };\n }\n return {\n id: value.id,\n blockType: value.blockType,\n sortIndex: value.sortIndex,\n content: tmp\n };\n}\n\nfunction serialize$1(value) {\n var value$1 = value.content;\n var variant = value$1.NAME;\n var content;\n if (variant === \"FileBlock\") {\n var value$2 = value$1.VAL;\n var value$3 = value$2.filename;\n var value$4 = value$2.url;\n var value$5 = value$2.title;\n content = {\n __typename: \"FileBlock\",\n title: value$5,\n url: value$4,\n filename: value$3\n };\n } else if (variant === \"MarkdownBlock\") {\n var value$6 = value$1.VAL.markdown;\n content = {\n __typename: \"MarkdownBlock\",\n markdown: value$6\n };\n } else if (variant === \"FutureAddedValue\") {\n content = value$1.VAL;\n } else if (variant === \"EmbedBlock\") {\n var value$7 = value$1.VAL;\n var value$8 = value$7.lastResolvedAt;\n var lastResolvedAt = value$8 !== undefined ? value$8 : null;\n var value$9 = value$7.requestSource;\n var requestSource = typeof value$9 === \"object\" ? value$9.VAL : (\n value$9 === \"User\" ? \"User\" : \"VimeoUpload\"\n );\n var value$10 = value$7.embedCode;\n var embedCode = value$10 !== undefined ? value$10 : null;\n var value$11 = value$7.url;\n content = {\n __typename: \"EmbedBlock\",\n url: value$11,\n embedCode: embedCode,\n requestSource: requestSource,\n lastResolvedAt: lastResolvedAt\n };\n } else if (variant === \"ImageBlock\") {\n var value$12 = value$1.VAL;\n var value$13 = value$12.width;\n var width = typeof value$13 === \"object\" ? value$13.VAL : (\n value$13 === \"ThreeFifths\" ? \"ThreeFifths\" : (\n value$13 === \"TwoFifths\" ? \"TwoFifths\" : (\n value$13 === \"Auto\" ? \"Auto\" : (\n value$13 === \"Full\" ? \"Full\" : \"FourFifths\"\n )\n )\n )\n );\n var value$14 = value$12.filename;\n var value$15 = value$12.url;\n var value$16 = value$12.caption;\n content = {\n __typename: \"ImageBlock\",\n caption: value$16,\n url: value$15,\n filename: value$14,\n width: width\n };\n } else {\n var value$17 = value$1.VAL;\n var value$18 = value$17.filename;\n var value$19 = value$17.url;\n var value$20 = value$17.title;\n content = {\n __typename: \"AudioBlock\",\n title: value$20,\n url: value$19,\n filename: value$18\n };\n }\n var value$21 = value.sortIndex;\n var value$22 = value.blockType;\n var value$23 = value.id;\n return {\n id: value$23,\n blockType: value$22,\n sortIndex: value$21,\n content: content\n };\n}\n\nfunction verifyArgsAndParse(_ContentBlockFragment, value) {\n return parse$1(value);\n}\n\nfunction verifyName(param) {\n \n}\n\nvar Fragment = {\n Raw: Raw$1,\n query: \"fragment ContentBlockFragment on ContentBlock {\\nid \\nblockType \\nsortIndex \\ncontent {\\n__typename\\n...on ImageBlock {\\ncaption \\nurl \\nfilename \\nwidth \\n}\\n\\n...on FileBlock {\\ntitle \\nurl \\nfilename \\n}\\n\\n...on AudioBlock {\\ntitle \\nurl \\nfilename \\n}\\n\\n...on MarkdownBlock {\\nmarkdown \\n}\\n\\n...on EmbedBlock {\\nurl \\nembedCode \\nrequestSource \\nlastResolvedAt \\n}\\n\\n}\\n\\n}\\n\",\n parse: parse$1,\n serialize: serialize$1,\n verifyArgsAndParse: verifyArgsAndParse,\n verifyName: verifyName\n};\n\nexport {\n UnexpectedBlockType ,\n UnexpectedRequestSource ,\n widthToClass ,\n decodeMarkdownContent ,\n decodeFileContent ,\n decodeImageContent ,\n decodeEmbedContent ,\n decode ,\n sort ,\n id ,\n blockType ,\n sortIndex ,\n makeMarkdownBlock ,\n makeImageBlock ,\n makeFileBlock ,\n makeEmbedBlock ,\n makeAudioBlock ,\n make ,\n makeFromJs ,\n blockTypeAsString ,\n incrementSortIndex ,\n reindex ,\n moveUp ,\n moveDown ,\n updateFile ,\n updateImageCaption ,\n updateImageWidth ,\n updateMarkdown ,\n Query ,\n Fragment ,\n}\n/* include Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../utils/I18n.bs.js\";\nimport * as Curry from \"../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Tooltip from \"./Tooltip.bs.js\";\nimport * as Caml_option from \"../../../../node_modules/rescript/lib/es6/caml_option.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.ClickToCopy\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction performCopy(_copy, setState, _event) {\n ((navigator.clipboard.writeText(_copy)));\n return Curry._1(setState, (function (param) {\n return /* Copied */1;\n }));\n}\n\nfunction refresh(setState, _event) {\n return Curry._1(setState, (function (param) {\n return /* ReadyToCopy */0;\n }));\n}\n\nfunction ClickToCopy(Props) {\n var copy = Props.copy;\n var tooltipPositionOpt = Props.tooltipPosition;\n var classNameOpt = Props.className;\n var tooltipClassName = Props.tooltipClassName;\n var children = Props.children;\n var tooltipPosition = tooltipPositionOpt !== undefined ? tooltipPositionOpt : \"Top\";\n var className = classNameOpt !== undefined ? classNameOpt : \"\";\n var match = React.useState(function () {\n return /* ReadyToCopy */0;\n });\n var setState = match[1];\n var tip = match[0] ? t(undefined, undefined, \"copied\") : t(undefined, undefined, \"copy\");\n var tmp = {\n tip: tip,\n position: tooltipPosition,\n children: children\n };\n if (tooltipClassName !== undefined) {\n tmp.className = Caml_option.valFromOption(tooltipClassName);\n }\n return React.createElement(\"div\", {\n className: \"cursor-pointer \" + className,\n onClick: (function (param) {\n return performCopy(copy, setState, param);\n }),\n onMouseLeave: (function (param) {\n return Curry._1(setState, (function (param) {\n return /* ReadyToCopy */0;\n }));\n })\n }, React.createElement(Tooltip.make, tmp));\n}\n\nvar make = ClickToCopy;\n\nexport {\n str ,\n t ,\n performCopy ,\n refresh ,\n make ,\n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as $$Array from \"../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as React from \"react\";\nimport * as FaIcon from \"./FaIcon.bs.js\";\nimport * as Belt_Option from \"../../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as ContentBlock from \"../types/ContentBlock.bs.js\";\nimport * as MarkdownBlock from \"./MarkdownBlock.bs.js\";\n\nimport \"./TargetContentView.css\"\n;\n\nfunction str(prim) {\n return prim;\n}\n\nfunction renderBlockClasses(block) {\n var match = ContentBlock.blockType(block);\n switch (match.TAG | 0) {\n case /* Embed */3 :\n return \"mt-6 pb-7\";\n case /* Markdown */0 :\n case /* File */1 :\n case /* Image */2 :\n case /* Audio */4 :\n return \"mt-6\";\n \n }\n}\n\nfunction markdownContentBlock(markdown) {\n return React.createElement(MarkdownBlock.make, {\n markdown: markdown,\n profile: /* Permissive */0\n });\n}\n\nfunction fileContentBlock(url, title, filename) {\n return React.createElement(\"a\", {\n \"aria-label\": \"Download \" + title,\n className: \"flex justify-between bg-white border rounded-lg px-6 py-4 items-center shadow hover:border-gray-500 hover:bg-gray-50 hover:text-primary-500 hover:shadow-md focus:outline-none focus:text-primary-500 focus:ring-2 focus:ring-focusColor-500\",\n href: url,\n target: \"_blank\"\n }, React.createElement(\"div\", {\n className: \"flex items-center\"\n }, React.createElement(FaIcon.make, {\n classes: \"text-4xl text-gray-800 far fa-file-alt\"\n }), React.createElement(\"div\", {\n className: \"ps-4 leading-tight\"\n }, React.createElement(\"div\", {\n className: \"text-lg font-semibold\"\n }, title), React.createElement(\"div\", {\n className: \"text-sm italic text-gray-600\"\n }, filename))), React.createElement(\"div\", undefined, React.createElement(FaIcon.make, {\n classes: \"text-2xl fas fa-download\"\n })));\n}\n\nfunction imageContentBlock(url, caption, width) {\n return React.createElement(\"div\", {\n className: \"rounded-lg bg-white text-center\"\n }, React.createElement(\"img\", {\n className: \"mx-auto w-auto md:\" + ContentBlock.widthToClass(width),\n alt: caption,\n src: url\n }), React.createElement(\"div\", {\n className: \"px-4 py-2 text-sm italic\"\n }, caption));\n}\n\nfunction embedContentBlock(embedCode) {\n return React.createElement(\"div\", {\n className: \"learn-content-block__embed\",\n dangerouslySetInnerHTML: {\n __html: embedCode\n }\n });\n}\n\nfunction audioContentBlock(url) {\n return React.createElement(\"audio\", {\n controls: true,\n src: url\n });\n}\n\nfunction TargetContentView(Props) {\n var contentBlocks = Props.contentBlocks;\n return React.createElement(\"div\", {\n className: \"text-base\",\n id: \"learn-component\"\n }, $$Array.map((function (block) {\n var markdown = ContentBlock.blockType(block);\n var renderedBlock;\n switch (markdown.TAG | 0) {\n case /* Markdown */0 :\n renderedBlock = markdownContentBlock(markdown._0);\n break;\n case /* File */1 :\n renderedBlock = fileContentBlock(markdown._0, markdown._1, markdown._2);\n break;\n case /* Image */2 :\n renderedBlock = imageContentBlock(markdown._0, markdown._1, markdown._2);\n break;\n case /* Embed */3 :\n renderedBlock = Belt_Option.mapWithDefault(markdown._1, null, embedContentBlock);\n break;\n case /* Audio */4 :\n renderedBlock = audioContentBlock(markdown._0);\n break;\n \n }\n return React.createElement(\"div\", {\n key: ContentBlock.id(block),\n className: renderBlockClasses(block)\n }, renderedBlock);\n }), ContentBlock.sort(contentBlocks)));\n}\n\nvar make = TargetContentView;\n\nexport {\n str ,\n renderBlockClasses ,\n markdownContentBlock ,\n fileContentBlock ,\n imageContentBlock ,\n embedContentBlock ,\n audioContentBlock ,\n make ,\n}\n/* Not a pure module */\n","\n\nimport * as List from \"../../../rescript/lib/es6/list.js\";\nimport * as $$Array from \"../../../rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../rescript/lib/es6/curry.js\";\nimport * as $$String from \"../../../rescript/lib/es6/string.js\";\nimport * as Js_dict from \"../../../rescript/lib/es6/js_dict.js\";\nimport * as Caml_array from \"../../../rescript/lib/es6/caml_array.js\";\nimport * as Caml_option from \"../../../rescript/lib/es6/caml_option.js\";\n\nfunction $$char(c) {\n return $$String.make(1, c);\n}\n\nfunction date(d) {\n return d.toJSON();\n}\n\nfunction nullable(encode, v) {\n if (v !== undefined) {\n return Curry._1(encode, Caml_option.valFromOption(v));\n } else {\n return null;\n }\n}\n\nfunction withDefault(d, encode, v) {\n if (v !== undefined) {\n return Curry._1(encode, Caml_option.valFromOption(v));\n } else {\n return d;\n }\n}\n\nfunction dict(encode, d) {\n var pairs = Js_dict.entries(d);\n return Js_dict.fromArray($$Array.map((function (param) {\n return [\n param[0],\n Curry._1(encode, param[1])\n ];\n }), pairs));\n}\n\nvar object_ = Js_dict.fromList;\n\nvar array = $$Array.map;\n\nfunction list(encode, l) {\n if (!l) {\n return [];\n }\n var a = Caml_array.make(List.length(l), Curry._1(encode, l.hd));\n var _i = 1;\n var _param = l.tl;\n while(true) {\n var param = _param;\n var i = _i;\n if (!param) {\n return a;\n }\n a[i] = Curry._1(encode, param.hd);\n _param = param.tl;\n _i = i + 1 | 0;\n continue ;\n };\n}\n\nfunction pair(encodeA, encodeB, param) {\n return [\n Curry._1(encodeA, param[0]),\n Curry._1(encodeB, param[1])\n ];\n}\n\nfunction tuple3(encodeA, encodeB, encodeC, param) {\n return [\n Curry._1(encodeA, param[0]),\n Curry._1(encodeB, param[1]),\n Curry._1(encodeC, param[2])\n ];\n}\n\nfunction tuple4(encodeA, encodeB, encodeC, encodeD, param) {\n return [\n Curry._1(encodeA, param[0]),\n Curry._1(encodeB, param[1]),\n Curry._1(encodeC, param[2]),\n Curry._1(encodeD, param[3])\n ];\n}\n\nvar tuple2 = pair;\n\nexport {\n $$char ,\n date ,\n nullable ,\n withDefault ,\n pair ,\n tuple2 ,\n tuple3 ,\n tuple4 ,\n dict ,\n object_ ,\n array ,\n list ,\n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../../../../shared/utils/I18n.bs.js\";\nimport * as $$Array from \"../../../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as $$String from \"../../../../../../node_modules/rescript/lib/es6/string.js\";\nimport * as Js_array from \"../../../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as ArrayUtils from \"../../../../shared/utils/ArrayUtils.bs.js\";\nimport * as Json_decode from \"../../../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as Json_encode from \"../../../../../../node_modules/@glennsl/bs-json/src/Json_encode.bs.js\";\n\nvar partial_arg = \"components.TargetChecklistItem\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction title(t) {\n return t.title;\n}\n\nfunction kind(t) {\n return t.kind;\n}\n\nfunction optional(t) {\n return t.optional;\n}\n\nfunction actionStringForKind(kind) {\n if (typeof kind !== \"number\") {\n return t(undefined, undefined, \"action_string_choose_from_list\");\n }\n switch (kind) {\n case /* Files */0 :\n return t(undefined, undefined, \"action_string_upload_files\");\n case /* Link */1 :\n return t(undefined, undefined, \"action_string_attach_link\");\n case /* ShortText */2 :\n return t(undefined, undefined, \"action_string_write_short_text\");\n case /* LongText */3 :\n return t(undefined, undefined, \"action_string_write_long_text\");\n case /* AudioRecord */4 :\n return t(undefined, undefined, \"action_string_record_audio\");\n \n }\n}\n\nfunction kindAsString(kind) {\n if (typeof kind !== \"number\") {\n return \"multiChoice\";\n }\n switch (kind) {\n case /* Files */0 :\n return \"files\";\n case /* Link */1 :\n return \"link\";\n case /* ShortText */2 :\n return \"shortText\";\n case /* LongText */3 :\n return \"longText\";\n case /* AudioRecord */4 :\n return \"audio\";\n \n }\n}\n\nfunction make(title, kind, optional) {\n return {\n title: title,\n kind: kind,\n optional: optional\n };\n}\n\nfunction updateTitle(title, t) {\n return {\n title: title,\n kind: t.kind,\n optional: t.optional\n };\n}\n\nfunction updateKind(kind, t) {\n return {\n title: t.title,\n kind: kind,\n optional: t.optional\n };\n}\n\nfunction updateOptional(optional, t) {\n return {\n title: t.title,\n kind: t.kind,\n optional: optional\n };\n}\n\nfunction removeItem(index, array) {\n return Js_array.filteri((function (_item, i) {\n return i !== index;\n }), array);\n}\n\nvar moveUp = ArrayUtils.swapUp;\n\nvar moveDown = ArrayUtils.swapDown;\n\nfunction copy(index, array) {\n return ArrayUtils.flattenV2(Js_array.mapi((function (item, i) {\n if (i === index) {\n return [\n item,\n item\n ];\n } else {\n return [item];\n }\n }), array));\n}\n\nfunction removeMultichoiceOption(choiceIndex, t) {\n var match = t.kind;\n if (typeof match === \"number\") {\n return t;\n }\n var updatedChoices = ArrayUtils.flattenV2($$Array.mapi((function (i, choice) {\n if (i === choiceIndex) {\n return [];\n } else {\n return [choice];\n }\n }), match._0));\n return updateKind(/* MultiChoice */{\n _0: updatedChoices,\n _1: match._1\n }, t);\n}\n\nfunction addMultichoiceOption(t) {\n var match = t.kind;\n if (typeof match === \"number\") {\n return t;\n }\n var updatedChoices = Js_array.concat([\"\"], match._0);\n return updateKind(/* MultiChoice */{\n _0: updatedChoices,\n _1: match._1\n }, t);\n}\n\nfunction updateMultichoiceOption(choiceIndex, newOption, t) {\n var match = t.kind;\n if (typeof match === \"number\") {\n return t;\n }\n var updatedChoices = Js_array.mapi((function (choice, i) {\n if (i === choiceIndex) {\n return newOption;\n } else {\n return choice;\n }\n }), match._0);\n return updateKind(/* MultiChoice */{\n _0: updatedChoices,\n _1: match._1\n }, t);\n}\n\nfunction updateAllowMultiple(allowMultiple, t) {\n var match = t.kind;\n if (typeof match === \"number\") {\n return t;\n } else {\n return updateKind(/* MultiChoice */{\n _0: match._0,\n _1: allowMultiple\n }, t);\n }\n}\n\nfunction isFilesKind(t) {\n var match = t.kind;\n return match === 0;\n}\n\nfunction isValidChecklistItem(t) {\n var titleValid = t.title.trim().length >= 1;\n var match = t.kind;\n if (typeof match === \"number\") {\n return titleValid;\n }\n var allowMultiple = match._1;\n if (ArrayUtils.isEmpty(Js_array.filter((function (choice) {\n return $$String.trim(choice) === \"\";\n }), match._0)) && titleValid && allowMultiple === true) {\n return true;\n } else {\n return allowMultiple === false;\n }\n}\n\nfunction decodeMetadata(kind, json) {\n return /* MultiChoice */{\n _0: Json_decode.field(\"choices\", (function (param) {\n return Json_decode.array(Json_decode.string, param);\n }), json),\n _1: Json_decode.field(\"allowMultiple\", Json_decode.bool, json)\n };\n}\n\nfunction decode(json) {\n var otherKind = Json_decode.field(\"kind\", Json_decode.string, json);\n var tmp;\n switch (otherKind) {\n case \"audio\" :\n tmp = /* AudioRecord */4;\n break;\n case \"files\" :\n tmp = /* Files */0;\n break;\n case \"link\" :\n tmp = /* Link */1;\n break;\n case \"longText\" :\n tmp = /* LongText */3;\n break;\n case \"multiChoice\" :\n tmp = Json_decode.field(\"metadata\", (function (param) {\n return decodeMetadata(\"MultiChoice\", param);\n }), json);\n break;\n case \"shortText\" :\n tmp = /* ShortText */2;\n break;\n default:\n Rollbar.error(\"Unknown kind: \" + (otherKind + \" received in CurriculumEditor__TargetChecklistItem\"));\n tmp = /* LongText */3;\n }\n return {\n title: Json_decode.field(\"title\", Json_decode.string, json),\n kind: tmp,\n optional: Json_decode.field(\"optional\", Json_decode.bool, json)\n };\n}\n\nfunction encodeMetadata(kind) {\n if (typeof kind === \"number\") {\n return Json_encode.object_(/* [] */0);\n } else {\n return Json_encode.object_({\n hd: [\n \"choices\",\n kind._0\n ],\n tl: {\n hd: [\n \"allowMultiple\",\n kind._1\n ],\n tl: /* [] */0\n }\n });\n }\n}\n\nfunction encode(t) {\n return Json_encode.object_({\n hd: [\n \"kind\",\n kindAsString(t.kind)\n ],\n tl: {\n hd: [\n \"title\",\n t.title\n ],\n tl: {\n hd: [\n \"optional\",\n t.optional\n ],\n tl: {\n hd: [\n \"metadata\",\n encodeMetadata(t.kind)\n ],\n tl: /* [] */0\n }\n }\n }\n });\n}\n\nfunction encodeChecklist(checklist) {\n return Json_encode.array(encode, checklist);\n}\n\nvar longText = {\n title: \"\",\n kind: /* LongText */3,\n optional: false\n};\n\nexport {\n t ,\n title ,\n kind ,\n optional ,\n actionStringForKind ,\n kindAsString ,\n make ,\n updateTitle ,\n updateKind ,\n updateOptional ,\n removeItem ,\n moveUp ,\n moveDown ,\n copy ,\n removeMultichoiceOption ,\n addMultichoiceOption ,\n updateMultichoiceOption ,\n updateAllowMultiple ,\n longText ,\n isFilesKind ,\n isValidChecklistItem ,\n decodeMetadata ,\n decode ,\n encodeMetadata ,\n encode ,\n encodeChecklist ,\n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as I18n from \"../utils/I18n.bs.js\";\nimport * as Icon from \"../Icon.bs.js\";\nimport * as $$Array from \"../../../../node_modules/rescript/lib/es6/array.js\";\nimport * as Curry from \"../../../../node_modules/rescript/lib/es6/curry.js\";\nimport * as React from \"react\";\nimport * as Dropdown from \"./Dropdown.bs.js\";\nimport * as Js_array from \"../../../../node_modules/rescript/lib/es6/js_array.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nvar partial_arg = \"components.Sorter\";\n\nfunction t(param, param$1, param$2) {\n return I18n.t(partial_arg, param, param$1, param$2);\n}\n\nfunction Make(Sortable) {\n var dropdown = function (criteria, selectedCriterion, onCriterionChange) {\n var selectedForDropdown = React.createElement(\"button\", {\n \"aria-label\": t(undefined, undefined, \"order_by\") + \" \" + Curry._1(Sortable.criterion, selectedCriterion),\n className: \"flex w-full items-center justify-between leading-relaxed font-semibold bg-white border border-gray-300 rounded focus:outline-none px-2 md:px-3 py-1 md:py-2 focus:ring-2 focus:ring-inset focus:ring-focusColor-500 \",\n title: t(undefined, undefined, \"order_by\") + \" \" + Curry._1(Sortable.criterion, selectedCriterion)\n }, React.createElement(\"span\", undefined, Curry._1(Sortable.criterion, selectedCriterion)), React.createElement(\"i\", {\n className: \"fas fa-caret-down ms-3\"\n }));\n var dropDownContents = $$Array.map((function (criterion) {\n return React.createElement(\"button\", {\n key: Curry._1(Sortable.criterion, criterion),\n \"aria-label\": t(undefined, undefined, \"order_by\") + \" \" + Curry._1(Sortable.criterion, criterion),\n className: \"inline-flex items-center w-full font-semibold whitespace-nowrap text-xs p-3 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-focusColor-500 \",\n title: t(undefined, undefined, \"order_by\") + \" \" + Curry._1(Sortable.criterion, criterion),\n onClick: (function (param) {\n Curry._1(onCriterionChange, criterion);\n })\n }, React.createElement(Icon.make, {\n className: \"if i-clock-regular text-sm if-fw text-gray-600\"\n }), React.createElement(\"span\", {\n className: \"ms-2\"\n }, Curry._1(Sortable.criterion, criterion)));\n }), Js_array.filter((function (criterion) {\n return Curry._1(Sortable.criterion, criterion) !== Curry._1(Sortable.criterion, selectedCriterion);\n }), criteria));\n return React.createElement(Dropdown.make, {\n selected: selectedForDropdown,\n contents: dropDownContents\n });\n };\n var directionIconClasses = function (criterionType, direction) {\n if (criterionType === \"Number\") {\n if (direction === \"Descending\") {\n return \"if i-sort-numeric-descending-regular w-4 if-fw\";\n } else {\n return \"if i-sort-numeric-ascending-regular w-4 if-fw\";\n }\n } else if (direction === \"Descending\") {\n return \"if i-sort-alpha-descending-regular w-4 if-fw\";\n } else {\n return \"if i-sort-alpha-ascending-regular w-4 if-fw\";\n }\n };\n var Sorter$Make = function (Props) {\n var criteria = Props.criteria;\n var selectedCriterion = Props.selectedCriterion;\n var direction = Props.direction;\n var onDirectionChange = Props.onDirectionChange;\n var onCriterionChange = Props.onCriterionChange;\n return React.createElement(\"div\", {\n className: \"flex\"\n }, criteria.length > 1 ? dropdown(criteria, selectedCriterion, onCriterionChange) : React.createElement(\"div\", {\n className: \"inline-flex flex-1 md:flex-auto items-center bg-gray-50 leading-relaxed font-semibold text-gray-600 border border-gray-300 rounded px-3 py-1 md:py-2 text-sm \",\n title: t(undefined, undefined, \"order_by\") + \" \" + Curry._1(Sortable.criterion, selectedCriterion)\n }, React.createElement(\"div\", undefined, Curry._1(Sortable.criterion, selectedCriterion))), React.createElement(\"span\", {\n className: \"flex ms-1\"\n }, React.createElement(\"button\", {\n \"aria-label\": t(undefined, undefined, \"toggle_sort\"),\n className: \"bg-white w-10 px-2 py-1 rounded border border-gray-300 text-gray-800 hover:bg-gray-50 hover:text-primary-500 focus:ring-2 focus:ring-inset focus:ring-focusColor-500 \",\n title: \"toggle-sort-order\",\n onClick: (function (param) {\n Curry._1(onDirectionChange, direction === \"Descending\" ? \"Ascending\" : \"Descending\");\n })\n }, React.createElement(Icon.make, {\n className: directionIconClasses(Curry._1(Sortable.criterionType, selectedCriterion), direction)\n }))));\n };\n return {\n dropdown: dropdown,\n directionIconClasses: directionIconClasses,\n make: Sorter$Make\n };\n}\n\nexport {\n str ,\n t ,\n Make ,\n}\n/* I18n Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as DateFns from \"../utils/DateFns.bs.js\";\nimport * as Json_decode from \"../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as OptionUtils from \"../utils/OptionUtils.bs.js\";\n\nfunction serialNumber(t) {\n return t.serialNumber;\n}\n\nfunction issuedTo(t) {\n return t.issuedTo;\n}\n\nfunction profileName(t) {\n return t.profileName;\n}\n\nfunction issuedAt(t) {\n return t.issuedAt;\n}\n\nfunction courseName(t) {\n return t.courseName;\n}\n\nfunction imageUrl(t) {\n return t.imageUrl;\n}\n\nfunction margin(t) {\n return t.margin;\n}\n\nfunction nameOffsetTop(t) {\n return t.nameOffsetTop;\n}\n\nfunction fontSize(t) {\n return t.fontSize;\n}\n\nfunction qrCorner(t) {\n return t.qrCorner;\n}\n\nfunction qrScale(t) {\n return t.qrScale;\n}\n\nfunction make(serialNumber, issuedTo, profileName, issuedAt, courseName, imageUrl, margin, fontSize, nameOffsetTop, qrCorner, qrScale) {\n return {\n serialNumber: serialNumber,\n issuedTo: issuedTo,\n profileName: profileName,\n issuedAt: issuedAt,\n courseName: courseName,\n imageUrl: imageUrl,\n margin: margin,\n fontSize: fontSize,\n nameOffsetTop: nameOffsetTop,\n qrCorner: qrCorner,\n qrScale: qrScale\n };\n}\n\nfunction decode(json) {\n return make(Json_decode.field(\"serialNumber\", Json_decode.string, json), Json_decode.field(\"issuedTo\", Json_decode.string, json), Json_decode.field(\"profileName\", Json_decode.string, json), Json_decode.field(\"issuedAt\", DateFns.decodeISO, json), Json_decode.field(\"courseName\", Json_decode.string, json), Json_decode.field(\"imageUrl\", Json_decode.string, json), Json_decode.field(\"margin\", Json_decode.$$int, json), Json_decode.field(\"fontSize\", Json_decode.$$int, json), Json_decode.field(\"nameOffsetTop\", Json_decode.$$int, json), OptionUtils.mapWithDefault((function (corner) {\n switch (corner) {\n case \"BottomLeft\" :\n return \"BottomLeft\";\n case \"BottomRight\" :\n return \"BottomRight\";\n case \"Hidden\" :\n return \"Hidden\";\n case \"TopLeft\" :\n return \"TopLeft\";\n case \"TopRight\" :\n return \"TopRight\";\n default:\n Rollbar.warning(\"Encountered unknown value for qrCorder: \" + (corner + \" while decoding props.\"));\n return \"Hidden\";\n }\n }), \"Hidden\", Json_decode.optional((function (param) {\n return Json_decode.field(\"qrCorner\", Json_decode.string, param);\n }), json)), Json_decode.field(\"qrScale\", Json_decode.$$int, json));\n}\n\nexport {\n serialNumber ,\n issuedTo ,\n profileName ,\n issuedAt ,\n courseName ,\n imageUrl ,\n margin ,\n nameOffsetTop ,\n fontSize ,\n qrCorner ,\n qrScale ,\n make ,\n decode ,\n}\n/* DateFns Not a pure module */\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\n\n// src/index.tsx\nimport React, { useRef, useEffect, useState } from \"react\";\n\n// src/third-party/qrcodegen/index.ts\n/**\n * @license QR Code generator library (TypeScript)\n * Copyright (c) Project Nayuki.\n * SPDX-License-Identifier: MIT\n */\nvar qrcodegen;\n((qrcodegen2) => {\n const _QrCode = class {\n constructor(version, errorCorrectionLevel, dataCodewords, msk) {\n this.version = version;\n this.errorCorrectionLevel = errorCorrectionLevel;\n this.modules = [];\n this.isFunction = [];\n if (version < _QrCode.MIN_VERSION || version > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version value out of range\");\n if (msk < -1 || msk > 7)\n throw new RangeError(\"Mask value out of range\");\n this.size = version * 4 + 17;\n let row = [];\n for (let i = 0; i < this.size; i++)\n row.push(false);\n for (let i = 0; i < this.size; i++) {\n this.modules.push(row.slice());\n this.isFunction.push(row.slice());\n }\n this.drawFunctionPatterns();\n const allCodewords = this.addEccAndInterleave(dataCodewords);\n this.drawCodewords(allCodewords);\n if (msk == -1) {\n let minPenalty = 1e9;\n for (let i = 0; i < 8; i++) {\n this.applyMask(i);\n this.drawFormatBits(i);\n const penalty = this.getPenaltyScore();\n if (penalty < minPenalty) {\n msk = i;\n minPenalty = penalty;\n }\n this.applyMask(i);\n }\n }\n assert(0 <= msk && msk <= 7);\n this.mask = msk;\n this.applyMask(msk);\n this.drawFormatBits(msk);\n this.isFunction = [];\n }\n static encodeText(text, ecl) {\n const segs = qrcodegen2.QrSegment.makeSegments(text);\n return _QrCode.encodeSegments(segs, ecl);\n }\n static encodeBinary(data, ecl) {\n const seg = qrcodegen2.QrSegment.makeBytes(data);\n return _QrCode.encodeSegments([seg], ecl);\n }\n static encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {\n if (!(_QrCode.MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= _QrCode.MAX_VERSION) || mask < -1 || mask > 7)\n throw new RangeError(\"Invalid value\");\n let version;\n let dataUsedBits;\n for (version = minVersion; ; version++) {\n const dataCapacityBits2 = _QrCode.getNumDataCodewords(version, ecl) * 8;\n const usedBits = QrSegment.getTotalBits(segs, version);\n if (usedBits <= dataCapacityBits2) {\n dataUsedBits = usedBits;\n break;\n }\n if (version >= maxVersion)\n throw new RangeError(\"Data too long\");\n }\n for (const newEcl of [_QrCode.Ecc.MEDIUM, _QrCode.Ecc.QUARTILE, _QrCode.Ecc.HIGH]) {\n if (boostEcl && dataUsedBits <= _QrCode.getNumDataCodewords(version, newEcl) * 8)\n ecl = newEcl;\n }\n let bb = [];\n for (const seg of segs) {\n appendBits(seg.mode.modeBits, 4, bb);\n appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);\n for (const b of seg.getData())\n bb.push(b);\n }\n assert(bb.length == dataUsedBits);\n const dataCapacityBits = _QrCode.getNumDataCodewords(version, ecl) * 8;\n assert(bb.length <= dataCapacityBits);\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n appendBits(0, (8 - bb.length % 8) % 8, bb);\n assert(bb.length % 8 == 0);\n for (let padByte = 236; bb.length < dataCapacityBits; padByte ^= 236 ^ 17)\n appendBits(padByte, 8, bb);\n let dataCodewords = [];\n while (dataCodewords.length * 8 < bb.length)\n dataCodewords.push(0);\n bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));\n return new _QrCode(version, ecl, dataCodewords, mask);\n }\n getModule(x, y) {\n return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x];\n }\n getModules() {\n return this.modules;\n }\n drawFunctionPatterns() {\n for (let i = 0; i < this.size; i++) {\n this.setFunctionModule(6, i, i % 2 == 0);\n this.setFunctionModule(i, 6, i % 2 == 0);\n }\n this.drawFinderPattern(3, 3);\n this.drawFinderPattern(this.size - 4, 3);\n this.drawFinderPattern(3, this.size - 4);\n const alignPatPos = this.getAlignmentPatternPositions();\n const numAlign = alignPatPos.length;\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n if (!(i == 0 && j == 0 || i == 0 && j == numAlign - 1 || i == numAlign - 1 && j == 0))\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n }\n }\n this.drawFormatBits(0);\n this.drawVersion();\n }\n drawFormatBits(mask) {\n const data = this.errorCorrectionLevel.formatBits << 3 | mask;\n let rem = data;\n for (let i = 0; i < 10; i++)\n rem = rem << 1 ^ (rem >>> 9) * 1335;\n const bits = (data << 10 | rem) ^ 21522;\n assert(bits >>> 15 == 0);\n for (let i = 0; i <= 5; i++)\n this.setFunctionModule(8, i, getBit(bits, i));\n this.setFunctionModule(8, 7, getBit(bits, 6));\n this.setFunctionModule(8, 8, getBit(bits, 7));\n this.setFunctionModule(7, 8, getBit(bits, 8));\n for (let i = 9; i < 15; i++)\n this.setFunctionModule(14 - i, 8, getBit(bits, i));\n for (let i = 0; i < 8; i++)\n this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n for (let i = 8; i < 15; i++)\n this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n this.setFunctionModule(8, this.size - 8, true);\n }\n drawVersion() {\n if (this.version < 7)\n return;\n let rem = this.version;\n for (let i = 0; i < 12; i++)\n rem = rem << 1 ^ (rem >>> 11) * 7973;\n const bits = this.version << 12 | rem;\n assert(bits >>> 18 == 0);\n for (let i = 0; i < 18; i++) {\n const color = getBit(bits, i);\n const a = this.size - 11 + i % 3;\n const b = Math.floor(i / 3);\n this.setFunctionModule(a, b, color);\n this.setFunctionModule(b, a, color);\n }\n }\n drawFinderPattern(x, y) {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\n const xx = x + dx;\n const yy = y + dy;\n if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size)\n this.setFunctionModule(xx, yy, dist != 2 && dist != 4);\n }\n }\n }\n drawAlignmentPattern(x, y) {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++)\n this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) != 1);\n }\n }\n setFunctionModule(x, y, isDark) {\n this.modules[y][x] = isDark;\n this.isFunction[y][x] = true;\n }\n addEccAndInterleave(data) {\n const ver = this.version;\n const ecl = this.errorCorrectionLevel;\n if (data.length != _QrCode.getNumDataCodewords(ver, ecl))\n throw new RangeError(\"Invalid argument\");\n const numBlocks = _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n const blockEccLen = _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver];\n const rawCodewords = Math.floor(_QrCode.getNumRawDataModules(ver) / 8);\n const numShortBlocks = numBlocks - rawCodewords % numBlocks;\n const shortBlockLen = Math.floor(rawCodewords / numBlocks);\n let blocks = [];\n const rsDiv = _QrCode.reedSolomonComputeDivisor(blockEccLen);\n for (let i = 0, k = 0; i < numBlocks; i++) {\n let dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n k += dat.length;\n const ecc = _QrCode.reedSolomonComputeRemainder(dat, rsDiv);\n if (i < numShortBlocks)\n dat.push(0);\n blocks.push(dat.concat(ecc));\n }\n let result = [];\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n if (i != shortBlockLen - blockEccLen || j >= numShortBlocks)\n result.push(block[i]);\n });\n }\n assert(result.length == rawCodewords);\n return result;\n }\n drawCodewords(data) {\n if (data.length != Math.floor(_QrCode.getNumRawDataModules(this.version) / 8))\n throw new RangeError(\"Invalid argument\");\n let i = 0;\n for (let right = this.size - 1; right >= 1; right -= 2) {\n if (right == 6)\n right = 5;\n for (let vert = 0; vert < this.size; vert++) {\n for (let j = 0; j < 2; j++) {\n const x = right - j;\n const upward = (right + 1 & 2) == 0;\n const y = upward ? this.size - 1 - vert : vert;\n if (!this.isFunction[y][x] && i < data.length * 8) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n i++;\n }\n }\n }\n }\n assert(i == data.length * 8);\n }\n applyMask(mask) {\n if (mask < 0 || mask > 7)\n throw new RangeError(\"Mask value out of range\");\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n let invert;\n switch (mask) {\n case 0:\n invert = (x + y) % 2 == 0;\n break;\n case 1:\n invert = y % 2 == 0;\n break;\n case 2:\n invert = x % 3 == 0;\n break;\n case 3:\n invert = (x + y) % 3 == 0;\n break;\n case 4:\n invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 == 0;\n break;\n case 5:\n invert = x * y % 2 + x * y % 3 == 0;\n break;\n case 6:\n invert = (x * y % 2 + x * y % 3) % 2 == 0;\n break;\n case 7:\n invert = ((x + y) % 2 + x * y % 3) % 2 == 0;\n break;\n default:\n throw new Error(\"Unreachable\");\n }\n if (!this.isFunction[y][x] && invert)\n this.modules[y][x] = !this.modules[y][x];\n }\n }\n }\n getPenaltyScore() {\n let result = 0;\n for (let y = 0; y < this.size; y++) {\n let runColor = false;\n let runX = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] == runColor) {\n runX++;\n if (runX == 5)\n result += _QrCode.PENALTY_N1;\n else if (runX > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runX, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runX = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let x = 0; x < this.size; x++) {\n let runColor = false;\n let runY = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] == runColor) {\n runY++;\n if (runY == 5)\n result += _QrCode.PENALTY_N1;\n else if (runY > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runY, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runY = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color = this.modules[y][x];\n if (color == this.modules[y][x + 1] && color == this.modules[y + 1][x] && color == this.modules[y + 1][x + 1])\n result += _QrCode.PENALTY_N2;\n }\n }\n let dark = 0;\n for (const row of this.modules)\n dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n const total = this.size * this.size;\n const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n assert(0 <= k && k <= 9);\n result += k * _QrCode.PENALTY_N4;\n assert(0 <= result && result <= 2568888);\n return result;\n }\n getAlignmentPatternPositions() {\n if (this.version == 1)\n return [];\n else {\n const numAlign = Math.floor(this.version / 7) + 2;\n const step = this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\n let result = [6];\n for (let pos = this.size - 7; result.length < numAlign; pos -= step)\n result.splice(1, 0, pos);\n return result;\n }\n }\n static getNumRawDataModules(ver) {\n if (ver < _QrCode.MIN_VERSION || ver > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version number out of range\");\n let result = (16 * ver + 128) * ver + 64;\n if (ver >= 2) {\n const numAlign = Math.floor(ver / 7) + 2;\n result -= (25 * numAlign - 10) * numAlign - 55;\n if (ver >= 7)\n result -= 36;\n }\n assert(208 <= result && result <= 29648);\n return result;\n }\n static getNumDataCodewords(ver, ecl) {\n return Math.floor(_QrCode.getNumRawDataModules(ver) / 8) - _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n }\n static reedSolomonComputeDivisor(degree) {\n if (degree < 1 || degree > 255)\n throw new RangeError(\"Degree out of range\");\n let result = [];\n for (let i = 0; i < degree - 1; i++)\n result.push(0);\n result.push(1);\n let root = 1;\n for (let i = 0; i < degree; i++) {\n for (let j = 0; j < result.length; j++) {\n result[j] = _QrCode.reedSolomonMultiply(result[j], root);\n if (j + 1 < result.length)\n result[j] ^= result[j + 1];\n }\n root = _QrCode.reedSolomonMultiply(root, 2);\n }\n return result;\n }\n static reedSolomonComputeRemainder(data, divisor) {\n let result = divisor.map((_) => 0);\n for (const b of data) {\n const factor = b ^ result.shift();\n result.push(0);\n divisor.forEach((coef, i) => result[i] ^= _QrCode.reedSolomonMultiply(coef, factor));\n }\n return result;\n }\n static reedSolomonMultiply(x, y) {\n if (x >>> 8 != 0 || y >>> 8 != 0)\n throw new RangeError(\"Byte out of range\");\n let z = 0;\n for (let i = 7; i >= 0; i--) {\n z = z << 1 ^ (z >>> 7) * 285;\n z ^= (y >>> i & 1) * x;\n }\n assert(z >>> 8 == 0);\n return z;\n }\n finderPenaltyCountPatterns(runHistory) {\n const n = runHistory[1];\n assert(n <= this.size * 3);\n const core = n > 0 && runHistory[2] == n && runHistory[3] == n * 3 && runHistory[4] == n && runHistory[5] == n;\n return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);\n }\n finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {\n if (currentRunColor) {\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n currentRunLength = 0;\n }\n currentRunLength += this.size;\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n return this.finderPenaltyCountPatterns(runHistory);\n }\n finderPenaltyAddHistory(currentRunLength, runHistory) {\n if (runHistory[0] == 0)\n currentRunLength += this.size;\n runHistory.pop();\n runHistory.unshift(currentRunLength);\n }\n };\n let QrCode = _QrCode;\n QrCode.MIN_VERSION = 1;\n QrCode.MAX_VERSION = 40;\n QrCode.PENALTY_N1 = 3;\n QrCode.PENALTY_N2 = 3;\n QrCode.PENALTY_N3 = 40;\n QrCode.PENALTY_N4 = 10;\n QrCode.ECC_CODEWORDS_PER_BLOCK = [\n [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],\n [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]\n ];\n QrCode.NUM_ERROR_CORRECTION_BLOCKS = [\n [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],\n [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],\n [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],\n [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]\n ];\n qrcodegen2.QrCode = QrCode;\n function appendBits(val, len, bb) {\n if (len < 0 || len > 31 || val >>> len != 0)\n throw new RangeError(\"Value out of range\");\n for (let i = len - 1; i >= 0; i--)\n bb.push(val >>> i & 1);\n }\n function getBit(x, i) {\n return (x >>> i & 1) != 0;\n }\n function assert(cond) {\n if (!cond)\n throw new Error(\"Assertion error\");\n }\n const _QrSegment = class {\n constructor(mode, numChars, bitData) {\n this.mode = mode;\n this.numChars = numChars;\n this.bitData = bitData;\n if (numChars < 0)\n throw new RangeError(\"Invalid argument\");\n this.bitData = bitData.slice();\n }\n static makeBytes(data) {\n let bb = [];\n for (const b of data)\n appendBits(b, 8, bb);\n return new _QrSegment(_QrSegment.Mode.BYTE, data.length, bb);\n }\n static makeNumeric(digits) {\n if (!_QrSegment.isNumeric(digits))\n throw new RangeError(\"String contains non-numeric characters\");\n let bb = [];\n for (let i = 0; i < digits.length; ) {\n const n = Math.min(digits.length - i, 3);\n appendBits(parseInt(digits.substr(i, n), 10), n * 3 + 1, bb);\n i += n;\n }\n return new _QrSegment(_QrSegment.Mode.NUMERIC, digits.length, bb);\n }\n static makeAlphanumeric(text) {\n if (!_QrSegment.isAlphanumeric(text))\n throw new RangeError(\"String contains unencodable characters in alphanumeric mode\");\n let bb = [];\n let i;\n for (i = 0; i + 2 <= text.length; i += 2) {\n let temp = _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n temp += _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n appendBits(temp, 11, bb);\n }\n if (i < text.length)\n appendBits(_QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n return new _QrSegment(_QrSegment.Mode.ALPHANUMERIC, text.length, bb);\n }\n static makeSegments(text) {\n if (text == \"\")\n return [];\n else if (_QrSegment.isNumeric(text))\n return [_QrSegment.makeNumeric(text)];\n else if (_QrSegment.isAlphanumeric(text))\n return [_QrSegment.makeAlphanumeric(text)];\n else\n return [_QrSegment.makeBytes(_QrSegment.toUtf8ByteArray(text))];\n }\n static makeEci(assignVal) {\n let bb = [];\n if (assignVal < 0)\n throw new RangeError(\"ECI assignment value out of range\");\n else if (assignVal < 1 << 7)\n appendBits(assignVal, 8, bb);\n else if (assignVal < 1 << 14) {\n appendBits(2, 2, bb);\n appendBits(assignVal, 14, bb);\n } else if (assignVal < 1e6) {\n appendBits(6, 3, bb);\n appendBits(assignVal, 21, bb);\n } else\n throw new RangeError(\"ECI assignment value out of range\");\n return new _QrSegment(_QrSegment.Mode.ECI, 0, bb);\n }\n static isNumeric(text) {\n return _QrSegment.NUMERIC_REGEX.test(text);\n }\n static isAlphanumeric(text) {\n return _QrSegment.ALPHANUMERIC_REGEX.test(text);\n }\n getData() {\n return this.bitData.slice();\n }\n static getTotalBits(segs, version) {\n let result = 0;\n for (const seg of segs) {\n const ccbits = seg.mode.numCharCountBits(version);\n if (seg.numChars >= 1 << ccbits)\n return Infinity;\n result += 4 + ccbits + seg.bitData.length;\n }\n return result;\n }\n static toUtf8ByteArray(str) {\n str = encodeURI(str);\n let result = [];\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) != \"%\")\n result.push(str.charCodeAt(i));\n else {\n result.push(parseInt(str.substr(i + 1, 2), 16));\n i += 2;\n }\n }\n return result;\n }\n };\n let QrSegment = _QrSegment;\n QrSegment.NUMERIC_REGEX = /^[0-9]*$/;\n QrSegment.ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+.\\/:-]*$/;\n QrSegment.ALPHANUMERIC_CHARSET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\n qrcodegen2.QrSegment = QrSegment;\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrCode;\n ((QrCode2) => {\n const _Ecc = class {\n constructor(ordinal, formatBits) {\n this.ordinal = ordinal;\n this.formatBits = formatBits;\n }\n };\n let Ecc = _Ecc;\n Ecc.LOW = new _Ecc(0, 1);\n Ecc.MEDIUM = new _Ecc(1, 0);\n Ecc.QUARTILE = new _Ecc(2, 3);\n Ecc.HIGH = new _Ecc(3, 2);\n QrCode2.Ecc = Ecc;\n })(QrCode = qrcodegen2.QrCode || (qrcodegen2.QrCode = {}));\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrSegment;\n ((QrSegment2) => {\n const _Mode = class {\n constructor(modeBits, numBitsCharCount) {\n this.modeBits = modeBits;\n this.numBitsCharCount = numBitsCharCount;\n }\n numCharCountBits(ver) {\n return this.numBitsCharCount[Math.floor((ver + 7) / 17)];\n }\n };\n let Mode = _Mode;\n Mode.NUMERIC = new _Mode(1, [10, 12, 14]);\n Mode.ALPHANUMERIC = new _Mode(2, [9, 11, 13]);\n Mode.BYTE = new _Mode(4, [8, 16, 16]);\n Mode.KANJI = new _Mode(8, [8, 10, 12]);\n Mode.ECI = new _Mode(7, [0, 0, 0]);\n QrSegment2.Mode = Mode;\n })(QrSegment = qrcodegen2.QrSegment || (qrcodegen2.QrSegment = {}));\n})(qrcodegen || (qrcodegen = {}));\nvar qrcodegen_default = qrcodegen;\n\n// src/index.tsx\n/**\n * @license qrcode.react\n * Copyright (c) Paul O'Shannessy\n * SPDX-License-Identifier: ISC\n */\nvar ERROR_LEVEL_MAP = {\n L: qrcodegen_default.QrCode.Ecc.LOW,\n M: qrcodegen_default.QrCode.Ecc.MEDIUM,\n Q: qrcodegen_default.QrCode.Ecc.QUARTILE,\n H: qrcodegen_default.QrCode.Ecc.HIGH\n};\nvar DEFAULT_SIZE = 128;\nvar DEFAULT_LEVEL = \"L\";\nvar DEFAULT_BGCOLOR = \"#FFFFFF\";\nvar DEFAULT_FGCOLOR = \"#000000\";\nvar DEFAULT_INCLUDEMARGIN = false;\nvar MARGIN_SIZE = 4;\nvar DEFAULT_IMG_SCALE = 0.1;\nfunction generatePath(modules, margin = 0) {\n const ops = [];\n modules.forEach(function(row, y) {\n let start = null;\n row.forEach(function(cell, x) {\n if (!cell && start !== null) {\n ops.push(`M${start + margin} ${y + margin}h${x - start}v1H${start + margin}z`);\n start = null;\n return;\n }\n if (x === row.length - 1) {\n if (!cell) {\n return;\n }\n if (start === null) {\n ops.push(`M${x + margin},${y + margin} h1v1H${x + margin}z`);\n } else {\n ops.push(`M${start + margin},${y + margin} h${x + 1 - start}v1H${start + margin}z`);\n }\n return;\n }\n if (cell && start === null) {\n start = x;\n }\n });\n });\n return ops.join(\"\");\n}\nfunction excavateModules(modules, excavation) {\n return modules.slice().map((row, y) => {\n if (y < excavation.y || y >= excavation.y + excavation.h) {\n return row;\n }\n return row.map((cell, x) => {\n if (x < excavation.x || x >= excavation.x + excavation.w) {\n return cell;\n }\n return false;\n });\n });\n}\nfunction getImageSettings(cells, size, includeMargin, imageSettings) {\n if (imageSettings == null) {\n return null;\n }\n const margin = includeMargin ? MARGIN_SIZE : 0;\n const numCells = cells.length + margin * 2;\n const defaultSize = Math.floor(size * DEFAULT_IMG_SCALE);\n const scale = numCells / size;\n const w = (imageSettings.width || defaultSize) * scale;\n const h = (imageSettings.height || defaultSize) * scale;\n const x = imageSettings.x == null ? cells.length / 2 - w / 2 : imageSettings.x * scale;\n const y = imageSettings.y == null ? cells.length / 2 - h / 2 : imageSettings.y * scale;\n let excavation = null;\n if (imageSettings.excavate) {\n let floorX = Math.floor(x);\n let floorY = Math.floor(y);\n let ceilW = Math.ceil(w + x - floorX);\n let ceilH = Math.ceil(h + y - floorY);\n excavation = { x: floorX, y: floorY, w: ceilW, h: ceilH };\n }\n return { x, y, h, w, excavation };\n}\nvar SUPPORTS_PATH2D = function() {\n try {\n new Path2D().addPath(new Path2D());\n } catch (e) {\n return false;\n }\n return true;\n}();\nfunction QRCodeCanvas(props) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n style,\n imageSettings\n } = _a, otherProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"style\",\n \"imageSettings\"\n ]);\n const imgSrc = imageSettings == null ? void 0 : imageSettings.src;\n const _canvas = useRef(null);\n const _image = useRef(null);\n const [isImgLoaded, setIsImageLoaded] = useState(false);\n useEffect(() => {\n if (_canvas.current != null) {\n const canvas = _canvas.current;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return;\n }\n let cells = qrcodegen_default.QrCode.encodeText(value, ERROR_LEVEL_MAP[level]).getModules();\n const margin = includeMargin ? MARGIN_SIZE : 0;\n const numCells = cells.length + margin * 2;\n const calculatedImageSettings = getImageSettings(cells, size, includeMargin, imageSettings);\n const image = _image.current;\n const haveImageToRender = calculatedImageSettings != null && image !== null && image.complete && image.naturalHeight !== 0 && image.naturalWidth !== 0;\n if (haveImageToRender) {\n if (calculatedImageSettings.excavation != null) {\n cells = excavateModules(cells, calculatedImageSettings.excavation);\n }\n }\n const pixelRatio = window.devicePixelRatio || 1;\n canvas.height = canvas.width = size * pixelRatio;\n const scale = size / numCells * pixelRatio;\n ctx.scale(scale, scale);\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, numCells, numCells);\n ctx.fillStyle = fgColor;\n if (SUPPORTS_PATH2D) {\n ctx.fill(new Path2D(generatePath(cells, margin)));\n } else {\n cells.forEach(function(row, rdx) {\n row.forEach(function(cell, cdx) {\n if (cell) {\n ctx.fillRect(cdx + margin, rdx + margin, 1, 1);\n }\n });\n });\n }\n if (haveImageToRender) {\n ctx.drawImage(image, calculatedImageSettings.x + margin, calculatedImageSettings.y + margin, calculatedImageSettings.w, calculatedImageSettings.h);\n }\n }\n });\n useEffect(() => {\n setIsImageLoaded(false);\n }, [imgSrc]);\n const canvasStyle = __spreadValues({ height: size, width: size }, style);\n let img = null;\n if (imgSrc != null) {\n img = /* @__PURE__ */ React.createElement(\"img\", {\n src: imgSrc,\n key: imgSrc,\n style: { display: \"none\" },\n onLoad: () => {\n setIsImageLoaded(true);\n },\n ref: _image\n });\n }\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\"canvas\", __spreadValues({\n style: canvasStyle,\n height: size,\n width: size,\n ref: _canvas\n }, otherProps)), img);\n}\nfunction QRCodeSVG(props) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n imageSettings\n } = _a, otherProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"imageSettings\"\n ]);\n let cells = qrcodegen_default.QrCode.encodeText(value, ERROR_LEVEL_MAP[level]).getModules();\n const margin = includeMargin ? MARGIN_SIZE : 0;\n const numCells = cells.length + margin * 2;\n const calculatedImageSettings = getImageSettings(cells, size, includeMargin, imageSettings);\n let image = null;\n if (imageSettings != null && calculatedImageSettings != null) {\n if (calculatedImageSettings.excavation != null) {\n cells = excavateModules(cells, calculatedImageSettings.excavation);\n }\n image = /* @__PURE__ */ React.createElement(\"image\", {\n xlinkHref: imageSettings.src,\n height: calculatedImageSettings.h,\n width: calculatedImageSettings.w,\n x: calculatedImageSettings.x + margin,\n y: calculatedImageSettings.y + margin,\n preserveAspectRatio: \"none\"\n });\n }\n const fgPath = generatePath(cells, margin);\n return /* @__PURE__ */ React.createElement(\"svg\", __spreadValues({\n height: size,\n width: size,\n viewBox: `0 0 ${numCells} ${numCells}`\n }, otherProps), /* @__PURE__ */ React.createElement(\"path\", {\n fill: bgColor,\n d: `M0,0 h${numCells}v${numCells}H0z`,\n shapeRendering: \"crispEdges\"\n }), /* @__PURE__ */ React.createElement(\"path\", {\n fill: fgColor,\n d: fgPath,\n shapeRendering: \"crispEdges\"\n }), image);\n}\nvar QRCode = (props) => {\n const _a = props, { renderAs } = _a, otherProps = __objRest(_a, [\"renderAs\"]);\n if (renderAs === \"svg\") {\n return /* @__PURE__ */ React.createElement(QRCodeSVG, __spreadValues({}, otherProps));\n }\n return /* @__PURE__ */ React.createElement(QRCodeCanvas, __spreadValues({}, otherProps));\n};\nexport {\n QRCodeCanvas,\n QRCodeSVG,\n QRCode as default\n};\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as React from \"react\";\nimport * as Js_math from \"../../../node_modules/rescript/lib/es6/js_math.js\";\nimport * as DOMPurify from \"../shared/utils/DOMPurify.bs.js\";\nimport * as Belt_Option from \"../../../node_modules/rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"../../../node_modules/rescript/lib/es6/caml_option.js\";\nimport * as OptionUtils from \"../shared/utils/OptionUtils.bs.js\";\nimport * as QrcodeReact from \"qrcode.react\";\nimport * as IssuedCertificate from \"../shared/types/IssuedCertificate.bs.js\";\n\nfunction str(prim) {\n return prim;\n}\n\nfunction paddingPercentage(issuedCertificate) {\n return String(IssuedCertificate.margin(issuedCertificate)) + \"%\";\n}\n\nfunction certificateContainerStyle(issuedCertificate) {\n return {\n padding: paddingPercentage(issuedCertificate)\n };\n}\n\nfunction issuedToStyle(issuedCertificate) {\n return {\n top: String(IssuedCertificate.nameOffsetTop(issuedCertificate)) + \"%\"\n };\n}\n\nfunction qrCodeStyle(issuedCertificate) {\n return {\n padding: paddingPercentage(issuedCertificate)\n };\n}\n\nfunction nameCanvasId(issuedCertificate) {\n return \"name-canvas-\" + IssuedCertificate.serialNumber(issuedCertificate);\n}\n\nfunction nameCanvas(issuedCertificate) {\n return React.createElement(\"canvas\", {\n className: \"absolute top-0 w-full\",\n id: \"name-canvas-\" + IssuedCertificate.serialNumber(issuedCertificate),\n style: issuedToStyle(issuedCertificate),\n height: \"100\",\n width: \"2000\"\n });\n}\n\nfunction qrPositionClasses(issuedCertificate) {\n var match = IssuedCertificate.qrCorner(issuedCertificate);\n if (match === \"TopRight\") {\n return \"top-0 end-0\";\n } else if (match === \"BottomLeft\") {\n return \"bottom-0 start-0\";\n } else if (match === \"BottomRight\") {\n return \"bottom-0 end-0\";\n } else if (match === \"TopLeft\") {\n return \"top-0 start-0\";\n } else {\n return \"hidden\";\n }\n}\n\nfunction qrContainerStyle(issuedCertificate) {\n var widthPercentage = IssuedCertificate.qrScale(issuedCertificate) / 100.0 * 10.0;\n return {\n width: widthPercentage.toString() + \"%\"\n };\n}\n\nfunction certificateUrl(issuedCertificate) {\n var prefix = window.location.origin;\n var suffix = \"/c/\" + IssuedCertificate.serialNumber(issuedCertificate);\n return prefix + suffix;\n}\n\nfunction qrCode(issuedCertificate, verifyImageUrl) {\n var match = IssuedCertificate.qrCorner(issuedCertificate);\n if (match === \"Hidden\") {\n return null;\n } else {\n return React.createElement(\"div\", {\n className: \"absolute \" + qrPositionClasses(issuedCertificate),\n style: qrContainerStyle(issuedCertificate)\n }, React.createElement(QrcodeReact.QRCodeCanvas, {\n value: certificateUrl(issuedCertificate),\n size: 256,\n bgColor: \"transparent\",\n level: \"Q\",\n imageSettings: {\n src: verifyImageUrl,\n height: 29,\n width: 133,\n excavate: true\n },\n style: {\n height: \"100%\",\n width: \"100%\"\n },\n className: \"w-full h-full\"\n }));\n }\n}\n\nfunction drawName(issuedCertificate) {\n var canvasId = \"name-canvas-\" + IssuedCertificate.serialNumber(issuedCertificate);\n var canvasElement = document.getElementById(canvasId);\n var ctx = Belt_Option.map((canvasElement == null) ? undefined : Caml_option.some(canvasElement), (function (el) {\n return el.getContext(\"2d\", {\n alpha: true\n });\n }));\n Belt_Option.forEach(ctx, (function (ctx) {\n ctx.clearRect(0.0, 0.0, 2000.0, 100.0);\n }));\n var fontSize = 50.0 * (IssuedCertificate.fontSize(issuedCertificate) / 100.0);\n OptionUtils.map((function (ctx) {\n ctx.font = String(Js_math.floor_int(fontSize)) + \"px Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace\";\n }), ctx);\n OptionUtils.map((function (ctx) {\n ctx.textAlign = \"center\";\n }), ctx);\n OptionUtils.map((function (ctx) {\n ctx.textBaseline = \"middle\";\n }), ctx);\n OptionUtils.map((function (ctx) {\n ctx.fillText(DOMPurify.sanitize(IssuedCertificate.profileName(issuedCertificate)), 1000.0, 50.0, undefined);\n }), ctx);\n}\n\nfunction IssuedCertificate__Root(Props) {\n var issuedCertificate = Props.issuedCertificate;\n var verifyImageUrl = Props.verifyImageUrl;\n React.useEffect((function () {\n drawName(issuedCertificate);\n }), [IssuedCertificate.fontSize(issuedCertificate)]);\n return React.createElement(\"div\", {\n className: \"relative w-full h-full\"\n }, React.createElement(\"img\", {\n className: \"w-full object-contain m-0 h-auto\",\n src: IssuedCertificate.imageUrl(issuedCertificate)\n }), React.createElement(\"div\", {\n className: \"absolute top-0 start-0 w-full h-full\",\n style: certificateContainerStyle(issuedCertificate)\n }, React.createElement(\"div\", {\n className: \"relative w-full h-full\"\n }, nameCanvas(issuedCertificate), qrCode(issuedCertificate, verifyImageUrl))));\n}\n\nvar make = IssuedCertificate__Root;\n\nexport {\n str ,\n paddingPercentage ,\n certificateContainerStyle ,\n issuedToStyle ,\n qrCodeStyle ,\n nameCanvasId ,\n nameCanvas ,\n qrPositionClasses ,\n qrContainerStyle ,\n certificateUrl ,\n qrCode ,\n drawName ,\n make ,\n}\n/* react Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as List from \"../../../../node_modules/rescript/lib/es6/list.js\";\nimport * as Json_decode from \"../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\nimport * as Caml_exceptions from \"../../../../node_modules/rescript/lib/es6/caml_exceptions.js\";\n\nvar GradeLabelsEmpty = /* @__PURE__ */Caml_exceptions.create(\"GradeLabel.GradeLabelsEmpty\");\n\nfunction decode(json) {\n return {\n label: Json_decode.field(\"label\", Json_decode.string, json),\n grade: Json_decode.field(\"grade\", Json_decode.$$int, json)\n };\n}\n\nfunction grade(t) {\n return t.grade;\n}\n\nfunction label(t) {\n return t.label;\n}\n\nfunction labelFor(gradeLabels, grade) {\n return List.find((function (gradeLabel) {\n return gradeLabel.grade === grade;\n }), gradeLabels).label;\n}\n\nfunction create(grade, label) {\n return {\n label: label,\n grade: grade\n };\n}\n\nfunction empty(grade) {\n return {\n label: \"\",\n grade: grade\n };\n}\n\nfunction update(label, t) {\n return {\n label: label,\n grade: t.grade\n };\n}\n\nfunction asJsObject(t) {\n return {\n grade: t.grade,\n label: t.label\n };\n}\n\nfunction valid(t) {\n return t.label.trim().length >= 1;\n}\n\nfunction makeFromJs(rawGradeLabel) {\n return {\n label: rawGradeLabel.label,\n grade: rawGradeLabel.grade\n };\n}\n\nfunction maxGrade(gradeLabels) {\n var aux = function (_max, _remains) {\n while(true) {\n var remains = _remains;\n var max = _max;\n if (!remains) {\n return max;\n }\n _remains = remains.tl;\n _max = Math.max(remains.hd.grade, max);\n continue ;\n };\n };\n var validGrade = aux(0, gradeLabels);\n if (validGrade !== 0) {\n return validGrade;\n }\n Rollbar.error(\"GradeLabel.maxGrade received an empty list of gradeLabels\");\n throw {\n RE_EXN_ID: GradeLabelsEmpty,\n Error: new Error()\n };\n}\n\nexport {\n GradeLabelsEmpty ,\n decode ,\n grade ,\n label ,\n labelFor ,\n create ,\n empty ,\n update ,\n asJsObject ,\n valid ,\n makeFromJs ,\n maxGrade ,\n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Js_array from \"../../../../node_modules/rescript/lib/es6/js_array.js\";\nimport * as ArrayUtils from \"../utils/ArrayUtils.bs.js\";\nimport * as GradeLabel from \"./GradeLabel.bs.js\";\nimport * as Json_decode from \"../../../../node_modules/@glennsl/bs-json/src/Json_decode.bs.js\";\n\nfunction decode(json) {\n return {\n name: Json_decode.field(\"name\", Json_decode.string, json),\n id: Json_decode.field(\"id\", Json_decode.string, json),\n maxGrade: Json_decode.field(\"maxGrade\", Json_decode.$$int, json),\n gradesAndLabels: Json_decode.field(\"gradeLabels\", (function (param) {\n return Json_decode.array(GradeLabel.decode, param);\n }), json)\n };\n}\n\nfunction id(t) {\n return t.id;\n}\n\nfunction maxGrade(t) {\n return t.maxGrade;\n}\n\nfunction sort(evaluationCriteria) {\n return ArrayUtils.copyAndSort((function (x, y) {\n return x.name.localeCompare(y.name) | 0;\n }), evaluationCriteria);\n}\n\nfunction name(t) {\n return t.name;\n}\n\nfunction gradesAndLabels(t) {\n return t.gradesAndLabels;\n}\n\nfunction makeFromJs(evaluationCriterion) {\n return {\n name: evaluationCriterion.name,\n id: evaluationCriterion.id,\n maxGrade: evaluationCriterion.maxGrade,\n gradesAndLabels: Js_array.map(GradeLabel.makeFromJs, evaluationCriterion.gradeLabels)\n };\n}\n\nfunction make(id, name, maxGrade, gradesAndLabels) {\n return {\n name: name,\n id: id,\n maxGrade: maxGrade,\n gradesAndLabels: gradesAndLabels\n };\n}\n\nexport {\n decode ,\n id ,\n maxGrade ,\n sort ,\n name ,\n gradesAndLabels ,\n makeFromJs ,\n make ,\n}\n/* ArrayUtils Not a pure module */\n"],"names":["partial_arg","ts","param","param$1","param$2","I18n.t","format","shortOpt","name","number","$$short","UnexpectedBlockType","Caml_exceptions.create","UnexpectedRequestSource","widthToClass","width","decodeMarkdownContent","json","Json_decode.field","Json_decode.string","decodeFileContent","decodeImageContent","widthString","decodeEmbedContent","requestSourceString","requestSource","Json_decode.optional","DateFns.decodeISO","decode","unknownBlockType","blockType","title","url","filename","match","title$1","url$1","filename$1","match$1","url$2","markdown","Json_decode.$$int","sort","blocks","ArrayUtils.copyAndSort","x","y","id","t","sortIndex","makeFromJs","js","variant","content","content$1","Belt_Option.map","DateFns.parseISO","content$2","content$3","incrementSortIndex","reindex","List.mapi","moveUp","$$Array.of_list","ListUtils.swapUp","$$Array.to_list","moveDown","ListUtils.swapDown","updateFile","updateImageCaption","caption","updateImageWidth","updateMarkdown","Raw","query","parse","value","value$1","value$2","Js_array.map","typename","tmp","value$3","tmp$1","value$4","value$5","tmp$2","serialize","targetVersions","contentBlocks","value$6","value$7","value$8","lastResolvedAt","value$9","value$10","embedCode","value$11","value$12","value$13","value$14","value$15","value$16","value$17","value$18","value$19","value$20","value$21","value$22","value$23","serializeVariables","inp","a","makeVariables","targetId","targetVersionId","Query_inner","include","GraphqlQuery.Extender","prim","Query_Graphql_error","Query_decodeNotification","Query_decodeObject","Query_decodeNotifications","Query_decodeErrors","Query_flashNotifications","Query_sendQuery","Query_query","Query_fetch","Query_make","Query","Raw$1","parse$1","serialize$1","verifyArgsAndParse","_ContentBlockFragment","verifyName","Fragment","performCopy","_copy","setState","_event","Curry._1","ClickToCopy","Props","copy","tooltipPositionOpt","classNameOpt","tooltipClassName","children","tooltipPosition","className","React.useState","tip","Caml_option.valFromOption","React.createElement","Tooltip.make","make","renderBlockClasses","block","ContentBlock.blockType","markdownContentBlock","MarkdownBlock.make","fileContentBlock","FaIcon.make","imageContentBlock","ContentBlock.widthToClass","embedContentBlock","audioContentBlock","TargetContentView","$$Array.map","renderedBlock","Belt_Option.mapWithDefault","ContentBlock.id","ContentBlock.sort","object_","Js_dict.fromList","array","kind","optional","actionStringForKind","kindAsString","updateTitle","updateKind","updateOptional","removeItem","index","Js_array.filteri","_item","ArrayUtils.swapUp","ArrayUtils.swapDown","ArrayUtils.flattenV2","Js_array.mapi","item","removeMultichoiceOption","choiceIndex","updatedChoices","$$Array.mapi","i","choice","addMultichoiceOption","Js_array.concat","updateMultichoiceOption","newOption","updateAllowMultiple","allowMultiple","isValidChecklistItem","titleValid","ArrayUtils.isEmpty","Js_array.filter","$$String.trim","decodeMetadata","Json_decode.array","Json_decode.bool","otherKind","encodeMetadata","Json_encode.object_","encode","encodeChecklist","checklist","Json_encode.array","longText","Make","Sortable","dropdown","criteria","selectedCriterion","onCriterionChange","selectedForDropdown","dropDownContents","criterion","Icon.make","Dropdown.make","directionIconClasses","criterionType","direction","Sorter$Make","onDirectionChange","serialNumber","issuedTo","profileName","issuedAt","courseName","imageUrl","margin","nameOffsetTop","fontSize","qrCorner","qrScale","OptionUtils.mapWithDefault","corner","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","obj","key","__spreadValues","b","prop","__objRest","source","exclude","target","qrcodegen","qrcodegen2","_QrCode","version","errorCorrectionLevel","dataCodewords","msk","row","allCodewords","minPenalty","penalty","assert","text","ecl","segs","data","seg","minVersion","maxVersion","mask","boostEcl","dataUsedBits","dataCapacityBits2","usedBits","QrSegment","newEcl","bb","appendBits","dataCapacityBits","padByte","alignPatPos","numAlign","j","rem","bits","getBit","color","dy","dx","dist","xx","yy","isDark","ver","numBlocks","blockEccLen","rawCodewords","numShortBlocks","shortBlockLen","rsDiv","k","dat","ecc","result","right","vert","invert","runColor","runX","runHistory","runY","dark","sum","total","step","pos","degree","root","divisor","_","factor","coef","z","n","core","currentRunColor","currentRunLength","QrCode","val","len","cond","_QrSegment","mode","numChars","bitData","digits","temp","assignVal","ccbits","str","QrCode2","_Ecc","ordinal","formatBits","Ecc","QrSegment2","_Mode","modeBits","numBitsCharCount","Mode","qrcodegen_default","ERROR_LEVEL_MAP","DEFAULT_SIZE","DEFAULT_LEVEL","DEFAULT_BGCOLOR","DEFAULT_FGCOLOR","DEFAULT_INCLUDEMARGIN","MARGIN_SIZE","DEFAULT_IMG_SCALE","generatePath","modules","ops","start","cell","excavateModules","excavation","getImageSettings","cells","size","includeMargin","imageSettings","numCells","defaultSize","scale","w","h","floorX","floorY","ceilW","ceilH","SUPPORTS_PATH2D","QRCodeCanvas","props","_a","level","bgColor","fgColor","style","otherProps","imgSrc","_canvas","useRef","_image","isImgLoaded","setIsImageLoaded","useState","useEffect","canvas","ctx","calculatedImageSettings","image","haveImageToRender","pixelRatio","rdx","cdx","canvasStyle","img","React","paddingPercentage","issuedCertificate","IssuedCertificate.margin","certificateContainerStyle","issuedToStyle","IssuedCertificate.nameOffsetTop","nameCanvas","IssuedCertificate.serialNumber","qrPositionClasses","IssuedCertificate.qrCorner","qrContainerStyle","widthPercentage","IssuedCertificate.qrScale","certificateUrl","prefix","suffix","qrCode","verifyImageUrl","QrcodeReact.QRCodeCanvas","drawName","canvasId","canvasElement","Caml_option.some","el","Belt_Option.forEach","IssuedCertificate.fontSize","OptionUtils.map","Js_math.floor_int","DOMPurify.sanitize","IssuedCertificate.profileName","IssuedCertificate__Root","React.useEffect","IssuedCertificate.imageUrl","GradeLabelsEmpty","grade","label","labelFor","gradeLabels","List.find","gradeLabel","empty","update","rawGradeLabel","maxGrade","aux","_max","_remains","remains","max","validGrade","GradeLabel.decode","evaluationCriteria","gradesAndLabels","evaluationCriterion","GradeLabel.makeFromJs"],"mappings":"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","x_google_ignoreList":[4,8]}