diff --git a/.github/workflows/build_deploy.yml b/.github/workflows/build_deploy.yml
index fa411c3..0095d66 100644
--- a/.github/workflows/build_deploy.yml
+++ b/.github/workflows/build_deploy.yml
@@ -3,20 +3,15 @@ name: build_deploy
on:
push:
branches:
- - main
- # - staging
+ - main
pull_request:
- repository_dispatch:
workflow_dispatch:
-# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
-# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
-# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
@@ -25,53 +20,44 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- - name: Setup prerequisites
- run: |
- sudo apt-get update
- sudo apt-get install -y curl make libxml2-dev libxslt-dev libnode-dev node-gyp npm openssl xsltproc
-
- - name: Setup snaps
- run: |
- sudo snap install aws-cli --classic
-
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
submodules: true
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
- ruby-version: '2.7'
+ ruby-version: '3.3'
bundler-cache: true
- cache-version: 0 # Increment this number if you need to re-download cached gems
+ cache-version: 3
+
+ - name: Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version: '20'
- name: Update submodules
- run: |
- make update-init update-modules
+ run: make update-init update-modules
- - name: Use Node
- uses: actions/setup-node@v1
- with:
- node-version: '14.x'
+ - name: Install frontend deps
+ run: cd frontend && npm install
- - name: Setup npm
- run: |
- npm install
+ - name: Build lutaml-xsd frontend
+ run: cd "$(bundle show lutaml-xsd)/frontend" && npm install && npm run build
- name: Setup Pages
id: pages
- uses: actions/configure-pages@v3
+ uses: actions/configure-pages@v5
- name: Build site
- run: |
- make _site
+ run: make all
- name: Upload artifact
- # Automatically uploads an artifact from the './_site' directory by default
- uses: actions/upload-pages-artifact@v2
+ uses: actions/upload-pages-artifact@v3
+ with:
+ path: site
- # Deployment job
deploy:
environment:
name: github-pages
@@ -82,4 +68,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
- uses: actions/deploy-pages@v2
+ uses: actions/deploy-pages@v4
diff --git a/.github/workflows/links.yml b/.github/workflows/links.yml
index 684d017..dd55b5e 100644
--- a/.github/workflows/links.yml
+++ b/.github/workflows/links.yml
@@ -3,68 +3,50 @@ name: links
on:
push:
branches:
- - main
- - staging
+ - main
pull_request:
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
jobs:
link_checker:
runs-on: ubuntu-latest
steps:
- - name: Setup prerequisites
- run: |
- sudo apt-get update
- sudo apt-get install -y curl make libxml2-dev libxslt-dev libnode-dev node-gyp npm openssl xsltproc
-
- - name: Setup snaps
- run: |
- sudo snap install aws-cli --classic
-
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
submodules: true
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
- ruby-version: '2.7'
+ ruby-version: '3.3'
bundler-cache: true
- cache-version: 0 # Increment this number if you need to re-download cached gems
-
- - name: Update submodules
- run: |
- make update-init update-modules
+ cache-version: 3
- - name: Use Node
- uses: actions/setup-node@v1
+ - name: Setup Node
+ uses: actions/setup-node@v4
with:
- node-version: '14.x'
+ node-version: '20'
- - name: Setup npm
- run: |
- npm install
+ - name: Update submodules
+ run: make update-init update-modules
+
+ - name: Install frontend deps
+ run: cd frontend && npm install
- - name: Setup Pages
- id: pages
- uses: actions/configure-pages@v3
+ - name: Build lutaml-xsd frontend
+ run: cd "$(bundle show lutaml-xsd)/frontend" && npm install && npm run build
- name: Build site
- run: |
- make _site
+ run: make all
- name: Link Checker
- uses: lycheeverse/lychee-action@v1.2.0
+ uses: lycheeverse/lychee-action@v2
with:
- args: --verbose --no-progress --exclude-file .lycheeignore -- _site/**/*.html
+ args: --verbose --no-progress --exclude-file .lycheeignore --root-dir site -- site/**/*.html
fail: true
env:
- GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
-
- # - name: Create Issue From File
- # uses: peter-evans/create-issue-from-file@v2
- # with:
- # title: Link Checker Report
- # content-filepath: ./lychee/out.md
- # labels: report, automated issue
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index e9a00ab..538782e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,8 @@
-_site
.DS_Store
-build_source
Gemfile.lock
+build/
+site/
+node_modules/
+frontend/node_modules/
+schemas_index.json
+unitsml.lxr
diff --git a/.lycheeignore b/.lycheeignore
new file mode 100644
index 0000000..253ba32
--- /dev/null
+++ b/.lycheeignore
@@ -0,0 +1 @@
+# Patterns to exclude from link checking
diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 0000000..3c09213
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,68 @@
+# CLAUDE.md
+
+This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
+
+## Project Overview
+
+**schema.unitsml.org** — an interactive schema browser site for UnitsML XML schemas (OASIS standard for units of measure in XML). The site consists of:
+- A custom **index page** (Vite + Tailwind CSS) listing all available schema versions
+- Per-schema **interactive SPA browsers** generated by lutaml-xsd
+
+Architecture: **1 schema → 1 LXR package → 1 SPA HTML file**, all listed on the index page.
+
+## Build Commands
+
+```bash
+# Full build (index page + all schema SPAs)
+make all
+
+# Build just the index page
+make site/index.html
+
+# Build a single schema SPA
+make site/unitsml-v1.0.html
+
+# Local dev server on http://localhost:4000
+make serve
+
+# Clean all build artifacts
+make clean
+
+# Initialize/update git submodules (schemas)
+make update-init update-modules
+```
+
+## Architecture
+
+```
+schemas/ → Git submodule (unitsml/schemas), contains XSD files
+ unitsml/*.xsd → UnitsML schema versions (v0.9 through v1.0)
+ unitsmllite/*.xsd → UnitsML-Lite schema
+
+configs/ → Auto-generated per-schema lutaml-xsd configs (from generate_configs.rb)
+build/ → Intermediate LXR packages
+site/ → Final deployable output
+ index.html → Custom index page (Vite + Tailwind)
+ assets/ → JS/CSS for index page
+ logo-unitsml.svg → UnitsML logo
+ unitsml-*.html → Per-schema SPA browsers (self-contained)
+ unitsmllite-*.html
+
+frontend/ → Vite + Tailwind CSS project for the index page
+ src/main.js → Schema data + card rendering
+ src/style.css → Tailwind config + custom animations
+ vite.config.js → Builds to ../site/
+
+generate_configs.rb → Generates per-schema config YAML files + schemas_index.json
+Gemfile → Ruby deps (lutaml-xsd, lutaml-model from GitHub main, moxml, canon)
+Makefile → Build orchestration
+```
+
+## Key Details
+
+- **lutaml-xsd** generates interactive Vue SPAs from XSD files via LXR packages
+- The lutaml-xsd frontend must be pre-built (`frontend/dist/` in the gem) — the published gem may not include it; build manually if needed: `cd $(bundle show lutaml-xsd)/frontend && npm install && npm run build`
+- **xsdvi** gem generates SVG diagrams for the SPA (may show "SVG is empty!" warnings — non-blocking)
+- The `schemas` git submodule must be initialized before building
+- lutaml-xsd depends on `lutaml-model` from GitHub main (not compatible with Jekyll's liquid ~> 4.0)
+- Brand colors: navy `#2d2c69`, teal `#30dfc0`, light blue `#57a0fe`
diff --git a/Gemfile b/Gemfile
index e927679..d0d53f3 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,44 +1,6 @@
source "https://rubygems.org"
-# gem "metanorma-cli"
-# gem "metanorma-csd", path: "~/src/relaton-cli"
-# gem "metanorma-cli", path: "~/src/metanorma-cli"
-# gem "relaton-cli", git: "https://github.com/riboseinc/relaton-cli"
-# gem "relaton-cli", path: "~/src/relaton-cli"
-
-# __________________ JEKYLL BELOW __________________
-
-# Hello! This is where you manage which Jekyll version is used to run.
-# When you want to use a different version, change it below, save the
-# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
-#
-# bundle exec jekyll serve
-#
-# This will help ensure the proper Jekyll version is running.
-# Happy Jekylling!
-gem "jekyll", "~> 4.1"
-
-# This is the default theme for new Jekyll sites. You may change this to anything you like.
-gem "jekyll-theme-isotc211"
-
-# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
-# uncomment the line below. To upgrade, run `bundle update github-pages`.
-# gem "github-pages", group: :jekyll_plugins
-
-# If you have any plugins, put them here!
-group :jekyll_plugins do
- gem "jekyll-feed"
- gem "jekyll-data"
- gem "jekyll-plugin-frontend-build"
- gem "jekyll-theme-isotc211-helpers"
- gem "jekyll-asciidoc"
-end
-
-# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
-gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]
-
-# Performance-booster for watching directories on Windows
-gem "wdm", "~> 0.1.0" if Gem.win_platform?
-
-gem "webrick"
-
+gem "lutaml-xsd", "~> 1.1"
+gem "lutaml-model", github: "lutaml/lutaml-model", branch: "main"
+gem "moxml"
+gem "canon"
diff --git a/Makefile b/Makefile
index 26a481f..4c926ad 100644
--- a/Makefile
+++ b/Makefile
@@ -1,26 +1,48 @@
SHELL := /bin/bash
-all: _site
+CONFIGS := $(wildcard configs/*.yml)
+LXR_FILES := $(patsubst configs/%.yml,build/%.lxr,$(CONFIGS))
+SPA_FILES := $(patsubst configs/%.yml,site/%.html,$(CONFIGS))
-clean:
- rm -rf _site build_source
+all: site/index.html site/logo-unitsml.svg $(SPA_FILES)
+
+# Generate per-schema config files and index JSON
+configs: generate_configs.rb
+ ruby generate_configs.rb
+
+# Build a single LXR package from a config
+build/%.lxr: configs/%.yml
+ mkdir -p build
+ bundle exec lutaml-xsd build from-config $< \
+ --output $@
-distclean: clean
- $(MAKE) -C schemas distclean
+# Generate a single SPA HTML from an LXR package
+site/%.html: build/%.lxr
+ mkdir -p site
+ bundle exec lutaml-xsd spa $< \
+ --mode inlined \
+ --output $@
-docs/unitsml/unitsml-v1.0/index.html:
- $(MAKE) -C schemas
+# Build the custom index page (Vite + Tailwind)
+site/index.html: frontend/src/main.js frontend/src/style.css frontend/index.html frontend/package.json
+ cd frontend && npm install --silent && npm run build
-build_source: docs/unitsml/unitsml-v1.0/index.html
- mkdir -p $@; \
- cp -a source/* build_source; \
- cp -a schemas/* build_source;
+# Copy logo to site
+site/logo-unitsml.svg: source/assets/logo-unitsml-noninverted.svg
+ mkdir -p site
+ cp $< $@
-_site: build_source
- bundle exec jekyll build
+serve: all
+ cd site && python3 -m http.server 4000
+
+stop:
+ lsof -ti:4000 | xargs kill -9 2>/dev/null || true
+
+clean:
+ rm -rf build site schemas_index.json
-serve: _site
- bundle exec jekyll serve --trace
+clean-spa:
+ rm -f site/unitsml-*.html site/unitsmllite-*.html
update-init:
git submodule update --init
@@ -29,4 +51,4 @@ update-modules:
git submodule foreach git checkout main; \
git submodule foreach git pull origin main
-.PHONY: all clean distclean serve update-init update-modules
+.PHONY: all configs clean clean-spa serve stop update-init update-modules
diff --git a/_config.yml b/_config.yml
deleted file mode 100644
index f561a8d..0000000
--- a/_config.yml
+++ /dev/null
@@ -1,71 +0,0 @@
-title: UnitsML XML schemas
-title_html: UnitsML XML schemas
-
-committee:
- id: UnitsML
- name: UnitsML
- home: https://www.unitsml.org
-
-footer_nav:
- - url: https://www.unitsml.org
- title: Main Site
-
-font_awesome_kit_url: https://kit.fontawesome.com/77a8a07e0a.js
-
-collections:
- pages:
- output: true
- permalink: /:path/
-
-resource_listings:
- schemas:
- index_url: 'schemas'
- index_title: "Schemas"
- resource_root: 'schemas'
- resource_label: "schema"
-
-description: >-
- The UnitsML XML schema repository.
-
-tagline: >-
- UnitsML XML schemas for semantic units
-
-author: "UnitsML"
-email: pending@unitsml.org
-
-theme: jekyll-theme-isotc211
-
-social:
- links:
- - url: https://github.com/unitsml
-
-powered_by:
- url: https://open.ribose.com
- title: Ribose
- logo_path: /assets/logo-ribose.svg
-
-markdown: kramdown
-
-source: build_source
-include:
- - build_source
-
-exclude:
- - Gemfile
- - Gemfile.lock
- - Makefile
- - node_modules
- - vendor/bundle/
- - vendor/cache/
- - vendor/gems/
- - vendor/ruby/
- - .sass-cache/
-
-org:
- name: UnitsML
- website:
- url: https://www.unitsml.org/
- title: www.unitsml.org
- email: info@unitsml.org
- address: |-
- info@unitsml.org
diff --git a/babel.config.js b/babel.config.js
deleted file mode 100644
index 3569f75..0000000
--- a/babel.config.js
+++ /dev/null
@@ -1,16 +0,0 @@
-const presets = [
- [
- "@babel/env",
- {
- targets: {
- ie: "10",
- edge: "17",
- firefox: "60",
- chrome: "67",
- safari: "11.1",
- },
- },
- ],
-];
-
-module.exports = { presets };
diff --git a/configs/unitsml-v0.9.10.yml b/configs/unitsml-v0.9.10.yml
new file mode 100644
index 0000000..641b94a
--- /dev/null
+++ b/configs/unitsml-v0.9.10.yml
@@ -0,0 +1,38 @@
+# UnitsML 0.9.10
+---
+metadata:
+ name: UnitsML 0.9.10
+ version: 0.9.10
+ title: UnitsML 0.9.10 Schema Browser
+ description: Interactive documentation for the UnitsML 0.9.10 XML schema.
+ license: OASIS
+build:
+ xsd_mode: include_all
+ resolution_mode: resolved
+ serialization_format: marshal
+files:
+- "../schemas/unitsml/unitsml-v0.9.10.xsd"
+namespace_mappings:
+- prefix: xs
+ uri: http://www.w3.org/2001/XMLSchema
+- prefix: unitsml-0910
+ uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.10
+appearance:
+ logos:
+ long:
+ light:
+ path: "logo-unitsml.svg"
+ dark:
+ path: "logo-unitsml.svg"
+ lutaml_logo:
+ light:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg
+ dark:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg
+ colors:
+ primary: "#2d2c69"
+ primary_light: "#57a0fe"
+ primary_dark: "#1a1950"
+ accent: "#30dfc0"
+ background_primary: "#ffffff"
+ background_secondary: "#f8fafc"
diff --git a/configs/unitsml-v0.9.12.yml b/configs/unitsml-v0.9.12.yml
new file mode 100644
index 0000000..4837ecc
--- /dev/null
+++ b/configs/unitsml-v0.9.12.yml
@@ -0,0 +1,38 @@
+# UnitsML 0.9.12
+---
+metadata:
+ name: UnitsML 0.9.12
+ version: 0.9.12
+ title: UnitsML 0.9.12 Schema Browser
+ description: Interactive documentation for the UnitsML 0.9.12 XML schema.
+ license: OASIS
+build:
+ xsd_mode: include_all
+ resolution_mode: resolved
+ serialization_format: marshal
+files:
+- "../schemas/unitsml/unitsml-v0.9.12.xsd"
+namespace_mappings:
+- prefix: xs
+ uri: http://www.w3.org/2001/XMLSchema
+- prefix: unitsml-0912
+ uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.12
+appearance:
+ logos:
+ long:
+ light:
+ path: "logo-unitsml.svg"
+ dark:
+ path: "logo-unitsml.svg"
+ lutaml_logo:
+ light:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg
+ dark:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg
+ colors:
+ primary: "#2d2c69"
+ primary_light: "#57a0fe"
+ primary_dark: "#1a1950"
+ accent: "#30dfc0"
+ background_primary: "#ffffff"
+ background_secondary: "#f8fafc"
diff --git a/configs/unitsml-v0.9.19.yml b/configs/unitsml-v0.9.19.yml
new file mode 100644
index 0000000..d6e8c6f
--- /dev/null
+++ b/configs/unitsml-v0.9.19.yml
@@ -0,0 +1,38 @@
+# UnitsML 0.9.19
+---
+metadata:
+ name: UnitsML 0.9.19
+ version: 0.9.19
+ title: UnitsML 0.9.19 Schema Browser
+ description: Interactive documentation for the UnitsML 0.9.19 XML schema.
+ license: OASIS
+build:
+ xsd_mode: include_all
+ resolution_mode: resolved
+ serialization_format: marshal
+files:
+- "../schemas/unitsml/unitsml-v0.9.19.xsd"
+namespace_mappings:
+- prefix: xs
+ uri: http://www.w3.org/2001/XMLSchema
+- prefix: unitsml-0919
+ uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.19
+appearance:
+ logos:
+ long:
+ light:
+ path: "logo-unitsml.svg"
+ dark:
+ path: "logo-unitsml.svg"
+ lutaml_logo:
+ light:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg
+ dark:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg
+ colors:
+ primary: "#2d2c69"
+ primary_light: "#57a0fe"
+ primary_dark: "#1a1950"
+ accent: "#30dfc0"
+ background_primary: "#ffffff"
+ background_secondary: "#f8fafc"
diff --git a/configs/unitsml-v0.9.2.yml b/configs/unitsml-v0.9.2.yml
new file mode 100644
index 0000000..3a1753b
--- /dev/null
+++ b/configs/unitsml-v0.9.2.yml
@@ -0,0 +1,38 @@
+# UnitsML 0.9.2
+---
+metadata:
+ name: UnitsML 0.9.2
+ version: 0.9.2
+ title: UnitsML 0.9.2 Schema Browser
+ description: Interactive documentation for the UnitsML 0.9.2 XML schema.
+ license: OASIS
+build:
+ xsd_mode: include_all
+ resolution_mode: resolved
+ serialization_format: marshal
+files:
+- "../schemas/unitsml/unitsml-v0.9.2.xsd"
+namespace_mappings:
+- prefix: xs
+ uri: http://www.w3.org/2001/XMLSchema
+- prefix: unitsml-092
+ uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.2
+appearance:
+ logos:
+ long:
+ light:
+ path: "logo-unitsml.svg"
+ dark:
+ path: "logo-unitsml.svg"
+ lutaml_logo:
+ light:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg
+ dark:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg
+ colors:
+ primary: "#2d2c69"
+ primary_light: "#57a0fe"
+ primary_dark: "#1a1950"
+ accent: "#30dfc0"
+ background_primary: "#ffffff"
+ background_secondary: "#f8fafc"
diff --git a/configs/unitsml-v0.9.7.yml b/configs/unitsml-v0.9.7.yml
new file mode 100644
index 0000000..b2800e9
--- /dev/null
+++ b/configs/unitsml-v0.9.7.yml
@@ -0,0 +1,38 @@
+# UnitsML 0.9.7
+---
+metadata:
+ name: UnitsML 0.9.7
+ version: 0.9.7
+ title: UnitsML 0.9.7 Schema Browser
+ description: Interactive documentation for the UnitsML 0.9.7 XML schema.
+ license: OASIS
+build:
+ xsd_mode: include_all
+ resolution_mode: resolved
+ serialization_format: marshal
+files:
+- "../schemas/unitsml/unitsml-v0.9.7.xsd"
+namespace_mappings:
+- prefix: xs
+ uri: http://www.w3.org/2001/XMLSchema
+- prefix: unitsml-097
+ uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.7
+appearance:
+ logos:
+ long:
+ light:
+ path: "logo-unitsml.svg"
+ dark:
+ path: "logo-unitsml.svg"
+ lutaml_logo:
+ light:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg
+ dark:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg
+ colors:
+ primary: "#2d2c69"
+ primary_light: "#57a0fe"
+ primary_dark: "#1a1950"
+ accent: "#30dfc0"
+ background_primary: "#ffffff"
+ background_secondary: "#f8fafc"
diff --git a/configs/unitsml-v0.9.yml b/configs/unitsml-v0.9.yml
new file mode 100644
index 0000000..86bd9ab
--- /dev/null
+++ b/configs/unitsml-v0.9.yml
@@ -0,0 +1,38 @@
+# UnitsML 0.9
+---
+metadata:
+ name: UnitsML 0.9
+ version: '0.9'
+ title: UnitsML 0.9 Schema Browser
+ description: Interactive documentation for the UnitsML 0.9 XML schema.
+ license: OASIS
+build:
+ xsd_mode: include_all
+ resolution_mode: resolved
+ serialization_format: marshal
+files:
+- "../schemas/unitsml/unitsml-v0.9.xsd"
+namespace_mappings:
+- prefix: xs
+ uri: http://www.w3.org/2001/XMLSchema
+- prefix: unitsml-09
+ uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9
+appearance:
+ logos:
+ long:
+ light:
+ path: "logo-unitsml.svg"
+ dark:
+ path: "logo-unitsml.svg"
+ lutaml_logo:
+ light:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg
+ dark:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg
+ colors:
+ primary: "#2d2c69"
+ primary_light: "#57a0fe"
+ primary_dark: "#1a1950"
+ accent: "#30dfc0"
+ background_primary: "#ffffff"
+ background_secondary: "#f8fafc"
diff --git a/configs/unitsml-v1.0-csd04.yml b/configs/unitsml-v1.0-csd04.yml
new file mode 100644
index 0000000..f2a17ce
--- /dev/null
+++ b/configs/unitsml-v1.0-csd04.yml
@@ -0,0 +1,38 @@
+# UnitsML 1.0 CSD04
+---
+metadata:
+ name: UnitsML 1.0 CSD04
+ version: 1.0-csd04
+ title: UnitsML 1.0 CSD04 Schema Browser
+ description: Interactive documentation for the UnitsML 1.0 CSD04 XML schema.
+ license: OASIS
+build:
+ xsd_mode: include_all
+ resolution_mode: resolved
+ serialization_format: marshal
+files:
+- "../schemas/unitsml/unitsml-v1.0-csd04.xsd"
+namespace_mappings:
+- prefix: xs
+ uri: http://www.w3.org/2001/XMLSchema
+- prefix: unitsml-csd
+ uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-1.0
+appearance:
+ logos:
+ long:
+ light:
+ path: "logo-unitsml.svg"
+ dark:
+ path: "logo-unitsml.svg"
+ lutaml_logo:
+ light:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg
+ dark:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg
+ colors:
+ primary: "#2d2c69"
+ primary_light: "#57a0fe"
+ primary_dark: "#1a1950"
+ accent: "#30dfc0"
+ background_primary: "#ffffff"
+ background_secondary: "#f8fafc"
diff --git a/configs/unitsml-v1.0.yml b/configs/unitsml-v1.0.yml
new file mode 100644
index 0000000..1e1597f
--- /dev/null
+++ b/configs/unitsml-v1.0.yml
@@ -0,0 +1,41 @@
+# UnitsML 1.0
+---
+metadata:
+ name: UnitsML 1.0
+ version: '1.0'
+ title: UnitsML 1.0 Schema Browser
+ description: Interactive documentation for the UnitsML 1.0 XML schema.
+ license: OASIS
+build:
+ xsd_mode: include_all
+ resolution_mode: resolved
+ serialization_format: marshal
+files:
+- "../schemas/unitsml/unitsml-v1.0.xsd"
+schema_location_mappings:
+- from: "http://www.w3.org/2009/01/xml.xsd"
+ to: "../schemas/unitsml/xml.xsd"
+namespace_mappings:
+- prefix: xs
+ uri: http://www.w3.org/2001/XMLSchema
+- prefix: unitsml
+ uri: https://schema.unitsml.org/unitsml/1.0
+appearance:
+ logos:
+ long:
+ light:
+ path: "logo-unitsml.svg"
+ dark:
+ path: "logo-unitsml.svg"
+ lutaml_logo:
+ light:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg
+ dark:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg
+ colors:
+ primary: "#2d2c69"
+ primary_light: "#57a0fe"
+ primary_dark: "#1a1950"
+ accent: "#30dfc0"
+ background_primary: "#ffffff"
+ background_secondary: "#f8fafc"
diff --git a/configs/unitsmllite-v0.9.18.yml b/configs/unitsmllite-v0.9.18.yml
new file mode 100644
index 0000000..ceca62a
--- /dev/null
+++ b/configs/unitsmllite-v0.9.18.yml
@@ -0,0 +1,38 @@
+# UnitsML-Lite 0.9.18
+---
+metadata:
+ name: UnitsML-Lite 0.9.18
+ version: 0.9.18
+ title: UnitsML-Lite 0.9.18 Schema Browser
+ description: Interactive documentation for the UnitsML-Lite 0.9.18 XML schema.
+ license: OASIS
+build:
+ xsd_mode: include_all
+ resolution_mode: resolved
+ serialization_format: marshal
+files:
+- "../schemas/unitsmllite/unitsmllite-v0.9.18.xsd"
+namespace_mappings:
+- prefix: xs
+ uri: http://www.w3.org/2001/XMLSchema
+- prefix: unitsml-lite
+ uri: urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema_lite-0.9.18
+appearance:
+ logos:
+ long:
+ light:
+ path: "logo-unitsml.svg"
+ dark:
+ path: "logo-unitsml.svg"
+ lutaml_logo:
+ light:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg
+ dark:
+ url: https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg
+ colors:
+ primary: "#2d2c69"
+ primary_light: "#57a0fe"
+ primary_dark: "#1a1950"
+ accent: "#30dfc0"
+ background_primary: "#ffffff"
+ background_secondary: "#f8fafc"
diff --git a/frontend/index.html b/frontend/index.html
new file mode 100644
index 0000000..f21ed20
--- /dev/null
+++ b/frontend/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+ UnitsML XML Schemas — schema.unitsml.org
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
new file mode 100644
index 0000000..a87cb2f
--- /dev/null
+++ b/frontend/package-lock.json
@@ -0,0 +1,1761 @@
+{
+ "name": "unitsml-schema-index",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "unitsml-schema-index",
+ "version": "1.0.0",
+ "devDependencies": {
+ "@tailwindcss/vite": "^4.1.0",
+ "tailwindcss": "^4.1.0",
+ "vite": "^6.3.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz",
+ "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz",
+ "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz",
+ "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz",
+ "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz",
+ "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz",
+ "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz",
+ "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz",
+ "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz",
+ "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz",
+ "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz",
+ "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz",
+ "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz",
+ "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz",
+ "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz",
+ "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz",
+ "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz",
+ "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz",
+ "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz",
+ "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz",
+ "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz",
+ "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz",
+ "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz",
+ "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz",
+ "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz",
+ "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@tailwindcss/node": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.4.tgz",
+ "integrity": "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/remapping": "^2.3.5",
+ "enhanced-resolve": "^5.19.0",
+ "jiti": "^2.6.1",
+ "lightningcss": "1.32.0",
+ "magic-string": "^0.30.21",
+ "source-map-js": "^1.2.1",
+ "tailwindcss": "4.2.4"
+ }
+ },
+ "node_modules/@tailwindcss/oxide": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.4.tgz",
+ "integrity": "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20"
+ },
+ "optionalDependencies": {
+ "@tailwindcss/oxide-android-arm64": "4.2.4",
+ "@tailwindcss/oxide-darwin-arm64": "4.2.4",
+ "@tailwindcss/oxide-darwin-x64": "4.2.4",
+ "@tailwindcss/oxide-freebsd-x64": "4.2.4",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.2.4",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.2.4",
+ "@tailwindcss/oxide-linux-x64-musl": "4.2.4",
+ "@tailwindcss/oxide-wasm32-wasi": "4.2.4",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.2.4"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-android-arm64": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.4.tgz",
+ "integrity": "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-arm64": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.4.tgz",
+ "integrity": "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-x64": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.4.tgz",
+ "integrity": "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-freebsd-x64": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.4.tgz",
+ "integrity": "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.4.tgz",
+ "integrity": "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.4.tgz",
+ "integrity": "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.4.tgz",
+ "integrity": "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.4.tgz",
+ "integrity": "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-musl": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.4.tgz",
+ "integrity": "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-wasm32-wasi": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.4.tgz",
+ "integrity": "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==",
+ "bundleDependencies": [
+ "@napi-rs/wasm-runtime",
+ "@emnapi/core",
+ "@emnapi/runtime",
+ "@tybys/wasm-util",
+ "@emnapi/wasi-threads",
+ "tslib"
+ ],
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.8.1",
+ "@emnapi/runtime": "^1.8.1",
+ "@emnapi/wasi-threads": "^1.1.0",
+ "@napi-rs/wasm-runtime": "^1.1.1",
+ "@tybys/wasm-util": "^0.10.1",
+ "tslib": "^2.8.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.4.tgz",
+ "integrity": "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.4.tgz",
+ "integrity": "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/vite": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.4.tgz",
+ "integrity": "sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tailwindcss/node": "4.2.4",
+ "@tailwindcss/oxide": "4.2.4",
+ "tailwindcss": "4.2.4"
+ },
+ "peerDependencies": {
+ "vite": "^5.2.0 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz",
+ "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.3.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.12",
+ "@esbuild/android-arm": "0.25.12",
+ "@esbuild/android-arm64": "0.25.12",
+ "@esbuild/android-x64": "0.25.12",
+ "@esbuild/darwin-arm64": "0.25.12",
+ "@esbuild/darwin-x64": "0.25.12",
+ "@esbuild/freebsd-arm64": "0.25.12",
+ "@esbuild/freebsd-x64": "0.25.12",
+ "@esbuild/linux-arm": "0.25.12",
+ "@esbuild/linux-arm64": "0.25.12",
+ "@esbuild/linux-ia32": "0.25.12",
+ "@esbuild/linux-loong64": "0.25.12",
+ "@esbuild/linux-mips64el": "0.25.12",
+ "@esbuild/linux-ppc64": "0.25.12",
+ "@esbuild/linux-riscv64": "0.25.12",
+ "@esbuild/linux-s390x": "0.25.12",
+ "@esbuild/linux-x64": "0.25.12",
+ "@esbuild/netbsd-arm64": "0.25.12",
+ "@esbuild/netbsd-x64": "0.25.12",
+ "@esbuild/openbsd-arm64": "0.25.12",
+ "@esbuild/openbsd-x64": "0.25.12",
+ "@esbuild/openharmony-arm64": "0.25.12",
+ "@esbuild/sunos-x64": "0.25.12",
+ "@esbuild/win32-arm64": "0.25.12",
+ "@esbuild/win32-ia32": "0.25.12",
+ "@esbuild/win32-x64": "0.25.12"
+ }
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/jiti": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
+ "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jiti": "lib/jiti-cli.mjs"
+ }
+ },
+ "node_modules/lightningcss": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
+ "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-android-arm64": "1.32.0",
+ "lightningcss-darwin-arm64": "1.32.0",
+ "lightningcss-darwin-x64": "1.32.0",
+ "lightningcss-freebsd-x64": "1.32.0",
+ "lightningcss-linux-arm-gnueabihf": "1.32.0",
+ "lightningcss-linux-arm64-gnu": "1.32.0",
+ "lightningcss-linux-arm64-musl": "1.32.0",
+ "lightningcss-linux-x64-gnu": "1.32.0",
+ "lightningcss-linux-x64-musl": "1.32.0",
+ "lightningcss-win32-arm64-msvc": "1.32.0",
+ "lightningcss-win32-x64-msvc": "1.32.0"
+ }
+ },
+ "node_modules/lightningcss-android-arm64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
+ "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
+ "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
+ "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
+ "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
+ "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
+ "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
+ "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
+ "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
+ "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
+ "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
+ "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.12",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz",
+ "integrity": "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.60.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz",
+ "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.60.2",
+ "@rollup/rollup-android-arm64": "4.60.2",
+ "@rollup/rollup-darwin-arm64": "4.60.2",
+ "@rollup/rollup-darwin-x64": "4.60.2",
+ "@rollup/rollup-freebsd-arm64": "4.60.2",
+ "@rollup/rollup-freebsd-x64": "4.60.2",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.60.2",
+ "@rollup/rollup-linux-arm-musleabihf": "4.60.2",
+ "@rollup/rollup-linux-arm64-gnu": "4.60.2",
+ "@rollup/rollup-linux-arm64-musl": "4.60.2",
+ "@rollup/rollup-linux-loong64-gnu": "4.60.2",
+ "@rollup/rollup-linux-loong64-musl": "4.60.2",
+ "@rollup/rollup-linux-ppc64-gnu": "4.60.2",
+ "@rollup/rollup-linux-ppc64-musl": "4.60.2",
+ "@rollup/rollup-linux-riscv64-gnu": "4.60.2",
+ "@rollup/rollup-linux-riscv64-musl": "4.60.2",
+ "@rollup/rollup-linux-s390x-gnu": "4.60.2",
+ "@rollup/rollup-linux-x64-gnu": "4.60.2",
+ "@rollup/rollup-linux-x64-musl": "4.60.2",
+ "@rollup/rollup-openbsd-x64": "4.60.2",
+ "@rollup/rollup-openharmony-arm64": "4.60.2",
+ "@rollup/rollup-win32-arm64-msvc": "4.60.2",
+ "@rollup/rollup-win32-ia32-msvc": "4.60.2",
+ "@rollup/rollup-win32-x64-gnu": "4.60.2",
+ "@rollup/rollup-win32-x64-msvc": "4.60.2",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz",
+ "integrity": "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tapable": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz",
+ "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.16",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
+ "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/vite": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz",
+ "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.25.0",
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2",
+ "postcss": "^8.5.3",
+ "rollup": "^4.34.9",
+ "tinyglobby": "^0.2.13"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "jiti": ">=1.21.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ }
+ }
+}
diff --git a/frontend/package.json b/frontend/package.json
new file mode 100644
index 0000000..ad24039
--- /dev/null
+++ b/frontend/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "unitsml-schema-index",
+ "private": true,
+ "version": "1.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview"
+ },
+ "devDependencies": {
+ "vite": "^6.3.0",
+ "@tailwindcss/vite": "^4.1.0",
+ "tailwindcss": "^4.1.0"
+ }
+}
diff --git a/frontend/src/main.js b/frontend/src/main.js
new file mode 100644
index 0000000..b3f2789
--- /dev/null
+++ b/frontend/src/main.js
@@ -0,0 +1,246 @@
+import './style.css'
+
+const schemas = [
+ {
+ name: "UnitsML 1.0",
+ version: "1.0",
+ status: "current",
+ namespace: "https://schema.unitsml.org/unitsml/1.0",
+ xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v1.0.xsd",
+ browser_path: "unitsml-v1.0.html",
+ description: "Current release of the UnitsML schema for representing units of measure, dimensions, and quantities in XML."
+ },
+ {
+ name: "UnitsML 1.0 CSD04",
+ version: "1.0-csd04",
+ status: "draft",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-1.0",
+ xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v1.0-csd04.xsd",
+ browser_path: "unitsml-v1.0-csd04.html",
+ description: "Committee Specification Draft 04 — a pre-release draft of UnitsML 1.0."
+ },
+ {
+ name: "UnitsML 0.9.19",
+ version: "0.9.19",
+ status: "historical",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.19",
+ xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v0.9.19.xsd",
+ browser_path: "unitsml-v0.9.19.html",
+ description: "Historical release of the UnitsML 0.9.x schema series."
+ },
+ {
+ name: "UnitsML 0.9.12",
+ version: "0.9.12",
+ status: "historical",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.12",
+ xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v0.9.12.xsd",
+ browser_path: "unitsml-v0.9.12.html",
+ description: "Historical release of the UnitsML 0.9.x schema series."
+ },
+ {
+ name: "UnitsML 0.9.10",
+ version: "0.9.10",
+ status: "historical",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.10",
+ xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v0.9.10.xsd",
+ browser_path: "unitsml-v0.9.10.html",
+ description: "Historical release of the UnitsML 0.9.x schema series."
+ },
+ {
+ name: "UnitsML 0.9.7",
+ version: "0.9.7",
+ status: "historical",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.7",
+ xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v0.9.7.xsd",
+ browser_path: "unitsml-v0.9.7.html",
+ description: "Historical release of the UnitsML 0.9.x schema series."
+ },
+ {
+ name: "UnitsML 0.9.2",
+ version: "0.9.2",
+ status: "historical",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.2",
+ xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v0.9.2.xsd",
+ browser_path: "unitsml-v0.9.2.html",
+ description: "Historical release of the UnitsML 0.9.x schema series."
+ },
+ {
+ name: "UnitsML 0.9",
+ version: "0.9",
+ status: "historical",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9",
+ xsd_url: "https://schema.unitsml.org/unitsml/unitsml-v0.9.xsd",
+ browser_path: "unitsml-v0.9.html",
+ description: "Original 0.9 release of the UnitsML schema."
+ },
+ {
+ name: "UnitsML-Lite 0.9.18",
+ version: "0.9.18",
+ status: "deprecated",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema_lite-0.9.18",
+ xsd_url: "https://schema.unitsml.org/unitsmllite/unitsmllite-v0.9.18.xsd",
+ browser_path: "unitsmllite-v0.9.18.html",
+ description: "Deprecated lightweight variant of the UnitsML schema. Use UnitsML 1.0 instead."
+ }
+]
+
+const statusConfig = {
+ current: { label: 'Current', badge: 'bg-emerald-50 text-emerald-700 border border-emerald-200' },
+ draft: { label: 'Draft', badge: 'bg-amber-50 text-amber-700 border border-amber-200' },
+ historical: { label: 'Historical', badge: 'bg-slate-100 text-slate-600 border border-slate-200' },
+ deprecated: { label: 'Deprecated', badge: 'bg-red-50 text-red-600 border border-red-200' },
+}
+
+function renderCard(schema, index) {
+ const s = statusConfig[schema.status]
+ const isCurrent = schema.status === 'current'
+ const isDeprecated = schema.status === 'deprecated'
+
+ const cardClass = [
+ 'group block relative rounded-xl border transition-all duration-300 animate-fade-in-up',
+ isCurrent
+ ? 'border-navy-200 bg-white shadow-lg hover:shadow-xl hover:border-navy-300'
+ : isDeprecated
+ ? 'border-slate-200 bg-slate-50 opacity-70 hover:opacity-100 hover:shadow-md hover:border-slate-300'
+ : 'border-slate-200 bg-white hover:shadow-md hover:border-slate-300',
+ ].join(' ')
+
+ return `
+
+ ${isCurrent ? '
' : ''}
+
+
+
${schema.name}
+
+ ${s.label}
+
+
+
${schema.description}
+
+
+ Version
+ ${schema.version}
+
+
+ Namespace
+ ${schema.namespace}
+
+
+
+
+
+ `
+}
+
+const app = document.getElementById('app')
+app.innerHTML = `
+
+
+
+
+
+
+
+
+
+
UnitsML Standard
+
+ UnitsML XML Schemas
+
+
+ This site provides the authoritative schema repository for the
+ UnitsML standard
+ — machine-readable representations of units of measure, quantities, and dimensions in XML.
+ Browse each schema's interactive documentation, or download the XSD files directly.
+
+
+
+
+
+
Schema location URL pattern
+
https://schema.unitsml.org/{schema} /{version} .xsd
+
+
+
UnitsML 1.0 — schemaLocation
+
https://schema.unitsml.org/unitsml/unitsml-v1.0.xsd
+
Use this value in your xsi:schemaLocation attribute when validating UnitsML 1.0 documents.
+
+
+
+
+
+
+
+
+
Available Schemas
+ ${schemas.length} versions
+
+
+
+ ${renderCard(schemas[0], 0)}
+
+
+
+ ${schemas.slice(1).map((s, i) => renderCard(s, i + 1)).join('')}
+
+
+
+
+
+
+`
diff --git a/frontend/src/style.css b/frontend/src/style.css
new file mode 100644
index 0000000..bfd002a
--- /dev/null
+++ b/frontend/src/style.css
@@ -0,0 +1,72 @@
+@import "tailwindcss";
+
+@theme {
+ --color-navy-50: #f0f0f8;
+ --color-navy-100: #dddde8;
+ --color-navy-200: #c4c4d8;
+ --color-navy-300: #9e9ebe;
+ --color-navy-400: #7474a0;
+ --color-navy-500: #57578a;
+ --color-navy-600: #464672;
+ --color-navy-700: #2d2c69;
+ --color-navy-800: #1f1e4a;
+ --color-navy-900: #16153d;
+ --color-teal-300: #5eead4;
+ --color-teal-400: #2dd4bf;
+ --color-teal-500: #30dfc0;
+ --color-teal-600: #14b8a6;
+ --color-teal-700: #0d9488;
+}
+
+@keyframes fade-in-up {
+ from {
+ opacity: 0;
+ transform: translateY(16px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+@keyframes fade-in {
+ from { opacity: 0; }
+ to { opacity: 1; }
+}
+
+.animate-fade-in-up {
+ opacity: 0;
+ animation: fade-in-up 0.5s ease-out forwards;
+}
+
+.animate-fade-in {
+ opacity: 0;
+ animation: fade-in 0.6s ease-out forwards;
+}
+
+/* Reduce motion for users who prefer it */
+@media (prefers-reduced-motion: reduce) {
+ .animate-fade-in-up,
+ .animate-fade-in {
+ animation: none;
+ opacity: 1;
+ }
+}
+
+/* Monospace code elements */
+code {
+ font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Consolas', monospace;
+}
+
+/* Smooth transitions for all interactive elements */
+a, button {
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
+}
+
+body {
+ font-family: 'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
diff --git a/frontend/vite.config.js b/frontend/vite.config.js
new file mode 100644
index 0000000..20d19e9
--- /dev/null
+++ b/frontend/vite.config.js
@@ -0,0 +1,13 @@
+import { defineConfig } from 'vite'
+import tailwindcss from '@tailwindcss/vite'
+
+export default defineConfig({
+ plugins: [tailwindcss()],
+ build: {
+ outDir: '../site',
+ emptyOutDir: false,
+ rollupOptions: {
+ input: 'index.html',
+ },
+ },
+})
diff --git a/generate_configs.rb b/generate_configs.rb
new file mode 100644
index 0000000..6798961
--- /dev/null
+++ b/generate_configs.rb
@@ -0,0 +1,132 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+# Generate per-schema lutaml-xsd config files for each UnitsML XSD schema
+
+require "yaml"
+require "json"
+
+SCHEMAS = [
+ { file: "schemas/unitsml/unitsml-v1.0.xsd",
+ name: "UnitsML 1.0",
+ version: "1.0",
+ status: "current",
+ prefix: "unitsml",
+ namespace: "https://schema.unitsml.org/unitsml/1.0" },
+ { file: "schemas/unitsml/unitsml-v1.0-csd04.xsd",
+ name: "UnitsML 1.0 CSD04",
+ version: "1.0-csd04",
+ status: "draft",
+ prefix: "unitsml-csd",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-1.0" },
+ { file: "schemas/unitsml/unitsml-v0.9.19.xsd",
+ name: "UnitsML 0.9.19",
+ version: "0.9.19",
+ status: "historical",
+ prefix: "unitsml-0919",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.19" },
+ { file: "schemas/unitsml/unitsml-v0.9.12.xsd",
+ name: "UnitsML 0.9.12",
+ version: "0.9.12",
+ status: "historical",
+ prefix: "unitsml-0912",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.12" },
+ { file: "schemas/unitsml/unitsml-v0.9.10.xsd",
+ name: "UnitsML 0.9.10",
+ version: "0.9.10",
+ status: "historical",
+ prefix: "unitsml-0910",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.10" },
+ { file: "schemas/unitsml/unitsml-v0.9.7.xsd",
+ name: "UnitsML 0.9.7",
+ version: "0.9.7",
+ status: "historical",
+ prefix: "unitsml-097",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.7" },
+ { file: "schemas/unitsml/unitsml-v0.9.2.xsd",
+ name: "UnitsML 0.9.2",
+ version: "0.9.2",
+ status: "historical",
+ prefix: "unitsml-092",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9.2" },
+ { file: "schemas/unitsml/unitsml-v0.9.xsd",
+ name: "UnitsML 0.9",
+ version: "0.9",
+ status: "historical",
+ prefix: "unitsml-09",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema-0.9" },
+ { file: "schemas/unitsmllite/unitsmllite-v0.9.18.xsd",
+ name: "UnitsML-Lite 0.9.18",
+ version: "0.9.18",
+ status: "deprecated",
+ prefix: "unitsml-lite",
+ namespace: "urn:oasis:names:tc:unitsml:schema:xsd:UnitsMLSchema_lite-0.9.18" },
+].freeze
+
+config_dir = File.join(__dir__, "configs")
+Dir.mkdir(config_dir) unless Dir.exist?(config_dir)
+
+# Generate per-schema config YAML files
+SCHEMAS.each do |schema|
+ slug = File.basename(schema[:file], ".xsd")
+ config = {
+ "metadata" => {
+ "name" => schema[:name],
+ "version" => schema[:version],
+ "title" => "#{schema[:name]} Schema Browser",
+ "description" => "Interactive documentation for the #{schema[:name]} XML schema.",
+ "license" => "OASIS",
+ },
+ "build" => {
+ "xsd_mode" => "include_all",
+ "resolution_mode" => "resolved",
+ "serialization_format" => "marshal",
+ },
+ "files" => ["../#{schema[:file]}"],
+ "namespace_mappings" => [
+ { "prefix" => "xs", "uri" => "http://www.w3.org/2001/XMLSchema" },
+ { "prefix" => schema[:prefix], "uri" => schema[:namespace] },
+ ],
+ "appearance" => {
+ "logos" => {
+ "long" => {
+ "light" => { "path" => "../images/logo-unitsml.svg" },
+ "dark" => { "path" => "../images/logo-unitsml.svg" },
+ },
+ "lutaml_logo" => {
+ "light" => { "url" => "https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-light.svg" },
+ "dark" => { "url" => "https://raw.githubusercontent.com/lutaml/branding/main/svg/lutaml-logo_logo-full-dark.svg" },
+ },
+ },
+ "colors" => {
+ "primary" => "#2d2c69",
+ "primary_light" => "#57a0fe",
+ "primary_dark" => "#1a1950",
+ "accent" => "#30dfc0",
+ "background_primary" => "#ffffff",
+ "background_secondary" => "#f8fafc",
+ },
+ },
+ }
+
+ path = File.join(config_dir, "#{slug}.yml")
+ File.write(path, YAML.dump(config).gsub("---", "# #{schema[:name]}\n---"))
+ puts "Generated: #{path}"
+end
+
+# Generate schema index JSON for the index page
+index = SCHEMAS.map do |schema|
+ slug = File.basename(schema[:file], ".xsd")
+ {
+ "name" => schema[:name],
+ "version" => schema[:version],
+ "status" => schema[:status],
+ "namespace" => schema[:namespace],
+ "xsd_path" => schema[:file],
+ "browser_path" => "#{slug}.html",
+ }
+end
+
+index_path = File.join(__dir__, "schemas_index.json")
+File.write(index_path, JSON.pretty_generate(index))
+puts "Generated: #{index_path}"
diff --git a/images/logo-unitsml.svg b/images/logo-unitsml.svg
new file mode 100644
index 0000000..1acb44e
--- /dev/null
+++ b/images/logo-unitsml.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/schemas b/schemas
index de01658..f1a6e42 160000
--- a/schemas
+++ b/schemas
@@ -1 +1 @@
-Subproject commit de016581e4ab886550608ae26fd457f669b0938f
+Subproject commit f1a6e42d99344985704f162099d4e7b46f47f694