<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <meta
      name="description"
      content="Browse 30+ JavaScript barcode scanning samples including framework integrations (Angular, React, Vue, Next.js, etc.) and real-world scenarios. Try live demos and explore source code."
    />
    <link rel="icon" href="./favicon.ico" type="image/x-icon" />
    <link rel="canonical" href="https://demo.dynamsoft.com/Samples/DBR/JS/index.html" />
    <title>Dynamsoft Barcode Reader Samples</title>
  </head>

  <body>
    <!-- This is a sample routing page. SDK users do not need to study this html. -->
    <style>
      .samples-widget {
        text-align: center;
        font-family: "Open Sans", sans-serif;
        background-color: #ffffff;
        margin: 20px;
      }
      .filetree .ds-logo {
        height: 6vh;
        background: url(logo-dynamsoft-black.svg) no-repeat 0;
        background-size: contain;
      }
    </style>
    <!--
        For document, copy start from here
        search `href="scenarios` replace to `href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios`
    -->
    <style>
      /* `balloon.min.css` used for tooltip styling */
      :root {
        --balloon-border-radius: 6px;
        /* use a slightly opaque background to mask underlying page text */
        --balloon-color: rgba(36,41,46,0.95);
        --balloon-text-color: #fff;
        --balloon-font-size: 13px;
        --balloon-move: 4px;
      }
      button[aria-label][data-balloon-pos] {
        overflow: visible;
      }
      [aria-label][data-balloon-pos] {
        position: relative;
        cursor: pointer;
      }
      [aria-label][data-balloon-pos]:after {
        opacity: 0;
        pointer-events: none;
        transition: all 0.18s ease-out 0.18s;
        text-indent: 0;
        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
        font-weight: normal;
        font-style: normal;
        text-shadow: none;
        font-size: var(--balloon-font-size);
        /* solid background and slight blur to improve legibility over page content */
        background: var(--balloon-color);
        color: var(--balloon-text-color);
        border-radius: var(--balloon-border-radius);
        content: attr(aria-label);
        padding: 0.55em 0.9em;
        position: absolute;
        display: inline-block;
        white-space: nowrap;
        z-index: 9999;
        box-shadow: 0 6px 18px rgba(0,0,0,0.35);
        -webkit-backdrop-filter: blur(3px);
        backdrop-filter: blur(3px);
        max-width: 90vw;
        overflow-wrap: break-word;
      }
      [aria-label][data-balloon-pos]:before {
        width: 0;
        height: 0;
        border: 5px solid transparent;
        border-top-color: var(--balloon-color);
        opacity: 0;
        pointer-events: none;
        transition: all 0.18s ease-out 0.18s;
        content: "";
        position: absolute;
        z-index: 9999;
      }
      [aria-label][data-balloon-pos]:hover:before,
      [aria-label][data-balloon-pos]:hover:after,
      [aria-label][data-balloon-pos][data-balloon-visible]:before,
      [aria-label][data-balloon-pos][data-balloon-visible]:after,
      [aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:before,
      [aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:after {
        opacity: 1;
        pointer-events: none;
      }
      [aria-label][data-balloon-pos].font-awesome:after {
        font-family: FontAwesome, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
      }
      [aria-label][data-balloon-pos][data-balloon-break]:after {
        white-space: pre;
      }
      [aria-label][data-balloon-pos][data-balloon-break][data-balloon-length]:after {
        white-space: pre-line;
        word-break: break-word;
      }
      [aria-label][data-balloon-pos][data-balloon-blunt]:before,
      [aria-label][data-balloon-pos][data-balloon-blunt]:after {
        transition: none;
      }
      [aria-label][data-balloon-pos][data-balloon-pos="up"]:hover:after,
      [aria-label][data-balloon-pos][data-balloon-pos="up"][data-balloon-visible]:after,
      [aria-label][data-balloon-pos][data-balloon-pos="down"]:hover:after,
      [aria-label][data-balloon-pos][data-balloon-pos="down"][data-balloon-visible]:after {
        transform: translate(-50%, 0);
      }
      [aria-label][data-balloon-pos][data-balloon-pos="up"]:hover:before,
      [aria-label][data-balloon-pos][data-balloon-pos="up"][data-balloon-visible]:before,
      [aria-label][data-balloon-pos][data-balloon-pos="down"]:hover:before,
      [aria-label][data-balloon-pos][data-balloon-pos="down"][data-balloon-visible]:before {
        transform: translate(-50%, 0);
      }
      [aria-label][data-balloon-pos][data-balloon-pos*="-left"]:after {
        left: 0;
      }
      [aria-label][data-balloon-pos][data-balloon-pos*="-left"]:before {
        left: 5px;
      }
      [aria-label][data-balloon-pos][data-balloon-pos*="-right"]:after {
        right: 0;
      }
      [aria-label][data-balloon-pos][data-balloon-pos*="-right"]:before {
        right: 5px;
      }
      [aria-label][data-balloon-pos][data-balloon-po*="-left"]:hover:after,
      [aria-label][data-balloon-pos][data-balloon-po*="-left"][data-balloon-visible]:after,
      [aria-label][data-balloon-pos][data-balloon-pos*="-right"]:hover:after,
      [aria-label][data-balloon-pos][data-balloon-pos*="-right"][data-balloon-visible]:after {
        transform: translate(0, 0);
      }
      [aria-label][data-balloon-pos][data-balloon-po*="-left"]:hover:before,
      [aria-label][data-balloon-pos][data-balloon-po*="-left"][data-balloon-visible]:before,
      [aria-label][data-balloon-pos][data-balloon-pos*="-right"]:hover:before,
      [aria-label][data-balloon-pos][data-balloon-pos*="-right"][data-balloon-visible]:before {
        transform: translate(0, 0);
      }
      [aria-label][data-balloon-pos][data-balloon-pos^="up"]:before,
      [aria-label][data-balloon-pos][data-balloon-pos^="up"]:after {
        bottom: 100%;
        transform-origin: top;
        transform: translate(0, var(--balloon-move));
      }
      [aria-label][data-balloon-pos][data-balloon-pos^="up"]:after {
        margin-bottom: 10px;
      }
      [aria-label][data-balloon-pos][data-balloon-pos="up"]:before,
      [aria-label][data-balloon-pos][data-balloon-pos="up"]:after {
        left: 50%;
        transform: translate(-50%, var(--balloon-move));
      }
      [aria-label][data-balloon-pos][data-balloon-pos^="down"]:before,
      [aria-label][data-balloon-pos][data-balloon-pos^="down"]:after {
        top: 100%;
        transform: translate(0, calc(var(--balloon-move) * -1));
      }
      [aria-label][data-balloon-pos][data-balloon-pos^="down"]:after {
        margin-top: 10px;
      }
      [aria-label][data-balloon-pos][data-balloon-pos^="down"]:before {
        width: 0;
        height: 0;
        border: 5px solid transparent;
        border-bottom-color: var(--balloon-color);
      }
      [aria-label][data-balloon-pos][data-balloon-pos="down"]:after,
      [aria-label][data-balloon-pos][data-balloon-pos="down"]:before {
        left: 50%;
        transform: translate(-50%, calc(var(--balloon-move) * -1));
      }
      [aria-label][data-balloon-pos][data-balloon-pos="left"]:hover:after,
      [aria-label][data-balloon-pos][data-balloon-pos="left"][data-balloon-visible]:after,
      [aria-label][data-balloon-pos][data-balloon-pos="right"]:hover:after,
      [aria-label][data-balloon-pos][data-balloon-pos="right"][data-balloon-visible]:after {
        transform: translate(0, -50%);
      }
      [aria-label][data-balloon-pos][data-balloon-pos="left"]:hover:before,
      [aria-label][data-balloon-pos][data-balloon-pos="left"][data-balloon-visible]:before,
      [aria-label][data-balloon-pos][data-balloon-pos="right"]:hover:before,
      [aria-label][data-balloon-pos][data-balloon-pos="right"][data-balloon-visible]:before {
        transform: translate(0, -50%);
      }
      [aria-label][data-balloon-pos][data-balloon-pos="left"]:after,
      [aria-label][data-balloon-pos][data-balloon-pos="left"]:before {
        right: 100%;
        top: 50%;
        transform: translate(var(--balloon-move), -50%);
      }
      [aria-label][data-balloon-pos][data-balloon-pos="left"]:after {
        margin-right: 10px;
      }
      [aria-label][data-balloon-pos][data-balloon-pos="left"]:before {
        width: 0;
        height: 0;
        border: 5px solid transparent;
        border-left-color: var(--balloon-color);
      }
      [aria-label][data-balloon-pos][data-balloon-pos="right"]:after,
      [aria-label][data-balloon-pos][data-balloon-pos="right"]:before {
        left: 100%;
        top: 50%;
        transform: translate(calc(var(--balloon-move) * -1), -50%);
      }
      [aria-label][data-balloon-pos][data-balloon-pos="right"]:after {
        margin-left: 10px;
      }
      [aria-label][data-balloon-pos][data-balloon-pos="right"]:before {
        width: 0;
        height: 0;
        border: 5px solid transparent;
        border-right-color: var(--balloon-color);
      }
      [aria-label][data-balloon-pos][data-balloon-length]:after {
        white-space: normal;
      }
      [aria-label][data-balloon-pos][data-balloon-length="small"]:after {
        width: 80px;
      }
      [aria-label][data-balloon-pos][data-balloon-length="medium"]:after {
        width: 150px;
      }
      [aria-label][data-balloon-pos][data-balloon-length="large"]:after {
        width: 260px;
      }
      [aria-label][data-balloon-pos][data-balloon-length="xlarge"]:after {
        width: 380px;
      }
      @media screen and (max-width: 768px) {
        [aria-label][data-balloon-pos][data-balloon-length="xlarge"]:after {
          width: 90vw;
        }
      }
      [aria-label][data-balloon-pos][data-balloon-length="fit"]:after {
        width: 100%;
      }
    </style>
    <style>
      .filetree {
        text-align: left;
        background-color: #f8f9fa;
        border: 2px solid #e1e4e8;
        border-radius: 8px;
        margin: 0 auto;
        max-width: 1200px;
        padding: 24px 40px;
        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
      }

      .filetree h3 {
        margin: 2em 0 1em 0;
        padding-bottom: 0.5em;
        color: #24292e;
        font-weight: 600;
        font-size: 1.3em;
        border-bottom: 2px solid #e1e4e8;
      }

      .filetree h3:first-of-type {
        margin-top: 0.5em;
      }

      .filetree .file {
        display: block;
        font-family: Roboto, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;
        letter-spacing: 0.3px;
        line-height: 32px;
        color: #24292e;
      }

      /* Category headings (Workflow Examples, Barcode Type Focused, etc.) */
      .filetree .children > .file:not(:has(span)) {
        font-weight: 600;
        color: #586069;
        margin-top: 1.2em;
        margin-bottom: 0.4em;
        font-size: 1.05em;
        padding: 2px 0 2px 4px;
        border-left: 3px solid #d1d5da;
        background-color: rgba(88, 96, 105, 0.03);
      }

      .filetree .children > .file:not(:has(span))::before {
        display: none;
      }

      /* First category in each section */
      .filetree .children > .file:not(:has(span)):first-child {
        margin-top: 0.6em;
      }

      /* Add spacing between main sections */
      .filetree > .file:has(h3) {
        margin-top: 2em;
      }

      .filetree > .file:has(h3):first-child {
        margin-top: 0;
      }

      .filetree .children {
        padding-left: 24px;
        position: relative;
      }

      /* Two-column layout for all top-level sample lists */
      .filetree > .children {
        display: grid;
        grid-template-columns: repeat(2, 1fr);
        gap: 0.5em 32px;
      }

      /* Category headings span full width */
      .filetree > .children > .file:not(:has(span)) {
        grid-column: 1 / -1;
      }

      /* Nested children under categories also need grid */
      .filetree > .children > .children {
        grid-column: 1 / -1;
        display: grid;
        grid-template-columns: repeat(2, 1fr);
        gap: 0.3em 32px;
      }

      .filetree .children .file {
        position: relative;
      }

      .filetree .children .file::before {
        content: "";
        left: -18px;
        bottom: 16px;
        width: 16px;
        height: 20px;
        position: absolute;
        border-width: 0 0 1px 1px;
        border-style: solid;
        border-color: #e1e4e8;
        border-radius: 0 0 0 3px;
      }

      .filetree .button.title {
        line-height: 1.5;
        color: #0066cc;
        text-decoration: none;
        transition: color 0.2s ease;
      }

      .filetree .button.title:hover {
        color: #0052a3;
        text-decoration: underline;
      }

      /* GitHub label - non-clickable sample name with tech icon */
      .filetree .github-label {
        display: inline-block;
        font-family: Roboto, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;
        letter-spacing: 0.3px;
        color: #24292e;
        cursor: default;
      }

      .filetree .github-label::before {
        content: "";
        display: inline-block;
        width: 16px;
        height: 16px;
        margin-right: 6px;
        vertical-align: text-bottom;
        background-size: contain;
        background-repeat: no-repeat;
        opacity: 0.6;
      }

      /* Framework-specific icons for labels */
      .filetree .github-label.angular::before {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23DD0031'%3E%3Cpath d='M9.931 12.645h4.138l-2.07-4.908m0-7.737L.68 3.982l1.726 14.771L12 24l9.596-5.242L23.32 3.984 11.999.001zm7.064 18.31l-2.096-1.218-4.9-2.686-4.898 2.686-2.098 1.218-1.726-14.771L12 3.982l9.596 5.242-1.726 14.771z'/%3E%3C/svg%3E");
      }

      .filetree .github-label.react::before {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2361DAFB'%3E%3Cpath d='M12 10.11c1.03 0 1.87.84 1.87 1.89 0 1-.84 1.85-1.87 1.85S10.13 13 10.13 12c0-1.05.84-1.89 1.87-1.89M7.37 20c.63.38 2.01-.2 3.6-1.7-.52-.59-1.03-1.23-1.51-1.9a21 21 0 0 1-2.4-.36c-.51 2.14-.32 3.61.31 3.96m.71-5.74l-.29-.51c-.11.29-.22.58-.29.86.27.06.57.11.88.16l-.3-.51m6.54-.76l.81-1.5-.81-1.5c-.3-.53-.62-1-.91-1.47C13.17 9 12.6 9 12 9s-1.17 0-1.71.03c-.29.47-.61.94-.91 1.47L8.57 12l.81 1.5c.3.53.62 1 .91 1.47.54.03 1.11.03 1.71.03s1.17 0 1.71-.03c.29-.47.61-.94.91-1.47M12 6.78c-.19.22-.39.45-.59.72h1.18c-.2-.27-.4-.5-.59-.72m0 10.44c.19-.22.39-.45.59-.72h-1.18c.2.27.4.5.59.72M16.62 4c-.62-.38-2 .2-3.59 1.7.52.59 1.03 1.23 1.51 1.9.82.08 1.63.2 2.4.36.51-2.14.32-3.61-.32-3.96m-.7 5.74l.29.51c.11-.29.22-.58.29-.86-.27-.06-.57-.11-.88-.16l.3.51m1.45-7.05c1.47.84 1.63 3.05 1.01 5.63 2.54.75 4.37 1.99 4.37 3.68s-1.83 2.93-4.37 3.68c.62 2.58.46 4.79-1.01 5.63-1.46.84-3.45-.12-5.37-1.95-1.92 1.83-3.91 2.79-5.38 1.95-1.46-.84-1.62-3.05-1-5.63-2.54-.75-4.37-1.99-4.37-3.68s1.83-2.93 4.37-3.68c-.62-2.58-.46-4.79 1-5.63 1.47-.84 3.46.12 5.38 1.95 1.92-1.83 3.91-2.79 5.37-1.95M17.08 12c.34.75.64 1.5.89 2.26 2.1-.63 3.28-1.53 3.28-2.26s-1.18-1.63-3.28-2.26c-.25.76-.55 1.51-.89 2.26M6.92 12c-.34-.75-.64-1.5-.89-2.26-2.1.63-3.28 1.53-3.28 2.26s1.18 1.63 3.28 2.26c.25-.76.55-1.51.89-2.26m9 2.26l-.3.51c.31-.05.61-.1.88-.16-.07-.28-.18-.57-.29-.86l-.29.51m-2.89 4.04c1.59 1.5 2.97 2.08 3.59 1.7.64-.35.83-1.82.32-3.96-.77.16-1.58.28-2.4.36-.48.67-.99 1.31-1.51 1.9M8.08 9.74l.3-.51c-.31.05-.61.1-.88.16.07.28.18.57.29.86l.29-.51m2.89-4.04C9.38 4.2 8 3.62 7.37 4c-.63.35-.82 1.82-.31 3.96a21 21 0 0 1 2.4-.36c.48-.67.99-1.31 1.51-1.9z'/%3E%3C/svg%3E");
      }

      .filetree .github-label.vue::before {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%234FC08D'%3E%3Cpath d='M2 3h3.5L12 15l6.5-12H22L12 21 2 3m4.5 0h3L12 7.58 14.5 3h3L12 13.08 6.5 3z'/%3E%3C/svg%3E");
      }

      .filetree .github-label.svelte::before {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23FF3E00'%3E%3Cpath d='M10.354 21.125a4.44 4.44 0 0 1-4.765-1.767 4.109 4.109 0 0 1-.703-3.107 3.898 3.898 0 0 1 .134-.522l.105-.321.287.21a7.21 7.21 0 0 0 2.186 1.092l.208.063-.02.208a1.253 1.253 0 0 0 .226.83c.214.28.538.465.904.512a1.379 1.379 0 0 0 .624-.04l.002-.001 6.717-2.439a1.379 1.379 0 0 0 .904-1.051 1.277 1.277 0 0 0-.205-.973 1.379 1.379 0 0 0-.904-.512 1.379 1.379 0 0 0-.624.04l-2.589.94a4.356 4.356 0 0 1-1.977.123 4.44 4.44 0 0 1-3.37-2.376 4.109 4.109 0 0 1-.703-3.107 4.43 4.43 0 0 1 2.782-3.396l6.717-2.439a4.356 4.356 0 0 1 1.977-.123 4.44 4.44 0 0 1 3.37 2.376c.26.537.417 1.127.456 1.73a3.898 3.898 0 0 1-.134.522l-.105.321-.287-.21a7.21 7.21 0 0 0-2.186-1.092l-.208-.063.02-.208a1.253 1.253 0 0 0-.226-.83 1.379 1.379 0 0 0-.904-.512 1.379 1.379 0 0 0-.624.04l-6.717 2.439a1.379 1.379 0 0 0-.904 1.051 1.277 1.277 0 0 0 .205.973c.214.28.538.465.904.512.216.025.434.006.624-.04l2.589-.94a4.356 4.356 0 0 1 1.977-.123 4.44 4.44 0 0 1 3.37 2.376c.26.537.417 1.127.456 1.73a4.109 4.109 0 0 1-.703 3.107 4.43 4.43 0 0 1-2.782 3.396l-6.717 2.439a4.356 4.356 0 0 1-1.977.123z'/%3E%3C/svg%3E");
      }

      .filetree .github-label.next::before {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000000'%3E%3Cpath d='M11.572 0c-.176 0-.31.001-.358.007a19.76 19.76 0 0 1-.364.033C7.443.346 4.25 2.185 2.228 5.012a11.875 11.875 0 0 0-2.119 5.243c-.096.659-.108.854-.108 1.747s.012 1.089.108 1.748c.652 4.506 3.86 8.292 8.209 9.695.779.25 1.6.422 2.534.525.363.04 1.935.04 2.299 0 1.611-.178 2.977-.577 4.323-1.264.207-.106.247-.134.219-.158-.02-.013-.9-1.193-1.955-2.62l-1.919-2.592-2.404-3.558a338.739 338.739 0 0 0-2.422-3.556c-.009-.002-.018 1.579-.023 3.51-.007 3.38-.01 3.515-.052 3.595a.426.426 0 0 1-.206.214c-.075.037-.14.044-.495.044H7.81l-.108-.068a.438.438 0 0 1-.157-.171l-.049-.106.005-4.703.007-4.705.073-.091a.637.637 0 0 1 .174-.143c.096-.047.134-.051.54-.051.478 0 .558.018.682.154.035.038 1.337 1.999 2.895 4.361a10760.433 10760.433 0 0 0 4.735 7.17l1.9 2.879.096-.063a12.317 12.317 0 0 0 2.466-2.163 11.944 11.944 0 0 0 2.824-6.134c.096-.66.108-.854.108-1.748 0-.893-.012-1.088-.108-1.747-.652-4.506-3.859-8.292-8.208-9.695a12.597 12.597 0 0 0-2.499-.523A33.119 33.119 0 0 0 11.573 0zm4.069 7.217c.347 0 .408.005.486.047a.473.473 0 0 1 .237.277c.018.06.023 1.365.018 4.304l-.006 4.218-0.744-1.14-.746-1.14v-3.066c0-1.982.01-3.097.023-3.15a.478.478 0 0 1 .233-.296c.096-.05.13-.054.5-.054z'/%3E%3C/svg%3E");
      }

      .filetree .github-label.nuxt::before {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2300DC82'%3E%3Cpath d='M19.724 20.272l-3.524-6.282c-.057-.1-.165-.165-.28-.165H14.4l.332-.607h1.984c.117 0 .224.066.28.165l2.024 3.614 3.862-6.89-3.862-6.89a.328.328 0 0 0-.28-.165h-7.702a.328.328 0 0 0-.28.165l-3.862 6.89 2.024 3.614h.001l.332.607H6.738a.328.328 0 0 0-.28-.165L2.596 7.28 6.458.39c.057-.1.165-.165.28-.165h7.702c.117 0 .224.066.28.165l7.724 13.78a.328.328 0 0 1 0 .328l-2.44 4.352c-.057.1-.165.165-.28.165h-7.702a.328.328 0 0 1-.28-.165l-.332-.607h1.984l1.54 2.747a.328.328 0 0 0 .28.165h3.028a.328.328 0 0 0 .28-.165l2.024-3.614z'/%3E%3C/svg%3E");
      }

      .filetree .github-label.blazor::before {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23512BD4'%3E%3Cpath d='M23.834 8.101a13.912 13.912 0 0 1-13.643 11.72a10.105 10.105 0 0 1-1.994-.12a6.111 6.111 0 0 1-5.082-5.761a5.934 5.934 0 0 1 11.867-.084c.025.983-.401 1.846-1.277 1.871c-.936 0-1.374-.668-1.374-1.567v-2.5a1.531 1.531 0 0 0-1.52-1.533H8.715a3.648 3.648 0 1 0 2.695 6.08l.073-.11l.074.121a2.58 2.58 0 0 0 2.2 1.048a2.909 2.909 0 0 0 2.695-3.04a7.912 7.912 0 0 0-.217-1.933a7.404 7.404 0 0 0-14.64 1.603a7.497 7.497 0 0 0 7.308 7.405s.549.05 1.167.035a15.803 15.803 0 0 0 8.475-2.528c.036-.025.072.025.048.061a12.44 12.44 0 0 1-9.69 3.963a8.744 8.744 0 0 1-8.9-9.479a9.404 9.404 0 0 1 18.686-.744c.049.534.074 1.06.074 1.569v.217a.422.422 0 0 1-.423.423h-.121a.422.422 0 0 1-.423-.423v-.217a7.405 7.405 0 1 0-14.64 1.603a7.497 7.497 0 0 0 7.308 7.405a13.912 13.912 0 0 0 13.643-11.72z'/%3E%3C/svg%3E");
      }

      .filetree .github-label.electron::before {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2347848F'%3E%3Cpath d='M12.001 2.361c.635 0 1.258.053 1.865.155a9.926 9.926 0 0 1 7.618 7.618 9.952 9.952 0 0 1 0 3.732 9.926 9.926 0 0 1-7.618 7.618 9.952 9.952 0 0 1-3.732 0 9.926 9.926 0 0 1-7.618-7.618 9.952 9.952 0 0 1 0-3.732 9.926 9.926 0 0 1 7.618-7.618c.608-.102 1.23-.155 1.867-.155m0-2.361C5.383 0 0 5.383 0 12s5.383 12 12 12 12-5.383 12-12S18.617 0 12.001 0zm-.866 5.27a1.622 1.622 0 1 0 1.732 0 1.622 1.622 0 0 0-1.732 0z'/%3E%3C/svg%3E");
      }

      .filetree .github-label.capacitor::before {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23119EFF'%3E%3Cpath d='M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0zm0 3.6c4.632 0 8.4 3.768 8.4 8.4 0 4.632-3.768 8.4-8.4 8.4-4.632 0-8.4-3.768-8.4-8.4 0-4.632 3.768-8.4 8.4-8.4zm0 2.4c-3.312 0-6 2.688-6 6s2.688 6 6 6 6-2.688 6-6-2.688-6-6-6z'/%3E%3C/svg%3E");
      }

      .filetree .github-label.pwa::before {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%235A0FC8'%3E%3Cpath d='M20.5796 14.7979L18.7976 21.5383C18.7166 21.8511 18.4319 22.0676 18.1053 22.0676H5.89467C5.56809 22.0676 5.28339 21.8511 5.20238 21.5383L3.42036 14.7979C3.35488 14.5477 3.42036 14.2804 3.59845 14.0867L11.7038 4.98339C11.8819 4.78968 12.1181 4.78968 12.2962 4.98339L20.4015 14.0867C20.5796 14.2804 20.6451 14.5477 20.5796 14.7979Z'/%3E%3Cpath d='M9.60605 8.30682L8.48438 18.9754H5.89467L7.37548 12.8498L9.60605 8.30682Z' fill='white'/%3E%3Cpath d='M14.3939 8.30682L15.5156 18.9754H18.1053L16.6245 12.8498L14.3939 8.30682Z' fill='white'/%3E%3Cpath d='M12 8.30682L10.4394 18.9754H13.5606L12 8.30682Z' fill='white'/%3E%3C/svg%3E");
      }

      .filetree .github-label.js::before,
      .filetree .github-label.typescript::before {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23F7DF1E'%3E%3Cpath d='M0 0h24v24H0V0zm22.034 18.276c-.175-1.095-.888-2.015-3.003-2.873-.736-.345-1.554-.585-1.797-1.14-.091-.33-.105-.51-.046-.705.15-.646.915-.84 1.515-.66.39.12.75.42.976.9 1.034-.676 1.034-.676 1.755-1.125-.27-.42-.404-.601-.586-.78-.63-.705-1.469-1.065-2.834-1.034l-.705.089c-.676.165-1.32.525-1.71 1.005-1.14 1.291-.811 3.541.569 4.471 1.365 1.02 3.361 1.244 3.616 2.205.24 1.17-.87 1.545-1.966 1.41-.811-.18-1.26-.586-1.755-1.336l-1.83 1.051c.21.48.45.689.81 1.109 1.74 1.756 6.09 1.666 6.871-1.004.029-.09.24-.705.074-1.65l.046.067zm-8.983-7.245h-2.248c0 1.938-.009 3.864-.009 5.805 0 1.232.063 2.363-.138 2.711-.33.689-1.18.601-1.566.48-.396-.196-.597-.466-.83-.855-.063-.105-.11-.196-.127-.196l-1.825 1.125c.305.63.75 1.172 1.324 1.517.855.51 2.004.675 3.207.405.783-.226 1.458-.691 1.811-1.411.51-.93.402-2.07.397-3.346.012-2.054 0-4.109 0-6.179l.004-.056z'/%3E%3C/svg%3E");
      }

      .filetree .github-label.requirejs::before {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23E44D26'%3E%3Cpath d='M12 0L2.524 3.804 4.012 20.238 12 24l7.988-3.762 1.488-16.434L12 0zm0 2.532l6.24 2.34-1.167 12.888L12 19.468l-5.073-1.708-1.167-12.888L12 2.532z'/%3E%3C/svg%3E");
      }

      .filetree .github-label.webview::before {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%233DDC84'%3E%3Cpath d='M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0zm0 2c5.523 0 10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2zm0 3a7 7 0 0 0-7 7c0 3.866 3.134 7 7 7s7-3.134 7-7-3.134-7-7-7z'/%3E%3C/svg%3E");
      }

      .filetree .github-label.debug::before {
        width: 22px;
        height: 22px;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23FF6B6B'%3E%3Cpath d='M14,12h-4v-2h4M14,16h-4v-2h4M20,8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17,4.41L15.59,3l-2.17,2.17C12.96,5.06,12.49,5,12,5s-.96.06-1.41.17L8.41,3L7,4.41l1.62,1.63C7.88,6.55,7.26,7.22,6.81,8H4v2h2.09c-.05.33-.09.66-.09,1v1H4v2h2v1c0,.34.04.67.09,1H4v2h2.81c1.04,1.79,2.97,3,5.19,3s4.15-1.21,5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8z'/%3E%3C/svg%3E");
      }

      /* Demo link - play icon before text */
      .filetree .button.title.demo-link::before {
        content: "";
        display: inline-block;
        width: 16px;
        height: 16px;
        margin-right: 6px;
        vertical-align: text-bottom;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230066cc'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M6.271 5.055a.5.5 0 0 1 .52.038l3.5 2.5a.5.5 0 0 1 0 .814l-3.5 2.5A.5.5 0 0 1 6 10.5v-5a.5.5 0 0 1 .271-.445z'/%3E%3C/svg%3E");
        background-size: contain;
        background-repeat: no-repeat;
        opacity: 0.7;
      }

      .filetree .button.title.demo-link:hover::before {
        opacity: 1;
      }

      /* Source code link - inline GitHub icon */
      .filetree .button.title.source-link {
        color: #586069;
        font-size: 0.9em;
        margin-left: 8px;
        padding-left: 8px;
        border-left: 1px solid #e1e4e8;
      }

      .filetree .button.title.source-link::before {
        content: "";
        display: inline-block;
        width: 14px;
        height: 14px;
        margin-right: 5px;
        vertical-align: text-bottom;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23586069'%3E%3Cpath fill-rule='evenodd' d='M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z'%3E%3C/path%3E%3C/svg%3E");
        background-size: contain;
        background-repeat: no-repeat;
        opacity: 0.6;
      }

      .filetree .button.title.source-link:hover {
        color: #0366d6;
      }

      .filetree .button.title.source-link:hover::before {
        opacity: 1;
      }

      /* README link styling - similar to source-link but with document icon */
      .filetree .button.title.readme-link {
        color: #24292e;
        font-size: 0.95em;
        text-decoration: none;
        font-family: Roboto, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;
        letter-spacing: 0.3px;
      }

      .filetree .button.title.readme-link::before {
        content: "";
        display: inline-block;
        width: 14px;
        height: 14px;
        margin-right: 5px;
        vertical-align: text-bottom;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%235468FF'%3E%3Cpath d='M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0114.25 16h-8.5A1.75 1.75 0 014 14.25V1.75zm1.75-.25a.25.25 0 00-.25.25v12.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V4.664a.25.25 0 00-.073-.177l-2.914-2.914a.25.25 0 00-.177-.073H5.75z'/%3E%3Cpath d='M8 3a.75.75 0 01.75.75v3.5h3.5a.75.75 0 010 1.5h-3.5v3.5a.75.75 0 01-1.5 0v-3.5h-3.5a.75.75 0 010-1.5h3.5v-3.5A.75.75 0 018 3z'/%3E%3C/svg%3E");
        background-size: contain;
        background-repeat: no-repeat;
        opacity: 0.7;
      }

      .filetree .button.title.readme-link:hover {
        color: #5468ff;
      }

      .filetree .button.title.readme-link:hover::before {
        opacity: 1;
      }

      .filetree .button.title.readme-link::after {
        content: "";
        display: inline-block;
        width: 11px;
        height: 11px;
        margin-left: 5px;
        vertical-align: text-bottom;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23586069'%3E%3Cpath d='M3.75 2A1.75 1.75 0 002 3.75v8.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 12.25v-3.5a.75.75 0 00-1.5 0v3.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-8.5a.25.25 0 01.25-.25h3.5a.75.75 0 000-1.5h-3.5z'/%3E%3Cpath d='M6.854 6.146a.5.5 0 010 .708l-.354.353a.5.5 0 11-.707-.707l.353-.354a.5.5 0 01.708 0zM10 1.75a.75.75 0 01.75-.75h3.5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0V2.56l-4.72 4.72a.75.75 0 11-1.06-1.06l4.72-4.72h-2.69a.75.75 0 01-.75-.75z'/%3E%3C/svg%3E");
        background-size: contain;
        background-repeat: no-repeat;
        opacity: 0.5;
        transition: opacity 0.2s ease;
      }

      .filetree .button.title.readme-link:hover::after {
        opacity: 0.8;
      }

      /* Main README link styling */
      .filetree .main-readme-container {
        margin-bottom: 1.5em;
      }

      .filetree .main-readme-link {
        font-size: 1.05em;
      }

      /* Section header README links */
      .filetree .section-readme-link {
        font-size: 0.75em;
        margin-left: 10px;
      }

      /* External link indicator for source links */
      .filetree .button.title.source-link::after {
        content: "";
        display: inline-block;
        width: 11px;
        height: 11px;
        margin-left: 5px;
        vertical-align: text-bottom;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23586069'%3E%3Cpath d='M3.75 2A1.75 1.75 0 002 3.75v8.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 12.25v-3.5a.75.75 0 00-1.5 0v3.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-8.5a.25.25 0 01.25-.25h3.5a.75.75 0 000-1.5h-3.5z'/%3E%3Cpath d='M6.854 6.146a.5.5 0 010 .708l-.354.353a.5.5 0 11-.707-.707l.353-.354a.5.5 0 01.708 0zM10 1.75a.75.75 0 01.75-.75h3.5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0V2.56l-4.72 4.72a.75.75 0 11-1.06-1.06l4.72-4.72h-2.69a.75.75 0 01-.75-.75z'/%3E%3C/svg%3E");
        background-size: contain;
        background-repeat: no-repeat;
        opacity: 0.5;
        transition: opacity 0.2s ease;
      }

      .filetree .button.title.source-link:hover::after {
        opacity: 0.9;
      }

      /* Better spacing for sample items */
      .filetree .children .children .file {
        margin-bottom: 0;
      }

      /* Featured Section Container - Side by Side */
      .filetree .featured-container {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 16px;
        margin: 1em 0 2em 0;
      }

      .filetree .featured-box {
        border-radius: 8px;
        padding: 20px 24px;
        text-align: center;
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
        transition: transform 0.2s ease, box-shadow 0.2s ease;
        display: block;
        text-decoration: none;
        cursor: pointer;
        position: relative;
      }

      .filetree .featured-box:hover {
        transform: translateY(-2px);
        box-shadow: 0 6px 16px rgba(0, 0, 0, 0.12);
      }

      .filetree .featured-box:active {
        transform: translateY(0);
      }

      /* Quick Start - Purple Gradient */
      .filetree .quick-start {
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      }

      /* Official Demo - Pink/Red Gradient */
      .filetree .official-demo {
        background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
      }

      .filetree .featured-box .label {
        display: block;
        color: rgba(255, 255, 255, 0.9);
        font-size: 0.85em;
        font-weight: 600;
        text-transform: uppercase;
        letter-spacing: 1px;
        margin-bottom: 8px;
      }

      .filetree .featured-box .title {
        color: #ffffff;
        font-size: 1.15em;
        font-weight: 700;
        display: block;
        margin: 0;
      }

      .filetree .featured-box .description {
        color: rgba(255, 255, 255, 0.85);
        font-size: 0.9em;
        margin-top: 8px;
        line-height: 1.4;
      }

      /* Badge styles - shared by github-badge and guide-badge */
      .filetree .featured-box .github-badge,
      .filetree .featured-box .guide-badge {
        position: absolute;
        top: 12px;
        width: 32px;
        height: 32px;
        background-color: rgba(255, 255, 255, 0.2);
        border-radius: 50%;
        display: flex;
        align-items: center;
        justify-content: center;
        z-index: 10;
        transition: all 0.2s ease;
        backdrop-filter: blur(4px);
      }

      .filetree .featured-box .github-badge {
        right: 12px;
      }

      .filetree .featured-box .guide-badge {
        left: 12px;
      }

      .filetree .featured-box .github-badge:hover,
      .filetree .featured-box .guide-badge:hover {
        background-color: rgba(255, 255, 255, 0.35);
        transform: scale(1.15);
      }

      .filetree .featured-box .github-badge:active,
      .filetree .featured-box .guide-badge:active {
        transform: scale(0.95);
      }

      .filetree .featured-box .github-badge svg,
      .filetree .featured-box .guide-badge svg {
        display: block;
      }

      .filetree .title img,
      .filetree .title svg {
        height: 17px;
        vertical-align: middle;
      }

      /* Search Bar */
      .filetree .search-container {
        position: relative;
        margin: 1.5em auto 2em auto;
        max-width: 350px;
        transition: max-width 0.3s ease;
      }

      .filetree .search-container:focus-within {
        max-width: 600px;
      }

      .filetree .search-input {
        width: 100%;
        padding: 12px 45px 12px 16px;
        font-size: 15px;
        border: 2px solid #e1e4e8;
        border-radius: 8px;
        background-color: #ffffff;
        color: #24292e;
        transition: all 0.2s ease;
        font-family: inherit;
        box-sizing: border-box;
      }

      .filetree .search-input:focus {
        outline: none;
        border-color: #0066cc;
        box-shadow: 0 0 0 3px rgba(0, 102, 204, 0.1);
      }

      .filetree .search-input::placeholder {
        color: #959da5;
      }

      .filetree .search-icon {
        position: absolute;
        right: 16px;
        top: 50%;
        transform: translateY(-50%);
        font-size: 18px;
        pointer-events: none;
        opacity: 0.5;
      }

      /* Sample Count Badges */
      .filetree h3 .sample-count {
        font-size: 0.75em;
        font-weight: 400;
        color: #586069;
        background-color: #f1f3f5;
        padding: 2px 8px;
        border-radius: 12px;
        margin-left: 8px;
      }

      /* Back to Top Button */
      .filetree .back-to-top {
        position: fixed;
        bottom: 30px;
        right: 30px;
        width: 48px;
        height: 48px;
        background-color: #0066cc;
        color: white;
        border: none;
        border-radius: 50%;
        font-size: 24px;
        cursor: pointer;
        opacity: 0;
        visibility: hidden;
        transform: scale(0.8);
        transition: all 0.3s ease;
        box-shadow: 0 4px 12px rgba(0, 102, 204, 0.3);
        z-index: 1000;
      }

      .filetree .back-to-top.visible {
        opacity: 1;
        visibility: visible;
        transform: scale(1);
      }

      .filetree .back-to-top:hover {
        background-color: #0052a3;
        transform: scale(1.1);
        box-shadow: 0 6px 16px rgba(0, 102, 204, 0.4);
      }

      .filetree .back-to-top:active {
        transform: scale(0.95);
      }

      /* Responsive Design */
      @media screen and (max-width: 768px) {
        .samples-widget {
          margin: 10px;
        }

        .filetree {
          padding: 16px 20px;
          border-radius: 6px;
          max-width: 100%;
        }

        .filetree h3 {
          font-size: 1.15em;
          margin: 1.5em 0 0.8em 0;
          padding-bottom: 0.4em;
        }

        .filetree h3:first-of-type {
          margin-top: 0.3em;
        }

        .filetree .file {
          line-height: 28px;
          font-size: 14px;
        }

        .filetree .children {
          padding-left: 16px;
        }

        /* Single column on mobile */
        .filetree > .children,
        .filetree > .children > .children {
          grid-template-columns: 1fr;
          gap: 0.3em;
        }

        .filetree .children > .file:not(:has(span)) {
          font-size: 1em;
          margin-top: 1em;
          margin-bottom: 0.3em;
        }

        .filetree .button.title {
          font-size: 14px;
          word-break: break-word;
        }

        .filetree .featured-container {
          grid-template-columns: 1fr;
          gap: 12px;
          margin: 0.8em 0 1.5em 0;
        }

        .filetree .featured-box {
          padding: 16px 20px;
        }

        .filetree .featured-box .title {
          font-size: 1.1em;
        }

        .filetree .featured-box .description {
          font-size: 0.85em;
        }

        .filetree .search-container {
          margin: 1em 0 1.5em 0;
          max-width: 280px;
        }

        .filetree .search-container:focus-within {
          max-width: 100%;
        }

        .filetree .search-input {
          padding: 10px 40px 10px 14px;
          font-size: 14px;
        }

        .filetree .back-to-top {
          bottom: 20px;
          right: 20px;
          width: 44px;
          height: 44px;
          font-size: 22px;
        }
      }

      @media screen and (max-width: 480px) {
        .samples-widget {
          margin: 5px;
        }

        .filetree {
          padding: 12px 16px;
          border-width: 1px;
          border-radius: 4px;
        }

        .filetree h3 {
          font-size: 1.05em;
          margin: 1.2em 0 0.6em 0;
          padding-bottom: 0.3em;
          border-bottom-width: 1px;
        }

        .filetree h3:first-of-type {
          margin-top: 0.2em;
        }

        .filetree .file {
          line-height: 26px;
          font-size: 13px;
        }

        .filetree .children {
          padding-left: 12px;
        }

        .filetree .children .file::before {
          left: -12px;
          width: 12px;
          height: 16px;
        }

        .filetree .children > .file:not(:has(span)) {
          font-size: 0.95em;
          margin-top: 0.8em;
          margin-bottom: 0.2em;
        }

        .filetree .button.title {
          font-size: 13px;
          line-height: 1.4;
          display: inline-block;
        }

        .filetree .title img,
        .filetree .title svg {
          height: 14px;
        }

        .filetree .button.title.demo-link::before {
          width: 14px;
          height: 14px;
          margin-right: 5px;
        }

        .filetree .button.title.source-link {
          font-size: 0.85em;
          margin-left: 6px;
          padding-left: 6px;
        }

        .filetree .button.title.source-link::before {
          width: 12px;
          height: 12px;
          margin-right: 4px;
        }

        .filetree .featured-container {
          grid-template-columns: 1fr;
          gap: 10px;
          margin: 0.6em 0 1.2em 0;
        }

        .filetree .featured-box {
          padding: 14px 16px;
        }

        .filetree .featured-box .label {
          font-size: 0.75em;
          margin-bottom: 6px;
        }

        .filetree .featured-box .title {
          font-size: 1em;
        }

        .filetree .featured-box .description {
          font-size: 0.8em;
          margin-top: 6px;
        }

        .filetree .featured-box .github-badge {
          top: 10px;
          right: 10px;
          width: 28px;
          height: 28px;
        }

        .filetree .featured-box .github-badge svg {
          width: 16px;
          height: 16px;
        }

        .filetree .featured-box .guide-badge {
          top: 10px;
          left: 10px;
          width: 28px;
          height: 28px;
        }

        .filetree .featured-box .guide-badge svg {
          width: 16px;
          height: 16px;
        }

        .filetree .search-container {
          margin: 0.8em 0 1.2em 0;
          max-width: 250px;
        }

        .filetree .search-container:focus-within {
          max-width: 100%;
        }

        .filetree .search-input {
          padding: 9px 38px 9px 12px;
          font-size: 13px;
        }

        .filetree .search-icon {
          font-size: 16px;
          right: 14px;
        }

        .filetree .back-to-top {
          bottom: 15px;
          right: 15px;
          width: 40px;
          height: 40px;
          font-size: 20px;
        }
      }

      /* Tablet landscape and larger */
      @media screen and (min-width: 769px) and (max-width: 1024px) {
        .filetree {
          max-width: 90%;
        }
      }

      /* Touch device improvements */
      @media (hover: none) and (pointer: coarse) {
        .filetree .button.title {
          padding: 4px 0;
          min-height: 44px;
          display: inline-flex;
          align-items: center;
        }
      }
    </style>
    <div class="filetree">
      <a href="https://www.dynamsoft.com/" target="_blank">
        <div class="ds-logo"></div>
      </a>

      <!-- Featured Section - Quick Start & Official Demo -->
      <div class="featured-container">
        <a href="https://demo.dynamsoft.com/Samples/DBR/JS/basics/hello-world.html" class="featured-box quick-start">
          <span class="label">🚀 Quick Start</span>
          <div class="title">Hello World - Scan Multiple Barcodes</div>
          <div class="description">The simplest example to get started with barcode scanning. Continuously scans and collects multiple unique barcodes</div>
          <span
            class="guide-badge"
            title="View user guide documentation"
            onclick="event.stopPropagation(); window.open('https://www.dynamsoft.com/barcode-reader/docs/web/programming/javascript/user-guide/index.html', '_blank'); return false;"
          >
            <svg width="20" height="20" viewBox="0 0 16 16" fill="white">
              <path
                fill-rule="evenodd"
                d="M0 1.75A.75.75 0 01.75 1h4.253c1.227 0 2.317.59 3 1.501A3.744 3.744 0 0111.006 1h4.245a.75.75 0 01.75.75v10.5a.75.75 0 01-.75.75h-4.507a2.25 2.25 0 00-1.591.659l-.622.621a.75.75 0 01-1.06 0l-.622-.621A2.25 2.25 0 005.258 13H.75a.75.75 0 01-.75-.75V1.75zm8.755 3a2.25 2.25 0 012.25-2.25H14.5v9h-3.757c-.71 0-1.4.201-1.992.572l.004-7.322zm-1.504 7.324l.004-5.073-.002-2.253A2.25 2.25 0 005.003 2.5H1.5v9h3.757a3.75 3.75 0 011.994.574z"
              ></path>
            </svg>
          </span>
          <span
            class="github-badge"
            title="View source code on GitHub"
            onclick="event.stopPropagation(); window.open('https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/main/basics/hello-world.html', '_blank'); return false;"
          >
            <svg width="20" height="20" viewBox="0 0 16 16" fill="white">
              <path
                fill-rule="evenodd"
                d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"
              ></path>
            </svg>
          </span>
        </a>
        <a href="https://demo.dynamsoft.com/barcode-reader-js/" target="_blank" class="featured-box official-demo">
          <span class="label">✨ Full Demo</span>
          <div class="title">Official Online Demo</div>
          <div class="description">Explore all features and capabilities in our comprehensive live demo</div>
          <!-- <span
            class="github-badge"
            title="View source code on GitHub"
            onclick="event.stopPropagation(); window.open('https://github.com/Dynamsoft/barcode-reader-javascript-demo', '_blank'); return false;"
          >
            <svg width="20" height="20" viewBox="0 0 16 16" fill="white">
              <path
                fill-rule="evenodd"
                d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"
              ></path>
            </svg>
          </span> -->
        </a>
      </div>

      <!-- Search Bar -->
      <div class="search-container">
        <input type="text" id="searchInput" class="search-input" placeholder="Search samples..." aria-label="Search samples" />
        <span class="search-icon">🔍</span>
      </div>

      <!-- Main README -->
      <div class="file main-readme-container">
        <a
          class="button title readme-link main-readme-link"
          href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/main/README.md"
          title="View main README documentation"
          >Main README</a
        >
      </div>

      <!-- Hello World Samples -->
      <div class="file">
        <h3>
          Hello World Samples <span class="sample-count">(3)</span>
        </h3>
      </div>
      <div class="children">
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="The simplest example to get started with barcode scanning. Continuously scans and collects multiple unique barcodes."
            ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/basics/hello-world.html" title="View live demo">Hello World (Scan Multiple Barcodes)</a
            ><a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/main/basics/hello-world.html"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Scan and return only the first barcode detected."
            ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/basics/scan-a-single-barcode.html" title="View live demo">Scan a Single Barcode</a
            ><a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/main/basics/scan-a-single-barcode.html"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Read barcodes from a static image file by uploading."
            ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/basics/read-an-image.html" title="View live demo">Read an Image</a
            ><a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/main/basics/read-an-image.html"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
      </div>

      <!-- Framework Samples -->
      <div class="file">
        <h3>
          Framework Samples <span class="sample-count">(14)</span>
          <a
            class="button title readme-link section-readme-link"
            href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/main/frameworks/README.md"
            title="View Frameworks README"
            >README</a
          >
        </h3>
      </div>
      <div class="children">
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples integrated with Angular framework."
            ><span class="github-label angular">Angular Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/angular"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples integrated with Blazor (.NET) framework."
            ><span class="github-label blazor">Blazor Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/blazor"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples for Capacitor mobile hybrid applications."
            ><span class="github-label capacitor">Capacitor Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/capacitor"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples for Electron desktop applications."
            ><span class="github-label electron">Electron Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/electron"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples using plain ES6 modules."
            ><span class="github-label js">ES6 Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/es6"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples using native TypeScript."
            ><span class="github-label typescript">Native TypeScript Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/native-ts"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples integrated with Next.js framework."
            ><span class="github-label next">Next.js Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/next"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples integrated with Nuxt framework."
            ><span class="github-label nuxt">Nuxt Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/nuxt"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples for Progressive Web Apps (PWA)."
            ><span class="github-label pwa">PWA Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/pwa"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples integrated with React framework."
            ><span class="github-label react">React Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/react"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples using RequireJS (AMD)."
            ><span class="github-label requirejs">RequireJS Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/requirejs"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples integrated with Svelte framework."
            ><span class="github-label svelte">Svelte Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/svelte"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples integrated with Vue framework."
            ><span class="github-label vue">Vue Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/vue"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
        <div class="file">
          <span data-balloon-length="large" data-balloon-pos="down" aria-label="Barcode reading examples for native WebView on Android and iOS."
            ><span class="github-label webview">WebView Samples</span> -
            <a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/frameworks/webview"
              title="View source code on GitHub"
              >Source</a
            ></span
          >
        </div>
      </div>

      <!-- Scenario Samples -->
      <div class="file">
        <h3>
          Scenario Samples <span class="sample-count">(18)</span>
          <a
            class="button title readme-link section-readme-link"
            href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/main/scenarios/README.md"
            title="View Scenarios README"
            >README</a
          >
        </h3>
      </div>
      <div class="children">
        <div class="file">Workflow Examples</div>
        <div class="children">
          <div class="file">
            <span
              data-balloon-length="large"
              data-balloon-pos="down"
              aria-label="Simulates a shopping experience where users scan barcodes to add items to a dynamic cart."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/cart-builder/index.html" title="View live demo">Cart Builder</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/main/scenarios/cart-builder"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="Shows how to guide users with rotating tip messages on the camera view and play a beep sound on successful barcode detection.."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/tip-and-beep/index.html" title="View live demo">Tip and Beep</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/main/scenarios/tip-and-beep"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="Scan a product barcode and simulate a search from a product database."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/scan-and-search/index.html" title="View live demo">Scan and Search</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/main/scenarios/scan-and-search"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="Pick the correct one from multiple candidates by scanning barcodes."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/pick-one-to-fill/index.html" title="View live demo">Pick One to Fill</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/pick-one-to-fill"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="Batch scanning workflow for inventory collection and export."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/batch-inventory/index.html" title="View live demo">Batch Inventory</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/batch-inventory"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="Interactive UI to help you locate items with barcodes in a list or layout."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/locate-an-item-with-barcode/index.html" title="View live demo">Locate an Item with Barcode</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/locate-an-item-with-barcode"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="Display decoded barcode text overlaid on the live camera video."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/show-result-texts-on-the-video/index.html" title="View live demo"
                >Show Result Texts on Video</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/blob/main/scenarios/show-result-texts-on-the-video"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
        </div>

        <div class="file">Barcode Type Focused</div>
        <div class="children">
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="QR code targeted demo with optimized settings."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/scan-qr-code/index.html" title="View live demo">Scan QR Code</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/scan-qr-code"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="DataMatrix code targeted demo with optimized settings."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/scan-datamatrix-code/index.html" title="View live demo">Scan DataMatrix Code</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/scan-datamatrix-code"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="DPM(Direct Part Marking) code targeted demo with optimized settings."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/scan-dpm-codes/index.html" title="View live demo">Scan DPM Codes</a
              ><a
              class="button title source-link"
              href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/scan-dpm-codes"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="Demo focused on decoding common 2D barcode formats."
              ><a
                class="button title demo-link"
                href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/scan-common-2D-codes/index.html"
                title="View live demo"
                >Scan Common 2D Codes</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/scan-common-2D-codes"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="1D retail barcode tuning example (EAN, UPC, etc.)."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/scan-1D-Retail/index.html" title="View live demo">Scan 1D Retail Barcodes</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/scan-1D-Retail"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="1D industrial barcode tuning example (Code 39, Code 128, etc.)."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/scan-1D-Industrial/index.html" title="View live demo">Scan 1D Industrial Barcodes</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/scan-1D-Industrial"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="Demo configured to detect a wide range of barcode formats."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/scan-common-1D-and-2D/index.html" title="View live demo">Scan Any Codes</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/scan-common-1D-and-2D"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="Demo for scanning barcodes from a distance with zoom and ROI tuning."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/scan-from-distance/index.html" title="View live demo">Scan from Distance</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/scan-from-distance"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
        </div>

        <div class="file">Data Parsing</div>
        <div class="children">
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="Read the PDF417 barcode on a driver's license (AAMVA compliant) and parse it."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/read-a-drivers-license/index.html" title="View live demo">Read a Driver's License</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/read-a-drivers-license"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="Read the VIN(vehicle identification number) code and parse it."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/read-vin/index.html" title="View live demo">Read VIN</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/read-vin"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="Example showing GS1 AI parsing and data extraction."
              ><a class="button title demo-link" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/read-and-parse-GS1-AI/scan-using-rtu-api/index.html" title="View live demo"
                >Read and Parse GS1-AI</a
              ><a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/read-and-parse-GS1-AI/"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
        </div>

        <div class="file">Utilities</div>
        <div class="children">
          <div class="file">
            <span data-balloon-length="large" data-balloon-pos="down" aria-label="Debug utilities and frame collector for testing and troubleshooting."
              ><a class="github-label debug" href="https://demo.dynamsoft.com/Samples/DBR/JS/scenarios/debug/public/index.html" title="View live demo"
                >Debug Tools</a
              > -
              <a
                class="button title source-link"
                href="https://github.com/Dynamsoft/barcode-reader-javascript-samples/tree/main/scenarios/debug"
                title="View source code on GitHub"
                >Source</a
              ></span
            >
          </div>
        </div>
      </div>

      <!-- Back to Top Button -->
      <!-- <button id="backToTop" class="back-to-top" title="Back to top" aria-label="Back to top">↑</button> -->
    </div>

    <script>
      // Search functionality
      const searchInput = document.getElementById("searchInput");
      searchInput.addEventListener("input", (e) => {
        const searchTerm = e.target.value.toLowerCase();
        const allSamples = document.querySelectorAll(".filetree .children .file:has(span)");
        const categories = document.querySelectorAll(".filetree .children > .file:not(:has(span))");

        allSamples.forEach((sample) => {
          const text = sample.textContent.toLowerCase();
          const label = sample.querySelector("span")?.getAttribute("aria-label")?.toLowerCase() || "";

          if (text.includes(searchTerm) || label.includes(searchTerm)) {
            sample.style.display = "block";
          } else {
            sample.style.display = "none";
          }
        });

        // Hide empty categories
        categories.forEach((category) => {
          const nextSibling = category.nextElementSibling;
          if (nextSibling && nextSibling.classList.contains("children")) {
            const visibleItems = Array.from(nextSibling.querySelectorAll(".file:has(span)")).filter((item) => item.style.display !== "none");
            if (visibleItems.length === 0 && searchTerm !== "") {
              category.style.display = "none";
            } else {
              category.style.display = "block";
            }
          }
        });
      });

      // Back to top button
      // const backToTopButton = document.getElementById("backToTop");

      // window.addEventListener("scroll", () => {
      //   if (window.scrollY > 300) {
      //     backToTopButton.classList.add("visible");
      //   } else {
      //     backToTopButton.classList.remove("visible");
      //   }
      // });

      // backToTopButton.addEventListener("click", () => {
      //   window.scrollTo({
      //     top: 0,
      //     behavior: "smooth",
      //   });
      // });
    </script>
  </body>
</html>
