v3.1.7

Delivery Support

ビルトインコンポーネントで納品用のページリストを自動的に生成できます。スタイルも付与しますが、すべてインラインで書き込まれるため納品物を汚しません。

多くの場合は納品リストページ自体はリストから省き、納品物をさらに Zip 化してダウンロードボタンを設置するかと思います。それを実現させるには、以下のように設定します。

├── src
│   └── pages
│       ├── test
│       │   ├── p1.tsx
│       │   ├── p2.tsx
│       │   ├── p3.tsx
│       │   └── p4.tsx
│       └── index.tsx
└── minista.config.tsx
// minista.config.tsx
import { defineConfig } from "minista"

export default defineConfig({
  delivery: {
    include: ["/test/", "/test/*", "/test/**/*"],
    archives: [
      {
        srcDir: "dist",
        outDir: "",
        outName: "archive",
        format: "zip",
        options: {
          zlib: { level: 9 },
        },
        button: {
          title: "Download",
          //color: "blue",
        },
      },
    ],
  },
})
// src/pages/index.tsx
import { Delivery } from "minista"

export default function () {
  return <Delivery title="納品リスト" />
}
<!-- dist/index.html -->
<div class="minista-delivery-container">
  <header class="minista-delivery-header">
    <div class="minista-delivery-header-inner">
      <div class="minista-delivery-header-grid">
        <div class="minista-delivery-header-column">
          <h1 class="minista-delivery-header-heading">納品リスト</h1>
          <p class="minista-delivery-header-date">
            Last Update: 2023.03.09 - 07:21
          </p>
        </div>
        <div class="minista-delivery-header-column">
          <a class="minista-delivery-button" href="/archive.zip" download>
            Download
          </a>
        </div>
      </div>
    </div>
  </header>
  <main class="minista-delivery-main">
    <div class="minista-delivery-main-inner">
      <nav class="minista-delivery-nav">
        <ul class="minista-delivery-list">
          <li class="minista-delivery-item">
            <div class="minista-delivery-item-content">
              <a class="minista-delivery-item-content-link" href="/test/p1"></a>
              <div class="minista-delivery-item-content-inner">
                <p class="minista-delivery-item-content-name">
                  施策1のタイトル
                </p>
                <p class="minista-delivery-item-content-slug">/test/p1</p>
              </div>
              <div class="minista-delivery-item-content-background"></div>
            </div>
          </li>
          <li class="minista-delivery-item">
            <div class="minista-delivery-item-content">
              <a class="minista-delivery-item-content-link" href="/test/p2"></a>
              <div class="minista-delivery-item-content-inner">
                <p class="minista-delivery-item-content-name">
                  施策2のタイトル
                </p>
                <p class="minista-delivery-item-content-slug">/test/p2</p>
              </div>
              <div class="minista-delivery-item-content-background"></div>
            </div>
          </li>
          <li class="minista-delivery-item">
            <div class="minista-delivery-item-content">
              <a class="minista-delivery-item-content-link" href="/test/p4"></a>
              <div class="minista-delivery-item-content-inner">
                <p class="minista-delivery-item-content-name">
                  施策4のタイトル
                </p>
                <p class="minista-delivery-item-content-slug">/test/p4</p>
              </div>
              <div class="minista-delivery-item-content-background"></div>
            </div>
          </li>
        </ul>
      </nav>
    </div>
  </main>
</div>

DeliveryProps

type DeliveryProps = {
  title?: string
  bodyClass?: string
  dateFormat?: string
  timezone?: string
  styles?: StylesProps
  header?: HeaderProps
  items?: Item[]
}

type StylesProps = {
  defaultDark?: boolean
  darkMode?: boolean
  innerMaxWidth?: string
  defaultLightStyle?: string
  defaultDarkStyle?: string
  schemeDarkStyle?: string
  variableStyle?: string
  resetStyle?: string
  componentStyle?: string
}

type HeaderProps = {
  title?: string
  dateName?: string
  date?: string
  buttons?: Button[]
}