{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "bill-of-lading-viewer",
  "title": "Bill Of Lading Viewer",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/bill-of-lading-viewer/bill-of-lading-viewer.component.ts",
      "content": "// Maritime & Air Bill of Lading (BOL) shipping document viewer and customs compliance\n// inspector: multi-party entity grid, transport routing, container & cargo manifest with\n// totals, freight terms, carrier stamp, blockchain verification drawer, and UN/EDIFACT\n// EDI payload tab. Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, DestroyRef, EventEmitter, Input, Output, computed, inject, signal } from '@angular/core'\nimport {\n  AlertCircle,\n  Anchor,\n  Building2,\n  Check,\n  CheckCircle2,\n  Copy,\n  Download,\n  FileText,\n  LucideAngularModule,\n  Mail,\n  MapPin,\n  Phone,\n  Printer,\n  ShieldCheck,\n  Ship,\n} from 'lucide-angular'\nimport { cn } from '@/lib/utils'\nimport { UiBadgeComponent } from '@/ui/badge/badge.component'\nimport { UiButtonComponent } from '@/ui/button/button.component'\nimport {\n  UiCardComponent,\n  UiCardContentComponent,\n  UiCardDescriptionComponent,\n  UiCardHeaderComponent,\n  UiCardTitleComponent,\n} from '@/ui/card/card.component'\nimport { UiSeparatorComponent } from '@/ui/separator/separator.component'\nimport {\n  UiTableBodyComponent,\n  UiTableCellComponent,\n  UiTableComponent,\n  UiTableFooterComponent,\n  UiTableHeadComponent,\n  UiTableHeaderComponent,\n  UiTableRowComponent,\n} from '@/ui/table/table.component'\n\nexport interface ContainerCargoItem {\n  id: string\n  containerNo: string\n  sealNo: string\n  containerType: string\n  packagesCount: number\n  packagesKind: string\n  description: string\n  hsCode: string\n  grossWeightKg: number\n  grossWeightLbs: number\n  volumeCbm: number\n  hazardClass?: string\n  temperature?: string\n}\n\nexport interface ComplianceGate {\n  id: string\n  name: string\n  status: 'passed' | 'warning' | 'pending'\n  authority: string\n  reference: string\n  details: string\n}\n\nexport type BillOfLadingTab = 'document' | 'compliance' | 'edi'\n\nconst cargoItems: ContainerCargoItem[] = [\n  {\n    id: 'cargo-1',\n    containerNo: 'MSKU-948201-4',\n    sealNo: 'SL-94021',\n    containerType: \"40' High Cube (40' HC)\",\n    packagesCount: 24,\n    packagesKind: 'Pallets / 480 Cartons',\n    description: 'Consumer Electronics: Pro Audio Studio Headphones, Dynamic Transducers & Wireless DAC Amplifiers',\n    hsCode: '8518.30.00',\n    grossWeightKg: 4850.0,\n    grossWeightLbs: 10692.42,\n    volumeCbm: 32.4,\n    hazardClass: 'UN3481 Class 9 (Lithium Ion Batteries contained in equipment)',\n    temperature: 'Ambient (Dry Van)',\n  },\n  {\n    id: 'cargo-2',\n    containerNo: 'MSKU-819034-2',\n    sealNo: 'SL-94022',\n    containerType: \"40' High Cube (40' HC)\",\n    packagesCount: 16,\n    packagesKind: 'Pallets / 320 Cartons',\n    description: 'Audio Accessories: Braided MMCX Oxygen-Free Cables, Velour Replacement Earpads & Hard Travel Cases',\n    hsCode: '8518.90.80',\n    grossWeightKg: 2320.0,\n    grossWeightLbs: 5114.72,\n    volumeCbm: 18.6,\n    hazardClass: 'Non-Hazardous / Standard Cargo',\n    temperature: 'Ambient (Dry Van)',\n  },\n]\n\nconst complianceGates: ComplianceGate[] = [\n  {\n    id: 'gate-1',\n    name: 'EU EORI & VAT Identity Verification',\n    status: 'passed',\n    authority: 'European Customs Agency (VIES / EOS)',\n    reference: 'NL864219034',\n    details: 'Consignee EORI validated against EU Economic Operators Registry with valid Dutch VAT matching.',\n  },\n  {\n    id: 'gate-2',\n    name: 'ICS2 Entry Summary Declaration (ENS)',\n    status: 'passed',\n    authority: 'EU Customs Import Control System 2',\n    reference: 'MRN: 26NL948201083921A',\n    details: 'Pre-arrival cargo security manifest filed 24 hours prior to loading in Shanghai (Approved).',\n  },\n  {\n    id: 'gate-3',\n    name: 'HS Tariff Classification & Duty Schedule',\n    status: 'passed',\n    authority: 'TARIC European Customs Database',\n    reference: 'HS 8518.30.00 / 8518.90.80',\n    details: 'Eligible for 0.0% EU base tariff rate + standard 21.0% Netherlands Import VAT under Article 23.',\n  },\n  {\n    id: 'gate-4',\n    name: 'ISO 17712 High-Security Container Seals',\n    status: 'passed',\n    authority: 'International Maritime Organization (IMO)',\n    reference: 'SL-94021 / SL-94022',\n    details: 'High-security mechanical bolt seals verified intact at origin terminal container gate-in.',\n  },\n  {\n    id: 'gate-5',\n    name: 'IMDG Dangerous Goods UN3481 Compliance',\n    status: 'passed',\n    authority: 'International Maritime Dangerous Goods (IMDG)',\n    reference: 'UN3481 PI966 Sec. II',\n    details: 'Lithium-ion cells packed with equipment certified under special provision 188 for under-deck stowage.',\n  },\n  {\n    id: 'gate-6',\n    name: 'Global Sanctions & Denied Party Screening',\n    status: 'passed',\n    authority: 'UN, OFAC & EU Consolidated Sanction Lists',\n    reference: 'SCR-2026-99104',\n    details: '0 matches identified across all parties (Shipper, Consignee, Notify Party, Carrier vessel).',\n  },\n]\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-bill-of-lading-viewer, [ui-bill-of-lading-viewer]',\n  standalone: true,\n  // React renders the root <div> itself: the host stays out of layout and `class` goes to the root.\n  host: { '[attr.class]': '\"contents\"' },\n  imports: [\n    LucideAngularModule,\n    UiBadgeComponent,\n    UiButtonComponent,\n    UiCardComponent,\n    UiCardContentComponent,\n    UiCardDescriptionComponent,\n    UiCardHeaderComponent,\n    UiCardTitleComponent,\n    UiSeparatorComponent,\n    UiTableBodyComponent,\n    UiTableCellComponent,\n    UiTableComponent,\n    UiTableFooterComponent,\n    UiTableHeadComponent,\n    UiTableHeaderComponent,\n    UiTableRowComponent,\n  ],\n  template: `\n    <div data-slot=\"bill-of-lading-viewer\" [class]=\"rootClass\">\n      <!-- Top Action Bar / Document Control Header -->\n      <div\n        class=\"border-border bg-card flex flex-col gap-4 rounded-xl border p-4 shadow-xs sm:flex-row sm:items-center sm:justify-between\"\n      >\n        <div class=\"space-y-1\">\n          <div class=\"flex flex-wrap items-center gap-2\">\n            <span ui-badge wrap variant=\"outline\" class=\"font-mono text-xs tracking-wider uppercase\">\n              {{ scacCode }} &bull; Maritime Ocean BOL\n            </span>\n            <button\n              type=\"button\"\n              class=\"group focus-visible:ring-ring border-success/30 bg-success/10 text-success hover:bg-success/20 text-success inline-flex min-h-6 items-center gap-1.5 rounded-full border px-2.5 py-0.5 text-xs font-medium transition-colors focus-visible:ring-2 focus-visible:outline-none\"\n              (click)=\"toggleBlockchainDetails()\"\n            >\n              <lucide-icon [img]=\"ShieldCheck\" class=\"size-3.5\" />\n              <span>Verify Blockchain Authenticity</span>\n              <span class=\"bg-success size-1.5 animate-pulse rounded-full\" aria-hidden=\"true\"></span>\n            </button>\n          </div>\n          <div class=\"flex flex-wrap items-center gap-2 pt-1\">\n            <h1 class=\"text-xl font-bold tracking-tight sm:text-2xl\">{{ documentTitle }}</h1>\n            <span class=\"text-muted-foreground font-mono text-base font-semibold tabular-nums\">{{ bolNumber }}</span>\n            <button\n              ui-button\n              variant=\"ghost\"\n              size=\"icon\"\n              class=\"text-muted-foreground hover:text-foreground size-7\"\n              title=\"Copy BOL number\"\n              (click)=\"handleCopyBol()\"\n            >\n              @if (copiedBol()) {\n                <lucide-icon [img]=\"Check\" class=\"text-success size-3.5\" />\n              } @else {\n                <lucide-icon [img]=\"Copy\" class=\"size-3.5\" />\n              }\n              <span class=\"sr-only\">Copy BOL number</span>\n            </button>\n          </div>\n          <p class=\"text-muted-foreground text-xs\">\n            Carrier: <strong class=\"text-foreground font-medium\">{{ carrierName }}</strong> &bull; Issued:\n            {{ issueDate }} in {{ placeOfIssue }}\n          </p>\n        </div>\n\n        <!-- Action Buttons & Tab Switcher -->\n        <div class=\"flex flex-wrap items-center gap-2 sm:self-center\">\n          <div class=\"border-border bg-muted/40 flex items-center rounded-lg border p-1\">\n            <button type=\"button\" [class]=\"tabClass('document')\" (click)=\"activeTab.set('document')\">\n              Document View\n            </button>\n            <button type=\"button\" [class]=\"tabClass('compliance', true)\" (click)=\"activeTab.set('compliance')\">\n              <span>Customs &amp; Compliance</span>\n              <span\n                ui-badge\n                wrap\n                variant=\"success\"\n                class=\"size-4 justify-center p-0 text-center font-mono text-xs leading-4\"\n                >6</span\n              >\n            </button>\n            <button type=\"button\" [class]=\"tabClass('edi')\" (click)=\"activeTab.set('edi')\">Raw EDI / JSON</button>\n          </div>\n\n          <button ui-button variant=\"outline\" size=\"sm\" class=\"gap-1.5 text-xs\" (click)=\"handlePrint()\">\n            <lucide-icon [img]=\"Printer\" class=\"size-3.5\" />\n            <span>Print</span>\n          </button>\n\n          <button\n            ui-button\n            aria-label=\"Download attachment\"\n            size=\"sm\"\n            class=\"gap-1.5 text-xs\"\n            (click)=\"handleDownloadPdf()\"\n          >\n            <lucide-icon [img]=\"Download\" class=\"size-3.5\" />\n            <span>Download Printable BOL</span>\n          </button>\n        </div>\n      </div>\n\n      <!-- Blockchain Cryptographic Proof Drawer / Card -->\n      @if (showVerifyDetails()) {\n        <div\n          class=\"animate-in fade-in slide-in-from-top-2 border-success/30 bg-success/5 rounded-xl border p-4 text-xs transition-colors\"\n        >\n          <div class=\"flex flex-col gap-3 md:flex-row md:items-center md:justify-between\">\n            <div class=\"flex items-start gap-3\">\n              <div class=\"bg-success/10 text-success rounded-lg p-2\">\n                <lucide-icon [img]=\"ShieldCheck\" class=\"size-5 shrink-0\" />\n              </div>\n              <div class=\"space-y-1\">\n                <div class=\"flex items-center gap-2\">\n                  <span class=\"text-foreground font-semibold\">Cryptographic Bill of Lading Authenticity Verified</span>\n                  <span ui-badge wrap variant=\"success\" class=\"text-xs\">Immutable Ledger Record</span>\n                </div>\n                <p class=\"text-muted-foreground\">\n                  Document state verified on {{ blockchainNetwork }}. Digital hash matches original carrier signature at\n                  origin.\n                </p>\n              </div>\n            </div>\n\n            <div class=\"flex flex-wrap items-center gap-2 font-mono text-xs\">\n              <span class=\"bg-background/80 border-border text-foreground rounded border px-2 py-1\"\n                >Block #{{ blockchainBlock }}</span\n              >\n              <span\n                class=\"bg-background/80 border-border text-foreground max-w-xs truncate rounded border px-2 py-1\"\n                [attr.title]=\"blockchainTxHash\"\n              >\n                Tx: {{ blockchainTxHash }}\n              </span>\n            </div>\n          </div>\n        </div>\n      }\n\n      <!-- TAB 1: OFFICIAL BILL OF LADING PAPER DOCUMENT -->\n      @if (activeTab() === 'document') {\n        <div\n          class=\"border-border bg-card overflow-hidden rounded-xl border shadow-xs print:border-none print:shadow-none\"\n        >\n          <!-- Formal Document Header -->\n          <div class=\"border-border bg-muted/20 border-b p-6 sm:p-8\">\n            <div class=\"flex flex-col gap-6 lg:flex-row lg:items-start lg:justify-between\">\n              <div class=\"space-y-3\">\n                <div class=\"flex items-center gap-3\">\n                  <div\n                    class=\"bg-primary text-primary-foreground flex size-10 items-center justify-center rounded-lg shadow-xs\"\n                  >\n                    <lucide-icon [img]=\"Anchor\" class=\"size-5\" />\n                  </div>\n                  <div>\n                    <h2 class=\"text-lg font-semibold tracking-tight sm:text-xl\">{{ carrierName }}</h2>\n                    <p class=\"text-muted-foreground font-mono text-xs\">\n                      SCAC: {{ scacCode }} &bull; Standard Ocean Carrier Bill of Lading\n                    </p>\n                  </div>\n                </div>\n                <p class=\"text-muted-foreground max-w-xl text-xs leading-relaxed\">\n                  Issued in accordance with the International Convention for the Unification of Certain Rules of Law\n                  relating to Bills of Lading (Hague-Visby Rules) and UN Multimodal Transport Guidelines.\n                </p>\n              </div>\n\n              <div class=\"border-border bg-background/80 flex flex-col gap-2 rounded-lg border p-4 sm:min-w-[280px]\">\n                <div class=\"flex items-center justify-between gap-4\">\n                  <span class=\"text-muted-foreground text-xs font-medium\">Bill of Lading No.</span>\n                  <span class=\"text-primary font-mono text-sm font-semibold tabular-nums\">{{ bolNumber }}</span>\n                </div>\n                <div class=\"flex items-center justify-between gap-4\">\n                  <span class=\"text-muted-foreground text-xs\">Booking Reference:</span>\n                  <span class=\"font-mono text-xs font-semibold tabular-nums\">{{ bookingReference }}</span>\n                </div>\n                <div class=\"flex items-center justify-between gap-4\">\n                  <span class=\"text-muted-foreground text-xs\">Export Reference:</span>\n                  <span class=\"font-mono text-xs tabular-nums\">{{ exportReference }}</span>\n                </div>\n                <ui-separator class=\"my-1\" />\n                <div class=\"flex items-center justify-between gap-4\">\n                  <span class=\"text-muted-foreground text-xs\">Document Status:</span>\n                  <span ui-badge wrap variant=\"default\" class=\"text-xs font-medium\">Negotiable / Original</span>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <!-- Section 1: Parties Grid (Shipper, Consignee, Notify Party) -->\n          <div\n            class=\"divide-border border-border grid grid-cols-1 divide-y border-b md:grid-cols-3 md:divide-x md:divide-y-0\"\n          >\n            <div class=\"bg-card space-y-3 p-5 sm:p-6\">\n              <div class=\"flex items-center justify-between\">\n                <span class=\"text-primary font-mono text-xs font-semibold\">1. Shipper / Exporter</span>\n                <lucide-icon [img]=\"Building2\" class=\"text-muted-foreground size-4\" />\n              </div>\n              <div class=\"space-y-1.5 text-xs\">\n                <p class=\"text-foreground text-sm font-semibold\">{{ shipperName }}</p>\n                <p class=\"text-muted-foreground leading-relaxed\">{{ shipperAddress }}</p>\n                <div class=\"text-muted-foreground space-y-1 pt-2\">\n                  <p class=\"flex items-center gap-1.5\">\n                    <lucide-icon [img]=\"Phone\" class=\"text-muted-foreground size-3 shrink-0\" />\n                    <span class=\"tabular-nums\">{{ shipperContact }}</span>\n                  </p>\n                  <p class=\"flex items-center gap-1.5\">\n                    <lucide-icon [img]=\"Mail\" class=\"text-muted-foreground size-3 shrink-0\" />\n                    <span>{{ shipperEmail }}</span>\n                  </p>\n                  <p class=\"text-foreground pt-1 font-mono\">\n                    <span class=\"text-muted-foreground\">EORI / Tax ID:</span> {{ shipperEori }}\n                  </p>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"bg-card space-y-3 p-5 sm:p-6\">\n              <div class=\"flex items-center justify-between\">\n                <span class=\"text-primary font-mono text-xs font-semibold\">2. Consignee / Importer</span>\n                <lucide-icon [img]=\"MapPin\" class=\"text-muted-foreground size-4\" />\n              </div>\n              <div class=\"space-y-1.5 text-xs\">\n                <p class=\"text-foreground text-sm font-semibold\">{{ consigneeName }}</p>\n                <p class=\"text-muted-foreground leading-relaxed\">{{ consigneeAddress }}</p>\n                <div class=\"text-muted-foreground space-y-1 pt-2\">\n                  <p class=\"flex items-center gap-1.5\">\n                    <lucide-icon [img]=\"Phone\" class=\"text-muted-foreground size-3 shrink-0\" />\n                    <span class=\"tabular-nums\">{{ consigneeContact }}</span>\n                  </p>\n                  <p class=\"flex items-center gap-1.5\">\n                    <lucide-icon [img]=\"Mail\" class=\"text-muted-foreground size-3 shrink-0\" />\n                    <span>{{ consigneeEmail }}</span>\n                  </p>\n                  <p class=\"text-foreground pt-1 font-mono\">\n                    <span class=\"text-muted-foreground\">EORI / VAT:</span> {{ consigneeEori }}\n                  </p>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"bg-card space-y-3 p-5 sm:p-6\">\n              <div class=\"flex items-center justify-between\">\n                <span class=\"text-primary font-mono text-xs font-semibold\">3. Notify Party</span>\n                <lucide-icon [img]=\"FileText\" class=\"text-muted-foreground size-4\" />\n              </div>\n              <div class=\"space-y-1.5 text-xs\">\n                <p class=\"text-foreground text-sm font-semibold\">{{ notifyPartyName }}</p>\n                <p class=\"text-muted-foreground leading-relaxed\">{{ notifyPartyAddress }}</p>\n                <div class=\"text-muted-foreground space-y-1 pt-2\">\n                  <p class=\"flex items-center gap-1.5\">\n                    <lucide-icon [img]=\"Phone\" class=\"text-muted-foreground size-3 shrink-0\" />\n                    <span class=\"tabular-nums\">{{ notifyPartyContact }}</span>\n                  </p>\n                  <p class=\"flex items-center gap-1.5\">\n                    <lucide-icon [img]=\"Mail\" class=\"text-muted-foreground size-3 shrink-0\" />\n                    <span>{{ notifyPartyEmail }}</span>\n                  </p>\n                  <p class=\"text-foreground pt-1 font-medium\">\n                    <span class=\"text-muted-foreground\">Attention:</span> {{ notifyPartyAttention }}\n                  </p>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <!-- Section 2: Transport & Routing Details Grid -->\n          <div class=\"border-border bg-muted/10 border-b p-5 sm:p-6\">\n            <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n              <div class=\"border-border bg-card space-y-1 rounded-lg border p-3 shadow-xs\">\n                <span class=\"text-muted-foreground text-xs font-medium\">Pre-Carriage By</span>\n                <p class=\"text-foreground text-xs font-semibold\">{{ preCarriageBy }}</p>\n                <span class=\"text-muted-foreground text-xs\">Receipt: {{ placeOfReceipt }}</span>\n              </div>\n\n              <div class=\"border-border bg-card space-y-1 rounded-lg border p-3 shadow-xs\">\n                <span class=\"text-muted-foreground text-xs font-medium\">Ocean Vessel &amp; Voyage</span>\n                <p class=\"text-foreground flex items-center gap-1.5 text-xs font-semibold\">\n                  <lucide-icon [img]=\"Ship\" class=\"text-primary size-3.5 shrink-0\" />\n                  <span>{{ vesselVoyage }}</span>\n                </p>\n                <span class=\"text-muted-foreground font-mono text-xs\">{{ vesselImo }} &bull; {{ vesselFlag }}</span>\n              </div>\n\n              <div class=\"border-border bg-card space-y-1 rounded-lg border p-3 shadow-xs\">\n                <span class=\"text-muted-foreground text-xs font-medium\">Port of Loading (POL)</span>\n                <p class=\"text-foreground text-xs font-semibold\">{{ portOfLoading }}</p>\n                <span class=\"text-muted-foreground text-xs\">Departure: Aug 23, 2026</span>\n              </div>\n\n              <div class=\"border-border bg-card space-y-1 rounded-lg border p-3 shadow-xs\">\n                <span class=\"text-muted-foreground text-xs font-medium\">Port of Discharge (POD)</span>\n                <p class=\"text-foreground text-xs font-semibold\">{{ portOfDischarge }}</p>\n                <span class=\"text-muted-foreground text-xs\">Delivery: {{ placeOfDelivery }}</span>\n              </div>\n            </div>\n          </div>\n\n          <!-- Section 3: Container & Cargo Manifest Table -->\n          <div class=\"space-y-4 p-5 sm:p-6\">\n            <div class=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n              <div>\n                <h3 class=\"text-foreground text-sm font-semibold\">Container &amp; Cargo Description</h3>\n                <p class=\"text-muted-foreground text-xs\">\n                  Itemized manifest of goods, seal identification, Harmonized Tariff codes, and gross weight\n                </p>\n              </div>\n              <span ui-badge wrap variant=\"outline\" class=\"w-fit font-mono text-xs\"\n                >FCL / FCL &bull; CY-CY Movement</span\n              >\n            </div>\n\n            <div class=\"border-border overflow-hidden rounded-lg border\">\n              <div class=\"overflow-x-auto\">\n                <table ui-table density=\"cozy\">\n                  <thead ui-table-header>\n                    <tr ui-table-row>\n                      <th ui-table-head class=\"text-xs\">Container No. &amp; Seal No.</th>\n                      <th ui-table-head class=\"text-xs\">Packages &amp; Kind</th>\n                      <th ui-table-head class=\"text-xs\">Description of Goods</th>\n                      <th ui-table-head class=\"text-xs\">HS Tariff Code</th>\n                      <th ui-table-head class=\"text-right text-xs\">Gross Wt (kg)</th>\n                      <th ui-table-head class=\"text-right text-xs\">Volume (CBM)</th>\n                    </tr>\n                  </thead>\n                  <tbody ui-table-body>\n                    @for (item of cargoItemsList; track item.id) {\n                      <tr ui-table-row>\n                        <td ui-table-cell class=\"align-top\">\n                          <div class=\"text-foreground font-mono text-xs font-semibold\">{{ item.containerNo }}</div>\n                          <div class=\"text-muted-foreground font-mono text-xs\">Seal: {{ item.sealNo }}</div>\n                          <span ui-badge wrap variant=\"secondary\" class=\"mt-1 text-xs font-normal\">{{\n                            item.containerType\n                          }}</span>\n                        </td>\n                        <td ui-table-cell class=\"align-top\">\n                          <div class=\"text-foreground text-xs font-medium tabular-nums\">\n                            {{ item.packagesCount }} Pallets\n                          </div>\n                          <div class=\"text-muted-foreground text-xs\">{{ item.packagesKind }}</div>\n                        </td>\n                        <td ui-table-cell class=\"max-w-md align-top\">\n                          <div class=\"text-foreground text-xs leading-relaxed font-medium\">{{ item.description }}</div>\n                          @if (item.hazardClass) {\n                            <div class=\"text-warning mt-1 flex items-center gap-1 text-xs\">\n                              <lucide-icon [img]=\"AlertCircle\" class=\"size-3 shrink-0\" />\n                              <span>{{ item.hazardClass }}</span>\n                            </div>\n                          }\n                        </td>\n                        <td ui-table-cell class=\"text-foreground align-top font-mono text-xs tabular-nums\">\n                          {{ item.hsCode }}\n                        </td>\n                        <td\n                          ui-table-cell\n                          class=\"text-foreground text-right align-top font-mono text-xs font-semibold tabular-nums\"\n                        >\n                          {{ item.grossWeightKg.toLocaleString('en-US', { minimumFractionDigits: 2 }) }} kg\n                          <div class=\"text-muted-foreground font-normal\">\n                            {{ item.grossWeightLbs.toLocaleString('en-US', { minimumFractionDigits: 1 }) }} lbs\n                          </div>\n                        </td>\n                        <td ui-table-cell class=\"text-foreground text-right align-top font-mono text-xs tabular-nums\">\n                          {{ item.volumeCbm.toFixed(2) }} m³\n                        </td>\n                      </tr>\n                    }\n                  </tbody>\n                  <tfoot ui-table-footer>\n                    <tr ui-table-row>\n                      <td ui-table-cell [attr.colspan]=\"2\" class=\"text-xs font-semibold\">\n                        Totals: {{ cargoItemsList.length }} Containers &bull; {{ totalPackagesCount() }} Pallets\n                      </td>\n                      <td ui-table-cell [attr.colspan]=\"2\" class=\"text-muted-foreground text-xs\">\n                        Dangerous Goods Stowage Declared &bull; Certified Dry Van\n                      </td>\n                      <td ui-table-cell class=\"text-foreground text-right font-mono text-xs font-semibold tabular-nums\">\n                        {{ totalGrossWeightKg().toLocaleString('en-US', { minimumFractionDigits: 2 }) }} kg\n                      </td>\n                      <td ui-table-cell class=\"text-foreground text-right font-mono text-xs font-semibold tabular-nums\">\n                        {{ totalVolumeCbm().toFixed(2) }} m³\n                      </td>\n                    </tr>\n                  </tfoot>\n                </table>\n              </div>\n            </div>\n          </div>\n\n          <!-- Section 4: Freight Charges & Commercial Terms -->\n          <div\n            class=\"divide-border border-border grid grid-cols-1 divide-y border-t sm:grid-cols-2 sm:divide-x sm:divide-y-0 lg:grid-cols-4\"\n          >\n            <div class=\"bg-muted/10 space-y-1.5 p-5\">\n              <span class=\"text-muted-foreground text-xs font-medium\">Freight &amp; Charges</span>\n              <div class=\"flex items-center gap-2\">\n                <span ui-badge wrap variant=\"default\" class=\"text-xs font-medium tracking-wide uppercase\">{{\n                  freightTerms\n                }}</span>\n              </div>\n              <p class=\"text-muted-foreground pt-1 text-xs\">\n                Payable at: <strong class=\"text-foreground\">{{ freightPayableAt }}</strong>\n              </p>\n            </div>\n\n            <div class=\"bg-muted/10 space-y-1.5 p-5\">\n              <span class=\"text-muted-foreground text-xs font-medium\">Declared Value (Customs)</span>\n              <p class=\"text-foreground font-mono text-sm font-semibold tabular-nums\">{{ declaredValue }}</p>\n              <p class=\"text-muted-foreground text-xs\">Commercial Invoice #INV-2026-8942</p>\n            </div>\n\n            <div class=\"bg-muted/10 space-y-1.5 p-5\">\n              <span class=\"text-muted-foreground text-xs font-medium\">Marine Cargo Insurance</span>\n              <p class=\"text-foreground font-mono text-xs font-semibold\">{{ insuranceCert }}</p>\n              <p class=\"text-muted-foreground text-xs\">Institute Cargo Clauses (A) All Risks</p>\n            </div>\n\n            <div class=\"bg-muted/10 space-y-1.5 p-5\">\n              <span class=\"text-muted-foreground text-xs font-medium\">Incoterms &amp; Letter of Credit</span>\n              <p class=\"text-foreground text-xs font-semibold\">{{ incoterms }}</p>\n              <p class=\"text-muted-foreground truncate font-mono text-xs\" [attr.title]=\"letterOfCredit\">\n                {{ letterOfCredit }}\n              </p>\n            </div>\n          </div>\n\n          <!-- Section 5: Carrier Signature & Authorization Stamp -->\n          <div class=\"border-border bg-card border-t p-6 sm:p-8\">\n            <div class=\"grid grid-cols-1 gap-6 md:grid-cols-12 md:items-center\">\n              <div class=\"space-y-2 md:col-span-6\">\n                <span class=\"text-primary text-xs font-semibold\">Carrier Authorization &amp; Endorsement</span>\n                <p class=\"text-muted-foreground text-xs leading-relaxed\">\n                  IN WITNESS whereof the carrier, through its authorized master or port agent, has signed three (3)\n                  original Bills of Lading, one of which being accomplished, the others to stand void.\n                </p>\n                <div class=\"text-muted-foreground flex flex-col gap-1 pt-2 font-mono text-xs\">\n                  <p>\n                    <span class=\"text-foreground font-semibold\">Authorized Agent:</span> Capt. H. van der Meer (Master /\n                    Port Agent)\n                  </p>\n                  <p>\n                    <span class=\"text-foreground font-semibold\">Digital Signature SHA-256:</span>\n                    9b2d8fe14157a3e8...c72194b0\n                  </p>\n                  <p>\n                    <span class=\"text-foreground font-semibold\">Issued:</span> {{ issueDate }} at Port of Shanghai,\n                    China\n                  </p>\n                </div>\n              </div>\n\n              <div class=\"flex justify-center md:col-span-3\">\n                <div\n                  class=\"border-primary/40 bg-primary/5 text-primary rotate-[-2deg] rounded-lg border-2 border-dashed p-4 text-center font-mono text-xs tracking-widest uppercase shadow-xs\"\n                >\n                  <div class=\"mb-1 flex justify-center\">\n                    <lucide-icon [img]=\"Ship\" class=\"text-primary size-6\" />\n                  </div>\n                  <div class=\"text-sm font-semibold tracking-tight\">MAERSK LINE A/S</div>\n                  <div class=\"text-muted-foreground text-xs font-semibold\">PORT OF SHANGHAI AGENCY</div>\n                  <div class=\"border-primary/30 text-success mt-1 border-t pt-1 text-xs font-semibold\">\n                    OFFICIALLY ENDORSED\n                  </div>\n                </div>\n              </div>\n\n              <div\n                class=\"border-border bg-muted/20 flex flex-col items-center justify-center rounded-lg border p-4 text-center md:col-span-3\"\n              >\n                <svg\n                  viewBox=\"0 0 100 100\"\n                  class=\"text-foreground size-20 shrink-0\"\n                  fill=\"currentColor\"\n                  aria-label=\"QR Code\"\n                >\n                  <rect x=\"2\" y=\"2\" width=\"28\" height=\"28\" rx=\"3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\" />\n                  <rect x=\"10\" y=\"10\" width=\"12\" height=\"12\" rx=\"1.5\" />\n                  <rect x=\"70\" y=\"2\" width=\"28\" height=\"28\" rx=\"3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\" />\n                  <rect x=\"78\" y=\"10\" width=\"12\" height=\"12\" rx=\"1.5\" />\n                  <rect x=\"2\" y=\"70\" width=\"28\" height=\"28\" rx=\"3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\" />\n                  <rect x=\"10\" y=\"78\" width=\"12\" height=\"12\" rx=\"1.5\" />\n                  <rect x=\"36\" y=\"6\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"48\" y=\"6\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"58\" y=\"6\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"6\" y=\"36\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"18\" y=\"36\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"36\" y=\"36\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"48\" y=\"36\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"58\" y=\"36\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"74\" y=\"36\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"86\" y=\"36\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"36\" y=\"48\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"48\" y=\"48\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"58\" y=\"48\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"36\" y=\"60\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"48\" y=\"60\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"58\" y=\"60\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"36\" y=\"76\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"48\" y=\"76\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"58\" y=\"76\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"74\" y=\"76\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"86\" y=\"76\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"74\" y=\"86\" width=\"6\" height=\"6\" rx=\"1\" />\n                  <rect x=\"86\" y=\"86\" width=\"6\" height=\"6\" rx=\"1\" />\n                </svg>\n                <span class=\"text-foreground mt-2 font-mono text-xs font-medium\"\n                  >Scan for Port Customs e-Verification</span\n                >\n                <span class=\"text-muted-foreground text-xs\">UIPKGE Trust Protocol</span>\n              </div>\n            </div>\n          </div>\n        </div>\n      }\n\n      <!-- TAB 2: CUSTOMS & COMPLIANCE INSPECTOR -->\n      @if (activeTab() === 'compliance') {\n        <div class=\"space-y-6\">\n          <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n            <div ui-card class=\"border-border bg-card\">\n              <div ui-card-header class=\"p-4 pb-2\">\n                <p ui-card-description class=\"text-xs\">Customs Risk Assessment</p>\n                <div class=\"flex items-baseline gap-2\">\n                  <h3 ui-card-title class=\"text-success text-2xl font-bold\">99 / 100</h3>\n                  <span ui-badge wrap variant=\"success\" class=\"text-xs\">Low Risk</span>\n                </div>\n              </div>\n              <div ui-card-content class=\"text-muted-foreground p-4 pt-1 text-xs\">\n                Green channel clearance granted for Rotterdam entry. Pre-arrival ICS2 security declaration verified.\n              </div>\n            </div>\n\n            <div ui-card class=\"border-border bg-card\">\n              <div ui-card-header class=\"p-4 pb-2\">\n                <p ui-card-description class=\"text-xs\">Import Duties &amp; VAT Estimation</p>\n                <div class=\"flex items-baseline gap-2\">\n                  <h3 ui-card-title class=\"text-foreground font-mono text-2xl font-bold\">$29,925.00</h3>\n                  <span ui-badge wrap variant=\"outline\" class=\"font-mono text-xs\">EUR 27,665</span>\n                </div>\n              </div>\n              <div ui-card-content class=\"text-muted-foreground p-4 pt-1 text-xs\">\n                0% Base Duty (TARIC 8518.30.00) + 21.0% Netherlands Import VAT under Article 23 reverse-charge\n                mechanism.\n              </div>\n            </div>\n\n            <div ui-card class=\"border-border bg-card\">\n              <div ui-card-header class=\"p-4 pb-2\">\n                <p ui-card-description class=\"text-xs\">Container Seal Audit</p>\n                <div class=\"flex items-baseline gap-2\">\n                  <h3 ui-card-title class=\"text-foreground text-2xl font-bold\">2 / 2 Valid</h3>\n                  <span ui-badge wrap variant=\"success\" class=\"text-xs\">ISO 17712 Compliant</span>\n                </div>\n              </div>\n              <div ui-card-content class=\"text-muted-foreground p-4 pt-1 text-xs\">\n                Bolt seals SL-94021 &amp; SL-94022 confirmed tamper-free at origin gate inspection.\n              </div>\n            </div>\n          </div>\n\n          <div ui-card class=\"border-border bg-card\">\n            <div ui-card-header class=\"p-5 pb-3\">\n              <div class=\"flex items-center justify-between\">\n                <div>\n                  <h3 ui-card-title class=\"text-base font-semibold\">\n                    Customs Compliance &amp; Regulatory Audit Checklist\n                  </h3>\n                  <p ui-card-description class=\"text-xs\">\n                    International trade compliance checks required for European Union port entry and inland transit\n                  </p>\n                </div>\n                <span ui-badge wrap variant=\"success\" class=\"gap-1 text-xs\">\n                  <lucide-icon [img]=\"CheckCircle2\" class=\"size-3.5\" />\n                  <span>All 6 Gates Passed</span>\n                </span>\n              </div>\n            </div>\n            <div ui-card-content class=\"space-y-3 p-5 pt-0\">\n              <div class=\"grid grid-cols-1 gap-3 md:grid-cols-2\">\n                @for (gate of complianceGatesList; track gate.id) {\n                  <div class=\"border-border bg-muted/20 flex items-start gap-3 rounded-lg border p-3.5 shadow-xs\">\n                    <div class=\"bg-success/10 text-success mt-0.5 shrink-0 rounded-full p-1\">\n                      <lucide-icon [img]=\"CheckCircle2\" class=\"size-4\" />\n                    </div>\n                    <div class=\"space-y-1 text-xs\">\n                      <div class=\"flex items-center justify-between gap-2\">\n                        <span class=\"text-foreground font-semibold\">{{ gate.name }}</span>\n                        <span class=\"text-muted-foreground font-mono text-xs font-medium\">{{ gate.reference }}</span>\n                      </div>\n                      <p class=\"text-muted-foreground leading-relaxed\">{{ gate.details }}</p>\n                      <span class=\"text-primary block text-xs font-medium\">Authority: {{ gate.authority }}</span>\n                    </div>\n                  </div>\n                }\n              </div>\n            </div>\n          </div>\n        </div>\n      }\n\n      <!-- TAB 3: ELECTRONIC DATA INTERCHANGE (EDI) / JSON MANIFEST -->\n      @if (activeTab() === 'edi') {\n        <div class=\"space-y-4\">\n          <div ui-card class=\"border-border bg-card\">\n            <div ui-card-header class=\"p-5 pb-3\">\n              <div class=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n                <div>\n                  <h3 ui-card-title class=\"text-base font-semibold\">Electronic Data Interchange (UN/EDIFACT IFTMIN)</h3>\n                  <p ui-card-description class=\"text-xs\">\n                    Standardized electronic consignment instructions formatted per UN/EDIFACT D.01B maritime transport\n                    standards\n                  </p>\n                </div>\n                <button\n                  ui-button\n                  variant=\"outline\"\n                  size=\"sm\"\n                  class=\"gap-1.5 self-start text-xs sm:self-auto\"\n                  (click)=\"handleCopyEdi()\"\n                >\n                  @if (copiedEdi()) {\n                    <lucide-icon [img]=\"Check\" class=\"text-success size-3.5\" />\n                  } @else {\n                    <lucide-icon [img]=\"Copy\" class=\"size-3.5\" />\n                  }\n                  <span>{{ copiedEdi() ? 'Copied EDI Payload' : 'Copy EDI Payload' }}</span>\n                </button>\n              </div>\n            </div>\n            <div ui-card-content class=\"p-5 pt-0\">\n              <pre\n                class=\"border-border bg-muted/40 text-foreground overflow-x-auto rounded-lg border p-4 font-mono text-xs leading-relaxed select-all\"\n                >{{ generateEdiText() }}</pre>\n            </div>\n          </div>\n        </div>\n      }\n    </div>\n  `,\n})\nexport class UiBillOfLadingViewerComponent {\n  protected readonly AlertCircle = AlertCircle\n  protected readonly Anchor = Anchor\n  protected readonly Building2 = Building2\n  protected readonly Check = Check\n  protected readonly CheckCircle2 = CheckCircle2\n  protected readonly Copy = Copy\n  protected readonly Download = Download\n  protected readonly FileText = FileText\n  protected readonly Mail = Mail\n  protected readonly MapPin = MapPin\n  protected readonly Phone = Phone\n  protected readonly Printer = Printer\n  protected readonly ShieldCheck = ShieldCheck\n  protected readonly Ship = Ship\n\n  protected readonly cargoItemsList = cargoItems\n  protected readonly complianceGatesList = complianceGates\n\n  @Input() documentTitle = 'Straight Bill of Lading (Original)'\n  @Input() bolNumber = '#BOL-2026-894210'\n  @Input() carrierName = 'Maersk Line A/S'\n  @Input() scacCode = 'MAEU'\n  @Input() bookingReference = 'BKG-771920-EU'\n  @Input() exportReference = 'EXP-2026-0812'\n  @Input() issueDate = 'August 21, 2026'\n  @Input() placeOfIssue = 'Shanghai, China'\n  @Input() shipperName = 'Shenzhen AudioTech Precision Ltd.'\n  @Input() shipperAddress = 'Building 4, High-Tech Industrial Park, Nanshan District, Shenzhen, Guangdong 518057, China'\n  @Input() shipperContact = '+86 755 8892 1044'\n  @Input() shipperEmail = 'export@audiotech-cn.com'\n  @Input() shipperEori = 'CN-91440300MA5EXP01'\n  @Input() consigneeName = 'SonicAura Europe B.V.'\n  @Input() consigneeAddress = 'Keizersgracht 421, 1016 EK Amsterdam, Netherlands'\n  @Input() consigneeContact = '+31 20 894 3300'\n  @Input() consigneeEmail = 'import@sonicaura.eu'\n  @Input() consigneeEori = 'NL864219034 / VAT: NL864219034B01'\n  @Input() notifyPartyName = 'Rotterdam Intermodal Logistics GmbH'\n  @Input() notifyPartyAddress = 'Willemskade 18, 3016 DK Rotterdam, Netherlands'\n  @Input() notifyPartyContact = '+31 10 400 9820'\n  @Input() notifyPartyEmail = 'clearance@rotterdam-intermodal.com'\n  @Input() notifyPartyAttention = 'Customs Brokerage Dept. / Desk 4B'\n  @Input() preCarriageBy = 'Feeder Barge \"Yangtze River 12\"'\n  @Input() placeOfReceipt = 'Shenzhen Inland Depot, China (CNSZX)'\n  @Input() vesselVoyage = 'Ever Given / V.042W'\n  @Input() vesselImo = 'IMO 9811000'\n  @Input() vesselFlag = 'Panama (PA)'\n  @Input() portOfLoading = 'Shanghai Port, China (CNSHA)'\n  @Input() portOfDischarge = 'Rotterdam Port, Netherlands (NLRTM)'\n  @Input() placeOfDelivery = 'Duisburg Intermodal Terminal, Germany (DEDUI)'\n  @Input() finalDestination = 'Duisburg Central DC #4 (DEDUI)'\n  @Input() freightTerms = 'Prepaid'\n  @Input() freightPayableAt = 'Shanghai, China'\n  @Input() declaredValue = '$142,500.00 USD'\n  @Input() insuranceCert = '#INS-9421-MAR'\n  @Input() incoterms = 'CIF Rotterdam Port (Incoterms 2020)'\n  @Input() letterOfCredit = 'LC-BNP-2026-99410-EU (BNP Paribas)'\n  @Input() blockchainTxHash = '0x71e4d3a8904f84c8a5142d131fba827b5e4c91a2'\n  @Input() blockchainBlock = '59,182,904'\n  @Input() blockchainNetwork = 'Polygon Mainnet (Decentralized Cargo Registry)'\n  @Input() set initialTab(v: BillOfLadingTab) {\n    this.activeTab.set(v ?? 'document')\n  }\n  @Input('class') className?: string\n\n  @Output() readonly downloadPdf = new EventEmitter<void>()\n  @Output() readonly verifyBlockchain = new EventEmitter<void>()\n  @Output() readonly print = new EventEmitter<void>()\n\n  readonly activeTab = signal<BillOfLadingTab>('document')\n  readonly copiedBol = signal(false)\n  readonly copiedEdi = signal(false)\n  readonly showVerifyDetails = signal(false)\n  private copyTimer: ReturnType<typeof setTimeout> | undefined\n\n  constructor() {\n    inject(DestroyRef).onDestroy(() => clearTimeout(this.copyTimer))\n  }\n\n  readonly totalPackagesCount = computed(() => cargoItems.reduce((acc, item) => acc + item.packagesCount, 0))\n  readonly totalGrossWeightKg = computed(() => cargoItems.reduce((acc, item) => acc + item.grossWeightKg, 0))\n  readonly totalGrossWeightLbs = computed(() => cargoItems.reduce((acc, item) => acc + item.grossWeightLbs, 0))\n  readonly totalVolumeCbm = computed(() => cargoItems.reduce((acc, item) => acc + item.volumeCbm, 0))\n\n  get rootClass(): string {\n    return cn('text-foreground w-full space-y-6', this.className)\n  }\n\n  tabClass(tab: BillOfLadingTab, withIcon = false): string {\n    return cn(\n      'focus-visible:ring-ring rounded-md px-3 py-1.5 text-xs font-medium transition-colors focus-visible:ring-2 focus-visible:outline-none',\n      withIcon && 'flex items-center gap-1.5',\n      this.activeTab() === tab\n        ? 'bg-background text-foreground shadow-xs'\n        : 'text-muted-foreground hover:text-foreground',\n    )\n  }\n\n  generateEdiText(): string {\n    return `UNB+UNOA:2+${this.scacCode}:ZZ+SONICAURA:ZZ+260821:1400+0000001'\nUNH+1+IFTMIN:D:01B:UN:EAN004'\nBGM+705+${this.bolNumber.replace('#', '')}+9'\nDTM+137:20260821:102'\nNAD+CZ+${this.shipperEori}::9++${this.shipperName}+${this.shipperAddress}+SHENZHEN++518057+CN'\nNAD+CN+NL864219034::9++${this.consigneeName}+${this.consigneeAddress}+AMSTERDAM++1016EK+NL'\nNAD+NI+++${this.notifyPartyName}+${this.notifyPartyAddress}+ROTTERDAM++3016DK+NL'\nTDT+20+V.042W+1+13+MAEU:172:20+++${this.vesselImo}::11:${this.vesselVoyage}'\nLOC+9+CNSHA:139:6+SHANGHAI PORT'\nLOC+11+NLRTM:139:6+ROTTERDAM PORT'\nLOC+7+DEDUI:139:6+DUISBURG TERMINAL'\nEQD+CN+MSKU9482014+45G1:102:5++2+5'\nSEL+SL94021+SH'\nGID+1+24:BX+PRO AUDIO HEADPHONES:85183000'\nMEA+WT+G+KGM:4850.00'\nMEA+VOL+AAW+MTQ:32.40'\nMOA+39:142500:USD'\nUNT+18+1'\nUNZ+1+0000001'`\n  }\n\n  handleCopyBol(): void {\n    if (typeof navigator !== 'undefined' && navigator.clipboard) {\n      void navigator.clipboard.writeText(this.bolNumber)\n      this.copiedBol.set(true)\n      clearTimeout(this.copyTimer)\n      this.copyTimer = setTimeout(() => this.copiedBol.set(false), 2000)\n    }\n  }\n\n  handleCopyEdi(): void {\n    if (typeof navigator !== 'undefined' && navigator.clipboard) {\n      void navigator.clipboard.writeText(this.generateEdiText())\n      this.copiedEdi.set(true)\n      clearTimeout(this.copyTimer)\n      this.copyTimer = setTimeout(() => this.copiedEdi.set(false), 2000)\n    }\n  }\n\n  handlePrint(): void {\n    this.print.emit()\n    if (typeof window !== 'undefined') window.print()\n  }\n\n  handleDownloadPdf(): void {\n    this.downloadPdf.emit()\n    this.handlePrint()\n  }\n\n  toggleBlockchainDetails(): void {\n    this.showVerifyDetails.update((v) => !v)\n    this.verifyBlockchain.emit()\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/bill-of-lading-viewer/bill-of-lading-viewer.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/bill-of-lading-viewer/index.ts",
      "content": "export {\n  UiBillOfLadingViewerComponent,\n  type BillOfLadingTab,\n  type ComplianceGate,\n  type ContainerCargoItem,\n} from './bill-of-lading-viewer.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/bill-of-lading-viewer/index.ts"
    }
  ],
  "dependencies": [
    "lucide-angular"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/angular/badge.json",
    "https://uipkge.dev/r/angular/button.json",
    "https://uipkge.dev/r/angular/card.json",
    "https://uipkge.dev/r/angular/separator.json",
    "https://uipkge.dev/r/angular/table.json"
  ],
  "description": "Maritime & Air Bill of Lading (BOL) shipping document viewer and customs compliance inspector with multi-party entity grid, transport routing, container & cargo manifest, freight terms, carrier stamp, and blockchain verification.",
  "categories": [
    "logistics",
    "app",
    "documents"
  ]
}