diff --git a/404.html b/404.html index b3fcb94b..53442288 100644 --- a/404.html +++ b/404.html @@ -4,8 +4,8 @@ Page Not Found | UN Transparency Protocol Test Suite - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/assets/js/15ee9d98.3dbdb460.js b/assets/js/15ee9d98.3dbdb460.js deleted file mode 100644 index cfb789a9..00000000 --- a/assets/js/15ee9d98.3dbdb460.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[787],{8481:(e,t,n)=>{n.d(t,{Ay:()=>d,RM:()=>r});var s=n(4848),o=n(8453);const r=[];function i(e){const t={admonition:"admonition",p:"p",...(0,o.R)(),...e.components};return(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsx)(t.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},92:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>d,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>h});var s=n(4848),o=n(8453),r=n(8481);const i={sidebar_position:50,title:"Render Check List"},d=void 0,c={id:"mock-apps/components/render-check-list",title:"Render Check List",description:"Description",source:"@site/docs/mock-apps/components/render-check-list.md",sourceDirName:"mock-apps/components",slug:"/mock-apps/components/render-check-list",permalink:"/tests-untp/docs/mock-apps/components/render-check-list",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/components/render-check-list.md",tags:[],version:"current",sidebarPosition:50,frontMatter:{sidebar_position:50,title:"Render Check List"},sidebar:"tutorialSidebar",previous:{title:"Conformity Credential Checkbox",permalink:"/tests-untp/docs/mock-apps/components/conformity-credential-checkbox"},next:{title:"Import Button",permalink:"/tests-untp/docs/mock-apps/components/import-button"}},l={},h=[...r.RM,{value:"Description",id:"description",level:2},{value:"Example",id:"example",level:2},{value:"Definitions",id:"definitions",level:2},{value:"Props",id:"props",level:3},{value:"Response Data",id:"response-data",level:2}];function a(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.Ay,{}),"\n",(0,s.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(t.p,{children:["The RenderCheckList component is responsible for rendering a list of items with checkboxes. It is a composed component that will load data from another component (",(0,s.jsx)(t.a,{href:"./import-button",children:"Import Button"})," and ",(0,s.jsx)(t.a,{href:"./qr-code-scanner-dialog-button",children:"QR Code Scanner Dialog Button"}),"), when the user clicks to import or scan a QR code. The component will render a list of items with checkboxes, the labels of the checkboxes will be the identifiers of the items that are loaded from the data with the path is configured at ",(0,s.jsx)(t.code,{children:"requiredFieldPath"})," field."]}),"\n",(0,s.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-json",children:'{\n "name": "RenderCheckList",\n "type": "EntryData",\n "props": {\n "requiredFieldPath": "/vc/credentialSubject/eventID",\n "checkBoxLabel": "Imported valid json:",\n "nestedComponents": [\n {\n "name": "ImportButton",\n "type": "EntryData",\n "props": {\n "label": "Import JSON",\n "style": { "margin": "40px auto", "paddingTop": "40px", "width": "80%" }\n }\n },\n {\n "name": "QRCodeScannerDialogButton",\n "type": "EntryData"\n }\n ],\n "style": { "margin": "40px auto", "paddingTop": "40px", "width": "80%" }\n }\n}\n'})}),"\n",(0,s.jsx)(t.h2,{id:"definitions",children:"Definitions"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Property"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"name"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:'The name of the component(should be "RenderCheckList")'}),(0,s.jsx)(t.td,{children:"String"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"type"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:'The type of the component (should be "EntryData")'}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/docs/mock-apps/common/component-type",children:"ComponentType"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"props"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"The properties for the RenderCheckList"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/docs/mock-apps/components/render-check-list#props",children:"Props"})})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"props",children:"Props"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Property"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"requiredFieldPath"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"The path for the label of the checkbox item"}),(0,s.jsx)(t.td,{children:"String"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"nestedComponents"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"An array of components to be rendered with the loaded data"}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.a,{href:"/docs/mock-apps/components/",children:"Component"}),"[]"]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"checkBoxLabel"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"The label for the checkbox list"}),(0,s.jsx)(t.td,{children:"String"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"style"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"The style for the component"}),(0,s.jsx)(t.td,{children:"Object"})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"response-data",children:"Response Data"}),"\n",(0,s.jsx)(t.p,{children:"The component will return an object with data that is selected by the user from the list of checkboxes. The object will have the following structure:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-json",children:'{\n "0123456789": {\n // Imported data\n },\n "9876543210": {\n // Imported data\n }\n}\n'})})]})}function p(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>d});var s=n(6540);const o={},r=s.createContext(o);function i(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/15ee9d98.cae5e78c.js b/assets/js/15ee9d98.cae5e78c.js new file mode 100644 index 00000000..16972e40 --- /dev/null +++ b/assets/js/15ee9d98.cae5e78c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[787],{8481:(e,n,t)=>{t.d(n,{Ay:()=>s,RM:()=>r});var o=t(4848),i=t(8453);const r=[];function d(e){const n={admonition:"admonition",p:"p",...(0,i.R)(),...e.components};return(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsx)(n.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function s(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},92:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>d,metadata:()=>a,toc:()=>l});var o=t(4848),i=t(8453),r=t(8481);const d={sidebar_position:50,title:"Render Check List"},s=void 0,a={id:"mock-apps/components/render-check-list",title:"Render Check List",description:"Description",source:"@site/docs/mock-apps/components/render-check-list.md",sourceDirName:"mock-apps/components",slug:"/mock-apps/components/render-check-list",permalink:"/tests-untp/docs/mock-apps/components/render-check-list",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/components/render-check-list.md",tags:[],version:"current",sidebarPosition:50,frontMatter:{sidebar_position:50,title:"Render Check List"},sidebar:"tutorialSidebar",previous:{title:"Conformity Credential Checkbox",permalink:"/tests-untp/docs/mock-apps/components/conformity-credential-checkbox"},next:{title:"Import Button",permalink:"/tests-untp/docs/mock-apps/components/import-button"}},c={},l=[...r.RM,{value:"Description",id:"description",level:2},{value:"Example",id:"example",level:2},{value:"Definitions",id:"definitions",level:2},{value:"Props",id:"props",level:3},{value:"Response Data",id:"response-data",level:2}];function p(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.Ay,{}),"\n",(0,o.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,o.jsxs)(n.p,{children:["The RenderCheckList component is responsible for rendering a list of items with checkboxes. It is a composed component that will load data from another component (",(0,o.jsx)(n.a,{href:"./import-button",children:"Import Button"})," and ",(0,o.jsx)(n.a,{href:"./qr-code-scanner-dialog-button",children:"QR Code Scanner Dialog Button"}),"), when the user clicks to import or scan a QR code. The component will render a list of items with checkboxes, the labels of the checkboxes will be the identifiers of the items that are loaded from the data with the path is configured at ",(0,o.jsx)(n.code,{children:"requiredFieldPath"})," field."]}),"\n",(0,o.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "name": "RenderCheckList",\n "type": "EntryData",\n "props": {\n "checkBoxLabel": "Imported valid json:",\n "nestedComponents": [\n {\n "name": "ImportButton",\n "type": "EntryData",\n "props": {\n "label": "Import JSON",\n "style": { "margin": "40px auto", "paddingTop": "40px", "width": "80%" }\n }\n },\n {\n "name": "QRCodeScannerDialogButton",\n "type": "EntryData"\n }\n ],\n "style": { "margin": "40px auto", "paddingTop": "40px", "width": "80%" }\n }\n}\n'})}),"\n",(0,o.jsx)(n.h2,{id:"definitions",children:"Definitions"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Property"}),(0,o.jsx)(n.th,{children:"Required"}),(0,o.jsx)(n.th,{children:"Description"}),(0,o.jsx)(n.th,{children:"Type"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"name"}),(0,o.jsx)(n.td,{children:"Yes"}),(0,o.jsx)(n.td,{children:'The name of the component(should be "RenderCheckList")'}),(0,o.jsx)(n.td,{children:"String"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"type"}),(0,o.jsx)(n.td,{children:"Yes"}),(0,o.jsx)(n.td,{children:'The type of the component (should be "EntryData")'}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/docs/mock-apps/common/component-type",children:"ComponentType"})})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"props"}),(0,o.jsx)(n.td,{children:"Yes"}),(0,o.jsx)(n.td,{children:"The properties for the RenderCheckList"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/docs/mock-apps/components/render-check-list#props",children:"Props"})})]})]})]}),"\n",(0,o.jsx)(n.h3,{id:"props",children:"Props"}),"\n",(0,o.jsxs)(n.p,{children:["| Property | Required | Description | Type |\n| ----------------- | -------- | ---------------------------------------------------------- | ------------------------------------------ |String |\n| nestedComponents | Yes | An array of components to be rendered with the loaded data | ",(0,o.jsx)(n.a,{href:"/docs/mock-apps/components/",children:"Component"}),"[] |\n| checkBoxLabel | Yes | The label for the checkbox list | String |\n| style | No | The style for the component | Object |"]}),"\n",(0,o.jsx)(n.h2,{id:"response-data",children:"Response Data"}),"\n",(0,o.jsx)(n.p,{children:"The data returned by the component will depend on the data type that is imported or scanned by the user. The data will be verified and decoded if it is an enveloped verifiable credential. There are 3 possible cases:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["If the imported or scanned data type is a ",(0,o.jsx)(n.code,{children:"JSON"}),", the data will be returned without any transformation and have the key as the file name or URL of QRcode."]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "data1.json": {\n "foo": "bar" // Imported data\n },\n "data2.json": {\n "foo": "bar" // Imported data\n }\n}\n'})}),"\n",(0,o.jsxs)(n.ol,{start:"2",children:["\n",(0,o.jsxs)(n.li,{children:["If the imported or scanned data type is a ",(0,o.jsx)(n.code,{children:"VerifiableCredential"}),", the data will be returned as an object with the key as the file name or URL of QRcode. The imported or scanned VC will be verified based on the ",(0,o.jsx)(n.code,{children:"vcOptions"})," provided in the ",(0,o.jsx)(n.a,{href:"./import-button",children:"Import Button"})," or ",(0,o.jsx)(n.a,{href:"./qr-code-scanner-dialog-button",children:"QR Code Scanner Dialog Button"})," component."]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "VC1.json": {\n "@context": [], // Imported VC\n "type": ["VerifiableCredential"]\n },\n "VC2.json": {\n "@context": [], // Imported VC\n "type": ["VerifiableCredential"]\n }\n}\n'})}),"\n",(0,o.jsxs)(n.ol,{start:"3",children:["\n",(0,o.jsxs)(n.li,{children:["If the imported or scanned data type is a ",(0,o.jsx)(n.code,{children:"VerifiableCredential"})," and the VC is an enveloped VC, the data will be returned as an object with the key as the file name or URL of QRcode. The imported or scanned VC will be verified and decoded based on the ",(0,o.jsx)(n.code,{children:"vcOptions"})," provided in the ",(0,o.jsx)(n.a,{href:"./import-button",children:"Import Button"})," or ",(0,o.jsx)(n.a,{href:"./qr-code-scanner-dialog-button",children:"QR Code Scanner Dialog Button"})," component. The decoded VC will return the same level path as the original VC.\nFor example, if the original VC was imported as the whole object of the file, the decoded VC will be returned together with the original VC in an object like below:"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'// imported VC file\n{\n "@context": ["https://www.w3.org/ns/credentials/v2"],\n "id": "data:application/vc-ld+jwt,jwt",\n "type": "EnvelopedVerifiableCredential"\n}\n'})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'// return data\n{\n "VC1.json": {\n "vc": {\n "@context": ["https://www.w3.org/ns/credentials/v2"],\n "id": "data:application/vc-ld+jwt,jwt",\n "type": "EnvelopedVerifiableCredential"\n },\n "decodedEnvelopedVC": {\n "@context": ["https://www.w3.org/ns/credentials/v2"],\n "type": ["VerifiableCredential"],\n "credentialSubject": {\n "id": "did:example:123",\n "name": "Alice"\n }\n }\n }\n}\n'})}),"\n",(0,o.jsxs)(n.p,{children:["But when imported data has ",(0,o.jsx)(n.code,{children:"credentialPath"})," in ",(0,o.jsx)(n.code,{children:"vcOptions"}),", the decoded VC will be returned with the path specified in ",(0,o.jsx)(n.code,{children:"credentialPath"})," together with the original VC in an object like below:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'// vcOptions\n{\n "credentialPath": "/vc"\n}\n'})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'// imported VC file\n{\n "vc": {\n "@context": ["https://www.w3.org/ns/credentials/v2"],\n "id": "data:application/vc-ld+jwt,jwt",\n "type": "EnvelopedVerifiableCredential"\n },\n "linkResolver": "https://example.com"\n}\n'})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'// return data\n{\n "VC1.json": {\n "vc": {\n "vc": {\n "@context": ["https://www.w3.org/ns/credentials/v2"],\n "id": "data:application/vc-ld+jwt,jwt",\n "type": "EnvelopedVerifiableCredential"\n },\n "decodedEnvelopedVC": {\n "@context": ["https://www.w3.org/ns/credentials/v2"],\n "type": ["VerifiableCredential"],\n "credentialSubject": {\n "id": "did:example:123",\n "name": "Alice"\n }\n }\n },\n "linkResolver": "https://example.com"\n }\n}\n'})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>d,x:()=>s});var o=t(6540);const i={},r=o.createContext(i);function d(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/22243546.26cc93dd.js b/assets/js/22243546.26cc93dd.js new file mode 100644 index 00000000..04f4301b --- /dev/null +++ b/assets/js/22243546.26cc93dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1199],{8481:(e,t,n)=>{n.d(t,{Ay:()=>r,RM:()=>a});var i=n(4848),s=n(8453);const a=[];function o(e){const t={admonition:"admonition",p:"p",...(0,s.R)(),...e.components};return(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsx)(t.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function r(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},3271:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var i=n(4848),s=n(8453),a=n(8481);const o={sidebar_position:41,title:"Issuing Credential"},r=void 0,c={id:"mock-apps/common/issuing-credential",title:"Issuing Credential",description:"Description",source:"@site/docs/mock-apps/common/issuing-credential.md",sourceDirName:"mock-apps/common",slug:"/mock-apps/common/issuing-credential",permalink:"/tests-untp/docs/mock-apps/common/issuing-credential",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/common/issuing-credential.md",tags:[],version:"current",sidebarPosition:41,frontMatter:{sidebar_position:41,title:"Issuing Credential"},sidebar:"tutorialSidebar",previous:{title:"Identify Key Path",permalink:"/tests-untp/docs/mock-apps/common/identifier-key-path"},next:{title:"Verifiable Credentials",permalink:"/tests-untp/docs/mock-apps/common/verifiable-credentials"}},d={},l=[...a.RM,{value:"Description",id:"description",level:2},{value:"Diagram",id:"diagram",level:2},{value:"Managing the status of a Verifiable Credential",id:"managing-the-status-of-a-verifiable-credential",level:2}];function p(e){const t={a:"a",h2:"h2",mermaid:"mermaid",p:"p",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.Ay,{}),"\n",(0,i.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,i.jsx)(t.p,{children:"The Issuing Credential feature in the mock app is responsible for issuing a Verifiable Credential (VC) along with its credential status. The status is added to the VC payload before the VC is issued and is managed by the VC issuer."}),"\n",(0,i.jsx)(t.h2,{id:"diagram",children:"Diagram"}),"\n",(0,i.jsx)(t.p,{children:"The sequence diagram below illustrates the process of issuing a VC along with its status."}),"\n",(0,i.jsx)(t.mermaid,{value:"\nsequenceDiagram\n\nparticipant C as Client\n\nparticipant MA as Mock App\n\nparticipant V as VCKit\n\nC->>MA: Call issue a VC (data, context)\n\nalt Status is not present\n MA ->> V: Issue new credential status\n V --\x3e> MA: Return credential status\nend\n\nMA ->> MA: Inject status into VC payload\n\nMA->>V: Issue VC\n\nV--\x3e>MA: Return VC\n\nMA--\x3e>C: Return VC\n"}),"\n",(0,i.jsx)(t.h2,{id:"managing-the-status-of-a-verifiable-credential",children:"Managing the status of a Verifiable Credential"}),"\n",(0,i.jsxs)(t.p,{children:["To manage the status of a Verifiable Credential (",(0,i.jsx)(t.a,{href:"https://uncefact.github.io/project-vckit/docs/get-started/api-server-get-started/basic-operations#activating-a-vc",children:"activate"})," or ",(0,i.jsx)(t.a,{href:"https://uncefact.github.io/project-vckit/docs/get-started/api-server-get-started/basic-operations#revoking-a-vc",children:"revoke"}),"), you can refer to the ",(0,i.jsx)(t.a,{href:"https://uncefact.github.io/project-vckit/docs/",children:"VCkit"})," documentation."]})]})}function u(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>r});var i=n(6540);const s={},a=i.createContext(s);function o(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/22243546.7253d2cd.js b/assets/js/22243546.7253d2cd.js deleted file mode 100644 index 83e5216f..00000000 --- a/assets/js/22243546.7253d2cd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1199],{8481:(e,t,n)=>{n.d(t,{Ay:()=>r,RM:()=>a});var i=n(4848),s=n(8453);const a=[];function o(e){const t={admonition:"admonition",p:"p",...(0,s.R)(),...e.components};return(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsx)(t.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function r(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},3271:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>l,frontMatter:()=>o,metadata:()=>c,toc:()=>p});var i=n(4848),s=n(8453),a=n(8481);const o={sidebar_position:41,title:"Issuing Credential"},r=void 0,c={id:"mock-apps/common/issuing-credential",title:"Issuing Credential",description:"Description",source:"@site/docs/mock-apps/common/issuing-credential.md",sourceDirName:"mock-apps/common",slug:"/mock-apps/common/issuing-credential",permalink:"/tests-untp/docs/mock-apps/common/issuing-credential",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/common/issuing-credential.md",tags:[],version:"current",sidebarPosition:41,frontMatter:{sidebar_position:41,title:"Issuing Credential"},sidebar:"tutorialSidebar",previous:{title:"Identify Key Path",permalink:"/tests-untp/docs/mock-apps/common/identifier-key-path"},next:{title:"Scanning App",permalink:"/tests-untp/docs/mock-apps/scanning-app"}},d={},p=[...a.RM,{value:"Description",id:"description",level:2},{value:"Diagram",id:"diagram",level:2},{value:"Managing the status of a Verifiable Credential",id:"managing-the-status-of-a-verifiable-credential",level:2}];function u(e){const t={a:"a",h2:"h2",mermaid:"mermaid",p:"p",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.Ay,{}),"\n",(0,i.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,i.jsx)(t.p,{children:"The Issuing Credential feature in the mock app is responsible for issuing a Verifiable Credential (VC) along with its credential status. The status is added to the VC payload before the VC is issued and is managed by the VC issuer."}),"\n",(0,i.jsx)(t.h2,{id:"diagram",children:"Diagram"}),"\n",(0,i.jsx)(t.p,{children:"The sequence diagram below illustrates the process of issuing a VC along with its status."}),"\n",(0,i.jsx)(t.mermaid,{value:"\nsequenceDiagram\n\nparticipant C as Client\n\nparticipant MA as Mock App\n\nparticipant V as VCKit\n\nC->>MA: Call issue a VC (data, context)\n\nalt Status is not present\n MA ->> V: Issue new credential status\n V --\x3e> MA: Return credential status\nend\n\nMA ->> MA: Inject status into VC payload\n\nMA->>V: Issue VC\n\nV--\x3e>MA: Return VC\n\nMA--\x3e>C: Return VC\n"}),"\n",(0,i.jsx)(t.h2,{id:"managing-the-status-of-a-verifiable-credential",children:"Managing the status of a Verifiable Credential"}),"\n",(0,i.jsxs)(t.p,{children:["To manage the status of a Verifiable Credential (",(0,i.jsx)(t.a,{href:"https://uncefact.github.io/project-vckit/docs/get-started/api-server-get-started/basic-operations#activating-a-vc",children:"activate"})," or ",(0,i.jsx)(t.a,{href:"https://uncefact.github.io/project-vckit/docs/get-started/api-server-get-started/basic-operations#revoking-a-vc",children:"revoke"}),"), you can refer to the ",(0,i.jsx)(t.a,{href:"https://uncefact.github.io/project-vckit/docs/",children:"VCkit"})," documentation."]})]})}function l(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>r});var i=n(6540);const s={},a=i.createContext(s);function o(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/287c65a9.7d27331c.js b/assets/js/287c65a9.7d27331c.js new file mode 100644 index 00000000..04ff6e25 --- /dev/null +++ b/assets/js/287c65a9.7d27331c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5922],{8481:(e,t,n)=>{n.d(t,{Ay:()=>c,RM:()=>o});var i=n(4848),s=n(8453);const o=[];function r(e){const t={admonition:"admonition",p:"p",...(0,s.R)(),...e.components};return(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsx)(t.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function c(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(r,{...e})}):r(e)}},8811:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=n(4848),s=n(8453),o=n(8481);const r={sidebar_position:2,title:"Getting Started"},c=void 0,a={id:"test-suites/technical-interoperability/getting-started",title:"Getting Started",description:"The Getting Started section covers the following topics for technical interoperability testing:",source:"@site/docs/test-suites/technical-interoperability/getting-started.md",sourceDirName:"test-suites/technical-interoperability",slug:"/test-suites/technical-interoperability/getting-started",permalink:"/tests-untp/docs/test-suites/technical-interoperability/getting-started",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/test-suites/technical-interoperability/getting-started.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Getting Started"},sidebar:"tutorialSidebar",previous:{title:"Technical Interoperability",permalink:"/tests-untp/docs/test-suites/technical-interoperability/"},next:{title:"Installation",permalink:"/tests-untp/docs/test-suites/technical-interoperability/installation"}},l={},d=[...o.RM];function u(e){const t={code:"code",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.Ay,{}),"\n",(0,i.jsx)(t.p,{children:"The Getting Started section covers the following topics for technical interoperability testing:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Installation"}),": Learn how to set up the necessary environment for technical interoperability testing. This includes installing required software, setting up test environments, and preparing your system for running the various test suites."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Configuration"}),": Understand how to configure the different components of the technical interoperability test suite. We'll cover:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Setting up the W3C V2 VCDM test suite for Verifiable Credentials"}),"\n",(0,i.jsx)(t.li,{children:"Configuring UNTP-specific extension tests"}),"\n",(0,i.jsx)(t.li,{children:"Preparing for Identity Resolution (IDR) testing"}),"\n",(0,i.jsx)(t.li,{children:"Setting up storage service testing"}),"\n",(0,i.jsx)(t.li,{children:"Configuring transparency graph validation tests"}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Note"}),": The preset configuration in the config file (",(0,i.jsx)(t.code,{children:"packages/vc-test-suite/config.ts"}),") has already been preconfigured to use the services set up with Docker Compose. If you're using the default Docker setup, you may not need to modify these settings."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Note"}),": In the config file, you can specify headers to be included in the request for each test suite within the Tier 1 test suite (e.g. ",(0,i.jsx)(t.code,{children:"RenderTemplate2024"}),", ",(0,i.jsx)(t.code,{children:"Storage"}),", etc.). Each test case will inherit these headers from the respective config. This is particularly useful if you need to include an authorization token, such as ",(0,i.jsx)(t.code,{children:"Bearer "}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Usage"}),": Learn how to run the various components of the technical interoperability test suite and interpret the results. This section will guide you through:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Running the W3C V2 VCDM tests"}),"\n",(0,i.jsx)(t.li,{children:"Executing UNTP extension tests"}),"\n",(0,i.jsx)(t.li,{children:"Performing IDR compliance checks"}),"\n",(0,i.jsx)(t.li,{children:"Conducting storage and data retrieval tests"}),"\n",(0,i.jsx)(t.li,{children:"Validating transparency graphs"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"By the end of this section, you will have a solid foundation for installing, configuring, and using the UNTP Technical Interoperability Test Suite. You'll be able to validate your UNTP implementation's technical components against the required standards."}),"\n",(0,i.jsx)(t.p,{children:"If you're using the default Docker setup, most of the configuration has been done for you. However, if you need to customise any settings or are using a different setup, the configuration section of each component will guide you through the necessary steps."})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>c});var i=n(6540);const s={},o=i.createContext(s);function r(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/287c65a9.869f871e.js b/assets/js/287c65a9.869f871e.js deleted file mode 100644 index b22ef9c3..00000000 --- a/assets/js/287c65a9.869f871e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5922],{8481:(t,e,n)=>{n.d(e,{Ay:()=>c,RM:()=>o});var i=n(4848),s=n(8453);const o=[];function r(t){const e={admonition:"admonition",p:"p",...(0,s.R)(),...t.components};return(0,i.jsx)(e.admonition,{type:"info",children:(0,i.jsx)(e.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function c(t={}){const{wrapper:e}={...(0,s.R)(),...t.components};return e?(0,i.jsx)(e,{...t,children:(0,i.jsx)(r,{...t})}):r(t)}},8811:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=n(4848),s=n(8453),o=n(8481);const r={sidebar_position:2,title:"Getting Started"},c=void 0,a={id:"test-suites/technical-interoperability/getting-started",title:"Getting Started",description:"The Getting Started section covers the following topics for technical interoperability testing:",source:"@site/docs/test-suites/technical-interoperability/getting-started.md",sourceDirName:"test-suites/technical-interoperability",slug:"/test-suites/technical-interoperability/getting-started",permalink:"/tests-untp/docs/test-suites/technical-interoperability/getting-started",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/test-suites/technical-interoperability/getting-started.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Getting Started"},sidebar:"tutorialSidebar",previous:{title:"Technical Interoperability",permalink:"/tests-untp/docs/test-suites/technical-interoperability/"},next:{title:"Installation",permalink:"/tests-untp/docs/test-suites/technical-interoperability/installation"}},l={},d=[...o.RM];function u(t){const e={code:"code",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.Ay,{}),"\n",(0,i.jsx)(e.p,{children:"The Getting Started section covers the following topics for technical interoperability testing:"}),"\n",(0,i.jsxs)(e.ol,{children:["\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsxs)(e.p,{children:[(0,i.jsx)(e.strong,{children:"Installation"}),": Learn how to set up the necessary environment for technical interoperability testing. This includes installing required software, setting up test environments, and preparing your system for running the various test suites."]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsxs)(e.p,{children:[(0,i.jsx)(e.strong,{children:"Configuration"}),": Understand how to configure the different components of the technical interoperability test suite. We'll cover:"]}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsx)(e.li,{children:"Setting up the W3C V2 VCDM test suite for Verifiable Credentials"}),"\n",(0,i.jsx)(e.li,{children:"Configuring UNTP-specific extension tests"}),"\n",(0,i.jsx)(e.li,{children:"Preparing for Identity Resolution (IDR) testing"}),"\n",(0,i.jsx)(e.li,{children:"Setting up storage service testing"}),"\n",(0,i.jsx)(e.li,{children:"Configuring transparency graph validation tests"}),"\n"]}),"\n",(0,i.jsxs)(e.p,{children:[(0,i.jsx)(e.strong,{children:"Note"}),": The preset configuration in the config file (",(0,i.jsx)(e.code,{children:"packages/vc-test-suite/config.ts"}),") has already been preconfigured to use the services set up with Docker Compose. If you're using the default Docker setup, you may not need to modify these settings."]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsxs)(e.p,{children:[(0,i.jsx)(e.strong,{children:"Usage"}),": Learn how to run the various components of the technical interoperability test suite and interpret the results. This section will guide you through:"]}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsx)(e.li,{children:"Running the W3C V2 VCDM tests"}),"\n",(0,i.jsx)(e.li,{children:"Executing UNTP extension tests"}),"\n",(0,i.jsx)(e.li,{children:"Performing IDR compliance checks"}),"\n",(0,i.jsx)(e.li,{children:"Conducting storage and data retrieval tests"}),"\n",(0,i.jsx)(e.li,{children:"Validating transparency graphs"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(e.p,{children:"By the end of this section, you will have a solid foundation for installing, configuring, and using the UNTP Technical Interoperability Test Suite. You'll be able to validate your UNTP implementation's technical components against the required standards."}),"\n",(0,i.jsx)(e.p,{children:"If you're using the default Docker setup, most of the configuration has been done for you. However, if you need to customise any settings or are using a different setup, the configuration section of each component will guide you through the necessary steps."})]})}function h(t={}){const{wrapper:e}={...(0,s.R)(),...t.components};return e?(0,i.jsx)(e,{...t,children:(0,i.jsx)(u,{...t})}):u(t)}},8453:(t,e,n)=>{n.d(e,{R:()=>r,x:()=>c});var i=n(6540);const s={},o=i.createContext(s);function r(t){const e=i.useContext(o);return i.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:r(t.components),i.createElement(o.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c6d2c9f.1509ea53.js b/assets/js/2c6d2c9f.1509ea53.js deleted file mode 100644 index fcff1110..00000000 --- a/assets/js/2c6d2c9f.1509ea53.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[236],{8481:(t,e,n)=>{n.d(e,{Ay:()=>d,RM:()=>r});var o=n(4848),s=n(8453);const r=[];function i(t){const e={admonition:"admonition",p:"p",...(0,s.R)(),...t.components};return(0,o.jsx)(e.admonition,{type:"info",children:(0,o.jsx)(e.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function d(t={}){const{wrapper:e}={...(0,s.R)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(i,{...t})}):i(t)}},5680:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>d,default:()=>a,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var o=n(4848),s=n(8453),r=n(8481);const i={sidebar_position:51,title:"Import Button"},d=void 0,c={id:"mock-apps/components/import-button",title:"Import Button",description:"Description",source:"@site/docs/mock-apps/components/import-button.md",sourceDirName:"mock-apps/components",slug:"/mock-apps/components/import-button",permalink:"/tests-untp/docs/mock-apps/components/import-button",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/components/import-button.md",tags:[],version:"current",sidebarPosition:51,frontMatter:{sidebar_position:51,title:"Import Button"},sidebar:"tutorialSidebar",previous:{title:"Render Check List",permalink:"/tests-untp/docs/mock-apps/components/render-check-list"},next:{title:"QR Code Scanner Dialog Button",permalink:"/tests-untp/docs/mock-apps/components/qr-code-scanner-dialog-button"}},p={},l=[...r.RM,{value:"Description",id:"description",level:2},{value:"Example",id:"example",level:2},{value:"Definitions",id:"definitions",level:2},{value:"Props",id:"props",level:3}];function h(t){const e={a:"a",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.R)(),...t.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.Ay,{}),"\n",(0,o.jsx)(e.h2,{id:"description",children:"Description"}),"\n",(0,o.jsx)(e.p,{children:"The ImportButton component is responsible for rendering a button that allows the user to import data. The component will return the data that is imported by the user."}),"\n",(0,o.jsx)(e.h2,{id:"example",children:"Example"}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-json",children:'{\n "name": "ImportButton",\n "type": "EntryData",\n "props": {\n "label": "Import JSON",\n "style": { "margin": "40px auto", "paddingTop": "40px", "width": "80%" }\n }\n}\n'})}),"\n",(0,o.jsx)(e.h2,{id:"definitions",children:"Definitions"}),"\n",(0,o.jsxs)(e.table,{children:[(0,o.jsx)(e.thead,{children:(0,o.jsxs)(e.tr,{children:[(0,o.jsx)(e.th,{children:"Property"}),(0,o.jsx)(e.th,{children:"Required"}),(0,o.jsx)(e.th,{children:"Description"}),(0,o.jsx)(e.th,{children:"Type"})]})}),(0,o.jsxs)(e.tbody,{children:[(0,o.jsxs)(e.tr,{children:[(0,o.jsx)(e.td,{children:"name"}),(0,o.jsx)(e.td,{children:"Yes"}),(0,o.jsx)(e.td,{children:'The name of the component(should be "ImportButton")'}),(0,o.jsx)(e.td,{children:"String"})]}),(0,o.jsxs)(e.tr,{children:[(0,o.jsx)(e.td,{children:"type"}),(0,o.jsx)(e.td,{children:"Yes"}),(0,o.jsx)(e.td,{children:'The type of the component (should be "EntryData")'}),(0,o.jsx)(e.td,{children:(0,o.jsx)(e.a,{href:"/docs/mock-apps/common/component-type",children:"ComponentType"})})]}),(0,o.jsxs)(e.tr,{children:[(0,o.jsx)(e.td,{children:"props"}),(0,o.jsx)(e.td,{children:"Yes"}),(0,o.jsx)(e.td,{children:"The properties for the ImportButton"}),(0,o.jsx)(e.td,{children:(0,o.jsx)(e.a,{href:"/docs/mock-apps/components/import-button#props",children:"Props"})})]})]})]}),"\n",(0,o.jsx)(e.h3,{id:"props",children:"Props"}),"\n",(0,o.jsxs)(e.table,{children:[(0,o.jsx)(e.thead,{children:(0,o.jsxs)(e.tr,{children:[(0,o.jsx)(e.th,{children:"Property"}),(0,o.jsx)(e.th,{children:"Required"}),(0,o.jsx)(e.th,{children:"Description"}),(0,o.jsx)(e.th,{children:"Type"})]})}),(0,o.jsxs)(e.tbody,{children:[(0,o.jsxs)(e.tr,{children:[(0,o.jsx)(e.td,{children:"label"}),(0,o.jsx)(e.td,{children:"Yes"}),(0,o.jsx)(e.td,{children:"The label for the import button"}),(0,o.jsx)(e.td,{children:"String"})]}),(0,o.jsxs)(e.tr,{children:[(0,o.jsx)(e.td,{children:"style"}),(0,o.jsx)(e.td,{children:"No"}),(0,o.jsx)(e.td,{children:"The style for the component"}),(0,o.jsx)(e.td,{children:"Object"})]})]})]})]})}function a(t={}){const{wrapper:e}={...(0,s.R)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(h,{...t})}):h(t)}},8453:(t,e,n)=>{n.d(e,{R:()=>i,x:()=>d});var o=n(6540);const s={},r=o.createContext(s);function i(t){const e=o.useContext(r);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function d(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:i(t.components),o.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c6d2c9f.abdaff9b.js b/assets/js/2c6d2c9f.abdaff9b.js new file mode 100644 index 00000000..3b1dc2d3 --- /dev/null +++ b/assets/js/2c6d2c9f.abdaff9b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[236],{8481:(e,t,n)=>{n.d(t,{Ay:()=>d,RM:()=>i});var s=n(4848),r=n(8453);const i=[];function o(e){const t={admonition:"admonition",p:"p",...(0,r.R)(),...e.components};return(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsx)(t.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},5680:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>d,default:()=>a,frontMatter:()=>o,metadata:()=>c,toc:()=>h});var s=n(4848),r=n(8453),i=n(8481);const o={sidebar_position:51,title:"Import Button"},d=void 0,c={id:"mock-apps/components/import-button",title:"Import Button",description:"Description",source:"@site/docs/mock-apps/components/import-button.md",sourceDirName:"mock-apps/components",slug:"/mock-apps/components/import-button",permalink:"/tests-untp/docs/mock-apps/components/import-button",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/components/import-button.md",tags:[],version:"current",sidebarPosition:51,frontMatter:{sidebar_position:51,title:"Import Button"},sidebar:"tutorialSidebar",previous:{title:"Render Check List",permalink:"/tests-untp/docs/mock-apps/components/render-check-list"},next:{title:"QR Code Scanner Dialog Button",permalink:"/tests-untp/docs/mock-apps/components/qr-code-scanner-dialog-button"}},l={},h=[...i.RM,{value:"Description",id:"description",level:2},{value:"Example",id:"example",level:2},{value:"Definitions",id:"definitions",level:2},{value:"Props",id:"props",level:3},{value:"vcOptions",id:"vcoptions",level:4}];function p(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.Ay,{}),"\n",(0,s.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(t.p,{children:"The ImportButton component is responsible for rendering a button that allows the user to import data. The component will return the data that is imported by the user."}),"\n",(0,s.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-json",children:'{\n "name": "ImportButton",\n "type": "EntryData",\n "props": {\n "label": "Import JSON",\n "style": { "margin": "40px auto", "paddingTop": "40px", "width": "80%" }\n }\n}\n'})}),"\n",(0,s.jsx)(t.h2,{id:"definitions",children:"Definitions"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Property"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"name"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:'The name of the component(should be "ImportButton")'}),(0,s.jsx)(t.td,{children:"String"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"type"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:'The type of the component (should be "EntryData")'}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/docs/mock-apps/common/component-type",children:"ComponentType"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"props"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"The properties for the ImportButton"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/docs/mock-apps/components/import-button#props",children:"Props"})})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"props",children:"Props"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Property"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"label"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"The label for the import button"}),(0,s.jsx)(t.td,{children:"String"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"style"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"The style for the component"}),(0,s.jsx)(t.td,{children:"Object"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"type"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"The type of data (should be 'VerifiableCredential' and 'JSON'), the default is 'VerifiableCredential'"}),(0,s.jsx)(t.td,{children:"String"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"vcOptions"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"The options for the VC data processing"}),(0,s.jsx)(t.td,{children:"Object"})]})]})]}),"\n",(0,s.jsx)(t.h4,{id:"vcoptions",children:"vcOptions"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Property"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"credentialPath"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"The path for the credential data"}),(0,s.jsx)(t.td,{children:"String"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"vckitAPIUrl"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"The URL for the vckit API"}),(0,s.jsx)(t.td,{children:"String"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"headers"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:'The headers for the vckit API, example: { Authorization: "Bearer test123"}'}),(0,s.jsx)(t.td,{children:"Object"})]})]})]})]})}function a(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>d});var s=n(6540);const r={},i=s.createContext(r);function o(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3d7bc76c.315f2d63.js b/assets/js/3d7bc76c.315f2d63.js new file mode 100644 index 00000000..e8788b41 --- /dev/null +++ b/assets/js/3d7bc76c.315f2d63.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7606],{8481:(e,n,i)=>{i.d(n,{Ay:()=>s,RM:()=>a});var t=i(4848),r=i(8453);const a=[];function o(e){const n={admonition:"admonition",p:"p",...(0,r.R)(),...e.components};return(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function s(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},2192:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>f,frontMatter:()=>o,metadata:()=>p,toc:()=>d});var t=i(4848),r=i(8453),a=i(8481);const o={sidebar_position:41,title:"Verify App"},s=void 0,p={id:"mock-apps/verify-app",title:"Verify App",description:"Description",source:"@site/docs/mock-apps/verify-app.md",sourceDirName:"mock-apps",slug:"/mock-apps/verify-app",permalink:"/tests-untp/docs/mock-apps/verify-app",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/verify-app.md",tags:[],version:"current",sidebarPosition:41,frontMatter:{sidebar_position:41,title:"Verify App"},sidebar:"tutorialSidebar",previous:{title:"Scanning App",permalink:"/tests-untp/docs/mock-apps/scanning-app"},next:{title:"Conformity Credential",permalink:"/tests-untp/docs/mock-apps/conformity-credential"}},c={},d=[...a.RM,{value:"Description",id:"description",level:2},{value:"Overall Flow Diagram",id:"overall-flow-diagram",level:2},{value:"Rendering Verified Credential",id:"rendering-verified-credential",level:2}];function l(e){const n={a:"a",h2:"h2",mermaid:"mermaid",p:"p",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["The Verify App is a crucial component of the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/scanning-app",children:"Scanning App"}),", responsible for verifying UNTP credentials and displaying the verified credentials. It handles the decryption of encrypted Verifiable Credentials (VCs), verification through a dedicated service, and presentation of the results to the user. The main entrypoints into the Verify App are through the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/scanning-app",children:"Scanning App"})," or by a ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/common/verify-link",children:"Verify Link"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"overall-flow-diagram",children:"Overall Flow Diagram"}),"\n",(0,t.jsx)(n.mermaid,{value:"sequenceDiagram\n participant U as User\n participant V as Verify App\n participant SS as Storage Service\n participant VS as Verification Service\n U->>V: Access Verify App\n V->>SS: Fetch VC\n SS--\x3e>V: Return VC\n V->>V: Decrypt VC (if required)\n V->>V: Compute Hash (if required)\n V->>VS: Send VC for Verification\n VS--\x3e>V: Return Verification Result\n V->>V: Render Verified Credential\n V->>U: Display Verification Result and Credential"}),"\n",(0,t.jsx)(n.h2,{id:"rendering-verified-credential",children:"Rendering Verified Credential"}),"\n",(0,t.jsx)(n.p,{children:"The UI of this page includes these information fields: Type, Issued by and Issue date. Besides, the page also contains the tab panel for HTML template, JSON data and the download button."}),"\n",(0,t.jsx)(n.p,{children:"With the download button, it will download the JSON data or JWT data if the credential is JWT."})]})}function f(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>s});var t=i(6540);const r={},a=t.createContext(r);function o(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3d7bc76c.3f5e3f1e.js b/assets/js/3d7bc76c.3f5e3f1e.js deleted file mode 100644 index 1da6d30d..00000000 --- a/assets/js/3d7bc76c.3f5e3f1e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7606],{8481:(e,n,t)=>{t.d(n,{Ay:()=>s,RM:()=>a});var i=t(4848),r=t(8453);const a=[];function o(e){const n={admonition:"admonition",p:"p",...(0,r.R)(),...e.components};return(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function s(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},2192:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>o,metadata:()=>p,toc:()=>d});var i=t(4848),r=t(8453),a=t(8481);const o={sidebar_position:41,title:"Verify App"},s=void 0,p={id:"mock-apps/verify-app",title:"Verify App",description:"Description",source:"@site/docs/mock-apps/verify-app.md",sourceDirName:"mock-apps",slug:"/mock-apps/verify-app",permalink:"/tests-untp/docs/mock-apps/verify-app",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/verify-app.md",tags:[],version:"current",sidebarPosition:41,frontMatter:{sidebar_position:41,title:"Verify App"},sidebar:"tutorialSidebar",previous:{title:"Scanning App",permalink:"/tests-untp/docs/mock-apps/scanning-app"},next:{title:"Conformity Credential",permalink:"/tests-untp/docs/mock-apps/conformity-credential"}},c={},d=[...a.RM,{value:"Description",id:"description",level:2},{value:"Overall Flow Diagram",id:"overall-flow-diagram",level:2}];function l(e){const n={a:"a",h2:"h2",mermaid:"mermaid",p:"p",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.Ay,{}),"\n",(0,i.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,i.jsxs)(n.p,{children:["The Verify App is a crucial component of the ",(0,i.jsx)(n.a,{href:"/docs/mock-apps/scanning-app",children:"Scanning App"}),", responsible for verifying UNTP credentials and displaying the verified credentials. It handles the decryption of encrypted Verifiable Credentials (VCs), verification through a dedicated service, and presentation of the results to the user. The main entrypoints into the Verify App are through the ",(0,i.jsx)(n.a,{href:"/docs/mock-apps/scanning-app",children:"Scanning App"})," or by a ",(0,i.jsx)(n.a,{href:"/docs/mock-apps/common/verify-link",children:"Verify Link"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"overall-flow-diagram",children:"Overall Flow Diagram"}),"\n",(0,i.jsx)(n.mermaid,{value:"sequenceDiagram\n participant U as User\n participant V as Verify App\n participant SS as Storage Service\n participant VS as Verification Service\n U->>V: Access Verify App\n V->>SS: Fetch VC\n SS--\x3e>V: Return VC\n V->>V: Decrypt VC (if required)\n V->>V: Compute Hash (if required)\n V->>VS: Send VC for Verification\n VS--\x3e>V: Return Verification Result\n V->>V: Render Verified Credential\n V->>U: Display Verification Result and Credential"})]})}function m(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>s});var i=t(6540);const r={},a=i.createContext(r);function o(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5ef14c48.cbbc6f80.js b/assets/js/5ef14c48.cbbc6f80.js new file mode 100644 index 00000000..e9e48327 --- /dev/null +++ b/assets/js/5ef14c48.cbbc6f80.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[793],{8481:(e,n,i)=>{i.d(n,{Ay:()=>c,RM:()=>r});var t=i(4848),s=i(8453);const r=[];function a(e){const n={admonition:"admonition",p:"p",...(0,s.R)(),...e.components};return(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function c(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},4566:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>p,contentTitle:()=>c,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var t=i(4848),s=i(8453),r=i(8481);const a={sidebar_position:40,title:"Scanning App"},c=void 0,o={id:"mock-apps/scanning-app",title:"Scanning App",description:"Description",source:"@site/docs/mock-apps/scanning-app.md",sourceDirName:"mock-apps",slug:"/mock-apps/scanning-app",permalink:"/tests-untp/docs/mock-apps/scanning-app",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/scanning-app.md",tags:[],version:"current",sidebarPosition:40,frontMatter:{sidebar_position:40,title:"Scanning App"},sidebar:"tutorialSidebar",previous:{title:"Verifiable Credentials",permalink:"/tests-untp/docs/mock-apps/common/verifiable-credentials"},next:{title:"Verify App",permalink:"/tests-untp/docs/mock-apps/verify-app"}},p={},d=[...r.RM,{value:"Description",id:"description",level:2},{value:"Diagram",id:"diagram",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Usage",id:"usage",level:2}];function l(e){const n={a:"a",h2:"h2",li:"li",mermaid:"mermaid",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.p,{children:"The Scanning App is a dedicated page within the Mock App system, designed to enable users to scan barcodes and verify/view associated credentials. This page incorporates several key functions to manage the scanning and verification process efficiently."}),"\n",(0,t.jsxs)(n.p,{children:["It begins by fetching the link to the associated passport from the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/dependent-services/identity-resolution-service",children:"Identity Resolver service"})," based on the identifier extracted from the barcode. The app then redirects to the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/verify-app",children:"Verify App"}),", where it retrieves the credential from the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/dependent-services/storage-service",children:"Storage service"}),". Subsequently, it sends the fetched Verifiable Credential to the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/dependent-services/verifiable-credential-service",children:"Verifiable Credential service"})," for verification. Finally, it displays the rendered Verified Credential to the user, completing the seamless process of credential verification and visualisation."]}),"\n",(0,t.jsx)(n.h2,{id:"diagram",children:"Diagram"}),"\n",(0,t.jsx)(n.mermaid,{value:"sequenceDiagram\n participant U as User\n participant S as Scanning App\n participant V as Verifier\n participant IP as Identity Provider\n participant IDR as IDR Service\n participant SS as Storage Service\n participant VS as Verification Service\n\n U->>S: Scan Barcode\n S->>IP: Get IDR URL\n IP--\x3e>S: Return IDR URL\n S->>IDR: Fetch Passport from IDR\n IDR--\x3e>S: Return Passport\n S->>V: Redirect to Verify Page\n V->>SS: Fetch Verifiable Credential\n SS--\x3e>V: Return Verifiable Credential\n V->>VS: Verify Credential\n VS--\x3e>V: Return Verification Result\n V->>U: Display Verified Credential"}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["The some components of the Scanning App can be configured by modifying the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/configuration/",children:"configuration file"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/mock-apps/configuration/system-config",children:"Apps configurations"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/mock-apps/common/identify-provider",children:"Identity provider settings"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/mock-apps/common/default-verification-service-link",children:"Default verification service link"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.p,{children:"To use the Scanning App:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Navigate to the home page of the Mock App system."}),"\n",(0,t.jsx)(n.li,{children:"Select the Scanning option within the sidebar to open the barcode scanner."}),"\n",(0,t.jsx)(n.li,{children:"Scan a valid barcode containing an identifier associated with a product."}),"\n",(0,t.jsxs)(n.li,{children:["The app will process the scanned data and redirect to the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/verify-app",children:"Verify App"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/verify-app",children:"Verify App"})," will display the verified credential."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>a,x:()=>c});var t=i(6540);const s={},r=t.createContext(s);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5ef14c48.e9190f05.js b/assets/js/5ef14c48.e9190f05.js deleted file mode 100644 index 43add0e5..00000000 --- a/assets/js/5ef14c48.e9190f05.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[793],{8481:(e,n,i)=>{i.d(n,{Ay:()=>c,RM:()=>r});var t=i(4848),s=i(8453);const r=[];function a(e){const n={admonition:"admonition",p:"p",...(0,s.R)(),...e.components};return(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function c(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},4566:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>p,contentTitle:()=>c,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var t=i(4848),s=i(8453),r=i(8481);const a={sidebar_position:40,title:"Scanning App"},c=void 0,o={id:"mock-apps/scanning-app",title:"Scanning App",description:"Description",source:"@site/docs/mock-apps/scanning-app.md",sourceDirName:"mock-apps",slug:"/mock-apps/scanning-app",permalink:"/tests-untp/docs/mock-apps/scanning-app",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/scanning-app.md",tags:[],version:"current",sidebarPosition:40,frontMatter:{sidebar_position:40,title:"Scanning App"},sidebar:"tutorialSidebar",previous:{title:"Issuing Credential",permalink:"/tests-untp/docs/mock-apps/common/issuing-credential"},next:{title:"Verify App",permalink:"/tests-untp/docs/mock-apps/verify-app"}},p={},d=[...r.RM,{value:"Description",id:"description",level:2},{value:"Diagram",id:"diagram",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Usage",id:"usage",level:2}];function l(e){const n={a:"a",h2:"h2",li:"li",mermaid:"mermaid",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.p,{children:"The Scanning App is a dedicated page within the Mock App system, designed to enable users to scan barcodes and verify/view associated credentials. This page incorporates several key functions to manage the scanning and verification process efficiently."}),"\n",(0,t.jsxs)(n.p,{children:["It begins by fetching the link to the associated passport from the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/dependent-services/identity-resolution-service",children:"Identity Resolver service"})," based on the identifier extracted from the barcode. The app then redirects to the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/verify-app",children:"Verify App"}),", where it retrieves the credential from the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/dependent-services/storage-service",children:"Storage service"}),". Subsequently, it sends the fetched Verifiable Credential to the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/dependent-services/verifiable-credential-service",children:"Verifiable Credential service"})," for verification. Finally, it displays the rendered Verified Credential to the user, completing the seamless process of credential verification and visualisation."]}),"\n",(0,t.jsx)(n.h2,{id:"diagram",children:"Diagram"}),"\n",(0,t.jsx)(n.mermaid,{value:"sequenceDiagram\n participant U as User\n participant S as Scanning App\n participant V as Verifier\n participant IP as Identity Provider\n participant IDR as IDR Service\n participant SS as Storage Service\n participant VS as Verification Service\n\n U->>S: Scan Barcode\n S->>IP: Get IDR URL\n IP--\x3e>S: Return IDR URL\n S->>IDR: Fetch Passport from IDR\n IDR--\x3e>S: Return Passport\n S->>V: Redirect to Verify Page\n V->>SS: Fetch Verifiable Credential\n SS--\x3e>V: Return Verifiable Credential\n V->>VS: Verify Credential\n VS--\x3e>V: Return Verification Result\n V->>U: Display Verified Credential"}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["The some components of the Scanning App can be configured by modifying the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/configuration/",children:"configuration file"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/mock-apps/configuration/system-config",children:"Apps configurations"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/mock-apps/common/identify-provider",children:"Identity provider settings"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/mock-apps/common/default-verification-service-link",children:"Default verification service link"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.p,{children:"To use the Scanning App:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Navigate to the home page of the Mock App system."}),"\n",(0,t.jsx)(n.li,{children:"Select the Scanning option within the sidebar to open the barcode scanner."}),"\n",(0,t.jsx)(n.li,{children:"Scan a valid barcode containing an identifier associated with a product."}),"\n",(0,t.jsxs)(n.li,{children:["The app will process the scanned data and redirect to the ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/verify-app",children:"Verify App"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.a,{href:"/docs/mock-apps/verify-app",children:"Verify App"})," will display the verified credential."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>a,x:()=>c});var t=i(6540);const s={},r=t.createContext(s);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8fe80541.55a38374.js b/assets/js/8fe80541.55a38374.js new file mode 100644 index 00000000..b767d217 --- /dev/null +++ b/assets/js/8fe80541.55a38374.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3706],{8481:(e,t,n)=>{n.d(t,{Ay:()=>d,RM:()=>o});var s=n(4848),r=n(8453);const o=[];function i(e){const t={admonition:"admonition",p:"p",...(0,r.R)(),...e.components};return(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsx)(t.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},6394:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>d,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>h});var s=n(4848),r=n(8453),o=n(8481);const i={sidebar_position:51,title:"QR Code Scanner Dialog Button"},d=void 0,c={id:"mock-apps/components/qr-code-scanner-dialog-button",title:"QR Code Scanner Dialog Button",description:"Description",source:"@site/docs/mock-apps/components/qr-code-scanner-dialog-button.md",sourceDirName:"mock-apps/components",slug:"/mock-apps/components/qr-code-scanner-dialog-button",permalink:"/tests-untp/docs/mock-apps/components/qr-code-scanner-dialog-button",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/components/qr-code-scanner-dialog-button.md",tags:[],version:"current",sidebarPosition:51,frontMatter:{sidebar_position:51,title:"QR Code Scanner Dialog Button"},sidebar:"tutorialSidebar",previous:{title:"Import Button",permalink:"/tests-untp/docs/mock-apps/components/import-button"},next:{title:"Services",permalink:"/tests-untp/docs/mock-apps/services/"}},l={},h=[...o.RM,{value:"Description",id:"description",level:2},{value:"Example",id:"example",level:2},{value:"Definitions",id:"definitions",level:2},{value:"Props",id:"props",level:3},{value:"vcOptions",id:"vcoptions",level:4}];function a(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.Ay,{}),"\n",(0,s.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(t.p,{children:"The QRCodeScannerDialogButton component is responsible for rendering a button that allows the user to scan a QR code. The component will return the data that is scanned by the user."}),"\n",(0,s.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-json",children:'{\n "name": "QRCodeScannerDialogButton",\n "type": "EntryData",\n "props": {\n "style": { "margin": "40px auto", "paddingTop": "40px", "width": "80%" }\n }\n}\n'})}),"\n",(0,s.jsx)(t.h2,{id:"definitions",children:"Definitions"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Property"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"name"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:'The name of the component(should be "QRCodeScannerDialogButton")'}),(0,s.jsx)(t.td,{children:"String"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"type"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:'The type of the component (should be "EntryData")'}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/docs/mock-apps/common/component-type",children:"ComponentType"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"props"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"The properties for the QRCodeScannerDialogButton"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/docs/mock-apps/components/qr-code-scanner-dialog-button#props",children:"Props"})})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"props",children:"Props"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Property"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"style"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"The style for the component"}),(0,s.jsx)(t.td,{children:"Object"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"type"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"The type of data (should be 'VerifiableCredential' and 'JSON'), the default is 'VerifiableCredential'"}),(0,s.jsx)(t.td,{children:"String"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"vcOptions"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"The options for the VC data processing"}),(0,s.jsx)(t.td,{children:"Object"})]})]})]}),"\n",(0,s.jsx)(t.h4,{id:"vcoptions",children:"vcOptions"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Property"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"credentialPath"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"The path for the credential data that is fetched from the QR code URL"}),(0,s.jsx)(t.td,{children:"String"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"vckitAPIUrl"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"The URL for the vckit API"}),(0,s.jsx)(t.td,{children:"String"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"headers"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:'The headers for the vckit API, example: { Authorization: "Bearer test123"}'}),(0,s.jsx)(t.td,{children:"Object"})]})]})]})]})}function p(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>d});var s=n(6540);const r={},o=s.createContext(r);function i(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8fe80541.e3f0aa7e.js b/assets/js/8fe80541.e3f0aa7e.js deleted file mode 100644 index c178842b..00000000 --- a/assets/js/8fe80541.e3f0aa7e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3706],{8481:(e,n,t)=>{t.d(n,{Ay:()=>c,RM:()=>r});var o=t(4848),s=t(8453);const r=[];function i(e){const n={admonition:"admonition",p:"p",...(0,s.R)(),...e.components};return(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsx)(n.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function c(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(i,{...e})}):i(e)}},6394:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var o=t(4848),s=t(8453),r=t(8481);const i={sidebar_position:51,title:"QR Code Scanner Dialog Button"},c=void 0,d={id:"mock-apps/components/qr-code-scanner-dialog-button",title:"QR Code Scanner Dialog Button",description:"Description",source:"@site/docs/mock-apps/components/qr-code-scanner-dialog-button.md",sourceDirName:"mock-apps/components",slug:"/mock-apps/components/qr-code-scanner-dialog-button",permalink:"/tests-untp/docs/mock-apps/components/qr-code-scanner-dialog-button",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/components/qr-code-scanner-dialog-button.md",tags:[],version:"current",sidebarPosition:51,frontMatter:{sidebar_position:51,title:"QR Code Scanner Dialog Button"},sidebar:"tutorialSidebar",previous:{title:"Import Button",permalink:"/tests-untp/docs/mock-apps/components/import-button"},next:{title:"Services",permalink:"/tests-untp/docs/mock-apps/services/"}},a={},l=[...r.RM,{value:"Description",id:"description",level:2},{value:"Example",id:"example",level:2},{value:"Definitions",id:"definitions",level:2},{value:"Props",id:"props",level:3}];function p(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.Ay,{}),"\n",(0,o.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,o.jsx)(n.p,{children:"The QRCodeScannerDialogButton component is responsible for rendering a button that allows the user to scan a QR code. The component will return the data that is scanned by the user."}),"\n",(0,o.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "name": "QRCodeScannerDialogButton",\n "type": "EntryData",\n "props": {\n "style": { "margin": "40px auto", "paddingTop": "40px", "width": "80%" }\n }\n}\n'})}),"\n",(0,o.jsx)(n.h2,{id:"definitions",children:"Definitions"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Property"}),(0,o.jsx)(n.th,{children:"Required"}),(0,o.jsx)(n.th,{children:"Description"}),(0,o.jsx)(n.th,{children:"Type"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"name"}),(0,o.jsx)(n.td,{children:"Yes"}),(0,o.jsx)(n.td,{children:'The name of the component(should be "QRCodeScannerDialogButton")'}),(0,o.jsx)(n.td,{children:"String"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"type"}),(0,o.jsx)(n.td,{children:"Yes"}),(0,o.jsx)(n.td,{children:'The type of the component (should be "EntryData")'}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/docs/mock-apps/common/component-type",children:"ComponentType"})})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"props"}),(0,o.jsx)(n.td,{children:"Yes"}),(0,o.jsx)(n.td,{children:"The properties for the QRCodeScannerDialogButton"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/docs/mock-apps/components/qr-code-scanner-dialog-button#props",children:"Props"})})]})]})]}),"\n",(0,o.jsx)(n.h3,{id:"props",children:"Props"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Property"}),(0,o.jsx)(n.th,{children:"Required"}),(0,o.jsx)(n.th,{children:"Description"}),(0,o.jsx)(n.th,{children:"Type"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"style"}),(0,o.jsx)(n.td,{children:"No"}),(0,o.jsx)(n.td,{children:"The style for the component"}),(0,o.jsx)(n.td,{children:"Object"})]})})]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>c});var o=t(6540);const s={},r=o.createContext(s);function i(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/91dfa211.35fc5846.js b/assets/js/91dfa211.35fc5846.js deleted file mode 100644 index cc52f8ab..00000000 --- a/assets/js/91dfa211.35fc5846.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7408],{8481:(e,t,n)=>{n.d(t,{Ay:()=>c,RM:()=>o});var i=n(4848),s=n(8453);const o=[];function r(e){const t={admonition:"admonition",p:"p",...(0,s.R)(),...e.components};return(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsx)(t.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function c(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(r,{...e})}):r(e)}},8991:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var i=n(4848),s=n(8453),o=n(8481);const r={sidebar_position:7,title:"Identity Resolver Service"},c=void 0,a={id:"mock-apps/dependent-services/identity-resolution-service",title:"Identity Resolver Service",description:"The Identity Resolver Service (IDR) is a critical component of the United Nations Transparency Protocol (UNTP) ecosystem. It serves as a bridge between the identifiers of things (e.g., products, entities, transactions) and additional information about those things. You can learn more about Identity Resolver Services here.",source:"@site/docs/mock-apps/dependent-services/identity-resolution-service.md",sourceDirName:"mock-apps/dependent-services",slug:"/mock-apps/dependent-services/identity-resolution-service",permalink:"/tests-untp/docs/mock-apps/dependent-services/identity-resolution-service",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/dependent-services/identity-resolution-service.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,title:"Identity Resolver Service"},sidebar:"tutorialSidebar",previous:{title:"Storage Service",permalink:"/tests-untp/docs/mock-apps/dependent-services/storage-service"},next:{title:"Configuration",permalink:"/tests-untp/docs/mock-apps/configuration/"}},d={},l=[...o.RM,{value:"Identity Resolver Service Documentation",id:"identity-resolver-service-documentation",level:3},{value:"Requirements",id:"requirements",level:3}];function p(e){const t={a:"a",h3:"h3",li:"li",ol:"ol",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.Ay,{}),"\n",(0,i.jsxs)(t.p,{children:["The Identity Resolver Service (IDR) is a critical component of the United Nations Transparency Protocol (UNTP) ecosystem. It serves as a bridge between the ",(0,i.jsx)(t.a,{href:"https://uncefact.github.io/spec-untp/docs/specification/Identifiers",children:"identifiers of things (e.g., products, entities, transactions)"})," and additional information about those things. You can learn more about Identity Resolver Services ",(0,i.jsx)(t.a,{href:"https://uncefact.github.io/spec-untp/docs/specification/IdentityResolver",children:"here"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"Key functions of the Identity Resolver Service include:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Registering links of created credentials using the primary identifier of the product as the key."}),"\n",(0,i.jsx)(t.li,{children:"Enabling downstream value chain actors to discover more information about products they have purchased or are considering purchasing."}),"\n",(0,i.jsxs)(t.li,{children:["Facilitating the connection between unique identifiers and more information about the product (e.g. ",(0,i.jsx)(t.a,{href:"https://uncefact.github.io/spec-untp/docs/specification/DigitalProductPassport",children:"Digital Product Passports"}),", ",(0,i.jsx)(t.a,{href:"https://uncefact.github.io/spec-untp/docs/specification/DigitalTraceabilityEvents",children:"Traceability Events"})," and ",(0,i.jsx)(t.a,{href:"https://uncefact.github.io/spec-untp/docs/specification/ConformityCredential",children:"Conformity Credentials"}),")."]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["For the Mock Apps, we currently recommend and will be using the ",(0,i.jsx)(t.a,{href:"https://github.com/gs1/GS1_DigitalLink_Resolver_CE/tree/v2.6",children:"GS1 Digital Link Resolver v2.6"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"identity-resolver-service-documentation",children:"Identity Resolver Service Documentation"}),"\n",(0,i.jsxs)(t.p,{children:["Please go through the GS1 Digital Link Resolve documentation available ",(0,i.jsx)(t.a,{href:"https://github.com/gs1/GS1_DigitalLink_Resolver_CE/tree/v2.6#fast-start",children:"here"})," to understand how to set up and use the Identity Resolver Service."]}),"\n",(0,i.jsx)(t.h3,{id:"requirements",children:"Requirements"}),"\n",(0,i.jsx)(t.p,{children:"To use the Identity Resolver Service with the mock apps, you will need:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"The Identity Resolver Service API running."}),"\n",(0,i.jsxs)(t.li,{children:["The address of the Identity Resolver Service API (e.g., ",(0,i.jsx)(t.a,{href:"http://localhost:8080",children:"http://localhost:8080"}),")."]}),"\n",(0,i.jsx)(t.li,{children:"The API key of the Identity Resolver Service API (if applicable)"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Make sure you have the Identity Resolver Service API set up and running, and note its address and API key (if applicable) before proceeding with the mock app configuration."}),"\n",(0,i.jsx)(t.p,{children:"In the next section, we will explore the mock app configuration file and how to customise it for your specific use case."})]})}function u(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>c});var i=n(6540);const s={},o=i.createContext(s);function r(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/91dfa211.b4bafd11.js b/assets/js/91dfa211.b4bafd11.js new file mode 100644 index 00000000..32147ce5 --- /dev/null +++ b/assets/js/91dfa211.b4bafd11.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7408],{8481:(e,i,n)=>{n.d(i,{Ay:()=>c,RM:()=>r});var t=n(4848),s=n(8453);const r=[];function o(e){const i={admonition:"admonition",p:"p",...(0,s.R)(),...e.components};return(0,t.jsx)(i.admonition,{type:"info",children:(0,t.jsx)(i.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function c(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},8991:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var t=n(4848),s=n(8453),r=n(8481);const o={sidebar_position:7,title:"Identity Resolver Service"},c=void 0,l={id:"mock-apps/dependent-services/identity-resolution-service",title:"Identity Resolver Service",description:"The Identity Resolver Service (IDR) is a critical component of the United Nations Transparency Protocol (UNTP) ecosystem. It serves as a bridge between the identifiers of things (e.g., products, entities, transactions) and additional information about those things. You can learn more about Identity Resolver Services here.",source:"@site/docs/mock-apps/dependent-services/identity-resolution-service.md",sourceDirName:"mock-apps/dependent-services",slug:"/mock-apps/dependent-services/identity-resolution-service",permalink:"/tests-untp/docs/mock-apps/dependent-services/identity-resolution-service",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/dependent-services/identity-resolution-service.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,title:"Identity Resolver Service"},sidebar:"tutorialSidebar",previous:{title:"Storage Service",permalink:"/tests-untp/docs/mock-apps/dependent-services/storage-service"},next:{title:"Configuration",permalink:"/tests-untp/docs/mock-apps/configuration/"}},a={},d=[...r.RM,{value:"Identity Resolver Service Documentation",id:"identity-resolver-service-documentation",level:3},{value:"Overview of Link Resolution Services",id:"overview-of-link-resolution-services",level:3},{value:"Mock GS1 Service:",id:"mock-gs1-service",level:4},{value:"Primary IDR Service:",id:"primary-idr-service",level:4},{value:"Development Flexibility",id:"development-flexibility",level:3},{value:"Requirements",id:"requirements",level:3},{value:"Seed Script",id:"seed-script",level:3},{value:"Script Overview",id:"script-overview",level:4},{value:"Prerequisites",id:"prerequisites",level:4},{value:"Option 1: Running the Seed Script Locally",id:"option-1-running-the-seed-script-locally",level:4},{value:"Option 2: Running the Seed Script in Docker Compose",id:"option-2-running-the-seed-script-in-docker-compose",level:4}];function h(e){const i={a:"a",code:"code",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.Ay,{}),"\n",(0,t.jsxs)(i.p,{children:["The Identity Resolver Service (IDR) is a critical component of the United Nations Transparency Protocol (UNTP) ecosystem. It serves as a bridge between the ",(0,t.jsx)(i.a,{href:"https://uncefact.github.io/spec-untp/docs/specification/Identifiers",children:"identifiers of things (e.g., products, entities, transactions)"})," and additional information about those things. You can learn more about Identity Resolver Services ",(0,t.jsx)(i.a,{href:"https://uncefact.github.io/spec-untp/docs/specification/IdentityResolver",children:"here"}),"."]}),"\n",(0,t.jsx)(i.p,{children:"Key functions of the Identity Resolver Service include:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Registering links of created credentials using the primary identifier of the product as the key."}),"\n",(0,t.jsx)(i.li,{children:"Enabling downstream value chain actors to discover more information about products they have purchased or are considering purchasing."}),"\n",(0,t.jsxs)(i.li,{children:["Facilitating the connection between unique identifiers and more information about the product (e.g. ",(0,t.jsx)(i.a,{href:"https://uncefact.github.io/spec-untp/docs/specification/DigitalProductPassport",children:"Digital Product Passports"}),", ",(0,t.jsx)(i.a,{href:"https://uncefact.github.io/spec-untp/docs/specification/DigitalTraceabilityEvents",children:"Traceability Events"})," and ",(0,t.jsx)(i.a,{href:"https://uncefact.github.io/spec-untp/docs/specification/ConformityCredential",children:"Conformity Credentials"}),").\nFor the Mock Apps, we currently recommend and will be using the ",(0,t.jsx)(i.a,{href:"https://github.com/pyx-industries/pyx-identity-resolver/tree/v0.0.1",children:"Pyx Identity Resolver v0.0.1"}),"."]}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"identity-resolver-service-documentation",children:"Identity Resolver Service Documentation"}),"\n",(0,t.jsxs)(i.p,{children:["Please go through the Pyx Identity Resolver documentation available ",(0,t.jsx)(i.a,{href:"https://github.com/pyx-industries/pyx-identity-resolver/blob/v0.0.1/app/README.md",children:"here"})," to understand how to set up and use the Identity Resolver Service."]}),"\n",(0,t.jsx)(i.h3,{id:"overview-of-link-resolution-services",children:"Overview of Link Resolution Services"}),"\n",(0,t.jsx)(i.p,{children:"The app uses two instances of the Identity Resolver (IDR) service:"}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsx)(i.h4,{id:"mock-gs1-service",children:"Mock GS1 Service:"}),"\n",(0,t.jsx)(i.p,{children:"This instance is only used by the app\u2019s scanning feature. It simulates a GS1 resolver, providing initial information for barcodes with primary identifiers (e.g., GTIN), including qualifiers, and returns a linkset with a URL to the primary IDR."}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsx)(i.h4,{id:"primary-idr-service",children:"Primary IDR Service:"}),"\n",(0,t.jsx)(i.p,{children:"This main resolver is used across the app and stores all sample identifiers and link resolvers. It supports standalone operations and works alongside the mock GS1 service in the scanning feature. The primary IDR also allows the app to register new link resolvers, such as those needed for Traceability Events."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"development-flexibility",children:"Development Flexibility"}),"\n",(0,t.jsx)(i.p,{children:"The IDR service enables:"}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsx)(i.li,{children:"Pre-configured testing identifiers and link-resolvers: Simplifies setup in development."}),"\n",(0,t.jsx)(i.li,{children:"Seamless containerized deployment: Ensures consistent behaviour across environments."}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"requirements",children:"Requirements"}),"\n",(0,t.jsx)(i.p,{children:"To use the Identity Resolver Service with the mock apps, you will need:"}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsx)(i.li,{children:"The Identity Resolver Service API running."}),"\n",(0,t.jsxs)(i.li,{children:["The address of the Identity Resolver Service API (e.g., ",(0,t.jsx)(i.a,{href:"http://localhost:8080",children:"http://localhost:8080"}),")."]}),"\n",(0,t.jsx)(i.li,{children:"The API key of the Identity Resolver Service API (if applicable)"}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"Make sure you have the Identity Resolver Service API set up and running, and note its address and API key (if applicable) before proceeding with the mock app configuration."}),"\n",(0,t.jsx)(i.h3,{id:"seed-script",children:"Seed Script"}),"\n",(0,t.jsx)(i.p,{children:"The seed script is essential for initialising the Identity Resolver (IDR) services by loading pre-configured identifiers and link-resolvers. These identifiers allow the app to register link-resolvers with the correct mapping, ensuring it functions as expected."}),"\n",(0,t.jsx)(i.h4,{id:"script-overview",children:"Script Overview"}),"\n",(0,t.jsx)(i.p,{children:"The script:"}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Checks the health status"})," of the IDR service to confirm it's ready to accept requests."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Attempts multiple retries"})," to accommodate any startup delays."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Seeds data"})," to the IDR service using identifiers and link-resolvers stored in the ",(0,t.jsx)(i.code,{children:"/seeding"})," folder in the root directory."]}),"\n"]}),"\n",(0,t.jsx)(i.h4,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(i.p,{children:["The seed script can be run in two ways: directly from the host machine (using ",(0,t.jsx)(i.code,{children:"export"})," to set environment variables) or inside a Docker container (",(0,t.jsx)(i.code,{children:"docker-compose"})," with environment variables specified under the ",(0,t.jsx)(i.code,{children:"seeding-data"})," service)."]}),"\n",(0,t.jsx)(i.h4,{id:"option-1-running-the-seed-script-locally",children:"Option 1: Running the Seed Script Locally"}),"\n",(0,t.jsx)(i.p,{children:"If you are running the seed script directly on your host machine, set the necessary environment variables by exporting them in your shell:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"# Identity Resolver (IDR) Service Configuration\nexport IDR_SERVICE_HOST=localhost # IDR service host\nexport IDR_SERVICE_PORT=3000 # IDR service port\nexport IDR_SERVICE_API_KEY=test123 # IDR service API key\nexport IDR_SERVICE_DOMAIN=http://localhost:3000 # IDR service domain\n\n# Mock GS1 Service Configuration\nexport MOCK_GS1_SERVICE_HOST=localhost # Mock GS1 service host\nexport MOCK_GS1_SERVICE_PORT=3001 # Mock GS1 service port\nexport MOCK_GS1_SERVICE_API_KEY=test456 # Mock GS1 service API key\n"})}),"\n",(0,t.jsx)(i.p,{children:"After setting these variables, run the seed scripts:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"# Run the IDR service seeding script\n./seeding-idr-data.sh\n\n# Run the mock GS1 service seeding script\n./seeding-mock-gs1-data.sh\n"})}),"\n",(0,t.jsx)(i.h4,{id:"option-2-running-the-seed-script-in-docker-compose",children:"Option 2: Running the Seed Script in Docker Compose"}),"\n",(0,t.jsx)(i.p,{children:"If you\u2019re running the script as part of a Docker Compose setup, specify the environment variables under the seeding-data service. This example assumes the following docker-compose.yml setup:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"services:\n seeding-data:\n image: alpine:3.20.3\n environment:\n # IDR service environment variables\n - IDR_SERVICE_HOST=identity-resolver-service\n - IDR_SERVICE_PORT=3000\n - IDR_SERVICE_API_KEY=test123\n - IDR_SERVICE_DOMAIN=http://localhost:3000\n\n # Mock GS1 service environment variables\n - MOCK_GS1_SERVICE_HOST=mock-global-gs1-resolver\n - MOCK_GS1_SERVICE_PORT=3001\n - MOCK_GS1_SERVICE_API_KEY=test456\n"})}),"\n",(0,t.jsx)(i.p,{children:"Once this configuration is in place, start the container to automatically run the seed scripts with the environment variables already configured:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"SEEDING=true docker-compose up -d\n"})}),"\n",(0,t.jsx)(i.p,{children:"In the next section, we will explore the mock app configuration file and how to customise it for your specific use case."})]})}function p(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},8453:(e,i,n)=>{n.d(i,{R:()=>o,x:()=>c});var t=n(6540);const s={},r=t.createContext(s);function o(e){const i=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(r.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b2f714bf.9c0929ab.js b/assets/js/b2f714bf.3b3f968b.js similarity index 71% rename from assets/js/b2f714bf.9c0929ab.js rename to assets/js/b2f714bf.3b3f968b.js index 78db11ef..ba6dc8fd 100644 --- a/assets/js/b2f714bf.9c0929ab.js +++ b/assets/js/b2f714bf.3b3f968b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1321],{8481:(e,n,t)=>{t.d(n,{Ay:()=>d,RM:()=>r});var i=t(4848),s=t(8453);const r=[];function l(e){const n={admonition:"admonition",p:"p",...(0,s.R)(),...e.components};return(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function d(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},1976:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>a});var i=t(4848),s=t(8453),r=t(8481);const l={sidebar_position:7,title:"Rendering"},d=void 0,o={id:"test-suites/technical-interoperability/untp-extensions/rendering",title:"Rendering",description:"The Rendering component of the UNTP extensions focuses on how credential data is visually presented. It utilises a Render Template, which is crucial in ensuring consistent and flexible presentation of product information across different systems and applications. To support uptake across supply chain actors with varying levels of technical maturity, human rendering of digital credentials is essential.",source:"@site/docs/test-suites/technical-interoperability/untp-extensions/rendering.md",sourceDirName:"test-suites/technical-interoperability/untp-extensions",slug:"/test-suites/technical-interoperability/untp-extensions/rendering",permalink:"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/rendering",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/test-suites/technical-interoperability/untp-extensions/rendering.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,title:"Rendering"},sidebar:"tutorialSidebar",previous:{title:"QR Link / Encryption",permalink:"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/qr-link-encryption"},next:{title:"Storage",permalink:"/tests-untp/docs/test-suites/technical-interoperability/storage/"}},c={},a=[...r.RM,{value:"Render Template Structure",id:"render-template-structure",level:2},{value:"Example Input",id:"example-input",level:2},{value:"Expected Output",id:"expected-output",level:2},{value:"Testing",id:"testing",level:2}];function p(e){const n={code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.Ay,{}),"\n",(0,i.jsxs)(n.p,{children:["The Rendering component of the UNTP extensions focuses on how credential data is visually presented. It utilises a ",(0,i.jsx)(n.code,{children:"Render Template"}),", which is crucial in ensuring consistent and flexible presentation of product information across different systems and applications. To support uptake across supply chain actors with varying levels of technical maturity, human rendering of digital credentials is essential."]}),"\n",(0,i.jsx)(n.h2,{id:"render-template-structure",children:"Render Template Structure"}),"\n",(0,i.jsxs)(n.p,{children:["The Render Template is defined within the credential's ",(0,i.jsx)(n.code,{children:"renderMethod"})," property. It includes the following key elements:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name"}),": An optional identifier for the template"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"template"}),": The HTML structure with placeholders for dynamic content"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"@type"}),': The type of rendering template (e.g., "RenderTemplate2024")']}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"mediaType"}),': The MIME type of the rendered output (typically "text/html")']}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"mediaQuery"}),": Optional CSS media queries for responsive design"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"digestMultibase"}),": A hash of the template for integrity verification"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"example-input",children:"Example Input"}),"\n",(0,i.jsx)(n.p,{children:"Here's an example of a credential with a render method:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "credential": {\n "@context": [\n "https://www.w3.org/ns/credentials/v2",\n {\n "ex": "https://www.w3.org/2018/credentials#renderMethod#",\n "renderMethod": "https://www.w3.org/2018/credentials#renderMethod",\n "template": "ex:template",\n "url": "ex:url",\n "mediaQuery": "ex:mediaQuery"\n }\n ],\n "renderMethod": [\n {\n "name": "template name",\n "template": "

{{credentialSubject.name}}

",\n "@type": "RenderTemplate2024",\n "mediaType": "text/html",\n "mediaQuery": "@media (min-width: 1024px) {.name {font-weight: bold}}",\n "digestMultibase": "zQmXF936JrjET6pCRdTfs5czN8Ch65NHfsGqKkAwwLkviHA"\n }\n ],\n "credentialSubject": {\n "name": "Jane Doe"\n }\n }\n}\n'})}),"\n",(0,i.jsx)(n.h2,{id:"expected-output",children:"Expected Output"}),"\n",(0,i.jsx)(n.p,{children:"A successful render should return a response in the following format:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "documents": [\n {\n "type": "RenderTemplate2024",\n "renderedTemplate": "PHN0eWxlPkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHsubmFtZSB7Zm9udC13ZWlnaHQ6IGJvbGR9fTwvc3R5bGU+PHA+SmFuZSBEb2U8L3A+",\n "name": "template name"\n }\n ]\n}\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"renderedTemplate"})," is a base64-encoded string representing the final HTML output, including any specified styles and the rendered credential data."]}),"\n",(0,i.jsx)(n.h2,{id:"testing",children:"Testing"}),"\n",(0,i.jsx)(n.p,{children:"To test your Rendering implementation, follow these steps:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Configure the Test Suite"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Navigate to the config file: ",(0,i.jsx)(n.code,{children:"packages/vc-test-suite/config.ts"})]}),"\n",(0,i.jsxs)(n.li,{children:["Update the ",(0,i.jsx)(n.code,{children:"RenderTemplate2024"})," section:"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-javascript",children:"export default {\n implementationName: 'UNTP ACME',\n testSuites: {\n RenderTemplate2024: {\n url: 'http://localhost:3332/agent/renderCredential',\n headers: {},\n method: 'POST',\n },\n },\n};\n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Adjust the ",(0,i.jsx)(n.code,{children:"url"}),", ",(0,i.jsx)(n.code,{children:"headers"}),", and ",(0,i.jsx)(n.code,{children:"method"})," as necessary for your implementation."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Run the Test"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Navigate to ",(0,i.jsx)(n.code,{children:"packages/vc-test-suite"})]}),"\n",(0,i.jsxs)(n.li,{children:["In your terminal, run the command: ",(0,i.jsx)(n.code,{children:"yarn test"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"View Test Results"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Navigate to ",(0,i.jsx)(n.code,{children:"packages/vc-test-suite/reports/index.html"})]}),"\n",(0,i.jsx)(n.li,{children:"Open this file in a web browser"}),"\n",(0,i.jsx)(n.li,{children:'Look for the "RenderTemplate2024" section to view your test results'}),"\n"]}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>d});var i=t(6540);const s={},r=i.createContext(s);function l(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1321],{8481:(e,n,t)=>{t.d(n,{Ay:()=>d,RM:()=>r});var i=t(4848),s=t(8453);const r=[];function l(e){const n={admonition:"admonition",p:"p",...(0,s.R)(),...e.components};return(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function d(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},1976:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>p,frontMatter:()=>l,metadata:()=>o,toc:()=>a});var i=t(4848),s=t(8453),r=t(8481);const l={sidebar_position:7,title:"Rendering"},d=void 0,o={id:"test-suites/technical-interoperability/untp-extensions/rendering",title:"Rendering",description:"The Rendering component of the UNTP extensions focuses on how credential data is visually presented. It utilises a Render Template, which is crucial in ensuring consistent and flexible presentation of product information across different systems and applications. To support uptake across supply chain actors with varying levels of technical maturity, human rendering of digital credentials is essential.",source:"@site/docs/test-suites/technical-interoperability/untp-extensions/rendering.md",sourceDirName:"test-suites/technical-interoperability/untp-extensions",slug:"/test-suites/technical-interoperability/untp-extensions/rendering",permalink:"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/rendering",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/test-suites/technical-interoperability/untp-extensions/rendering.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,title:"Rendering"},sidebar:"tutorialSidebar",previous:{title:"QR Link / Encryption",permalink:"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/qr-link-encryption"},next:{title:"Storage",permalink:"/tests-untp/docs/test-suites/technical-interoperability/storage/"}},c={},a=[...r.RM,{value:"Render Template Structure",id:"render-template-structure",level:2},{value:"Example Input",id:"example-input",level:2},{value:"Expected Output",id:"expected-output",level:2},{value:"Testing",id:"testing",level:2}];function h(e){const n={code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.Ay,{}),"\n",(0,i.jsxs)(n.p,{children:["The Rendering component of the UNTP extensions focuses on how credential data is visually presented. It utilises a ",(0,i.jsx)(n.code,{children:"Render Template"}),", which is crucial in ensuring consistent and flexible presentation of product information across different systems and applications. To support uptake across supply chain actors with varying levels of technical maturity, human rendering of digital credentials is essential."]}),"\n",(0,i.jsx)(n.h2,{id:"render-template-structure",children:"Render Template Structure"}),"\n",(0,i.jsxs)(n.p,{children:["The Render Template is defined within the credential's ",(0,i.jsx)(n.code,{children:"renderMethod"})," property. It includes the following key elements:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name"}),": An optional identifier for the template"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"template"}),": The HTML structure with placeholders for dynamic content"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"@type"}),': The type of rendering template (e.g., "RenderTemplate2024")']}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"mediaType"}),': The MIME type of the rendered output (typically "text/html")']}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"mediaQuery"}),": Optional CSS media queries for responsive design"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"digestMultibase"}),": A hash of the template for integrity verification"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"example-input",children:"Example Input"}),"\n",(0,i.jsx)(n.p,{children:"Here's an example of a credential with a render method:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "credential": {\n "@context": [\n "https://www.w3.org/ns/credentials/v2",\n {\n "ex": "https://www.w3.org/2018/credentials#renderMethod#",\n "renderMethod": "https://www.w3.org/2018/credentials#renderMethod",\n "template": "ex:template",\n "url": "ex:url",\n "mediaQuery": "ex:mediaQuery"\n }\n ],\n "renderMethod": [\n {\n "name": "template name",\n "template": "

{{credentialSubject.name}}

",\n "@type": "RenderTemplate2024",\n "mediaType": "text/html",\n "mediaQuery": "@media (min-width: 1024px) {.name {font-weight: bold}}",\n "digestMultibase": "zQmXF936JrjET6pCRdTfs5czN8Ch65NHfsGqKkAwwLkviHA"\n }\n ],\n "credentialSubject": {\n "name": "Jane Doe"\n }\n }\n}\n'})}),"\n",(0,i.jsx)(n.h2,{id:"expected-output",children:"Expected Output"}),"\n",(0,i.jsx)(n.p,{children:"A successful render should return a response in the following format:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "documents": [\n {\n "type": "RenderTemplate2024",\n "renderedTemplate": "PHN0eWxlPkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHsubmFtZSB7Zm9udC13ZWlnaHQ6IGJvbGR9fTwvc3R5bGU+PHA+SmFuZSBEb2U8L3A+",\n "name": "template name"\n }\n ]\n}\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"renderedTemplate"})," is a base64-encoded string representing the final HTML output, including any specified styles and the rendered credential data."]}),"\n",(0,i.jsx)(n.h2,{id:"testing",children:"Testing"}),"\n",(0,i.jsx)(n.p,{children:"To test your Rendering implementation, follow these steps:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Configure the Test Suite"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Navigate to the config file: ",(0,i.jsx)(n.code,{children:"packages/vc-test-suite/config.ts"})]}),"\n",(0,i.jsxs)(n.li,{children:["Update the ",(0,i.jsx)(n.code,{children:"RenderTemplate2024"})," section:"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-javascript",children:"export default {\n implementationName: 'UNTP ACME',\n testSuites: {\n RenderTemplate2024: {\n url: 'http://localhost:3332/agent/renderCredential',\n headers: { Authorization: 'Bearer test123' },\n method: 'POST',\n },\n },\n};\n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Adjust the ",(0,i.jsx)(n.code,{children:"url"}),", ",(0,i.jsx)(n.code,{children:"headers"}),", and ",(0,i.jsx)(n.code,{children:"method"})," as necessary for your implementation."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Run the Test"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Navigate to ",(0,i.jsx)(n.code,{children:"packages/vc-test-suite"})]}),"\n",(0,i.jsxs)(n.li,{children:["In your terminal, run the command: ",(0,i.jsx)(n.code,{children:"yarn test"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"View Test Results"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Navigate to ",(0,i.jsx)(n.code,{children:"packages/vc-test-suite/reports/index.html"})]}),"\n",(0,i.jsx)(n.li,{children:"Open this file in a web browser"}),"\n",(0,i.jsx)(n.li,{children:'Look for the "RenderTemplate2024" section to view your test results'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"url"}),": This is the full URL for the credential renderer endpoint of your verifiable credential service."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"headers"}),": An object containing any additional HTTP headers required for the request to the verifiable credential service. You may need to add headers depending on your implementation."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"method"}),": The HTTP method used to request the rendered credential from the verifiable credential service. In this case, it's set to 'POST'."]}),"\n"]}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>d});var i=t(6540);const s={},r=i.createContext(s);function l(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba0ee0a3.f2f975ee.js b/assets/js/ba0ee0a3.f2f975ee.js new file mode 100644 index 00000000..336cdfcd --- /dev/null +++ b/assets/js/ba0ee0a3.f2f975ee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7382],{8481:(e,n,i)=>{i.d(n,{Ay:()=>o,RM:()=>s});var t=i(4848),r=i(8453);const s=[];function a(e){const n={admonition:"admonition",p:"p",...(0,r.R)(),...e.components};return(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function o(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},2779:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var t=i(4848),r=i(8453),s=i(8481);const a={sidebar_position:46,title:"Verifiable Credentials"},o=void 0,c={id:"mock-apps/common/verifiable-credentials",title:"Verifiable Credentials",description:"Description",source:"@site/docs/mock-apps/common/verifiable-credentials.md",sourceDirName:"mock-apps/common",slug:"/mock-apps/common/verifiable-credentials",permalink:"/tests-untp/docs/mock-apps/common/verifiable-credentials",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/mock-apps/common/verifiable-credentials.md",tags:[],version:"current",sidebarPosition:46,frontMatter:{sidebar_position:46,title:"Verifiable Credentials"},sidebar:"tutorialSidebar",previous:{title:"Issuing Credential",permalink:"/tests-untp/docs/mock-apps/common/issuing-credential"},next:{title:"Scanning App",permalink:"/tests-untp/docs/mock-apps/scanning-app"}},l={},d=[...s.RM,{value:"Description",id:"description",level:2},{value:"Credential Securing Mechanism",id:"credential-securing-mechanism",level:2},{value:"Credential Payload Structure",id:"credential-payload-structure",level:2}];function p(e){const n={a:"a",code:"code",h2:"h2",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.p,{children:"Verifiable Credentials follow the flow of the W3C Verifiable Credentials Data Model 2.0. It is a standard for issuing, presenting, and verifying credentials in a secure and privacy-preserving manner. Verifiable Credentials are tamper-proof, cryptographically signed documents containing claims about a subject, such as a person, organization, or device. They are issued by trusted entities known as issuers and can be presented to verifiers to prove the authenticity of the claims."}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsxs)(n.p,{children:["Please take a look at the ",(0,t.jsx)(n.a,{href:"https://www.w3.org/TR/vc-data-model-2.0/",children:"Verifiable Credentials Data Model 2.0"})," for more information on the specification"]}),"\n",(0,t.jsx)(n.h2,{id:"credential-securing-mechanism",children:"Credential Securing Mechanism"}),"\n",(0,t.jsx)(n.p,{children:"Verifiable Credentials rely on digital signatures or proofs to ensure the authenticity and integrity of the issued credentials. Two key securing mechanisms are used:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Embedded Proofs"}),": The proof is included directly within the credential object, typically using JSON Web Signatures (JWS) or JSON-LD Signatures."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Enveloping Proofs"}),": The proof wraps the entire credential as a container, using formats like:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"JOSE"}),": JSON Object Signing and Encryption, which enables signed credentials using JWS."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"COSE"}),": CBOR Object Signing and Encryption, used for compact and efficient serialization."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Credentials can also be encrypted if sensitive information needs to be protected. Encryption keys are managed through secure Key Management Systems (KMS) to ensure credentials remain confidential and tamper-proof."}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsxs)(n.p,{children:["Refer to the ",(0,t.jsx)(n.a,{href:"https://www.w3.org/TR/vc-data-model-2.0/#securing-mechanisms",children:"Verifiable Credentials Data Model 2.0 - Securing Mechanisms"})," for more information on the specification."]}),"\n",(0,t.jsx)(n.h2,{id:"credential-payload-structure",children:"Credential Payload Structure"}),"\n",(0,t.jsxs)(n.p,{children:["When issuing, the credential will follow the ",(0,t.jsx)(n.a,{href:"https://w3c-ccg.github.io/vc-api/#issue-credential",children:"Verifiable Credentials API v0.3 - Issue Credential"})," specification. A typical payload contains the following fields:"]}),"\n",(0,t.jsx)(n.p,{children:"Example: EnvelopedVerifiableCredential"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "@context": ["https://www.w3.org/ns/credentials/v2", "https://www.w3.org/ns/credentials/examples/v2"],\n "type": "EnvelopedVerifiableCredential",\n "id": "data:application/vc-ld+jwt,eyJhbGciOiJFZERTQSIsImlzcyI6ImRpZDp3ZWI6ZGRiYy0xMTYtMTA2LTE..."\n}\n'})}),"\n",(0,t.jsx)(n.p,{children:"Example: JSON-LD Verifiable Credential with a Proof"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "@context": ["https://www.w3.org/ns/credentials/v2", "https://www.w3.org/ns/credentials/examples/v2"],\n "id": "http://example.edu/credentials/1872",\n "type": ["VerifiableCredential", "AlumniCredential"],\n "issuer": "https://example.edu/issuers/14",\n "issuanceDate": "2023-03-21T19:23:24Z",\n "credentialSubject": {\n "id": "did:example:abcd1234",\n "alumniOf": "Example University"\n },\n "proof": {\n "type": "Ed25519Signature2020",\n "created": "2023-03-21T19:23:24Z",\n "proofPurpose": "assertionMethod",\n "verificationMethod": "https://example.edu/issuers/14#key-1",\n "jws": "eyJhbGciOiJFZERTQSJ9..b9W5k8..."\n }\n}\n'})}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.p,{children:"When verifying a credential, the verifier will call the server to verify the credential. The server will return the verification result as follows:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "verified": true,\n ...\n}\n'})}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsxs)(n.p,{children:["Refer to the ",(0,t.jsx)(n.a,{href:"https://w3c-ccg.github.io/vc-api/#verify-credential",children:"Verifiable Credentials API v0.3 - Verify Credential"})," for more information on the specification."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>a,x:()=>o});var t=i(6540);const r={},s=t.createContext(r);function a(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cf2a862f.ab66bd00.js b/assets/js/cf2a862f.ab66bd00.js deleted file mode 100644 index c02f1d1b..00000000 --- a/assets/js/cf2a862f.ab66bd00.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2097],{8481:(e,t,n)=>{n.d(t,{Ay:()=>c,RM:()=>r});var s=n(4848),i=n(8453);const r=[];function o(e){const t={admonition:"admonition",p:"p",...(0,i.R)(),...e.components};return(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsx)(t.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function c(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},2021:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var s=n(4848),i=n(8453),r=n(8481);const o={sidebar_position:9,title:"Testing Storage"},c=void 0,a={id:"test-suites/technical-interoperability/storage/testing",title:"Testing Storage",description:"The Storage component is a critical part of the UNTP ecosystem, responsible for securely storing and retrieving credentials and related data. This test suite verifies the functionality, security, and accessibility of your storage implementation.",source:"@site/docs/test-suites/technical-interoperability/storage/testing.md",sourceDirName:"test-suites/technical-interoperability/storage",slug:"/test-suites/technical-interoperability/storage/testing",permalink:"/tests-untp/docs/test-suites/technical-interoperability/storage/testing",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/test-suites/technical-interoperability/storage/testing.md",tags:[],version:"current",sidebarPosition:9,frontMatter:{sidebar_position:9,title:"Testing Storage"},sidebar:"tutorialSidebar",previous:{title:"Storage",permalink:"/tests-untp/docs/test-suites/technical-interoperability/storage/"},next:{title:"Identity Resolution (IDR)",permalink:"/tests-untp/docs/test-suites/technical-interoperability/identity-resolution/"}},l={},d=[...r.RM,{value:"Testing Instructions",id:"testing-instructions",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.Ay,{}),"\n",(0,s.jsxs)(t.p,{children:["The Storage component is a critical part of the UNTP ecosystem, responsible for ",(0,s.jsx)(t.a,{href:"https://uncefact.github.io/spec-untp/docs/specification/DecentralisedAccessControl",children:"securely storing and retrieving credentials and related data"}),". This test suite verifies the functionality, security, and accessibility of your storage implementation."]}),"\n",(0,s.jsx)(t.h2,{id:"testing-instructions",children:"Testing Instructions"}),"\n",(0,s.jsx)(t.p,{children:"To test your Storage implementation, follow these steps:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Update the Configuration"}),":"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Navigate to the config file: ",(0,s.jsx)(t.code,{children:"packages/vc-test-suite/config.ts"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Update the ",(0,s.jsx)(t.code,{children:"Storage"})," section with your implementation details. The file should look similar to this:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-typescript",children:"export default {\n implementationName: 'UNTP ACME',\n testSuites: {\n Storage: {\n url: 'http://localhost:3334/v1/documents',\n encryptionUrl: 'http://localhost:3334/v1/credentials',\n headers: {},\n additionalParams: {},\n additionalPayload: { bucket: 'verifiable-credentials' },\n },\n },\n};\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["Adjust the ",(0,s.jsx)(t.code,{children:"url"}),", ",(0,s.jsx)(t.code,{children:"encryptionUrl"}),", ",(0,s.jsx)(t.code,{children:"headers"}),", ",(0,s.jsx)(t.code,{children:"additionalParams"}),", and ",(0,s.jsx)(t.code,{children:"additionalPayload"})," as necessary for your implementation."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Run the Test"}),":"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Navigate to ",(0,s.jsx)(t.code,{children:"packages/vc-test-suite"})]}),"\n",(0,s.jsxs)(t.li,{children:["In your terminal, run the command: ",(0,s.jsx)(t.code,{children:"yarn test"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"View Test Results"}),":"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Navigate to ",(0,s.jsx)(t.code,{children:"packages/vc-test-suite/reports/index.html"})]}),"\n",(0,s.jsx)(t.li,{children:"Open this file in a web browser"}),"\n",(0,s.jsx)(t.li,{children:'Look for the "Storage Service" section to view your test results'}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>c});var s=n(6540);const i={},r=s.createContext(i);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cf2a862f.bef4551c.js b/assets/js/cf2a862f.bef4551c.js new file mode 100644 index 00000000..d973fce6 --- /dev/null +++ b/assets/js/cf2a862f.bef4551c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2097],{8481:(e,t,n)=>{n.d(t,{Ay:()=>c,RM:()=>r});var i=n(4848),s=n(8453);const r=[];function o(e){const t={admonition:"admonition",p:"p",...(0,s.R)(),...e.components};return(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsx)(t.p,{children:"Please note that this content is under development and is not ready for implementation. This status message will be updated as content development progresses."})})}function c(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},2021:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=n(4848),s=n(8453),r=n(8481);const o={sidebar_position:9,title:"Testing Storage"},c=void 0,a={id:"test-suites/technical-interoperability/storage/testing",title:"Testing Storage",description:"The Storage component is a critical part of the UNTP ecosystem, responsible for securely storing and retrieving credentials and related data. This test suite verifies the functionality, security, and accessibility of your storage implementation.",source:"@site/docs/test-suites/technical-interoperability/storage/testing.md",sourceDirName:"test-suites/technical-interoperability/storage",slug:"/test-suites/technical-interoperability/storage/testing",permalink:"/tests-untp/docs/test-suites/technical-interoperability/storage/testing",draft:!1,unlisted:!1,editUrl:"https://github.com/uncefact/tests-untp/tree/main/docs/test-suites/technical-interoperability/storage/testing.md",tags:[],version:"current",sidebarPosition:9,frontMatter:{sidebar_position:9,title:"Testing Storage"},sidebar:"tutorialSidebar",previous:{title:"Storage",permalink:"/tests-untp/docs/test-suites/technical-interoperability/storage/"},next:{title:"Identity Resolution (IDR)",permalink:"/tests-untp/docs/test-suites/technical-interoperability/identity-resolution/"}},l={},d=[...r.RM,{value:"Testing Instructions",id:"testing-instructions",level:2}];function h(e){const t={a:"a",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.Ay,{}),"\n",(0,i.jsxs)(t.p,{children:["The Storage component is a critical part of the UNTP ecosystem, responsible for ",(0,i.jsx)(t.a,{href:"https://uncefact.github.io/spec-untp/docs/specification/DecentralisedAccessControl",children:"securely storing and retrieving credentials and related data"}),". This test suite verifies the functionality, security, and accessibility of your storage implementation."]}),"\n",(0,i.jsx)(t.h2,{id:"testing-instructions",children:"Testing Instructions"}),"\n",(0,i.jsx)(t.p,{children:"To test your Storage implementation, follow these steps:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Update the Configuration"}),":"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Navigate to the config file: ",(0,i.jsx)(t.code,{children:"packages/vc-test-suite/config.ts"})]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Update the ",(0,i.jsx)(t.code,{children:"Storage"})," section with your implementation details. The file should look similar to this:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-typescript",children:"export default {\n implementationName: 'UNTP ACME',\n testSuites: {\n Storage: {\n url: 'http://localhost:3334/v1/documents',\n encryptionUrl: 'http://localhost:3334/v1/credentials',\n headers: {},\n additionalParams: {},\n additionalPayload: { bucket: 'verifiable-credentials' },\n },\n },\n};\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["Adjust the ",(0,i.jsx)(t.code,{children:"url"}),", ",(0,i.jsx)(t.code,{children:"encryptionUrl"}),", ",(0,i.jsx)(t.code,{children:"headers"}),", ",(0,i.jsx)(t.code,{children:"additionalParams"}),", and ",(0,i.jsx)(t.code,{children:"additionalPayload"})," as necessary for your implementation."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Run the Test"}),":"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Navigate to ",(0,i.jsx)(t.code,{children:"packages/vc-test-suite"})]}),"\n",(0,i.jsxs)(t.li,{children:["In your terminal, run the command: ",(0,i.jsx)(t.code,{children:"yarn test"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"View Test Results"}),":"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Navigate to ",(0,i.jsx)(t.code,{children:"packages/vc-test-suite/reports/index.html"})]}),"\n",(0,i.jsx)(t.li,{children:"Open this file in a web browser"}),"\n",(0,i.jsx)(t.li,{children:'Look for the "Storage Service" section to view your test results'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"url"}),": This is the full URL for the unencrypted storage service endpoint of your storage service."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"encryptionUrl"}),": This is the full URL for the encryption service endpoint of your storage service."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"headers"}),": An object containing any additional HTTP headers required for the request to the storage service. You may need to add headers depending on your implementation."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"method"}),": The HTTP method used to request the verifiable credential from the storage service. In this case, it's set to 'POST'."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"additionalParams"}),": An object containing any additional parameters required for the request to the storage service."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"additionalPayload"}),": An object containing any additional payload required for the request to the storage service."]}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>c});var i=n(6540);const s={},r=i.createContext(s);function o(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d2578f67.332eeee2.js b/assets/js/d2578f67.332eeee2.js new file mode 100644 index 00000000..5f21a219 --- /dev/null +++ b/assets/js/d2578f67.332eeee2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6234],{5832:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Introduction","href":"/tests-untp/docs/introduction/","docId":"introduction/index","unlisted":false},{"type":"category","label":"Mock Apps","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Getting Started","href":"/tests-untp/docs/mock-apps/getting-started","docId":"mock-apps/getting-started","unlisted":false},{"type":"link","label":"Installation","href":"/tests-untp/docs/mock-apps/installation","docId":"mock-apps/installation","unlisted":false},{"type":"category","label":"Dependent Services","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Verifiable Credential Service","href":"/tests-untp/docs/mock-apps/dependent-services/verifiable-credential-service","docId":"mock-apps/dependent-services/verifiable-credential-service","unlisted":false},{"type":"link","label":"Storage Service","href":"/tests-untp/docs/mock-apps/dependent-services/storage-service","docId":"mock-apps/dependent-services/storage-service","unlisted":false},{"type":"link","label":"Identity Resolver Service","href":"/tests-untp/docs/mock-apps/dependent-services/identity-resolution-service","docId":"mock-apps/dependent-services/identity-resolution-service","unlisted":false}],"href":"/tests-untp/docs/mock-apps/dependent-services/"},{"type":"category","label":"Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"System","href":"/tests-untp/docs/mock-apps/configuration/system-config","docId":"mock-apps/configuration/system-config","unlisted":false},{"type":"link","label":"General Feature","href":"/tests-untp/docs/mock-apps/configuration/general-feature-config","docId":"mock-apps/configuration/general-feature-config","unlisted":false},{"type":"link","label":"App","href":"/tests-untp/docs/mock-apps/configuration/app-config","docId":"mock-apps/configuration/app-config","unlisted":false},{"type":"link","label":"Feature","href":"/tests-untp/docs/mock-apps/configuration/feature-config","docId":"mock-apps/configuration/feature-config","unlisted":false},{"type":"link","label":"Component","href":"/tests-untp/docs/mock-apps/configuration/component-config","docId":"mock-apps/configuration/component-config","unlisted":false},{"type":"link","label":"Service","href":"/tests-untp/docs/mock-apps/configuration/service-config","docId":"mock-apps/configuration/service-config","unlisted":false}],"href":"/tests-untp/docs/mock-apps/configuration/"},{"type":"category","label":"Components","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Json Form","href":"/tests-untp/docs/mock-apps/components/json-form","docId":"mock-apps/components/json-form","unlisted":false},{"type":"link","label":"Custom Button","href":"/tests-untp/docs/mock-apps/components/custom-button","docId":"mock-apps/components/custom-button","unlisted":false},{"type":"link","label":"Barcode Generator","href":"/tests-untp/docs/mock-apps/components/barcode-generator","docId":"mock-apps/components/barcode-generator","unlisted":false},{"type":"link","label":"Local Storage Loader","href":"/tests-untp/docs/mock-apps/components/local-storage-loader","docId":"mock-apps/components/local-storage-loader","unlisted":false},{"type":"link","label":"Conformity Credential","href":"/tests-untp/docs/mock-apps/components/conformity-credential","docId":"mock-apps/components/conformity-credential","unlisted":false},{"type":"link","label":"Conformity Credential Checkbox","href":"/tests-untp/docs/mock-apps/components/conformity-credential-checkbox","docId":"mock-apps/components/conformity-credential-checkbox","unlisted":false},{"type":"link","label":"Render Check List","href":"/tests-untp/docs/mock-apps/components/render-check-list","docId":"mock-apps/components/render-check-list","unlisted":false},{"type":"link","label":"Import Button","href":"/tests-untp/docs/mock-apps/components/import-button","docId":"mock-apps/components/import-button","unlisted":false},{"type":"link","label":"QR Code Scanner Dialog Button","href":"/tests-untp/docs/mock-apps/components/qr-code-scanner-dialog-button","docId":"mock-apps/components/qr-code-scanner-dialog-button","unlisted":false}],"href":"/tests-untp/docs/mock-apps/components/"},{"type":"category","label":"Services","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Process DPP","href":"/tests-untp/docs/mock-apps/services/process-dpp","docId":"mock-apps/services/process-dpp","unlisted":false},{"type":"link","label":"Process Transaction Event","href":"/tests-untp/docs/mock-apps/services/process-transaction-event","docId":"mock-apps/services/process-transaction-event","unlisted":false},{"type":"link","label":"Process Transformation Event","href":"/tests-untp/docs/mock-apps/services/process-transformation-event","docId":"mock-apps/services/process-transformation-event","unlisted":false},{"type":"link","label":"Process Object Event","href":"/tests-untp/docs/mock-apps/services/process-object-event","docId":"mock-apps/services/process-object-event","unlisted":false},{"type":"link","label":"Merge To Local Storage","href":"/tests-untp/docs/mock-apps/services/merge-to-local-storage","docId":"mock-apps/services/merge-to-local-storage","unlisted":false},{"type":"link","label":"Process Digital Facility Record","href":"/tests-untp/docs/mock-apps/services/process-digital-facility-record","docId":"mock-apps/services/process-digital-facility-record","unlisted":false},{"type":"link","label":"Process Digital Identity Anchor","href":"/tests-untp/docs/mock-apps/services/process-digital-identity-anchor","docId":"mock-apps/services/process-digital-identity-anchor","unlisted":false},{"type":"link","label":"Process Association Event","href":"/tests-untp/docs/mock-apps/services/process-association-event","docId":"mock-apps/services/process-association-event","unlisted":false},{"type":"link","label":"Process Aggregation Event","href":"/tests-untp/docs/mock-apps/services/process-aggregation-event","docId":"mock-apps/services/process-aggregation-event","unlisted":false},{"type":"link","label":"Process Digital Conformity Credential","href":"/tests-untp/docs/mock-apps/services/process-digital-conformity-credential","docId":"mock-apps/services/process-digital-conformity-credential","unlisted":false}],"href":"/tests-untp/docs/mock-apps/services/"},{"type":"category","label":"Common","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Asset","href":"/tests-untp/docs/mock-apps/common/asset","docId":"mock-apps/common/asset","unlisted":false},{"type":"link","label":"Style","href":"/tests-untp/docs/mock-apps/common/style","docId":"mock-apps/common/style","unlisted":false},{"type":"link","label":"VCkit","href":"/tests-untp/docs/mock-apps/common/vckit","docId":"mock-apps/common/vckit","unlisted":false},{"type":"link","label":"IDR","href":"/tests-untp/docs/mock-apps/common/idr","docId":"mock-apps/common/idr","unlisted":false},{"type":"link","label":"Storage","href":"/tests-untp/docs/mock-apps/common/storage","docId":"mock-apps/common/storage","unlisted":false},{"type":"link","label":"Credential","href":"/tests-untp/docs/mock-apps/common/credential","docId":"mock-apps/common/credential","unlisted":false},{"type":"link","label":"Local Storage","href":"/tests-untp/docs/mock-apps/common/local-storage","docId":"mock-apps/common/local-storage","unlisted":false},{"type":"link","label":"Construct Data","href":"/tests-untp/docs/mock-apps/common/construct-data","docId":"mock-apps/common/construct-data","unlisted":false},{"type":"link","label":"Identify Provider","href":"/tests-untp/docs/mock-apps/common/identify-provider","docId":"mock-apps/common/identify-provider","unlisted":false},{"type":"link","label":"Component Type","href":"/tests-untp/docs/mock-apps/common/component-type","docId":"mock-apps/common/component-type","unlisted":false},{"type":"link","label":"Render Template","href":"/tests-untp/docs/mock-apps/common/render-template","docId":"mock-apps/common/render-template","unlisted":false},{"type":"link","label":"Verify Link","href":"/tests-untp/docs/mock-apps/common/verify-link","docId":"mock-apps/common/verify-link","unlisted":false},{"type":"link","label":"Default Verification Service Link","href":"/tests-untp/docs/mock-apps/common/default-verification-service-link","docId":"mock-apps/common/default-verification-service-link","unlisted":false},{"type":"link","label":"Identify Key Path","href":"/tests-untp/docs/mock-apps/common/identifier-key-path","docId":"mock-apps/common/identifier-key-path","unlisted":false},{"type":"link","label":"Issuing Credential","href":"/tests-untp/docs/mock-apps/common/issuing-credential","docId":"mock-apps/common/issuing-credential","unlisted":false},{"type":"link","label":"Verifiable Credentials","href":"/tests-untp/docs/mock-apps/common/verifiable-credentials","docId":"mock-apps/common/verifiable-credentials","unlisted":false}],"href":"/tests-untp/docs/mock-apps/common/"},{"type":"link","label":"Scanning App","href":"/tests-untp/docs/mock-apps/scanning-app","docId":"mock-apps/scanning-app","unlisted":false},{"type":"link","label":"Verify App","href":"/tests-untp/docs/mock-apps/verify-app","docId":"mock-apps/verify-app","unlisted":false},{"type":"link","label":"Conformity Credential","href":"/tests-untp/docs/mock-apps/conformity-credential","docId":"mock-apps/conformity-credential","unlisted":false}],"href":"/tests-untp/docs/mock-apps/"},{"type":"category","label":"Test Suites","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Semantic Interoperability","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Getting Started","href":"/tests-untp/docs/test-suites/semantic-interoperability/getting-started","docId":"test-suites/semantic-interoperability/getting-started","unlisted":false},{"type":"category","label":"CLI","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/tests-untp/docs/test-suites/semantic-interoperability/cli/installation","docId":"test-suites/semantic-interoperability/cli/installation","unlisted":false},{"type":"link","label":"Configuration","href":"/tests-untp/docs/test-suites/semantic-interoperability/cli/configuration","docId":"test-suites/semantic-interoperability/cli/configuration","unlisted":false},{"type":"link","label":"Usage","href":"/tests-untp/docs/test-suites/semantic-interoperability/cli/usage","docId":"test-suites/semantic-interoperability/cli/usage","unlisted":false},{"type":"link","label":"Extensions","href":"/tests-untp/docs/test-suites/semantic-interoperability/cli/extensions","docId":"test-suites/semantic-interoperability/cli/extensions","unlisted":false}],"href":"/tests-untp/docs/test-suites/semantic-interoperability/cli/"}],"href":"/tests-untp/docs/test-suites/semantic-interoperability/"},{"type":"category","label":"Technical Interoperability","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Getting Started","href":"/tests-untp/docs/test-suites/technical-interoperability/getting-started","docId":"test-suites/technical-interoperability/getting-started","unlisted":false},{"type":"link","label":"Installation","href":"/tests-untp/docs/test-suites/technical-interoperability/installation","docId":"test-suites/technical-interoperability/installation","unlisted":false},{"type":"category","label":"Verifiable Credentials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Testing Verifiable Credentials","href":"/tests-untp/docs/test-suites/technical-interoperability/verifiable-credentials/testing","docId":"test-suites/technical-interoperability/verifiable-credentials/testing","unlisted":false}],"href":"/tests-untp/docs/test-suites/technical-interoperability/verifiable-credentials/"},{"type":"category","label":"UNTP Extensions","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"QR Link / Encryption","href":"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/qr-link-encryption","docId":"test-suites/technical-interoperability/untp-extensions/qr-link-encryption","unlisted":false},{"type":"link","label":"Rendering","href":"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/rendering","docId":"test-suites/technical-interoperability/untp-extensions/rendering","unlisted":false}],"href":"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/"},{"type":"category","label":"Storage","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Testing Storage","href":"/tests-untp/docs/test-suites/technical-interoperability/storage/testing","docId":"test-suites/technical-interoperability/storage/testing","unlisted":false}],"href":"/tests-untp/docs/test-suites/technical-interoperability/storage/"},{"type":"category","label":"Identity Resolution (IDR)","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Testing Identity Resolution","href":"/tests-untp/docs/test-suites/technical-interoperability/identity-resolution/testing","docId":"test-suites/technical-interoperability/identity-resolution/testing","unlisted":false}],"href":"/tests-untp/docs/test-suites/technical-interoperability/identity-resolution/"},{"type":"category","label":"Transparency Graphs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Testing Transparency Graphs","href":"/tests-untp/docs/test-suites/technical-interoperability/transparency-graphs/testing","docId":"test-suites/technical-interoperability/transparency-graphs/testing","unlisted":false}],"href":"/tests-untp/docs/test-suites/technical-interoperability/transparency-graphs/"}],"href":"/tests-untp/docs/test-suites/technical-interoperability/"}],"href":"/tests-untp/docs/test-suites/"}]},"docs":{"introduction/index":{"id":"introduction/index","title":"Introduction","description":"The UN Transparency Protocol (UNTP) Test Suite is a comprehensive set of tools designed to ensure conformance to the UNTP Specification. This robust suite enables implementers to thoroughly evaluate their UNTP implementations across various aspects, from technical interoperability to semantic validation.","sidebar":"tutorialSidebar"},"mock-apps/common/asset":{"id":"mock-apps/common/asset","title":"Asset","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/component-type":{"id":"mock-apps/common/component-type","title":"Component Type","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/construct-data":{"id":"mock-apps/common/construct-data","title":"Construct Data","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/credential":{"id":"mock-apps/common/credential","title":"Credential","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/default-verification-service-link":{"id":"mock-apps/common/default-verification-service-link","title":"Default Verification Service Link","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/identifier-key-path":{"id":"mock-apps/common/identifier-key-path","title":"Identify Key Path","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/identify-provider":{"id":"mock-apps/common/identify-provider","title":"Identify Provider","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/idr":{"id":"mock-apps/common/idr","title":"IDR","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/index":{"id":"mock-apps/common/index","title":"Common","description":"","sidebar":"tutorialSidebar"},"mock-apps/common/issuing-credential":{"id":"mock-apps/common/issuing-credential","title":"Issuing Credential","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/local-storage":{"id":"mock-apps/common/local-storage","title":"Local Storage","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/render-template":{"id":"mock-apps/common/render-template","title":"Render Template","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/storage":{"id":"mock-apps/common/storage","title":"Storage","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/style":{"id":"mock-apps/common/style","title":"Style","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/vckit":{"id":"mock-apps/common/vckit","title":"VCkit","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/verifiable-credentials":{"id":"mock-apps/common/verifiable-credentials","title":"Verifiable Credentials","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/verify-link":{"id":"mock-apps/common/verify-link","title":"Verify Link","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/barcode-generator":{"id":"mock-apps/components/barcode-generator","title":"Barcode Generator","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/conformity-credential":{"id":"mock-apps/components/conformity-credential","title":"Conformity Credential","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/conformity-credential-checkbox":{"id":"mock-apps/components/conformity-credential-checkbox","title":"Conformity Credential Checkbox","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/custom-button":{"id":"mock-apps/components/custom-button","title":"Custom Button","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/import-button":{"id":"mock-apps/components/import-button","title":"Import Button","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/index":{"id":"mock-apps/components/index","title":"Components","description":"Components are reusable UI elements that make up the visual and interactive parts of a feature. Some components encapsulate additional logic other than just UI functionalities, like downloading credentials, storing credentials to local storage and generating barcodes.","sidebar":"tutorialSidebar"},"mock-apps/components/json-form":{"id":"mock-apps/components/json-form","title":"Json Form","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/local-storage-loader":{"id":"mock-apps/components/local-storage-loader","title":"Local Storage Loader","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/qr-code-scanner-dialog-button":{"id":"mock-apps/components/qr-code-scanner-dialog-button","title":"QR Code Scanner Dialog Button","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/render-check-list":{"id":"mock-apps/components/render-check-list","title":"Render Check List","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/configuration/app-config":{"id":"mock-apps/configuration/app-config","title":"App","description":"Apps are used to represent and encapsulate the process/business logic of each actor within the value chain. Each app is independently configured to ensure the appropriate functionality can be implemented dependent on the role that actor in the value chain plays.","sidebar":"tutorialSidebar"},"mock-apps/configuration/component-config":{"id":"mock-apps/configuration/component-config","title":"Component","description":"Components are reusable UI elements that make up the visual and interactive parts of a feature. Some components encapsulate additional logic other than just UI functionalities, like downloading credentials and storing credentials to local storage.","sidebar":"tutorialSidebar"},"mock-apps/configuration/feature-config":{"id":"mock-apps/configuration/feature-config","title":"Feature","description":"Features are the building blocks of functionality within the Mock App system. Each feature is comprised of components and services which are used to compose the business logic and orchestrate services.","sidebar":"tutorialSidebar"},"mock-apps/configuration/general-feature-config":{"id":"mock-apps/configuration/general-feature-config","title":"General Feature","description":"General Features define a shared set of functionalities accessible by all Mock Apps within the Mock App system.","sidebar":"tutorialSidebar"},"mock-apps/configuration/index":{"id":"mock-apps/configuration/index","title":"Configuration","description":"The Mock Apps config file is used to define the system level config, the apps within the mock app system, the apps functions and the connection to the external services.","sidebar":"tutorialSidebar"},"mock-apps/configuration/service-config":{"id":"mock-apps/configuration/service-config","title":"Service","description":"Services are units of business logic that perform specific operations or interactions with external systems. They handle data processing, API calls, and other backend functionalities.","sidebar":"tutorialSidebar"},"mock-apps/configuration/system-config":{"id":"mock-apps/configuration/system-config","title":"System","description":"This is a high-level system configuration used to brand the Mock App system, define the apps contained within the Mock App system, and define the connections to common external services that each app can use.","sidebar":"tutorialSidebar"},"mock-apps/conformity-credential":{"id":"mock-apps/conformity-credential","title":"Conformity Credential","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/dependent-services/identity-resolution-service":{"id":"mock-apps/dependent-services/identity-resolution-service","title":"Identity Resolver Service","description":"The Identity Resolver Service (IDR) is a critical component of the United Nations Transparency Protocol (UNTP) ecosystem. It serves as a bridge between the identifiers of things (e.g., products, entities, transactions) and additional information about those things. You can learn more about Identity Resolver Services here.","sidebar":"tutorialSidebar"},"mock-apps/dependent-services/index":{"id":"mock-apps/dependent-services/index","title":"Dependent Services","description":"This section provides an overview of the dependent services required for the United Nations Transparency Protocol (UNTP). Each service plays a crucial role in the UNTP ecosystem, and proper setup is essential for the functioning of the Mock App system.","sidebar":"tutorialSidebar"},"mock-apps/dependent-services/storage-service":{"id":"mock-apps/dependent-services/storage-service","title":"Storage Service","description":"The Storage Service plays a vital role in the United Nations Transparency Protocol (UNTP) ecosystem by providing a secure and efficient way to store credentials and documents.","sidebar":"tutorialSidebar"},"mock-apps/dependent-services/verifiable-credential-service":{"id":"mock-apps/dependent-services/verifiable-credential-service","title":"Verifiable Credential Service","description":"The Verifiable Credential Service is a crucial component of the United Nations Transparency Protocol (UNTP) ecosystem.","sidebar":"tutorialSidebar"},"mock-apps/getting-started":{"id":"mock-apps/getting-started","title":"Getting Started","description":"Within the Getting Started section we will focus on the following topics:","sidebar":"tutorialSidebar"},"mock-apps/index":{"id":"mock-apps/index","title":"Mock Apps","description":"The United Nations Transparency Protocol (UNTP) mock apps are designed to model value chain participation and facilitate the testing and demonstration of UNTP implementation within a value chain. These apps provide a flexible and configurable system that allows implementors to compose and customise workflows to suit their specific needs.","sidebar":"tutorialSidebar"},"mock-apps/installation":{"id":"mock-apps/installation","title":"Installation","description":"Before you begin installing the mock apps, ensure that you have the following prerequisites in place:","sidebar":"tutorialSidebar"},"mock-apps/scanning-app":{"id":"mock-apps/scanning-app","title":"Scanning App","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/index":{"id":"mock-apps/services/index","title":"Services","description":"Services are units of business logic that perform specific operations or interactions with external systems. They handle data processing, API calls, and other backend functionalities.","sidebar":"tutorialSidebar"},"mock-apps/services/merge-to-local-storage":{"id":"mock-apps/services/merge-to-local-storage","title":"Merge To Local Storage","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-aggregation-event":{"id":"mock-apps/services/process-aggregation-event","title":"Process Aggregation Event","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-association-event":{"id":"mock-apps/services/process-association-event","title":"Process Association Event","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-digital-conformity-credential":{"id":"mock-apps/services/process-digital-conformity-credential","title":"Process Digital Conformity Credential","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-digital-facility-record":{"id":"mock-apps/services/process-digital-facility-record","title":"Process Digital Facility Record","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-digital-identity-anchor":{"id":"mock-apps/services/process-digital-identity-anchor","title":"Process Digital Identity Anchor","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-dpp":{"id":"mock-apps/services/process-dpp","title":"Process DPP","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-object-event":{"id":"mock-apps/services/process-object-event","title":"Process Object Event","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-transaction-event":{"id":"mock-apps/services/process-transaction-event","title":"Process Transaction Event","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-transformation-event":{"id":"mock-apps/services/process-transformation-event","title":"Process Transformation Event","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/verify-app":{"id":"mock-apps/verify-app","title":"Verify App","description":"Description","sidebar":"tutorialSidebar"},"test-suites/index":{"id":"test-suites/index","title":"Test Suites","description":"The UNTP Test Suite comprises three test suites:","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/cli/configuration":{"id":"test-suites/semantic-interoperability/cli/configuration","title":"Configuration","description":"Before proceeding, we need to create the configuration file. The Tier 2 test suite config file defines the credentials being tested, the schema version to test against, and the location of the credential being tested.","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/cli/extensions":{"id":"test-suites/semantic-interoperability/cli/extensions","title":"Extensions","description":"The United Nations Transparency Protocol (UNTP) allows for extensions to its core data model. The UNTP Semantic Interoperability Test Suite can validate these extensions, ensuring they remain compliant with the core UNTP data model. This enables implementors to prototype and test custom credential types or additional properties while maintaining conformance with the UNTP protocol.","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/cli/index":{"id":"test-suites/semantic-interoperability/cli/index","title":"CLI","description":"The United Nations Transparency Protocol (UNTP) Semantic Interoperability Test Suite CLI is a powerful tool designed for rapid validation of credentials produced by UNTP implementers and implementations. This suite ensures that the credentials comply with the core UNTP data model, making it an essential resource for developers, organisations and communities working with the UNTP protocol.","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/cli/installation":{"id":"test-suites/semantic-interoperability/cli/installation","title":"Installation","description":"Before you begin installing the Tier 2 test suite CLI, ensure that you have the following prerequisites in place:","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/cli/usage":{"id":"test-suites/semantic-interoperability/cli/usage","title":"Usage","description":"Once you have configured the test suite, you can run it to validate your UNTP credentials.","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/getting-started":{"id":"test-suites/semantic-interoperability/getting-started","title":"Getting Started","description":"The Getting Started section covers the following topics for each:","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/index":{"id":"test-suites/semantic-interoperability/index","title":"Semantic Interoperability","description":"The United Nations Transparency Protocol (UNTP) Semantic Interoperability Test Suite is a vital tool for implementers working on UNTP implementations and extensions. This comprehensive suite, designed for the second tier of UNTP testing, enables implementers to:","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/getting-started":{"id":"test-suites/technical-interoperability/getting-started","title":"Getting Started","description":"The Getting Started section covers the following topics for technical interoperability testing:","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/identity-resolution/index":{"id":"test-suites/technical-interoperability/identity-resolution/index","title":"Identity Resolution (IDR)","description":"Overview","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/identity-resolution/testing":{"id":"test-suites/technical-interoperability/identity-resolution/testing","title":"Testing Identity Resolution","description":"Detailed testing procedures for the Identity Resolution component will be provided in future updates. These tests will cover:","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/index":{"id":"test-suites/technical-interoperability/index","title":"Technical Interoperability","description":"The United Nations Transparency Protocol (UNTP) Technical Interoperability test suite ensures that implementations of the UNTP protocol meet the required standards for interoperability. This suite comprises both internal tests developed by the UNTP community and external tests created by other communities.","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/installation":{"id":"test-suites/technical-interoperability/installation","title":"Installation","description":"Before you begin installing the Tier 1 test suite, ensure that you have the dependant services and the following prerequisites in place:","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/storage/index":{"id":"test-suites/technical-interoperability/storage/index","title":"Storage","description":"Overview","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/storage/testing":{"id":"test-suites/technical-interoperability/storage/testing","title":"Testing Storage","description":"The Storage component is a critical part of the UNTP ecosystem, responsible for securely storing and retrieving credentials and related data. This test suite verifies the functionality, security, and accessibility of your storage implementation.","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/transparency-graphs/index":{"id":"test-suites/technical-interoperability/transparency-graphs/index","title":"Transparency Graphs","description":"Overview","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/transparency-graphs/testing":{"id":"test-suites/technical-interoperability/transparency-graphs/testing","title":"Testing Transparency Graphs","description":"Detailed testing procedures for Transparency Graphs will be provided in future updates. These tests will cover:","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/untp-extensions/index":{"id":"test-suites/technical-interoperability/untp-extensions/index","title":"UNTP Extensions","description":"Overview","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/untp-extensions/qr-link-encryption":{"id":"test-suites/technical-interoperability/untp-extensions/qr-link-encryption","title":"QR Link / Encryption","description":"The QR Link / Encryption feature is a crucial component of the UNTP ecosystem, providing a standardised way to access, verify, and render credentials.","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/untp-extensions/rendering":{"id":"test-suites/technical-interoperability/untp-extensions/rendering","title":"Rendering","description":"The Rendering component of the UNTP extensions focuses on how credential data is visually presented. It utilises a Render Template, which is crucial in ensuring consistent and flexible presentation of product information across different systems and applications. To support uptake across supply chain actors with varying levels of technical maturity, human rendering of digital credentials is essential.","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/verifiable-credentials/index":{"id":"test-suites/technical-interoperability/verifiable-credentials/index","title":"Verifiable Credentials","description":"Overview","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/verifiable-credentials/testing":{"id":"test-suites/technical-interoperability/verifiable-credentials/testing","title":"Testing Verifiable Credentials","description":"To test your Verifiable Credential implementation:","sidebar":"tutorialSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/d2578f67.6d7fb5be.js b/assets/js/d2578f67.6d7fb5be.js deleted file mode 100644 index 200e5868..00000000 --- a/assets/js/d2578f67.6d7fb5be.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6234],{5832:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Introduction","href":"/tests-untp/docs/introduction/","docId":"introduction/index","unlisted":false},{"type":"category","label":"Mock Apps","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Getting Started","href":"/tests-untp/docs/mock-apps/getting-started","docId":"mock-apps/getting-started","unlisted":false},{"type":"link","label":"Installation","href":"/tests-untp/docs/mock-apps/installation","docId":"mock-apps/installation","unlisted":false},{"type":"category","label":"Dependent Services","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Verifiable Credential Service","href":"/tests-untp/docs/mock-apps/dependent-services/verifiable-credential-service","docId":"mock-apps/dependent-services/verifiable-credential-service","unlisted":false},{"type":"link","label":"Storage Service","href":"/tests-untp/docs/mock-apps/dependent-services/storage-service","docId":"mock-apps/dependent-services/storage-service","unlisted":false},{"type":"link","label":"Identity Resolver Service","href":"/tests-untp/docs/mock-apps/dependent-services/identity-resolution-service","docId":"mock-apps/dependent-services/identity-resolution-service","unlisted":false}],"href":"/tests-untp/docs/mock-apps/dependent-services/"},{"type":"category","label":"Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"System","href":"/tests-untp/docs/mock-apps/configuration/system-config","docId":"mock-apps/configuration/system-config","unlisted":false},{"type":"link","label":"General Feature","href":"/tests-untp/docs/mock-apps/configuration/general-feature-config","docId":"mock-apps/configuration/general-feature-config","unlisted":false},{"type":"link","label":"App","href":"/tests-untp/docs/mock-apps/configuration/app-config","docId":"mock-apps/configuration/app-config","unlisted":false},{"type":"link","label":"Feature","href":"/tests-untp/docs/mock-apps/configuration/feature-config","docId":"mock-apps/configuration/feature-config","unlisted":false},{"type":"link","label":"Component","href":"/tests-untp/docs/mock-apps/configuration/component-config","docId":"mock-apps/configuration/component-config","unlisted":false},{"type":"link","label":"Service","href":"/tests-untp/docs/mock-apps/configuration/service-config","docId":"mock-apps/configuration/service-config","unlisted":false}],"href":"/tests-untp/docs/mock-apps/configuration/"},{"type":"category","label":"Components","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Json Form","href":"/tests-untp/docs/mock-apps/components/json-form","docId":"mock-apps/components/json-form","unlisted":false},{"type":"link","label":"Custom Button","href":"/tests-untp/docs/mock-apps/components/custom-button","docId":"mock-apps/components/custom-button","unlisted":false},{"type":"link","label":"Barcode Generator","href":"/tests-untp/docs/mock-apps/components/barcode-generator","docId":"mock-apps/components/barcode-generator","unlisted":false},{"type":"link","label":"Local Storage Loader","href":"/tests-untp/docs/mock-apps/components/local-storage-loader","docId":"mock-apps/components/local-storage-loader","unlisted":false},{"type":"link","label":"Conformity Credential","href":"/tests-untp/docs/mock-apps/components/conformity-credential","docId":"mock-apps/components/conformity-credential","unlisted":false},{"type":"link","label":"Conformity Credential Checkbox","href":"/tests-untp/docs/mock-apps/components/conformity-credential-checkbox","docId":"mock-apps/components/conformity-credential-checkbox","unlisted":false},{"type":"link","label":"Render Check List","href":"/tests-untp/docs/mock-apps/components/render-check-list","docId":"mock-apps/components/render-check-list","unlisted":false},{"type":"link","label":"Import Button","href":"/tests-untp/docs/mock-apps/components/import-button","docId":"mock-apps/components/import-button","unlisted":false},{"type":"link","label":"QR Code Scanner Dialog Button","href":"/tests-untp/docs/mock-apps/components/qr-code-scanner-dialog-button","docId":"mock-apps/components/qr-code-scanner-dialog-button","unlisted":false}],"href":"/tests-untp/docs/mock-apps/components/"},{"type":"category","label":"Services","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Process DPP","href":"/tests-untp/docs/mock-apps/services/process-dpp","docId":"mock-apps/services/process-dpp","unlisted":false},{"type":"link","label":"Process Transaction Event","href":"/tests-untp/docs/mock-apps/services/process-transaction-event","docId":"mock-apps/services/process-transaction-event","unlisted":false},{"type":"link","label":"Process Transformation Event","href":"/tests-untp/docs/mock-apps/services/process-transformation-event","docId":"mock-apps/services/process-transformation-event","unlisted":false},{"type":"link","label":"Process Object Event","href":"/tests-untp/docs/mock-apps/services/process-object-event","docId":"mock-apps/services/process-object-event","unlisted":false},{"type":"link","label":"Merge To Local Storage","href":"/tests-untp/docs/mock-apps/services/merge-to-local-storage","docId":"mock-apps/services/merge-to-local-storage","unlisted":false},{"type":"link","label":"Process Digital Facility Record","href":"/tests-untp/docs/mock-apps/services/process-digital-facility-record","docId":"mock-apps/services/process-digital-facility-record","unlisted":false},{"type":"link","label":"Process Digital Identity Anchor","href":"/tests-untp/docs/mock-apps/services/process-digital-identity-anchor","docId":"mock-apps/services/process-digital-identity-anchor","unlisted":false},{"type":"link","label":"Process Association Event","href":"/tests-untp/docs/mock-apps/services/process-association-event","docId":"mock-apps/services/process-association-event","unlisted":false},{"type":"link","label":"Process Aggregation Event","href":"/tests-untp/docs/mock-apps/services/process-aggregation-event","docId":"mock-apps/services/process-aggregation-event","unlisted":false},{"type":"link","label":"Process Digital Conformity Credential","href":"/tests-untp/docs/mock-apps/services/process-digital-conformity-credential","docId":"mock-apps/services/process-digital-conformity-credential","unlisted":false}],"href":"/tests-untp/docs/mock-apps/services/"},{"type":"category","label":"Common","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Asset","href":"/tests-untp/docs/mock-apps/common/asset","docId":"mock-apps/common/asset","unlisted":false},{"type":"link","label":"Style","href":"/tests-untp/docs/mock-apps/common/style","docId":"mock-apps/common/style","unlisted":false},{"type":"link","label":"VCkit","href":"/tests-untp/docs/mock-apps/common/vckit","docId":"mock-apps/common/vckit","unlisted":false},{"type":"link","label":"IDR","href":"/tests-untp/docs/mock-apps/common/idr","docId":"mock-apps/common/idr","unlisted":false},{"type":"link","label":"Storage","href":"/tests-untp/docs/mock-apps/common/storage","docId":"mock-apps/common/storage","unlisted":false},{"type":"link","label":"Credential","href":"/tests-untp/docs/mock-apps/common/credential","docId":"mock-apps/common/credential","unlisted":false},{"type":"link","label":"Local Storage","href":"/tests-untp/docs/mock-apps/common/local-storage","docId":"mock-apps/common/local-storage","unlisted":false},{"type":"link","label":"Construct Data","href":"/tests-untp/docs/mock-apps/common/construct-data","docId":"mock-apps/common/construct-data","unlisted":false},{"type":"link","label":"Identify Provider","href":"/tests-untp/docs/mock-apps/common/identify-provider","docId":"mock-apps/common/identify-provider","unlisted":false},{"type":"link","label":"Component Type","href":"/tests-untp/docs/mock-apps/common/component-type","docId":"mock-apps/common/component-type","unlisted":false},{"type":"link","label":"Render Template","href":"/tests-untp/docs/mock-apps/common/render-template","docId":"mock-apps/common/render-template","unlisted":false},{"type":"link","label":"Verify Link","href":"/tests-untp/docs/mock-apps/common/verify-link","docId":"mock-apps/common/verify-link","unlisted":false},{"type":"link","label":"Default Verification Service Link","href":"/tests-untp/docs/mock-apps/common/default-verification-service-link","docId":"mock-apps/common/default-verification-service-link","unlisted":false},{"type":"link","label":"Identify Key Path","href":"/tests-untp/docs/mock-apps/common/identifier-key-path","docId":"mock-apps/common/identifier-key-path","unlisted":false},{"type":"link","label":"Issuing Credential","href":"/tests-untp/docs/mock-apps/common/issuing-credential","docId":"mock-apps/common/issuing-credential","unlisted":false}],"href":"/tests-untp/docs/mock-apps/common/"},{"type":"link","label":"Scanning App","href":"/tests-untp/docs/mock-apps/scanning-app","docId":"mock-apps/scanning-app","unlisted":false},{"type":"link","label":"Verify App","href":"/tests-untp/docs/mock-apps/verify-app","docId":"mock-apps/verify-app","unlisted":false},{"type":"link","label":"Conformity Credential","href":"/tests-untp/docs/mock-apps/conformity-credential","docId":"mock-apps/conformity-credential","unlisted":false}],"href":"/tests-untp/docs/mock-apps/"},{"type":"category","label":"Test Suites","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Semantic Interoperability","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Getting Started","href":"/tests-untp/docs/test-suites/semantic-interoperability/getting-started","docId":"test-suites/semantic-interoperability/getting-started","unlisted":false},{"type":"category","label":"CLI","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/tests-untp/docs/test-suites/semantic-interoperability/cli/installation","docId":"test-suites/semantic-interoperability/cli/installation","unlisted":false},{"type":"link","label":"Configuration","href":"/tests-untp/docs/test-suites/semantic-interoperability/cli/configuration","docId":"test-suites/semantic-interoperability/cli/configuration","unlisted":false},{"type":"link","label":"Usage","href":"/tests-untp/docs/test-suites/semantic-interoperability/cli/usage","docId":"test-suites/semantic-interoperability/cli/usage","unlisted":false},{"type":"link","label":"Extensions","href":"/tests-untp/docs/test-suites/semantic-interoperability/cli/extensions","docId":"test-suites/semantic-interoperability/cli/extensions","unlisted":false}],"href":"/tests-untp/docs/test-suites/semantic-interoperability/cli/"}],"href":"/tests-untp/docs/test-suites/semantic-interoperability/"},{"type":"category","label":"Technical Interoperability","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Getting Started","href":"/tests-untp/docs/test-suites/technical-interoperability/getting-started","docId":"test-suites/technical-interoperability/getting-started","unlisted":false},{"type":"link","label":"Installation","href":"/tests-untp/docs/test-suites/technical-interoperability/installation","docId":"test-suites/technical-interoperability/installation","unlisted":false},{"type":"category","label":"Verifiable Credentials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Testing Verifiable Credentials","href":"/tests-untp/docs/test-suites/technical-interoperability/verifiable-credentials/testing","docId":"test-suites/technical-interoperability/verifiable-credentials/testing","unlisted":false}],"href":"/tests-untp/docs/test-suites/technical-interoperability/verifiable-credentials/"},{"type":"category","label":"UNTP Extensions","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"QR Link / Encryption","href":"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/qr-link-encryption","docId":"test-suites/technical-interoperability/untp-extensions/qr-link-encryption","unlisted":false},{"type":"link","label":"Rendering","href":"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/rendering","docId":"test-suites/technical-interoperability/untp-extensions/rendering","unlisted":false}],"href":"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/"},{"type":"category","label":"Storage","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Testing Storage","href":"/tests-untp/docs/test-suites/technical-interoperability/storage/testing","docId":"test-suites/technical-interoperability/storage/testing","unlisted":false}],"href":"/tests-untp/docs/test-suites/technical-interoperability/storage/"},{"type":"category","label":"Identity Resolution (IDR)","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Testing Identity Resolution","href":"/tests-untp/docs/test-suites/technical-interoperability/identity-resolution/testing","docId":"test-suites/technical-interoperability/identity-resolution/testing","unlisted":false}],"href":"/tests-untp/docs/test-suites/technical-interoperability/identity-resolution/"},{"type":"category","label":"Transparency Graphs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Testing Transparency Graphs","href":"/tests-untp/docs/test-suites/technical-interoperability/transparency-graphs/testing","docId":"test-suites/technical-interoperability/transparency-graphs/testing","unlisted":false}],"href":"/tests-untp/docs/test-suites/technical-interoperability/transparency-graphs/"}],"href":"/tests-untp/docs/test-suites/technical-interoperability/"}],"href":"/tests-untp/docs/test-suites/"}]},"docs":{"introduction/index":{"id":"introduction/index","title":"Introduction","description":"The UN Transparency Protocol (UNTP) Test Suite is a comprehensive set of tools designed to ensure conformance to the UNTP Specification. This robust suite enables implementers to thoroughly evaluate their UNTP implementations across various aspects, from technical interoperability to semantic validation.","sidebar":"tutorialSidebar"},"mock-apps/common/asset":{"id":"mock-apps/common/asset","title":"Asset","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/component-type":{"id":"mock-apps/common/component-type","title":"Component Type","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/construct-data":{"id":"mock-apps/common/construct-data","title":"Construct Data","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/credential":{"id":"mock-apps/common/credential","title":"Credential","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/default-verification-service-link":{"id":"mock-apps/common/default-verification-service-link","title":"Default Verification Service Link","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/identifier-key-path":{"id":"mock-apps/common/identifier-key-path","title":"Identify Key Path","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/identify-provider":{"id":"mock-apps/common/identify-provider","title":"Identify Provider","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/idr":{"id":"mock-apps/common/idr","title":"IDR","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/index":{"id":"mock-apps/common/index","title":"Common","description":"","sidebar":"tutorialSidebar"},"mock-apps/common/issuing-credential":{"id":"mock-apps/common/issuing-credential","title":"Issuing Credential","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/local-storage":{"id":"mock-apps/common/local-storage","title":"Local Storage","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/render-template":{"id":"mock-apps/common/render-template","title":"Render Template","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/storage":{"id":"mock-apps/common/storage","title":"Storage","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/style":{"id":"mock-apps/common/style","title":"Style","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/vckit":{"id":"mock-apps/common/vckit","title":"VCkit","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/common/verify-link":{"id":"mock-apps/common/verify-link","title":"Verify Link","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/barcode-generator":{"id":"mock-apps/components/barcode-generator","title":"Barcode Generator","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/conformity-credential":{"id":"mock-apps/components/conformity-credential","title":"Conformity Credential","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/conformity-credential-checkbox":{"id":"mock-apps/components/conformity-credential-checkbox","title":"Conformity Credential Checkbox","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/custom-button":{"id":"mock-apps/components/custom-button","title":"Custom Button","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/import-button":{"id":"mock-apps/components/import-button","title":"Import Button","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/index":{"id":"mock-apps/components/index","title":"Components","description":"Components are reusable UI elements that make up the visual and interactive parts of a feature. Some components encapsulate additional logic other than just UI functionalities, like downloading credentials, storing credentials to local storage and generating barcodes.","sidebar":"tutorialSidebar"},"mock-apps/components/json-form":{"id":"mock-apps/components/json-form","title":"Json Form","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/local-storage-loader":{"id":"mock-apps/components/local-storage-loader","title":"Local Storage Loader","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/qr-code-scanner-dialog-button":{"id":"mock-apps/components/qr-code-scanner-dialog-button","title":"QR Code Scanner Dialog Button","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/components/render-check-list":{"id":"mock-apps/components/render-check-list","title":"Render Check List","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/configuration/app-config":{"id":"mock-apps/configuration/app-config","title":"App","description":"Apps are used to represent and encapsulate the process/business logic of each actor within the value chain. Each app is independently configured to ensure the appropriate functionality can be implemented dependent on the role that actor in the value chain plays.","sidebar":"tutorialSidebar"},"mock-apps/configuration/component-config":{"id":"mock-apps/configuration/component-config","title":"Component","description":"Components are reusable UI elements that make up the visual and interactive parts of a feature. Some components encapsulate additional logic other than just UI functionalities, like downloading credentials and storing credentials to local storage.","sidebar":"tutorialSidebar"},"mock-apps/configuration/feature-config":{"id":"mock-apps/configuration/feature-config","title":"Feature","description":"Features are the building blocks of functionality within the Mock App system. Each feature is comprised of components and services which are used to compose the business logic and orchestrate services.","sidebar":"tutorialSidebar"},"mock-apps/configuration/general-feature-config":{"id":"mock-apps/configuration/general-feature-config","title":"General Feature","description":"General Features define a shared set of functionalities accessible by all Mock Apps within the Mock App system.","sidebar":"tutorialSidebar"},"mock-apps/configuration/index":{"id":"mock-apps/configuration/index","title":"Configuration","description":"The Mock Apps config file is used to define the system level config, the apps within the mock app system, the apps functions and the connection to the external services.","sidebar":"tutorialSidebar"},"mock-apps/configuration/service-config":{"id":"mock-apps/configuration/service-config","title":"Service","description":"Services are units of business logic that perform specific operations or interactions with external systems. They handle data processing, API calls, and other backend functionalities.","sidebar":"tutorialSidebar"},"mock-apps/configuration/system-config":{"id":"mock-apps/configuration/system-config","title":"System","description":"This is a high-level system configuration used to brand the Mock App system, define the apps contained within the Mock App system, and define the connections to common external services that each app can use.","sidebar":"tutorialSidebar"},"mock-apps/conformity-credential":{"id":"mock-apps/conformity-credential","title":"Conformity Credential","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/dependent-services/identity-resolution-service":{"id":"mock-apps/dependent-services/identity-resolution-service","title":"Identity Resolver Service","description":"The Identity Resolver Service (IDR) is a critical component of the United Nations Transparency Protocol (UNTP) ecosystem. It serves as a bridge between the identifiers of things (e.g., products, entities, transactions) and additional information about those things. You can learn more about Identity Resolver Services here.","sidebar":"tutorialSidebar"},"mock-apps/dependent-services/index":{"id":"mock-apps/dependent-services/index","title":"Dependent Services","description":"This section provides an overview of the dependent services required for the United Nations Transparency Protocol (UNTP). Each service plays a crucial role in the UNTP ecosystem, and proper setup is essential for the functioning of the Mock App system.","sidebar":"tutorialSidebar"},"mock-apps/dependent-services/storage-service":{"id":"mock-apps/dependent-services/storage-service","title":"Storage Service","description":"The Storage Service plays a vital role in the United Nations Transparency Protocol (UNTP) ecosystem by providing a secure and efficient way to store credentials and documents.","sidebar":"tutorialSidebar"},"mock-apps/dependent-services/verifiable-credential-service":{"id":"mock-apps/dependent-services/verifiable-credential-service","title":"Verifiable Credential Service","description":"The Verifiable Credential Service is a crucial component of the United Nations Transparency Protocol (UNTP) ecosystem.","sidebar":"tutorialSidebar"},"mock-apps/getting-started":{"id":"mock-apps/getting-started","title":"Getting Started","description":"Within the Getting Started section we will focus on the following topics:","sidebar":"tutorialSidebar"},"mock-apps/index":{"id":"mock-apps/index","title":"Mock Apps","description":"The United Nations Transparency Protocol (UNTP) mock apps are designed to model value chain participation and facilitate the testing and demonstration of UNTP implementation within a value chain. These apps provide a flexible and configurable system that allows implementors to compose and customise workflows to suit their specific needs.","sidebar":"tutorialSidebar"},"mock-apps/installation":{"id":"mock-apps/installation","title":"Installation","description":"Before you begin installing the mock apps, ensure that you have the following prerequisites in place:","sidebar":"tutorialSidebar"},"mock-apps/scanning-app":{"id":"mock-apps/scanning-app","title":"Scanning App","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/index":{"id":"mock-apps/services/index","title":"Services","description":"Services are units of business logic that perform specific operations or interactions with external systems. They handle data processing, API calls, and other backend functionalities.","sidebar":"tutorialSidebar"},"mock-apps/services/merge-to-local-storage":{"id":"mock-apps/services/merge-to-local-storage","title":"Merge To Local Storage","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-aggregation-event":{"id":"mock-apps/services/process-aggregation-event","title":"Process Aggregation Event","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-association-event":{"id":"mock-apps/services/process-association-event","title":"Process Association Event","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-digital-conformity-credential":{"id":"mock-apps/services/process-digital-conformity-credential","title":"Process Digital Conformity Credential","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-digital-facility-record":{"id":"mock-apps/services/process-digital-facility-record","title":"Process Digital Facility Record","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-digital-identity-anchor":{"id":"mock-apps/services/process-digital-identity-anchor","title":"Process Digital Identity Anchor","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-dpp":{"id":"mock-apps/services/process-dpp","title":"Process DPP","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-object-event":{"id":"mock-apps/services/process-object-event","title":"Process Object Event","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-transaction-event":{"id":"mock-apps/services/process-transaction-event","title":"Process Transaction Event","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/services/process-transformation-event":{"id":"mock-apps/services/process-transformation-event","title":"Process Transformation Event","description":"Description","sidebar":"tutorialSidebar"},"mock-apps/verify-app":{"id":"mock-apps/verify-app","title":"Verify App","description":"Description","sidebar":"tutorialSidebar"},"test-suites/index":{"id":"test-suites/index","title":"Test Suites","description":"The UNTP Test Suite comprises three test suites:","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/cli/configuration":{"id":"test-suites/semantic-interoperability/cli/configuration","title":"Configuration","description":"Before proceeding, we need to create the configuration file. The Tier 2 test suite config file defines the credentials being tested, the schema version to test against, and the location of the credential being tested.","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/cli/extensions":{"id":"test-suites/semantic-interoperability/cli/extensions","title":"Extensions","description":"The United Nations Transparency Protocol (UNTP) allows for extensions to its core data model. The UNTP Semantic Interoperability Test Suite can validate these extensions, ensuring they remain compliant with the core UNTP data model. This enables implementors to prototype and test custom credential types or additional properties while maintaining conformance with the UNTP protocol.","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/cli/index":{"id":"test-suites/semantic-interoperability/cli/index","title":"CLI","description":"The United Nations Transparency Protocol (UNTP) Semantic Interoperability Test Suite CLI is a powerful tool designed for rapid validation of credentials produced by UNTP implementers and implementations. This suite ensures that the credentials comply with the core UNTP data model, making it an essential resource for developers, organisations and communities working with the UNTP protocol.","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/cli/installation":{"id":"test-suites/semantic-interoperability/cli/installation","title":"Installation","description":"Before you begin installing the Tier 2 test suite CLI, ensure that you have the following prerequisites in place:","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/cli/usage":{"id":"test-suites/semantic-interoperability/cli/usage","title":"Usage","description":"Once you have configured the test suite, you can run it to validate your UNTP credentials.","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/getting-started":{"id":"test-suites/semantic-interoperability/getting-started","title":"Getting Started","description":"The Getting Started section covers the following topics for each:","sidebar":"tutorialSidebar"},"test-suites/semantic-interoperability/index":{"id":"test-suites/semantic-interoperability/index","title":"Semantic Interoperability","description":"The United Nations Transparency Protocol (UNTP) Semantic Interoperability Test Suite is a vital tool for implementers working on UNTP implementations and extensions. This comprehensive suite, designed for the second tier of UNTP testing, enables implementers to:","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/getting-started":{"id":"test-suites/technical-interoperability/getting-started","title":"Getting Started","description":"The Getting Started section covers the following topics for technical interoperability testing:","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/identity-resolution/index":{"id":"test-suites/technical-interoperability/identity-resolution/index","title":"Identity Resolution (IDR)","description":"Overview","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/identity-resolution/testing":{"id":"test-suites/technical-interoperability/identity-resolution/testing","title":"Testing Identity Resolution","description":"Detailed testing procedures for the Identity Resolution component will be provided in future updates. These tests will cover:","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/index":{"id":"test-suites/technical-interoperability/index","title":"Technical Interoperability","description":"The United Nations Transparency Protocol (UNTP) Technical Interoperability test suite ensures that implementations of the UNTP protocol meet the required standards for interoperability. This suite comprises both internal tests developed by the UNTP community and external tests created by other communities.","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/installation":{"id":"test-suites/technical-interoperability/installation","title":"Installation","description":"Before you begin installing the Tier 1 test suite, ensure that you have the dependant services and the following prerequisites in place:","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/storage/index":{"id":"test-suites/technical-interoperability/storage/index","title":"Storage","description":"Overview","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/storage/testing":{"id":"test-suites/technical-interoperability/storage/testing","title":"Testing Storage","description":"The Storage component is a critical part of the UNTP ecosystem, responsible for securely storing and retrieving credentials and related data. This test suite verifies the functionality, security, and accessibility of your storage implementation.","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/transparency-graphs/index":{"id":"test-suites/technical-interoperability/transparency-graphs/index","title":"Transparency Graphs","description":"Overview","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/transparency-graphs/testing":{"id":"test-suites/technical-interoperability/transparency-graphs/testing","title":"Testing Transparency Graphs","description":"Detailed testing procedures for Transparency Graphs will be provided in future updates. These tests will cover:","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/untp-extensions/index":{"id":"test-suites/technical-interoperability/untp-extensions/index","title":"UNTP Extensions","description":"Overview","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/untp-extensions/qr-link-encryption":{"id":"test-suites/technical-interoperability/untp-extensions/qr-link-encryption","title":"QR Link / Encryption","description":"The QR Link / Encryption feature is a crucial component of the UNTP ecosystem, providing a standardised way to access, verify, and render credentials.","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/untp-extensions/rendering":{"id":"test-suites/technical-interoperability/untp-extensions/rendering","title":"Rendering","description":"The Rendering component of the UNTP extensions focuses on how credential data is visually presented. It utilises a Render Template, which is crucial in ensuring consistent and flexible presentation of product information across different systems and applications. To support uptake across supply chain actors with varying levels of technical maturity, human rendering of digital credentials is essential.","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/verifiable-credentials/index":{"id":"test-suites/technical-interoperability/verifiable-credentials/index","title":"Verifiable Credentials","description":"Overview","sidebar":"tutorialSidebar"},"test-suites/technical-interoperability/verifiable-credentials/testing":{"id":"test-suites/technical-interoperability/verifiable-credentials/testing","title":"Testing Verifiable Credentials","description":"To test your Verifiable Credential implementation:","sidebar":"tutorialSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/main.984b298f.js b/assets/js/main.984b298f.js deleted file mode 100644 index 0d452cc5..00000000 --- a/assets/js/main.984b298f.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.984b298f.js.LICENSE.txt */ -(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8792],{8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(6540);var r=n(3259),o=n.n(r),a=n(4054);const i={"0531aaa8":[()=>n.e(987).then(n.bind(n,3499)),"@site/docs/mock-apps/common/component-type.md",3499],"085742ca":[()=>n.e(7017).then(n.bind(n,199)),"@site/docs/mock-apps/common/identify-provider.md",199],"0ca26a2c":[()=>n.e(1895).then(n.bind(n,4056)),"@site/docs/mock-apps/configuration/general-feature-config.md",4056],"10b977c0":[()=>n.e(9716).then(n.bind(n,7655)),"@site/docs/mock-apps/components/local-storage-loader.md",7655],"15ee9d98":[()=>n.e(787).then(n.bind(n,92)),"@site/docs/mock-apps/components/render-check-list.md",92],17896441:[()=>Promise.all([n.e(1869),n.e(2901),n.e(8401)]).then(n.bind(n,6365)),"@theme/DocItem",6365],"1cda0596":[()=>n.e(6074).then(n.bind(n,4322)),"@site/docs/introduction/index.md",4322],"1df93b7f":[()=>n.e(4583).then(n.bind(n,6865)),"@site/src/pages/index.tsx",6865],"1f391b9e":[()=>Promise.all([n.e(1869),n.e(2901),n.e(6061)]).then(n.bind(n,7973)),"@theme/MDXPage",7973],"2053dccf":[()=>n.e(1337).then(n.bind(n,1384)),"@site/docs/test-suites/technical-interoperability/untp-extensions/index.md",1384],22243546:[()=>n.e(1199).then(n.bind(n,3271)),"@site/docs/mock-apps/common/issuing-credential.md",3271],"229906a6":[()=>n.e(1614).then(n.bind(n,5824)),"@site/docs/mock-apps/services/index.md",5824],"287c65a9":[()=>n.e(5922).then(n.bind(n,8811)),"@site/docs/test-suites/technical-interoperability/getting-started.md",8811],"2c6d2c9f":[()=>n.e(236).then(n.bind(n,5680)),"@site/docs/mock-apps/components/import-button.md",5680],"2cbb390d":[()=>n.e(6786).then(n.bind(n,8691)),"@site/docs/test-suites/semantic-interoperability/cli/extensions.md",8691],30221500:[()=>n.e(8228).then(n.bind(n,964)),"@site/docs/test-suites/semantic-interoperability/getting-started.md",964],"33b26378":[()=>n.e(3769).then(n.bind(n,6578)),"@site/docs/mock-apps/common/identifier-key-path.md",6578],"3496df51":[()=>n.e(551).then(n.bind(n,1706)),"@site/docs/mock-apps/components/custom-button.md",1706],"39c45f72":[()=>n.e(2892).then(n.bind(n,4085)),"@site/docs/mock-apps/services/process-digital-conformity-credential.md",4085],"3c1fb8fb":[()=>n.e(1814).then(n.bind(n,7409)),"@site/docs/mock-apps/common/asset.md",7409],"3d7bc76c":[()=>n.e(7606).then(n.bind(n,2192)),"@site/docs/mock-apps/verify-app.md",2192],"3e875788":[()=>n.e(584).then(n.bind(n,2872)),"@site/docs/mock-apps/services/process-object-event.md",2872],"425c06f9":[()=>n.e(3128).then(n.bind(n,9626)),"@site/docs/mock-apps/dependent-services/index.md",9626],"445e7840":[()=>n.e(3132).then(n.bind(n,1579)),"@site/src/pages/terms.md",1579],"4505c18c":[()=>n.e(4700).then(n.bind(n,2100)),"@site/docs/test-suites/index.md",2100],45457832:[()=>n.e(9633).then(n.bind(n,8216)),"@site/docs/mock-apps/common/vckit.md",8216],"45670f71":[()=>n.e(7905).then(n.bind(n,1328)),"@site/docs/test-suites/technical-interoperability/transparency-graphs/testing.md",1328],"483f55fd":[()=>n.e(7260).then(n.bind(n,2968)),"@site/docs/test-suites/semantic-interoperability/index.md",2968],"4a46c1d6":[()=>n.e(7410).then(n.bind(n,2876)),"@site/docs/mock-apps/common/credential.md",2876],"4b1d5cdf":[()=>n.e(7704).then(n.bind(n,2338)),"@site/docs/mock-apps/services/process-association-event.md",2338],"4c54cd24":[()=>n.e(4312).then(n.bind(n,4103)),"@site/docs/test-suites/technical-interoperability/identity-resolution/index.md",4103],"50781d71":[()=>n.e(9118).then(n.bind(n,9896)),"@site/docs/mock-apps/components/index.md",9896],"552cf059":[()=>n.e(340).then(n.bind(n,5640)),"@site/docs/test-suites/technical-interoperability/index.md",5640],"553d0fc4":[()=>n.e(2191).then(n.bind(n,814)),"@site/docs/test-suites/technical-interoperability/untp-extensions/qr-link-encryption.md",814],"577d7028":[()=>n.e(4129).then(n.bind(n,4906)),"@site/docs/mock-apps/services/process-transformation-event.md",4906],"5b6552f6":[()=>n.e(7120).then(n.bind(n,1335)),"@site/docs/mock-apps/services/process-aggregation-event.md",1335],"5e3e7c06":[()=>n.e(1673).then(n.bind(n,1484)),"@site/docs/mock-apps/common/storage.md",1484],"5e95c892":[()=>n.e(9647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"5ef14c48":[()=>n.e(793).then(n.bind(n,4566)),"@site/docs/mock-apps/scanning-app.md",4566],"5f0b1014":[()=>n.e(5400).then(n.bind(n,7320)),"@site/docs/mock-apps/configuration/app-config.md",7320],"639ea42f":[()=>n.e(1579).then(n.bind(n,7292)),"@site/docs/mock-apps/services/process-digital-facility-record.md",7292],"680d5359":[()=>n.e(8735).then(n.bind(n,857)),"@site/docs/mock-apps/services/process-transaction-event.md",857],"7842fcd7":[()=>n.e(6762).then(n.bind(n,1628)),"@site/docs/mock-apps/configuration/component-config.md",1628],"7e459fdf":[()=>n.e(7553).then(n.bind(n,6720)),"@site/docs/mock-apps/common/idr.md",6720],"826679d4":[()=>n.e(3873).then(n.bind(n,949)),"@site/docs/mock-apps/common/default-verification-service-link.md",949],87121257:[()=>n.e(8508).then(n.bind(n,8323)),"@site/docs/mock-apps/installation.md",8323],"8ac603f8":[()=>n.e(1244).then(n.bind(n,8996)),"@site/docs/mock-apps/components/conformity-credential-checkbox.md",8996],"8d5201cb":[()=>n.e(4912).then(n.bind(n,8072)),"@site/docs/mock-apps/configuration/service-config.md",8072],"8e33b65d":[()=>n.e(7431).then(n.bind(n,4496)),"@site/src/pages/privacy.md",4496],"8fe80541":[()=>n.e(3706).then(n.bind(n,6394)),"@site/docs/mock-apps/components/qr-code-scanner-dialog-button.md",6394],"91dfa211":[()=>n.e(7408).then(n.bind(n,8991)),"@site/docs/mock-apps/dependent-services/identity-resolution-service.md",8991],"928beb81":[()=>n.e(4576).then(n.bind(n,9699)),"@site/docs/test-suites/semantic-interoperability/cli/configuration.md",9699],"93020abc":[()=>n.e(9265).then(n.bind(n,3425)),"@site/docs/test-suites/semantic-interoperability/cli/index.md",3425],"93e1ff5a":[()=>n.e(3187).then(n.bind(n,193)),"@site/docs/mock-apps/common/construct-data.md",193],"965e8f06":[()=>n.e(3396).then(n.bind(n,5691)),"@site/docs/mock-apps/common/render-template.md",5691],"990870e6":[()=>n.e(7329).then(n.bind(n,3991)),"@site/docs/mock-apps/configuration/feature-config.md",3991],"9aa17927":[()=>n.e(4238).then(n.bind(n,5898)),"@site/docs/test-suites/technical-interoperability/verifiable-credentials/index.md",5898],a0e89b48:[()=>n.e(7478).then(n.bind(n,8767)),"@site/docs/mock-apps/index.md",8767],a4ef1660:[()=>n.e(6498).then(n.bind(n,2232)),"@site/docs/test-suites/technical-interoperability/transparency-graphs/index.md",2232],a6961166:[()=>n.e(9849).then(n.bind(n,6392)),"@site/docs/mock-apps/components/barcode-generator.md",6392],a7456010:[()=>n.e(1235).then(n.t.bind(n,8552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",8552],a7bd4aaa:[()=>n.e(7098).then(n.bind(n,4532)),"@theme/DocVersionRoot",4532],a7bf941b:[()=>n.e(3169).then(n.bind(n,4259)),"@site/docs/mock-apps/conformity-credential.md",4259],a81fd1fb:[()=>n.e(9036).then(n.bind(n,2014)),"@site/docs/mock-apps/configuration/index.md",2014],a94703ab:[()=>Promise.all([n.e(1869),n.e(9048)]).then(n.bind(n,2559)),"@theme/DocRoot",2559],a9c4a5b0:[()=>n.e(9776).then(n.bind(n,4277)),"@site/docs/mock-apps/common/index.md",4277],aba21aa0:[()=>n.e(5742).then(n.t.bind(n,7093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",7093],ac7eac65:[()=>n.e(2344).then(n.bind(n,3880)),"@site/docs/mock-apps/configuration/system-config.md",3880],ae987efd:[()=>n.e(8900).then(n.bind(n,9659)),"@site/docs/mock-apps/components/json-form.md",9659],af166207:[()=>n.e(2600).then(n.bind(n,4241)),"@site/docs/mock-apps/common/verify-link.md",4241],b2f714bf:[()=>n.e(1321).then(n.bind(n,1976)),"@site/docs/test-suites/technical-interoperability/untp-extensions/rendering.md",1976],bb909d62:[()=>n.e(4815).then(n.bind(n,7245)),"@site/docs/test-suites/technical-interoperability/storage/index.md",7245],bd6744df:[()=>n.e(4938).then(n.bind(n,8653)),"@site/docs/test-suites/semantic-interoperability/cli/installation.md",8653],c24a5290:[()=>n.e(2759).then(n.bind(n,2637)),"@site/docs/mock-apps/dependent-services/verifiable-credential-service.md",2637],c25f9d34:[()=>n.e(51).then(n.bind(n,6591)),"@site/docs/mock-apps/getting-started.md",6591],c4b6dfb7:[()=>n.e(9893).then(n.bind(n,2127)),"@site/docs/test-suites/technical-interoperability/identity-resolution/testing.md",2127],cf2a862f:[()=>n.e(2097).then(n.bind(n,2021)),"@site/docs/test-suites/technical-interoperability/storage/testing.md",2021],d2578f67:[()=>n.e(6234).then(n.t.bind(n,5832,19)),"@generated/docusaurus-plugin-content-docs/default/p/tests-untp-docs-838.json",5832],dadc47ff:[()=>n.e(5882).then(n.bind(n,8042)),"@site/docs/mock-apps/services/merge-to-local-storage.md",8042],dbe878d5:[()=>n.e(4818).then(n.bind(n,3560)),"@site/docs/mock-apps/services/process-dpp.md",3560],dc91be4e:[()=>n.e(7968).then(n.bind(n,4024)),"@site/docs/mock-apps/common/style.md",4024],ddadeb1e:[()=>n.e(1639).then(n.bind(n,7098)),"@site/docs/test-suites/technical-interoperability/verifiable-credentials/testing.md",7098],deb174ca:[()=>n.e(1296).then(n.bind(n,2561)),"@site/docs/mock-apps/services/process-digital-identity-anchor.md",2561],e59573dd:[()=>n.e(2493).then(n.bind(n,984)),"@site/docs/mock-apps/components/conformity-credential.md",984],e70afa19:[()=>n.e(2699).then(n.bind(n,4471)),"@site/docs/test-suites/technical-interoperability/installation.md",4471],ed523a4b:[()=>n.e(5655).then(n.bind(n,1514)),"@site/docs/test-suites/semantic-interoperability/cli/usage.md",1514],ef07c418:[()=>n.e(4711).then(n.bind(n,5422)),"@site/docs/mock-apps/common/local-storage.md",5422],f1c6d0c4:[()=>n.e(2970).then(n.bind(n,6321)),"@site/docs/mock-apps/dependent-services/storage-service.md",6321]};var s=n(4848);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(6921),u=n(3102);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(2237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,s.jsx)(u.W,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,c.A)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const l=o.__props;return delete o.__props,(0,s.jsx)(u.W,{value:i,children:(0,s.jsx)(a,{...o,...l,...n})})}})}const p=[{path:"/tests-untp/privacy",component:d("/tests-untp/privacy","df1"),exact:!0},{path:"/tests-untp/terms",component:d("/tests-untp/terms","c71"),exact:!0},{path:"/tests-untp/docs",component:d("/tests-untp/docs","056"),routes:[{path:"/tests-untp/docs",component:d("/tests-untp/docs","1ac"),routes:[{path:"/tests-untp/docs",component:d("/tests-untp/docs","d20"),routes:[{path:"/tests-untp/docs/introduction/",component:d("/tests-untp/docs/introduction/","f8e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/",component:d("/tests-untp/docs/mock-apps/","b4a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/",component:d("/tests-untp/docs/mock-apps/common/","f51"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/asset",component:d("/tests-untp/docs/mock-apps/common/asset","c49"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/component-type",component:d("/tests-untp/docs/mock-apps/common/component-type","cbd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/construct-data",component:d("/tests-untp/docs/mock-apps/common/construct-data","644"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/credential",component:d("/tests-untp/docs/mock-apps/common/credential","e04"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/default-verification-service-link",component:d("/tests-untp/docs/mock-apps/common/default-verification-service-link","b59"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/identifier-key-path",component:d("/tests-untp/docs/mock-apps/common/identifier-key-path","66d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/identify-provider",component:d("/tests-untp/docs/mock-apps/common/identify-provider","bf1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/idr",component:d("/tests-untp/docs/mock-apps/common/idr","82b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/issuing-credential",component:d("/tests-untp/docs/mock-apps/common/issuing-credential","776"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/local-storage",component:d("/tests-untp/docs/mock-apps/common/local-storage","f5d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/render-template",component:d("/tests-untp/docs/mock-apps/common/render-template","108"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/storage",component:d("/tests-untp/docs/mock-apps/common/storage","d25"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/style",component:d("/tests-untp/docs/mock-apps/common/style","bb9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/vckit",component:d("/tests-untp/docs/mock-apps/common/vckit","7e6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/common/verify-link",component:d("/tests-untp/docs/mock-apps/common/verify-link","f9c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/components/",component:d("/tests-untp/docs/mock-apps/components/","f67"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/components/barcode-generator",component:d("/tests-untp/docs/mock-apps/components/barcode-generator","af4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/components/conformity-credential",component:d("/tests-untp/docs/mock-apps/components/conformity-credential","83d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/components/conformity-credential-checkbox",component:d("/tests-untp/docs/mock-apps/components/conformity-credential-checkbox","683"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/components/custom-button",component:d("/tests-untp/docs/mock-apps/components/custom-button","fea"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/components/import-button",component:d("/tests-untp/docs/mock-apps/components/import-button","a75"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/components/json-form",component:d("/tests-untp/docs/mock-apps/components/json-form","1d4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/components/local-storage-loader",component:d("/tests-untp/docs/mock-apps/components/local-storage-loader","e54"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/components/qr-code-scanner-dialog-button",component:d("/tests-untp/docs/mock-apps/components/qr-code-scanner-dialog-button","339"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/components/render-check-list",component:d("/tests-untp/docs/mock-apps/components/render-check-list","410"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/configuration/",component:d("/tests-untp/docs/mock-apps/configuration/","721"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/configuration/app-config",component:d("/tests-untp/docs/mock-apps/configuration/app-config","eef"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/configuration/component-config",component:d("/tests-untp/docs/mock-apps/configuration/component-config","cc5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/configuration/feature-config",component:d("/tests-untp/docs/mock-apps/configuration/feature-config","81b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/configuration/general-feature-config",component:d("/tests-untp/docs/mock-apps/configuration/general-feature-config","d20"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/configuration/service-config",component:d("/tests-untp/docs/mock-apps/configuration/service-config","4a2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/configuration/system-config",component:d("/tests-untp/docs/mock-apps/configuration/system-config","22a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/conformity-credential",component:d("/tests-untp/docs/mock-apps/conformity-credential","d24"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/dependent-services/",component:d("/tests-untp/docs/mock-apps/dependent-services/","d70"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/dependent-services/identity-resolution-service",component:d("/tests-untp/docs/mock-apps/dependent-services/identity-resolution-service","946"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/dependent-services/storage-service",component:d("/tests-untp/docs/mock-apps/dependent-services/storage-service","8b6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/dependent-services/verifiable-credential-service",component:d("/tests-untp/docs/mock-apps/dependent-services/verifiable-credential-service","64d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/getting-started",component:d("/tests-untp/docs/mock-apps/getting-started","672"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/installation",component:d("/tests-untp/docs/mock-apps/installation","525"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/scanning-app",component:d("/tests-untp/docs/mock-apps/scanning-app","269"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/services/",component:d("/tests-untp/docs/mock-apps/services/","642"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/services/merge-to-local-storage",component:d("/tests-untp/docs/mock-apps/services/merge-to-local-storage","cd0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/services/process-aggregation-event",component:d("/tests-untp/docs/mock-apps/services/process-aggregation-event","75c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/services/process-association-event",component:d("/tests-untp/docs/mock-apps/services/process-association-event","2b7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/services/process-digital-conformity-credential",component:d("/tests-untp/docs/mock-apps/services/process-digital-conformity-credential","616"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/services/process-digital-facility-record",component:d("/tests-untp/docs/mock-apps/services/process-digital-facility-record","c7d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/services/process-digital-identity-anchor",component:d("/tests-untp/docs/mock-apps/services/process-digital-identity-anchor","4c7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/services/process-dpp",component:d("/tests-untp/docs/mock-apps/services/process-dpp","cfe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/services/process-object-event",component:d("/tests-untp/docs/mock-apps/services/process-object-event","8b2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/services/process-transaction-event",component:d("/tests-untp/docs/mock-apps/services/process-transaction-event","5b9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/services/process-transformation-event",component:d("/tests-untp/docs/mock-apps/services/process-transformation-event","a9d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/mock-apps/verify-app",component:d("/tests-untp/docs/mock-apps/verify-app","c4f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/",component:d("/tests-untp/docs/test-suites/","ae8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/semantic-interoperability/",component:d("/tests-untp/docs/test-suites/semantic-interoperability/","5c6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/semantic-interoperability/cli/",component:d("/tests-untp/docs/test-suites/semantic-interoperability/cli/","1c4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/semantic-interoperability/cli/configuration",component:d("/tests-untp/docs/test-suites/semantic-interoperability/cli/configuration","d6b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/semantic-interoperability/cli/extensions",component:d("/tests-untp/docs/test-suites/semantic-interoperability/cli/extensions","28c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/semantic-interoperability/cli/installation",component:d("/tests-untp/docs/test-suites/semantic-interoperability/cli/installation","2f5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/semantic-interoperability/cli/usage",component:d("/tests-untp/docs/test-suites/semantic-interoperability/cli/usage","36c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/semantic-interoperability/getting-started",component:d("/tests-untp/docs/test-suites/semantic-interoperability/getting-started","9c1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/",component:d("/tests-untp/docs/test-suites/technical-interoperability/","f28"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/getting-started",component:d("/tests-untp/docs/test-suites/technical-interoperability/getting-started","074"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/identity-resolution/",component:d("/tests-untp/docs/test-suites/technical-interoperability/identity-resolution/","3e9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/identity-resolution/testing",component:d("/tests-untp/docs/test-suites/technical-interoperability/identity-resolution/testing","968"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/installation",component:d("/tests-untp/docs/test-suites/technical-interoperability/installation","e0d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/storage/",component:d("/tests-untp/docs/test-suites/technical-interoperability/storage/","0e9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/storage/testing",component:d("/tests-untp/docs/test-suites/technical-interoperability/storage/testing","0f4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/transparency-graphs/",component:d("/tests-untp/docs/test-suites/technical-interoperability/transparency-graphs/","24e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/transparency-graphs/testing",component:d("/tests-untp/docs/test-suites/technical-interoperability/transparency-graphs/testing","65a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/",component:d("/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/","893"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/qr-link-encryption",component:d("/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/qr-link-encryption","4ed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/rendering",component:d("/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/rendering","9b3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/verifiable-credentials/",component:d("/tests-untp/docs/test-suites/technical-interoperability/verifiable-credentials/","8db"),exact:!0,sidebar:"tutorialSidebar"},{path:"/tests-untp/docs/test-suites/technical-interoperability/verifiable-credentials/testing",component:d("/tests-untp/docs/test-suites/technical-interoperability/verifiable-credentials/testing","203"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/tests-untp/",component:d("/tests-untp/","506"),exact:!0},{path:"*",component:d("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>i});var r=n(6540),o=n(4848);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},5098:(e,t,n)=>{"use strict";var r=n(6540),o=n(5338),a=n(545),i=n(4625),s=n(4784),l=n(8193);const c=[n(119),n(6134),n(6294),n(5902),n(4823)];var u=n(8328),d=n(6347),p=n(2831),f=n(4848);function m(){return(0,f.jsxs)("svg",{width:"0",height:"0",className:"hidden",children:[(0,f.jsx)("symbol",{xmlns:"http://www.w3.org/2000/svg",fill:"currentColor",viewBox:"0 0 24 24",id:"github",children:(0,f.jsx)("path",{d:"M12.04 0a12.035 12.035 0 0 0-3.731 23.479h.28c.257.012.508-.074.703-.241.237-.207.37-.508.36-.822v-1.304a.491.491 0 0 0-.19-.331.501.501 0 0 0-.41-.1c-2.699.581-3.27-1.104-3.3-1.214a4.654 4.654 0 0 0-1.736-2.197l-.15-.11a.732.732 0 0 1 .381-.07c.508.076.94.41 1.143.883a3.009 3.009 0 0 0 4.012 1.163c.151-.067.262-.2.301-.361.04-.46.24-.893.562-1.224a.501.501 0 0 0 .15-.531.491.491 0 0 0-.421-.351c-2.377-.271-4.814-1.103-4.814-5.205a4.012 4.012 0 0 1 1.063-2.789.491.491 0 0 0 .09-.521 3.57 3.57 0 0 1 .01-2.417A5.586 5.586 0 0 1 8.871 6.89c.123.085.279.107.42.06.897-.239 1.821-.36 2.749-.36a10.34 10.34 0 0 1 2.758.36.461.461 0 0 0 .411-.06c.731-.593 1.6-.99 2.527-1.153a3.55 3.55 0 0 1 0 2.387.481.481 0 0 0 .1.521 4.012 4.012 0 0 1 1.054 2.758c0 4.112-2.437 4.935-4.824 5.196a.491.491 0 0 0-.421.35c-.06.189 0 .394.15.522.449.469.672 1.11.612 1.755v3.19c-.005.315.131.616.37.822.304.23.7.302 1.064.19A12.035 12.035 0 0 0 12.04 0Z"})}),(0,f.jsx)("symbol",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 33.057 33.057",id:"search",children:(0,f.jsxs)("g",{fill:"none","fill-rule":"evenodd",stroke:"currentColor","stroke-width":"1.5",children:[(0,f.jsx)("path",{d:"M21.723 7.934a9.75 9.721-45 0 1-.02 13.769 9.75 9.721-45 0 1-13.769.02 9.75 9.721-45 0 1 .021-13.768 9.75 9.721-45 0 1 13.768-.02z"}),(0,f.jsx)("path",{d:"M10.481 20.942V25",transform:"rotate(-45 17.925 7.425)"})]})}),(0,f.jsx)("symbol",{xmlns:"http://www.w3.org/2000/svg",fill:"currentColor",viewBox:"0 0 24 24",id:"slack",children:(0,f.jsx)("g",{"fill-rule":"nonzero",children:(0,f.jsx)("path",{d:"M22.17 16.701h-7.34c-1.01 0-1.83-.815-1.83-1.82 0-1.005.82-1.82 1.83-1.82h7.34c1.01 0 1.83.815 1.83 1.82 0 1.005-.82 1.82-1.83 1.82ZM14.83 11.073c-1.01 0-1.83-.815-1.83-1.82V1.954c-.05-.68.286-1.332.871-1.687a1.839 1.839 0 0 1 1.908 0c.585.355.922 1.007.871 1.687v7.3a1.825 1.825 0 0 1-1.82 1.819ZM9.17 11.073H1.83c-1.01 0-1.83-.815-1.83-1.82 0-1.005.82-1.82 1.83-1.82h7.34c1.01 0 1.83.815 1.83 1.82 0 1.005-.82 1.82-1.83 1.82ZM9.17 24c-1.01 0-1.83-.815-1.83-1.82v-7.299c-.05-.68.286-1.332.871-1.687a1.839 1.839 0 0 1 1.908 0c.585.355.922 1.007.871 1.687v7.3A1.825 1.825 0 0 1 9.17 24ZM2.22 17.517A2.214 2.214 0 0 1 0 15.319a2.264 2.264 0 0 1 2.27-2.257h1.48c.405.005.73.333.73.735v1.472a2.254 2.254 0 0 1-2.26 2.248ZM10.27 4.59H8.78a2.254 2.254 0 0 1-2.26-2.248c-.003-.586.23-1.15.647-1.564A2.216 2.216 0 0 1 8.74.134 2.264 2.264 0 0 1 11 2.392v1.471c0 .401-.327.726-.73.726ZM15.26 24A2.264 2.264 0 0 1 13 21.743V20.27c0-.4.327-.726.73-.726h1.49a2.254 2.254 0 0 1 2.26 2.247c.003.587-.23 1.15-.647 1.564A2.216 2.216 0 0 1 15.26 24ZM21.73 11.073h-1.48a.738.738 0 0 1-.73-.736V8.865a2.254 2.254 0 0 1 2.26-2.247c1.222 0 2.214.982 2.22 2.198a2.264 2.264 0 0 1-2.27 2.257Z"})})})]})}function h(e){let{children:t}=e;return(0,f.jsxs)(f.Fragment,{children:[t,(0,f.jsx)(m,{})]})}var g=n(5260),b=n(4586),y=n(6025),v=n(6342),k=n(1003),w=n(2131),x=n(4090),S=n(2967),E=n(440),_=n(1463);function C(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,b.A)(),r=(0,w.o)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,f.jsxs)(g.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function A(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,b.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,b.A)(),{pathname:r}=(0,d.zy)();return e+(0,E.applyTrailingSlash)((0,y.Ay)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,f.jsxs)(g.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:o}),(0,f.jsx)("link",{rel:"canonical",href:o})]})}function T(){const{i18n:{currentLocale:e}}=(0,b.A)(),{metadata:t,image:n}=(0,v.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(g.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:x.w})]}),n&&(0,f.jsx)(k.be,{image:n}),(0,f.jsx)(A,{}),(0,f.jsx)(C,{}),(0,f.jsx)(_.A,{tag:S.Cy,locale:e}),(0,f.jsx)(g.A,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const j=new Map;var N=n(6125),L=n(6988),R=n(205);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const O=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,R.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),P("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function D(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),D(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(O,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.qh,{location:t,render:()=>e})})}}const M=I,F="__docusaurus-base-url-issue-banner-container",z="__docusaurus-base-url-issue-banner",B="__docusaurus-base-url-issue-banner-suggestion-container";function $(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${F}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{let{route:t}=e;return!0===t.exact})))return j.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return j.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,f.jsx)(M,{location:e,children:Q})}function Y(){return(0,f.jsx)(G.A,{children:(0,f.jsx)(L.l,{children:(0,f.jsxs)(N.x,{children:[(0,f.jsxs)(h,{children:[(0,f.jsx)(H,{}),(0,f.jsx)(T,{}),(0,f.jsx)(q,{}),(0,f.jsx)(K,{})]}),(0,f.jsx)(W,{})]})})})}var Z=n(4054);const X=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var J=n(6921);const ee=new Set,te=new Set,ne=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,re={prefetch:e=>{if(!(e=>!ne()&&!te.has(e)&&!ee.has(e))(e))return!1;ee.add(e);const t=(0,p.u)(u.A,e).flatMap((e=>{return t=e.route.path,Object.entries(Z).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,J.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?X(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!ne()&&!te.has(e))(e)&&(te.add(e),D(e))},oe=Object.freeze(re);function ae(e){let{children:t}=e;return"hash"===s.default.future.experimental_router?(0,f.jsx)(i.I9,{children:t}):(0,f.jsx)(i.Kd,{children:t})}const ie=Boolean(!0);if(l.A.canUseDOM){window.docusaurus=oe;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(a.vd,{children:(0,f.jsx)(ae,{children:(0,f.jsx)(Y,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(ie)window.docusaurusRoot=o.hydrateRoot(e,t,{onRecoverableError:n});else{const r=o.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};D(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(6540),o=n(4784);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/tests-untp/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/tests-untp/docs","mainDocId":"introduction/index","docs":[{"id":"introduction/index","path":"/tests-untp/docs/introduction/","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/asset","path":"/tests-untp/docs/mock-apps/common/asset","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/component-type","path":"/tests-untp/docs/mock-apps/common/component-type","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/construct-data","path":"/tests-untp/docs/mock-apps/common/construct-data","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/credential","path":"/tests-untp/docs/mock-apps/common/credential","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/default-verification-service-link","path":"/tests-untp/docs/mock-apps/common/default-verification-service-link","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/identifier-key-path","path":"/tests-untp/docs/mock-apps/common/identifier-key-path","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/identify-provider","path":"/tests-untp/docs/mock-apps/common/identify-provider","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/idr","path":"/tests-untp/docs/mock-apps/common/idr","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/index","path":"/tests-untp/docs/mock-apps/common/","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/issuing-credential","path":"/tests-untp/docs/mock-apps/common/issuing-credential","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/local-storage","path":"/tests-untp/docs/mock-apps/common/local-storage","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/render-template","path":"/tests-untp/docs/mock-apps/common/render-template","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/storage","path":"/tests-untp/docs/mock-apps/common/storage","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/style","path":"/tests-untp/docs/mock-apps/common/style","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/vckit","path":"/tests-untp/docs/mock-apps/common/vckit","sidebar":"tutorialSidebar"},{"id":"mock-apps/common/verify-link","path":"/tests-untp/docs/mock-apps/common/verify-link","sidebar":"tutorialSidebar"},{"id":"mock-apps/components/barcode-generator","path":"/tests-untp/docs/mock-apps/components/barcode-generator","sidebar":"tutorialSidebar"},{"id":"mock-apps/components/conformity-credential","path":"/tests-untp/docs/mock-apps/components/conformity-credential","sidebar":"tutorialSidebar"},{"id":"mock-apps/components/conformity-credential-checkbox","path":"/tests-untp/docs/mock-apps/components/conformity-credential-checkbox","sidebar":"tutorialSidebar"},{"id":"mock-apps/components/custom-button","path":"/tests-untp/docs/mock-apps/components/custom-button","sidebar":"tutorialSidebar"},{"id":"mock-apps/components/import-button","path":"/tests-untp/docs/mock-apps/components/import-button","sidebar":"tutorialSidebar"},{"id":"mock-apps/components/index","path":"/tests-untp/docs/mock-apps/components/","sidebar":"tutorialSidebar"},{"id":"mock-apps/components/json-form","path":"/tests-untp/docs/mock-apps/components/json-form","sidebar":"tutorialSidebar"},{"id":"mock-apps/components/local-storage-loader","path":"/tests-untp/docs/mock-apps/components/local-storage-loader","sidebar":"tutorialSidebar"},{"id":"mock-apps/components/qr-code-scanner-dialog-button","path":"/tests-untp/docs/mock-apps/components/qr-code-scanner-dialog-button","sidebar":"tutorialSidebar"},{"id":"mock-apps/components/render-check-list","path":"/tests-untp/docs/mock-apps/components/render-check-list","sidebar":"tutorialSidebar"},{"id":"mock-apps/configuration/app-config","path":"/tests-untp/docs/mock-apps/configuration/app-config","sidebar":"tutorialSidebar"},{"id":"mock-apps/configuration/component-config","path":"/tests-untp/docs/mock-apps/configuration/component-config","sidebar":"tutorialSidebar"},{"id":"mock-apps/configuration/feature-config","path":"/tests-untp/docs/mock-apps/configuration/feature-config","sidebar":"tutorialSidebar"},{"id":"mock-apps/configuration/general-feature-config","path":"/tests-untp/docs/mock-apps/configuration/general-feature-config","sidebar":"tutorialSidebar"},{"id":"mock-apps/configuration/index","path":"/tests-untp/docs/mock-apps/configuration/","sidebar":"tutorialSidebar"},{"id":"mock-apps/configuration/service-config","path":"/tests-untp/docs/mock-apps/configuration/service-config","sidebar":"tutorialSidebar"},{"id":"mock-apps/configuration/system-config","path":"/tests-untp/docs/mock-apps/configuration/system-config","sidebar":"tutorialSidebar"},{"id":"mock-apps/conformity-credential","path":"/tests-untp/docs/mock-apps/conformity-credential","sidebar":"tutorialSidebar"},{"id":"mock-apps/dependent-services/identity-resolution-service","path":"/tests-untp/docs/mock-apps/dependent-services/identity-resolution-service","sidebar":"tutorialSidebar"},{"id":"mock-apps/dependent-services/index","path":"/tests-untp/docs/mock-apps/dependent-services/","sidebar":"tutorialSidebar"},{"id":"mock-apps/dependent-services/storage-service","path":"/tests-untp/docs/mock-apps/dependent-services/storage-service","sidebar":"tutorialSidebar"},{"id":"mock-apps/dependent-services/verifiable-credential-service","path":"/tests-untp/docs/mock-apps/dependent-services/verifiable-credential-service","sidebar":"tutorialSidebar"},{"id":"mock-apps/getting-started","path":"/tests-untp/docs/mock-apps/getting-started","sidebar":"tutorialSidebar"},{"id":"mock-apps/index","path":"/tests-untp/docs/mock-apps/","sidebar":"tutorialSidebar"},{"id":"mock-apps/installation","path":"/tests-untp/docs/mock-apps/installation","sidebar":"tutorialSidebar"},{"id":"mock-apps/scanning-app","path":"/tests-untp/docs/mock-apps/scanning-app","sidebar":"tutorialSidebar"},{"id":"mock-apps/services/index","path":"/tests-untp/docs/mock-apps/services/","sidebar":"tutorialSidebar"},{"id":"mock-apps/services/merge-to-local-storage","path":"/tests-untp/docs/mock-apps/services/merge-to-local-storage","sidebar":"tutorialSidebar"},{"id":"mock-apps/services/process-aggregation-event","path":"/tests-untp/docs/mock-apps/services/process-aggregation-event","sidebar":"tutorialSidebar"},{"id":"mock-apps/services/process-association-event","path":"/tests-untp/docs/mock-apps/services/process-association-event","sidebar":"tutorialSidebar"},{"id":"mock-apps/services/process-digital-conformity-credential","path":"/tests-untp/docs/mock-apps/services/process-digital-conformity-credential","sidebar":"tutorialSidebar"},{"id":"mock-apps/services/process-digital-facility-record","path":"/tests-untp/docs/mock-apps/services/process-digital-facility-record","sidebar":"tutorialSidebar"},{"id":"mock-apps/services/process-digital-identity-anchor","path":"/tests-untp/docs/mock-apps/services/process-digital-identity-anchor","sidebar":"tutorialSidebar"},{"id":"mock-apps/services/process-dpp","path":"/tests-untp/docs/mock-apps/services/process-dpp","sidebar":"tutorialSidebar"},{"id":"mock-apps/services/process-object-event","path":"/tests-untp/docs/mock-apps/services/process-object-event","sidebar":"tutorialSidebar"},{"id":"mock-apps/services/process-transaction-event","path":"/tests-untp/docs/mock-apps/services/process-transaction-event","sidebar":"tutorialSidebar"},{"id":"mock-apps/services/process-transformation-event","path":"/tests-untp/docs/mock-apps/services/process-transformation-event","sidebar":"tutorialSidebar"},{"id":"mock-apps/verify-app","path":"/tests-untp/docs/mock-apps/verify-app","sidebar":"tutorialSidebar"},{"id":"test-suites/index","path":"/tests-untp/docs/test-suites/","sidebar":"tutorialSidebar"},{"id":"test-suites/semantic-interoperability/cli/configuration","path":"/tests-untp/docs/test-suites/semantic-interoperability/cli/configuration","sidebar":"tutorialSidebar"},{"id":"test-suites/semantic-interoperability/cli/extensions","path":"/tests-untp/docs/test-suites/semantic-interoperability/cli/extensions","sidebar":"tutorialSidebar"},{"id":"test-suites/semantic-interoperability/cli/index","path":"/tests-untp/docs/test-suites/semantic-interoperability/cli/","sidebar":"tutorialSidebar"},{"id":"test-suites/semantic-interoperability/cli/installation","path":"/tests-untp/docs/test-suites/semantic-interoperability/cli/installation","sidebar":"tutorialSidebar"},{"id":"test-suites/semantic-interoperability/cli/usage","path":"/tests-untp/docs/test-suites/semantic-interoperability/cli/usage","sidebar":"tutorialSidebar"},{"id":"test-suites/semantic-interoperability/getting-started","path":"/tests-untp/docs/test-suites/semantic-interoperability/getting-started","sidebar":"tutorialSidebar"},{"id":"test-suites/semantic-interoperability/index","path":"/tests-untp/docs/test-suites/semantic-interoperability/","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/getting-started","path":"/tests-untp/docs/test-suites/technical-interoperability/getting-started","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/identity-resolution/index","path":"/tests-untp/docs/test-suites/technical-interoperability/identity-resolution/","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/identity-resolution/testing","path":"/tests-untp/docs/test-suites/technical-interoperability/identity-resolution/testing","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/index","path":"/tests-untp/docs/test-suites/technical-interoperability/","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/installation","path":"/tests-untp/docs/test-suites/technical-interoperability/installation","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/storage/index","path":"/tests-untp/docs/test-suites/technical-interoperability/storage/","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/storage/testing","path":"/tests-untp/docs/test-suites/technical-interoperability/storage/testing","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/transparency-graphs/index","path":"/tests-untp/docs/test-suites/technical-interoperability/transparency-graphs/","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/transparency-graphs/testing","path":"/tests-untp/docs/test-suites/technical-interoperability/transparency-graphs/testing","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/untp-extensions/index","path":"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/untp-extensions/qr-link-encryption","path":"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/qr-link-encryption","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/untp-extensions/rendering","path":"/tests-untp/docs/test-suites/technical-interoperability/untp-extensions/rendering","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/verifiable-credentials/index","path":"/tests-untp/docs/test-suites/technical-interoperability/verifiable-credentials/","sidebar":"tutorialSidebar"},{"id":"test-suites/technical-interoperability/verifiable-credentials/testing","path":"/tests-untp/docs/test-suites/technical-interoperability/verifiable-credentials/testing","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/tests-untp/docs/introduction/","label":"Introduction"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(2654);const l=JSON.parse('{"docusaurusVersion":"3.4.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.4.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.4.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.4.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.4.0"},"docusaurus-plugin-sass":{"type":"package","name":"docusaurus-plugin-sass","version":"0.2.5"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"3.4.0"}}}');var c=n(4848);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>h});var r=n(6540),o=n(8193),a=n(5260),i=n(440),s=n(8244),l=n(3102),c=n(4848);function u(e){let{error:t,tryAgain:n}=e;return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,c.jsx)(l.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)(p,{children:(0,c.jsxs)(h,{fallback:()=>(0,c.jsx)(u,{error:t,tryAgain:n}),children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.A,{children:(0,c.jsx)(u,{error:t,tryAgain:n})})]})})}const m=e=>(0,c.jsx)(f,{...e});class h extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??m)(e)}return e??null}}},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);var r=n(545),o=n(4848);function a(e){return(0,o.jsx)(r.mg,{...e})}},8774:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(6540),o=n(4625),a=n(440),i=n(4586),s=n(6654),l=n(8193),c=n(3427),u=n(6025),d=n(4848);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:v}=(0,i.A)(),{trailingSlash:k,baseUrl:w}=v,x=v.future.experimental_router,{withBaseUrl:S}=(0,u.hH)(),E=(0,c.A)(),_=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>_.current));const C=p||f;const A=(0,s.A)(C),T=C?.replace("pathname://","");let j=void 0!==T?(N=T,b&&(e=>e.startsWith("/"))(N)?S(N):N):void 0;var N;"hash"===x&&j?.startsWith("./")&&(j=j?.slice(1)),j&&A&&(j=(0,a.applyTrailingSlash)(j,{trailingSlash:k,baseUrl:w}));const L=(0,r.useRef)(!1),R=n?o.k2:o.N_,P=l.A.canUseIntersectionObserver,O=(0,r.useRef)(),D=()=>{L.current||null==j||(window.docusaurus.preload(j),L.current=!0)};(0,r.useEffect)((()=>(!P&&A&&null!=j&&window.docusaurus.prefetch(j),()=>{P&&O.current&&O.current.disconnect()})),[O,j,P,A]);const I=j?.startsWith("#")??!1,M=!y.target||"_self"===y.target,F=!j||!A||!M;return g||!I&&F||E.collectLink(j),y.id&&E.collectAnchor(y.id),F?(0,d.jsx)("a",{ref:_,href:j,...C&&!A&&{target:"_blank",rel:"noopener noreferrer"},...y}):(0,d.jsx)(R,{...y,onMouseEnter:D,onTouchStart:D,innerRef:e=>{_.current=e,P&&e&&A&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=j&&window.docusaurus.prefetch(j))}))})),O.current.observe(e))},to:j,...n&&{isActive:h,activeClassName:m}})}const f=r.forwardRef(p)},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>c,T:()=>l});var r=n(6540),o=n(4848);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(2654);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>o,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s,hH:()=>i});var r=n(6540),o=n(4586),a=n(6654);function i(){const{siteConfig:e}=(0,o.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,s=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,a.z)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(o)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:s}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},3427:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540);n(4848);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6988);function a(){return(0,r.useContext)(o.o)}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6125);function a(){return(0,r.useContext)(o.o)}},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540);const o=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>a});var r=n(6540),o=n(4848);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>h,vT:()=>p,Gy:()=>u,HW:()=>g,ht:()=>d,r7:()=>m,jh:()=>f});var r=n(6347),o=n(4586),a=n(7065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=function(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>{try{return function(e,t,n){void 0===t&&(t=a.W),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function p(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return s(t)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return l(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(5947),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},6134:(e,t,n)=>{"use strict";n.r(t);var r=n(1765),o=n(4784);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(9700),n(8692)(`./prism-${e}`)})),delete globalThis.Prism}(r.My)},1107:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(6540);var r=n(4164),o=n(1312),a=n(6342),i=n(8774),s=n(3427);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(4848);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.A)(),{navbar:{hideOnScroll:p}}=(0,a.p)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,o.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.A)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(4848);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},8244:(e,t,n)=>{"use strict";n.d(t,{A:()=>ct});var r=n(6540),o=n(4164),a=n(7489),i=n(1003),s=n(6347),l=n(1312),c=n(5062),u=n(4848);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,l.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var g=n(7559),b=n(4090);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(h,{className:y.skipToContent})}var k=n(6342),w=n(5041);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.A)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,k.p)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.A)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,k.p)(),{isActive:t,close:n}=(0,w.M)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:A.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:A.announcementBarPlaceholder}),(0,u.jsx)(C,{className:A.announcementBarContent}),a&&(0,u.jsx)(E,{onClick:n,className:A.announcementBarClose})]})}var j=n(9876),N=n(3104);var L=n(9532),R=n(5600);const P=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,j.M)(),t=(0,R.YL)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,L.ZC)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(P.Provider,{value:n,children:t})}function D(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function I(){const e=(0,r.useContext)(P);if(!e)throw new L.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,R.YL)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:D(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=I();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var F=n(5293),z=n(2303);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,z.A)(),s=(0,l.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.A)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,o.A)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,o.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const H=r.memo(q),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,k.p)().navbar.style,r=(0,k.p)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,F.G)();return r?null:(0,u.jsx)(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var W=n(3465);function Q(){return(0,u.jsx)(W.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,j.M)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(Q,{}),(0,u.jsx)(V,{className:"margin-right--md"}),(0,u.jsx)(K,{})]})}var Z=n(8774),X=n(6025),J=n(6654);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3186);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Ay)(r),p=(0,X.Ay)(t),f=(0,X.Ay)(o,{forcePrependBaseUrl:!0}),m=a&&o&&!(0,J.A)(o),h=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,m&&(0,u.jsx)(te.A,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(Z.A,{href:l?f:o,...c,...h}):(0,u.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...c,...h})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.A)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(1422),se=n(9169),le=n(4586);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.A)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(_e,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),(0,u.jsxs)("li",{className:(0,o.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.A)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(_e,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var me=n(2131);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const ge="iconLanguage_nlXk";const be=()=>null,ye={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.A)(n,ye.navbarSearchContainer),children:t})}var ke=n(4070),we=n(1754);var xe=n(5597);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.A)(),p=(0,me.o)(),{search:f,hash:m}=(0,s.zy)(),h=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],g=t?(0,l.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(fe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(he,{className:ge}),g]}),items:h})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(ve,{className:n,children:(0,u.jsx)(be,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.A)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,ke.zK)(r),i=(0,we.QB)(t,r),s=a?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>s||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,ke.zK)(r),i=(0,we.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,we.Vd)(r)[0],i=t??a.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:c,hash:d}=(0,s.zy)(),p=(0,ke.zK)(n),f=(0,ke.jh)(n),{savePreferredVersionName:m}=(0,xe.g1)(n),h=[...o,...f.map((e=>{const t=p.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...a],g=(0,we.Vd)(n)[0],b=t&&h.length>1?(0,l.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,y=t&&h.length>1?void 0:Se(g).path;return h.length<=1?(0,u.jsx)(ae,{...i,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...i,mobile:t,label:b,to:y,items:h,isActive:r?()=>!1:void 0})}};function _e(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ee[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function Ce(){const e=(0,j.M)(),t=(0,k.p)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(_e,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ae(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Te(){const e=0===(0,k.p)().navbar.items.length,t=I();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(Ae,{onClick:()=>t.hide()}),t.content]})}function je(){const e=(0,j.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(M,{header:(0,u.jsx)(Y,{}),primaryMenu:(0,u.jsx)(Ce,{}),secondaryMenu:(0,u.jsx)(Te,{})}):null}const Ne={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Le(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.A)("navbar-sidebar__backdrop",e.className)})}function Re(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,k.p)(),i=(0,j.M)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,N.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.A)("navbar","navbar--fixed-top",n&&[Ne.navbarHideable,!d&&Ne.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Le,{onClick:i.toggle}),(0,u.jsx)(je,{})]})}var Pe=n(2181);const Oe="right";function De(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Ie(){const{toggle:e,shown:t}=(0,j.M)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(De,{})})}const Me={colorModeToggle:"colorModeToggle_DEke"};function Fe(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(Pe.k2,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(_e,{...e})},t)))})}function ze(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function Be(){const e=(0,j.M)(),t=(0,k.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Oe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(ze,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(Ie,{}),(0,u.jsx)(Q,{}),(0,u.jsx)(Fe,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Fe,{items:r}),(0,u.jsx)(V,{className:Me.colorModeToggle}),!o&&(0,u.jsx)(ve,{children:(0,u.jsx)(be,{})})]})})}function $e(){return(0,u.jsx)(Re,{children:(0,u.jsx)(Be,{})})}function Ue(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,s=(0,X.Ay)(n),l=(0,X.Ay)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Z.A,{className:"footer__link-item",...r?{href:a?l:r}:{to:s},...i,children:[o,r&&!(0,J.A)(r)&&(0,u.jsx)(te.A,{})]})}function qe(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(Ue,{item:t})},t.href??t.to)}function He(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(qe,{item:e},t)))})]})}function Ge(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(He,{column:e},t)))})}function Ve(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function We(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(Ue,{item:t})}function Qe(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(We,{item:e}),t.length!==n+1&&(0,u.jsx)(Ve,{})]},n)))})})}function Ke(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(Ge,{columns:t}):(0,u.jsx)(Qe,{links:t})}var Ye=n(1122);const Ze={footerLogoLink:"footerLogoLink_BH7S"};function Xe(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.hH)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(Ye.A,{className:(0,o.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function Je(e){let{logo:t}=e;return t.href?(0,u.jsx)(Z.A,{href:t.href,className:Ze.footerLogoLink,target:t.target,children:(0,u.jsx)(Xe,{logo:t})}):(0,u.jsx)(Xe,{logo:t})}function et(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function tt(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.A)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function nt(){const{footer:e}=(0,k.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(tt,{style:o,links:n&&n.length>0&&(0,u.jsx)(Ke,{links:n}),logo:r&&(0,u.jsx)(Je,{logo:r}),copyright:t&&(0,u.jsx)(et,{copyright:t})})}const rt=r.memo(nt),ot=(0,L.fM)([F.a,w.o,N.Tv,xe.VQ,i.Jx,function(e){let{children:t}=e;return(0,u.jsx)(R.y_,{children:(0,u.jsx)(j.e,{children:(0,u.jsx)(O,{children:t})})})}]);function at(e){let{children:t}=e;return(0,u.jsx)(ot,{children:t})}var it=n(1107);function st(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(it.A,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Pe.a2,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(Pe.bq,{error:t})})]})})})}const lt={mainWrapper:"mainWrapper_z2l0"};function ct(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,b.J)(),(0,u.jsxs)(at,{children:[(0,u.jsx)(i.be,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(T,{}),(0,u.jsx)($e,{}),(0,u.jsx)("div",{id:d,className:(0,o.A)(g.G.wrapper.main,lt.mainWrapper,r),children:(0,u.jsx)(a.A,{fallback:e=>(0,u.jsx)(st,{...e}),children:t})}),!n&&(0,u.jsx)(rt,{})]})}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(6540);var r=n(8774),o=n(6025),a=n(4586),i=n(6342),s=n(1122),l=n(4848);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.Ay)(t.src),dark:(0,o.Ay)(t.srcDark||t.src)},i=(0,l.jsx)(s.A,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.A)(),{navbar:{title:n,logo:s}}=(0,i.p)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.Ay)(s?.href||"/"),m=n?"":t,h=s?.alt??m;return(0,l.jsxs)(r.A,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:h,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);var r=n(5260),o=n(4848);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.A,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},1122:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});var r=n(6540),o=n(4164),a=n(2303),i=n(5293);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(4848);function c(e){let{className:t,children:n}=e;const c=(0,a.A)(),{colorMode:u}=(0,i.G)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.A)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>b,u:()=>c});var r=n(6540),o=n(8193),a=n(205),i=n(3109),s=n(4848);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function m(e){if(!o.A.canUseDOM)return e?u:d}function h(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),(0,s.jsx)(t,{ref:u,style:c?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),i?.(n))},className:l,children:o})}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.A)((()=>{t||i(!0)}),[t]),(0,a.A)((()=>{o&&c(t)}),[o,t]),o?(0,s.jsx)(h,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?g:h;return(0,s.jsx)(r,{...n})}},5041:(e,t,n)=>{"use strict";n.d(t,{M:()=>h,o:()=>m});var r=n(6540),o=n(2303),a=n(679),i=n(9532),s=n(6342),l=n(4848);const c=(0,a.Wf)("docusaurus.announcement.dismiss"),u=(0,a.Wf)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.p)(),t=(0,o.A)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>b,a:()=>g});var r=n(6540),o=n(8193),a=n(9532),i=n(679),s=n(6342),l=n(4848);const c=r.createContext(void 0),u="theme",d=(0,i.Wf)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>o.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),h=e=>{d.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.p)(),[o,a]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&h(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new a.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},5597:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>b,g1:()=>v});var r=n(6540),o=n(4070),a=n(7065),i=n(6342),s=n(1754),l=n(9532),c=n(679),u=n(4848);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,c.Wf)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.Wf)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.Wf)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function h(){const e=(0,o.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=h();return(0,u.jsx)(m.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return s.C5?(0,u.jsx)(g,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function y(){const e=(0,r.useContext)(m);if(!e)throw new l.dV("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.W);const t=(0,o.ht)(e),[n,i]=y(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},6588:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,t:()=>c});var r=n(6540),o=n(9532),a=n(4848);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.dV("DocsSidebarProvider");return e}},2252:(e,t,n)=>{"use strict";n.d(t,{n:()=>s,r:()=>l});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.dV("DocsVersionProvider");return e}},9876:(e,t,n)=>{"use strict";n.d(t,{e:()=>f,M:()=>m});var r=n(6540),o=n(5600),a=n(4581),i=n(6347),s=n(9532);function l(e){!function(e){const t=(0,i.W6)(),n=(0,s._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(6342),u=n(4848);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.YL)(),{items:t}=(0,c.p)().navbar;return 0===t.length&&!e.component}(),t=(0,a.l)(),n=!e&&"mobile"===t,[i,s]=(0,r.useState)(!1);l((()=>{if(i)return s(!1),!1}));const u=(0,r.useCallback)((()=>{s((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function f(e){let{children:t}=e;const n=p();return(0,u.jsx)(d.Provider,{value:n,children:t})}function m(){const e=r.useContext(d);if(void 0===e)throw new s.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>c,YL:()=>l,y_:()=>s});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.dV("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.dV("NavbarSecondaryMenuContentProvider");const[,s]=a,l=(0,o.Be)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>o,J:()=>a});var r=n(6540);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(6540),o=n(8193);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!o.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},1754:(e,t,n)=>{"use strict";n.d(t,{Nr:()=>f,w8:()=>g,C5:()=>p,B5:()=>E,Vd:()=>w,QB:()=>S,fW:()=>x,OF:()=>k,Y:()=>y});var r=n(6540),o=n(6347),a=n(2831),i=n(4070),s=n(5597),l=n(2252),c=n(6588);function u(e){return Array.from(new Set(e))}var d=n(9169);const p=!!i.Gy;function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}const m=(e,t)=>void 0!==e&&(0,d.ys)(e,t),h=(e,t)=>e.some((e=>g(e,t)));function g(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||h(e.items,t))}function b(e,t){switch(e.type){case"category":return g(e,t)||e.items.some((e=>b(e,t)));case"link":return!e.unlisted||g(e,t);default:return!0}}function y(e,t){return(0,r.useMemo)((()=>e.filter((e=>b(e,t)))),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.ys)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.ys)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function k(){const e=(0,c.t)(),{pathname:t}=(0,o.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function w(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,s.g1)(e),o=(0,i.r7)(e);return(0,r.useMemo)((()=>u([t,n,o].filter(Boolean))),[t,n,o])}function x(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t}=e;const n=(0,o.zy)(),r=(0,l.r)(),i=t.routes,s=i.find((e=>(0,o.B6)(n.pathname,e)));if(!s)return null;const c=s.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,a.v)(i),sidebarName:c,sidebarItems:u}}},2181:(e,t,n)=>{"use strict";n.d(t,{bq:()=>u,MN:()=>c,a2:()=>l,k2:()=>d});var r=n(6540),o=n(1312),a=n(440);const i={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};var s=n(4848);function l(e){return(0,s.jsx)("button",{type:"button",...e,children:(0,s.jsx)(o.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function c(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)("div",{className:i.errorBoundaryFallback,children:[(0,s.jsx)("p",{children:t.message}),(0,s.jsx)(l,{onClick:n})]})}function u(e){let{error:t}=e;const n=(0,a.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,s.jsx)("p",{className:i.errorBoundaryError,children:n})}class d extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}},1003:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>d,Jx:()=>m});var r=n(6540),o=n(4164),a=n(5260),i=n(3102);function s(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(6025),c=n(4586);var u=n(4848);function d(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const s=function(e){const{siteConfig:t}=(0,c.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.hH)(),p=o?d(o,{absolute:!0}):void 0;return(0,u.jsxs)(a.A,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,u.jsx)("meta",{property:"og:image",content:p}),p&&(0,u.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),s=(0,o.A)(i,t);return(0,u.jsxs)(p.Provider,{value:s,children:[(0,u.jsx)(a.A,{children:(0,u.jsx)("html",{className:s})}),n]})}function m(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(f,{className:(0,o.A)(r,a),children:t})}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>c,ZC:()=>s,_q:()=>i,dV:()=>l,fM:()=>u});var r=n(6540),o=n(205),a=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,o.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,o.A)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>s,ys:()=>i});var r=n(6540),o=n(8328),a=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>p,Tv:()=>c,gk:()=>f});var r=n(6540),o=n(8193),a=n(2303),i=(n(205),n(9532)),s=n(4848);const l=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,s.jsx)(l.Provider,{value:n,children:t})}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const d=()=>o.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(d()),a=(0,i._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},2967:(e,t,n)=>{"use strict";n.d(t,{Cy:()=>r,tU:()=>o});n(4586);const r="default";function o(e,t){return`docs-${e}-${t}`}},679:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>c});n(6540);const r=JSON.parse('{"N":"localStorage","M":""}'),o=r.N;function a(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function i(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){const n=`${e}${r.M}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(n);const o=i(t?.persistence);return null===o?l:{get:()=>{try{return o.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=o.getItem(n);o.setItem(n,e),a({key:n,oldValue:t,newValue:e,storage:o})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=o.getItem(n);o.removeItem(n),a({key:n,oldValue:e,newValue:null,storage:o})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===o&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),o=n(6347),a=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.A)(),{pathname:l}=(0,o.zy)(),c=(0,a.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),o=n(6347),a=n(9532);function i(e){const t=(0,o.zy)(),n=(0,a.ZC)(t),i=(0,a._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var r=n(4586);function o(){return(0,r.A)().siteConfig.themeConfig}},2983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=void 0;const r=n(2566);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,n?o(l):a(l));var l;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},440:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(2983);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return o.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return o.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return o.removeTrailingSlash}});var a=n(2566);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return a.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return a.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return a.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return a.removePrefix}});var i=n(253);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},2566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=void 0,t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>k,TM:()=>C,yJ:()=>f,sC:()=>T,AO:()=>p});var r=n(8168);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(1561);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.A)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,h(),k.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(k.entries[k.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=k.index+e;return t>=0&&t{"use strict";var r=n(4363),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),h=l(n),g=0;g{"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},5902:(e,t,n)=>{"use strict";n.r(t)},4823:(e,t,n)=>{"use strict";n.r(t)},119:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},6969:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},8722:(e,t,n)=>{const r=n(6969),o=n(8380),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(3157).resolve(t)],delete Prism.languages[e],n(3157)(t),a.add(e)}))}i.silent=!1,e.exports=i},9700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l=a.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++o;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),y=[];h&&y.push.apply(y,i([h])),y.push(g),b&&y.push.apply(y,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},8692:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=8692},3157:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3157},8380:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var s={},l=e[r];if(l){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in s))for(var i in o(t,a),s[t]=!0,n[t])s[i]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[r]=s,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,s){var l=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(l);i=i.map(c),s=(s||[]).map(c);var u=n(i),d=n(s);i.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(l),m=u;o(m);){for(var h in p={},m){var g=l[h];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in u))for(var y in f(b))if(y in u){p[b]=!0;break}for(var v in m=p)u[v]=!0}var k={getIds:function(){var e=[];return k.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,s={},l={};function c(e){if(e in s)return s[e];l[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var p=i(u.map((function(e){var t=c(e);return delete l[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return s[e]=o}for(var u in n)c(u);var d=[];for(var p in l)d.push(s[p]);return i(d)}(f,u,t,n)}};return k}}();e.exports=t},2694:(e,t,n)=>{"use strict";var r=n(6925);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),o=n(9982);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n