@morphemecms/cms 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +51 -3
- package/astro.d.mts +2 -0
- package/astro.mjs +162 -0
- package/bin/morpheme.mjs +38 -0
- package/client.d.ts +10 -0
- package/defaults/blockTexts.ts +33 -0
- package/defaults/collections.ts +774 -0
- package/defaults/colors.ts +125 -0
- package/defaults/company.ts +20 -0
- package/defaults/editor.ts +178 -0
- package/defaults/internalLinks.ts +30 -0
- package/defaults/opens.ts +18 -0
- package/defaults/popup.tsx +93 -0
- package/defaults/privacy.ts +79 -0
- package/defaults/rules.ts +450 -0
- package/defaults/schema.ts +16 -0
- package/defaults/sitedata.ts +129 -0
- package/defaults/standard.ts +106 -0
- package/defaults/standardPages.ts +87 -0
- package/defaults/texts.ts +481 -0
- package/demo/README.md +26 -0
- package/demo/public/apple-touch-icon.png +0 -0
- package/demo/public/editor/apple-touch-icon.png +0 -0
- package/demo/public/editor/icon-192.png +0 -0
- package/demo/public/editor/icon-512.png +0 -0
- package/demo/public/editor/icon-maskable-512.png +0 -0
- package/demo/public/favicon.ico +0 -0
- package/demo/public/favicon.svg +1 -0
- package/demo/public/images/uploads/2026/10/andromeda.webp +0 -0
- package/demo/public/images/uploads/2026/10/earth-from-space.webp +0 -0
- package/demo/public/images/uploads/2026/10/editor-blog.webp +0 -0
- package/demo/public/images/uploads/2026/10/editor-colors.webp +0 -0
- package/demo/public/images/uploads/2026/10/editor-home.webp +0 -0
- package/demo/public/images/uploads/2026/10/editor-page.webp +0 -0
- package/demo/public/images/uploads/2026/10/editor-pages.webp +0 -0
- package/demo/public/images/uploads/2026/10/editor-seo.webp +0 -0
- package/demo/public/images/uploads/2026/10/editor-start.webp +0 -0
- package/demo/public/images/uploads/2026/10/editor-themes.webp +0 -0
- package/demo/public/images/uploads/2026/10/moon.webp +0 -0
- package/demo/public/images/uploads/2026/10/saturn.webp +0 -0
- package/demo/public/logo.svg +1 -0
- package/demo/src/content/blog/build-a-page-from-blocks.md +19 -0
- package/demo/src/content/blog/colors-everyone-can-read.md +19 -0
- package/demo/src/content/blog/edit-your-website-from-your-phone.md +21 -0
- package/demo/src/content/blog/every-save-is-a-version.md +21 -0
- package/demo/src/content/blog/schedule-a-post.md +17 -0
- package/demo/src/content/blog/secure-from-day-one.md +17 -0
- package/demo/src/content/blog/seo-without-the-guesswork.md +23 -0
- package/demo/src/content/blog/switch-themes-without-losing-anything.md +23 -0
- package/demo/src/content/blog/the-app-store.md +21 -0
- package/demo/src/content/pages/about.md +22 -0
- package/demo/src/content/pages/app-store.md +30 -0
- package/demo/src/content/pages/blocks.md +98 -0
- package/demo/src/content/pages/blog-page.md +11 -0
- package/demo/src/content/pages/contact.md +16 -0
- package/demo/src/content/pages/get-started.md +20 -0
- package/demo/src/content/pages/home.md +26 -0
- package/demo/src/content/pages/page-not-found.md +11 -0
- package/demo/src/content/pages/privacy-policy.md +24 -0
- package/demo/src/data/blocks.json +25 -0
- package/demo/src/data/booking.json +6 -0
- package/demo/src/data/categories/apps.json +6 -0
- package/demo/src/data/categories/design.json +6 -0
- package/demo/src/data/categories/editing.json +6 -0
- package/demo/src/data/categories/security.json +6 -0
- package/demo/src/data/categories/seo.json +6 -0
- package/demo/src/data/colors.json +75 -0
- package/demo/src/data/contact.json +8 -0
- package/demo/src/data/cookies.json +21 -0
- package/demo/src/data/footer.json +27 -0
- package/demo/src/data/menu.json +35 -0
- package/demo/src/data/mobile-menu.json +25 -0
- package/demo/src/data/popups/booking-bar.json +13 -0
- package/demo/src/data/popups/try-the-editor.json +16 -0
- package/demo/src/data/standard-pages.json +8 -0
- package/demo/src/data/testimonials/sample-bakery.json +10 -0
- package/demo/src/data/testimonials/sample-clinic.json +10 -0
- package/demo/src/data/testimonials/sample-studio.json +10 -0
- package/demo/src/site/colors.ts +11 -0
- package/demo/src/site/config.ts +19 -0
- package/icons/lucide/LICENSE +43 -0
- package/icons/lucide/LICENSE-material-design-icons +20 -0
- package/icons/lucide/address-book.svg +1 -0
- package/icons/lucide/app-window.svg +1 -0
- package/icons/lucide/arrow-counter-clockwise.svg +1 -0
- package/icons/lucide/arrow-down.svg +1 -0
- package/icons/lucide/arrow-left.svg +1 -0
- package/icons/lucide/arrow-right.svg +1 -0
- package/icons/lucide/arrow-square-out.svg +1 -0
- package/icons/lucide/arrow-u-up-left.svg +1 -0
- package/icons/lucide/arrow-u-up-right.svg +1 -0
- package/icons/lucide/arrow-up-right.svg +1 -0
- package/icons/lucide/arrow-up.svg +1 -0
- package/icons/lucide/arrows-down-up.svg +1 -0
- package/icons/lucide/arrows-in-line-horizontal.svg +1 -0
- package/icons/lucide/arrows-out-line-horizontal.svg +1 -0
- package/icons/lucide/article.svg +1 -0
- package/icons/lucide/bank.svg +1 -0
- package/icons/lucide/bell.svg +1 -0
- package/icons/lucide/bicycle.svg +1 -0
- package/icons/lucide/binoculars.svg +1 -0
- package/icons/lucide/book-open-text.svg +1 -0
- package/icons/lucide/book-open.svg +1 -0
- package/icons/lucide/browser.svg +1 -0
- package/icons/lucide/buildings.svg +1 -0
- package/icons/lucide/bus.svg +1 -0
- package/icons/lucide/calendar-blank.svg +1 -0
- package/icons/lucide/calendar-check.svg +1 -0
- package/icons/lucide/car.svg +1 -0
- package/icons/lucide/cards.svg +1 -0
- package/icons/lucide/caret-down.svg +1 -0
- package/icons/lucide/caret-left.svg +1 -0
- package/icons/lucide/caret-right.svg +1 -0
- package/icons/lucide/caret-up.svg +1 -0
- package/icons/lucide/certificate.svg +1 -0
- package/icons/lucide/chart-line-up.svg +1 -0
- package/icons/lucide/chats.svg +1 -0
- package/icons/lucide/check-circle.svg +1 -0
- package/icons/lucide/check.svg +1 -0
- package/icons/lucide/circle-half.svg +1 -0
- package/icons/lucide/circle.svg +1 -0
- package/icons/lucide/clock-counter-clockwise.svg +1 -0
- package/icons/lucide/clock.svg +1 -0
- package/icons/lucide/code.svg +1 -0
- package/icons/lucide/coffee.svg +1 -0
- package/icons/lucide/columns.svg +1 -0
- package/icons/lucide/cookie.svg +1 -0
- package/icons/lucide/copy.svg +1 -0
- package/icons/lucide/credit-card.svg +1 -0
- package/icons/lucide/currency-circle-dollar.svg +1 -0
- package/icons/lucide/cursor-click.svg +1 -0
- package/icons/lucide/database.svg +1 -0
- package/icons/lucide/desktop.svg +1 -0
- package/icons/lucide/device-mobile.svg +1 -0
- package/icons/lucide/door-open.svg +1 -0
- package/icons/lucide/download-simple.svg +1 -0
- package/icons/lucide/envelope-simple.svg +1 -0
- package/icons/lucide/eye-slash.svg +1 -0
- package/icons/lucide/eye.svg +1 -0
- package/icons/lucide/file-pdf.svg +1 -0
- package/icons/lucide/file-text.svg +1 -0
- package/icons/lucide/file-video.svg +1 -0
- package/icons/lucide/file-zip.svg +1 -0
- package/icons/lucide/flower-lotus.svg +1 -0
- package/icons/lucide/folder-simple.svg +1 -0
- package/icons/lucide/funnel.svg +1 -0
- package/icons/lucide/gauge.svg +1 -0
- package/icons/lucide/gear.svg +1 -0
- package/icons/lucide/github-logo.svg +1 -0
- package/icons/lucide/globe.svg +1 -0
- package/icons/lucide/google-logo.svg +1 -0
- package/icons/lucide/graduation-cap.svg +1 -0
- package/icons/lucide/hammer.svg +1 -0
- package/icons/lucide/hand-heart.svg +1 -0
- package/icons/lucide/handshake.svg +1 -0
- package/icons/lucide/hard-drives.svg +1 -0
- package/icons/lucide/heart.svg +1 -0
- package/icons/lucide/house.svg +1 -0
- package/icons/lucide/image-square.svg +1 -0
- package/icons/lucide/image.svg +1 -0
- package/icons/lucide/info.svg +1 -0
- package/icons/lucide/keyboard.svg +1 -0
- package/icons/lucide/leaf.svg +1 -0
- package/icons/lucide/lifebuoy.svg +1 -0
- package/icons/lucide/lightbulb.svg +1 -0
- package/icons/lucide/link-break.svg +1 -0
- package/icons/lucide/link-simple.svg +1 -0
- package/icons/lucide/list-bullets.svg +1 -0
- package/icons/lucide/list-checks.svg +1 -0
- package/icons/lucide/list-numbers.svg +1 -0
- package/icons/lucide/list.svg +1 -0
- package/icons/lucide/lock-simple-open.svg +1 -0
- package/icons/lucide/lock-simple.svg +1 -0
- package/icons/lucide/magnifying-glass.svg +1 -0
- package/icons/lucide/map-pin.svg +1 -0
- package/icons/lucide/map-trifold.svg +1 -0
- package/icons/lucide/medal.svg +1 -0
- package/icons/lucide/megaphone.svg +1 -0
- package/icons/lucide/minus.svg +1 -0
- package/icons/lucide/moon.svg +1 -0
- package/icons/lucide/newspaper.svg +1 -0
- package/icons/lucide/pack.json +23 -0
- package/icons/lucide/paint-brush-broad.svg +1 -0
- package/icons/lucide/palette.svg +1 -0
- package/icons/lucide/paper-plane-tilt.svg +1 -0
- package/icons/lucide/pencil-simple.svg +1 -0
- package/icons/lucide/phone.svg +1 -0
- package/icons/lucide/play-fill.svg +1 -0
- package/icons/lucide/plus.svg +1 -0
- package/icons/lucide/prohibit.svg +1 -0
- package/icons/lucide/puzzle-piece.svg +1 -0
- package/icons/lucide/question.svg +1 -0
- package/icons/lucide/quotes.svg +1 -0
- package/icons/lucide/rows.svg +1 -0
- package/icons/lucide/ruler.svg +1 -0
- package/icons/lucide/scan.svg +1 -0
- package/icons/lucide/shapes.svg +1 -0
- package/icons/lucide/share-network.svg +1 -0
- package/icons/lucide/shield-check.svg +1 -0
- package/icons/lucide/sidebar-simple.svg +1 -0
- package/icons/lucide/sign-out.svg +1 -0
- package/icons/lucide/signpost.svg +1 -0
- package/icons/lucide/sliders-horizontal.svg +1 -0
- package/icons/lucide/smiley.svg +1 -0
- package/icons/lucide/sparkle.svg +1 -0
- package/icons/lucide/square-half-bottom.svg +1 -0
- package/icons/lucide/square.svg +1 -0
- package/icons/lucide/squares-four.svg +1 -0
- package/icons/lucide/sticker.svg +1 -0
- package/icons/lucide/storefront.svg +1 -0
- package/icons/lucide/sun.svg +1 -0
- package/icons/lucide/swatches.svg +1 -0
- package/icons/lucide/tag.svg +1 -0
- package/icons/lucide/text-aa.svg +1 -0
- package/icons/lucide/text-align-left.svg +1 -0
- package/icons/lucide/text-b.svg +1 -0
- package/icons/lucide/text-h-one.svg +1 -0
- package/icons/lucide/text-h-three.svg +1 -0
- package/icons/lucide/text-h-two.svg +1 -0
- package/icons/lucide/text-italic.svg +1 -0
- package/icons/lucide/text-t.svg +1 -0
- package/icons/lucide/ticket.svg +1 -0
- package/icons/lucide/toggle-right.svg +1 -0
- package/icons/lucide/train.svg +1 -0
- package/icons/lucide/trash.svg +1 -0
- package/icons/lucide/upload-simple.svg +1 -0
- package/icons/lucide/user-circle.svg +1 -0
- package/icons/lucide/user.svg +1 -0
- package/icons/lucide/users-three.svg +1 -0
- package/icons/lucide/users.svg +1 -0
- package/icons/lucide/video-camera.svg +1 -0
- package/icons/lucide/warning-circle.svg +1 -0
- package/icons/lucide/warning.svg +1 -0
- package/icons/lucide/wave-sine.svg +1 -0
- package/icons/lucide/wheelchair.svg +1 -0
- package/icons/lucide/wrench.svg +1 -0
- package/icons/lucide/x.svg +1 -0
- package/icons/material-symbols/LICENSE +201 -0
- package/icons/material-symbols/LICENSE-material-design-icons +20 -0
- package/icons/material-symbols/address-book.svg +1 -0
- package/icons/material-symbols/app-window.svg +1 -0
- package/icons/material-symbols/arrow-counter-clockwise.svg +1 -0
- package/icons/material-symbols/arrow-down.svg +1 -0
- package/icons/material-symbols/arrow-left.svg +1 -0
- package/icons/material-symbols/arrow-right.svg +1 -0
- package/icons/material-symbols/arrow-square-out.svg +1 -0
- package/icons/material-symbols/arrow-u-up-left.svg +1 -0
- package/icons/material-symbols/arrow-u-up-right.svg +1 -0
- package/icons/material-symbols/arrow-up-right.svg +1 -0
- package/icons/material-symbols/arrow-up.svg +1 -0
- package/icons/material-symbols/arrows-down-up.svg +1 -0
- package/icons/material-symbols/arrows-in-line-horizontal.svg +1 -0
- package/icons/material-symbols/arrows-out-line-horizontal.svg +1 -0
- package/icons/material-symbols/article.svg +1 -0
- package/icons/material-symbols/bank.svg +1 -0
- package/icons/material-symbols/bell.svg +1 -0
- package/icons/material-symbols/bicycle.svg +1 -0
- package/icons/material-symbols/binoculars.svg +1 -0
- package/icons/material-symbols/book-open-text.svg +1 -0
- package/icons/material-symbols/book-open.svg +1 -0
- package/icons/material-symbols/browser.svg +1 -0
- package/icons/material-symbols/buildings.svg +1 -0
- package/icons/material-symbols/bus.svg +1 -0
- package/icons/material-symbols/calendar-blank.svg +1 -0
- package/icons/material-symbols/calendar-check.svg +1 -0
- package/icons/material-symbols/car.svg +1 -0
- package/icons/material-symbols/cards.svg +1 -0
- package/icons/material-symbols/caret-down.svg +1 -0
- package/icons/material-symbols/caret-left.svg +1 -0
- package/icons/material-symbols/caret-right.svg +1 -0
- package/icons/material-symbols/caret-up.svg +1 -0
- package/icons/material-symbols/certificate.svg +1 -0
- package/icons/material-symbols/chart-line-up.svg +1 -0
- package/icons/material-symbols/chats.svg +1 -0
- package/icons/material-symbols/check-circle.svg +1 -0
- package/icons/material-symbols/check.svg +1 -0
- package/icons/material-symbols/circle-half.svg +1 -0
- package/icons/material-symbols/circle.svg +1 -0
- package/icons/material-symbols/clock-counter-clockwise.svg +1 -0
- package/icons/material-symbols/clock.svg +1 -0
- package/icons/material-symbols/code.svg +1 -0
- package/icons/material-symbols/coffee.svg +1 -0
- package/icons/material-symbols/columns.svg +1 -0
- package/icons/material-symbols/cookie.svg +1 -0
- package/icons/material-symbols/copy.svg +1 -0
- package/icons/material-symbols/credit-card.svg +1 -0
- package/icons/material-symbols/currency-circle-dollar.svg +1 -0
- package/icons/material-symbols/cursor-click.svg +1 -0
- package/icons/material-symbols/database.svg +1 -0
- package/icons/material-symbols/desktop.svg +1 -0
- package/icons/material-symbols/device-mobile.svg +1 -0
- package/icons/material-symbols/door-open.svg +1 -0
- package/icons/material-symbols/download-simple.svg +1 -0
- package/icons/material-symbols/envelope-simple.svg +1 -0
- package/icons/material-symbols/eye-slash.svg +1 -0
- package/icons/material-symbols/eye.svg +1 -0
- package/icons/material-symbols/file-pdf.svg +1 -0
- package/icons/material-symbols/file-text.svg +1 -0
- package/icons/material-symbols/file-video.svg +1 -0
- package/icons/material-symbols/file-zip.svg +1 -0
- package/icons/material-symbols/flower-lotus.svg +1 -0
- package/icons/material-symbols/folder-simple.svg +1 -0
- package/icons/material-symbols/funnel.svg +1 -0
- package/icons/material-symbols/gauge.svg +1 -0
- package/icons/material-symbols/gear.svg +1 -0
- package/icons/material-symbols/github-logo.svg +1 -0
- package/icons/material-symbols/globe.svg +1 -0
- package/icons/material-symbols/google-logo.svg +1 -0
- package/icons/material-symbols/graduation-cap.svg +1 -0
- package/icons/material-symbols/hammer.svg +1 -0
- package/icons/material-symbols/hand-heart.svg +1 -0
- package/icons/material-symbols/handshake.svg +1 -0
- package/icons/material-symbols/hard-drives.svg +1 -0
- package/icons/material-symbols/heart.svg +1 -0
- package/icons/material-symbols/house.svg +1 -0
- package/icons/material-symbols/image-square.svg +1 -0
- package/icons/material-symbols/image.svg +1 -0
- package/icons/material-symbols/info.svg +1 -0
- package/icons/material-symbols/keyboard.svg +1 -0
- package/icons/material-symbols/leaf.svg +1 -0
- package/icons/material-symbols/lifebuoy.svg +1 -0
- package/icons/material-symbols/lightbulb.svg +1 -0
- package/icons/material-symbols/link-break.svg +1 -0
- package/icons/material-symbols/link-simple.svg +1 -0
- package/icons/material-symbols/list-bullets.svg +1 -0
- package/icons/material-symbols/list-checks.svg +1 -0
- package/icons/material-symbols/list-numbers.svg +1 -0
- package/icons/material-symbols/list.svg +1 -0
- package/icons/material-symbols/lock-simple-open.svg +1 -0
- package/icons/material-symbols/lock-simple.svg +1 -0
- package/icons/material-symbols/magnifying-glass.svg +1 -0
- package/icons/material-symbols/map-pin.svg +1 -0
- package/icons/material-symbols/map-trifold.svg +1 -0
- package/icons/material-symbols/medal.svg +1 -0
- package/icons/material-symbols/megaphone.svg +1 -0
- package/icons/material-symbols/minus.svg +1 -0
- package/icons/material-symbols/moon.svg +1 -0
- package/icons/material-symbols/newspaper.svg +1 -0
- package/icons/material-symbols/pack.json +29 -0
- package/icons/material-symbols/paint-brush-broad.svg +1 -0
- package/icons/material-symbols/palette.svg +1 -0
- package/icons/material-symbols/paper-plane-tilt.svg +1 -0
- package/icons/material-symbols/pencil-simple.svg +1 -0
- package/icons/material-symbols/phone.svg +1 -0
- package/icons/material-symbols/play-fill.svg +1 -0
- package/icons/material-symbols/plus.svg +1 -0
- package/icons/material-symbols/prohibit.svg +1 -0
- package/icons/material-symbols/puzzle-piece.svg +1 -0
- package/icons/material-symbols/question.svg +1 -0
- package/icons/material-symbols/quotes.svg +1 -0
- package/icons/material-symbols/rows.svg +1 -0
- package/icons/material-symbols/ruler.svg +1 -0
- package/icons/material-symbols/scan.svg +1 -0
- package/icons/material-symbols/shapes.svg +1 -0
- package/icons/material-symbols/share-network.svg +1 -0
- package/icons/material-symbols/shield-check.svg +1 -0
- package/icons/material-symbols/sidebar-simple.svg +1 -0
- package/icons/material-symbols/sign-out.svg +1 -0
- package/icons/material-symbols/signpost.svg +1 -0
- package/icons/material-symbols/sliders-horizontal.svg +1 -0
- package/icons/material-symbols/smiley.svg +1 -0
- package/icons/material-symbols/sparkle.svg +1 -0
- package/icons/material-symbols/square-half-bottom.svg +1 -0
- package/icons/material-symbols/square.svg +1 -0
- package/icons/material-symbols/squares-four.svg +1 -0
- package/icons/material-symbols/sticker.svg +1 -0
- package/icons/material-symbols/storefront.svg +1 -0
- package/icons/material-symbols/sun.svg +1 -0
- package/icons/material-symbols/swatches.svg +1 -0
- package/icons/material-symbols/tag.svg +1 -0
- package/icons/material-symbols/text-aa.svg +1 -0
- package/icons/material-symbols/text-align-left.svg +1 -0
- package/icons/material-symbols/text-b.svg +1 -0
- package/icons/material-symbols/text-h-one.svg +1 -0
- package/icons/material-symbols/text-h-three.svg +1 -0
- package/icons/material-symbols/text-h-two.svg +1 -0
- package/icons/material-symbols/text-italic.svg +1 -0
- package/icons/material-symbols/text-t.svg +1 -0
- package/icons/material-symbols/ticket.svg +1 -0
- package/icons/material-symbols/toggle-right.svg +1 -0
- package/icons/material-symbols/train.svg +1 -0
- package/icons/material-symbols/trash.svg +1 -0
- package/icons/material-symbols/upload-simple.svg +1 -0
- package/icons/material-symbols/user-circle.svg +1 -0
- package/icons/material-symbols/user.svg +1 -0
- package/icons/material-symbols/users-three.svg +1 -0
- package/icons/material-symbols/users.svg +1 -0
- package/icons/material-symbols/video-camera.svg +1 -0
- package/icons/material-symbols/warning-circle.svg +1 -0
- package/icons/material-symbols/warning.svg +1 -0
- package/icons/material-symbols/wave-sine.svg +1 -0
- package/icons/material-symbols/wheelchair.svg +1 -0
- package/icons/material-symbols/wrench.svg +1 -0
- package/icons/material-symbols/x.svg +1 -0
- package/icons/phosphor/LICENSE +21 -0
- package/icons/phosphor/address-book.svg +1 -0
- package/icons/phosphor/app-window.svg +1 -0
- package/icons/phosphor/arrow-counter-clockwise.svg +1 -0
- package/icons/phosphor/arrow-down.svg +1 -0
- package/icons/phosphor/arrow-left.svg +1 -0
- package/icons/phosphor/arrow-right.svg +1 -0
- package/icons/phosphor/arrow-square-out.svg +1 -0
- package/icons/phosphor/arrow-u-up-left.svg +1 -0
- package/icons/phosphor/arrow-u-up-right.svg +1 -0
- package/icons/phosphor/arrow-up-right.svg +1 -0
- package/icons/phosphor/arrow-up.svg +1 -0
- package/icons/phosphor/arrows-down-up.svg +1 -0
- package/icons/phosphor/arrows-in-line-horizontal.svg +1 -0
- package/icons/phosphor/arrows-out-line-horizontal.svg +1 -0
- package/icons/phosphor/article.svg +1 -0
- package/icons/phosphor/bank.svg +1 -0
- package/icons/phosphor/bell.svg +1 -0
- package/icons/phosphor/bicycle.svg +1 -0
- package/icons/phosphor/binoculars.svg +1 -0
- package/icons/phosphor/book-open-text.svg +1 -0
- package/icons/phosphor/book-open.svg +1 -0
- package/icons/phosphor/browser.svg +1 -0
- package/icons/phosphor/buildings.svg +1 -0
- package/icons/phosphor/bus.svg +1 -0
- package/icons/phosphor/calendar-blank.svg +1 -0
- package/icons/phosphor/calendar-check.svg +1 -0
- package/icons/phosphor/car.svg +1 -0
- package/icons/phosphor/cards.svg +1 -0
- package/icons/phosphor/caret-down.svg +1 -0
- package/icons/phosphor/caret-left.svg +1 -0
- package/icons/phosphor/caret-right.svg +1 -0
- package/icons/phosphor/caret-up.svg +1 -0
- package/icons/phosphor/certificate.svg +1 -0
- package/icons/phosphor/chart-line-up.svg +1 -0
- package/icons/phosphor/chats.svg +1 -0
- package/icons/phosphor/check-circle.svg +1 -0
- package/icons/phosphor/check.svg +1 -0
- package/icons/phosphor/circle-half.svg +1 -0
- package/icons/phosphor/circle.svg +1 -0
- package/icons/phosphor/clock-counter-clockwise.svg +1 -0
- package/icons/phosphor/clock.svg +1 -0
- package/icons/phosphor/code.svg +1 -0
- package/icons/phosphor/coffee.svg +1 -0
- package/icons/phosphor/columns.svg +1 -0
- package/icons/phosphor/cookie.svg +1 -0
- package/icons/phosphor/copy.svg +1 -0
- package/icons/phosphor/credit-card.svg +1 -0
- package/icons/phosphor/currency-circle-dollar.svg +1 -0
- package/icons/phosphor/cursor-click.svg +1 -0
- package/icons/phosphor/database.svg +1 -0
- package/icons/phosphor/desktop.svg +1 -0
- package/icons/phosphor/device-mobile.svg +1 -0
- package/icons/phosphor/door-open.svg +1 -0
- package/icons/phosphor/download-simple.svg +1 -0
- package/icons/phosphor/envelope-simple.svg +1 -0
- package/icons/phosphor/eye-slash.svg +1 -0
- package/icons/phosphor/eye.svg +1 -0
- package/icons/phosphor/file-pdf.svg +1 -0
- package/icons/phosphor/file-text.svg +1 -0
- package/icons/phosphor/file-video.svg +1 -0
- package/icons/phosphor/file-zip.svg +1 -0
- package/icons/phosphor/flower-lotus.svg +1 -0
- package/icons/phosphor/folder-simple.svg +1 -0
- package/icons/phosphor/funnel.svg +1 -0
- package/icons/phosphor/gauge.svg +1 -0
- package/icons/phosphor/gear.svg +1 -0
- package/icons/phosphor/github-logo.svg +1 -0
- package/icons/phosphor/globe.svg +1 -0
- package/icons/phosphor/google-logo.svg +1 -0
- package/icons/phosphor/graduation-cap.svg +1 -0
- package/icons/phosphor/hammer.svg +1 -0
- package/icons/phosphor/hand-heart.svg +1 -0
- package/icons/phosphor/handshake.svg +1 -0
- package/icons/phosphor/hard-drives.svg +1 -0
- package/icons/phosphor/heart.svg +1 -0
- package/icons/phosphor/house.svg +1 -0
- package/icons/phosphor/image-square.svg +1 -0
- package/icons/phosphor/image.svg +1 -0
- package/icons/phosphor/info.svg +1 -0
- package/icons/phosphor/keyboard.svg +1 -0
- package/icons/phosphor/leaf.svg +1 -0
- package/icons/phosphor/lifebuoy.svg +1 -0
- package/icons/phosphor/lightbulb.svg +1 -0
- package/icons/phosphor/link-break.svg +1 -0
- package/icons/phosphor/link-simple.svg +1 -0
- package/icons/phosphor/list-bullets.svg +1 -0
- package/icons/phosphor/list-checks.svg +1 -0
- package/icons/phosphor/list-numbers.svg +1 -0
- package/icons/phosphor/list.svg +1 -0
- package/icons/phosphor/lock-simple-open.svg +1 -0
- package/icons/phosphor/lock-simple.svg +1 -0
- package/icons/phosphor/magnifying-glass.svg +1 -0
- package/icons/phosphor/map-pin.svg +1 -0
- package/icons/phosphor/map-trifold.svg +1 -0
- package/icons/phosphor/medal.svg +1 -0
- package/icons/phosphor/megaphone.svg +1 -0
- package/icons/phosphor/minus.svg +1 -0
- package/icons/phosphor/moon.svg +1 -0
- package/icons/phosphor/newspaper.svg +1 -0
- package/icons/phosphor/pack.json +8 -0
- package/icons/phosphor/paint-brush-broad.svg +1 -0
- package/icons/phosphor/palette.svg +1 -0
- package/icons/phosphor/paper-plane-tilt.svg +1 -0
- package/icons/phosphor/pencil-simple.svg +1 -0
- package/icons/phosphor/phone.svg +1 -0
- package/icons/phosphor/play-fill.svg +1 -0
- package/icons/phosphor/plus.svg +1 -0
- package/icons/phosphor/prohibit.svg +1 -0
- package/icons/phosphor/puzzle-piece.svg +1 -0
- package/icons/phosphor/question.svg +1 -0
- package/icons/phosphor/quotes.svg +1 -0
- package/icons/phosphor/rows.svg +1 -0
- package/icons/phosphor/ruler.svg +1 -0
- package/icons/phosphor/scan.svg +1 -0
- package/icons/phosphor/shapes.svg +1 -0
- package/icons/phosphor/share-network.svg +1 -0
- package/icons/phosphor/shield-check.svg +1 -0
- package/icons/phosphor/sidebar-simple.svg +1 -0
- package/icons/phosphor/sign-out.svg +1 -0
- package/icons/phosphor/signpost.svg +1 -0
- package/icons/phosphor/sliders-horizontal.svg +1 -0
- package/icons/phosphor/smiley.svg +1 -0
- package/icons/phosphor/sparkle.svg +1 -0
- package/icons/phosphor/square-half-bottom.svg +1 -0
- package/icons/phosphor/square.svg +1 -0
- package/icons/phosphor/squares-four.svg +1 -0
- package/icons/phosphor/sticker.svg +1 -0
- package/icons/phosphor/storefront.svg +1 -0
- package/icons/phosphor/sun.svg +1 -0
- package/icons/phosphor/swatches.svg +1 -0
- package/icons/phosphor/tag.svg +1 -0
- package/icons/phosphor/text-aa.svg +1 -0
- package/icons/phosphor/text-align-left.svg +1 -0
- package/icons/phosphor/text-b.svg +1 -0
- package/icons/phosphor/text-h-one.svg +1 -0
- package/icons/phosphor/text-h-three.svg +1 -0
- package/icons/phosphor/text-h-two.svg +1 -0
- package/icons/phosphor/text-italic.svg +1 -0
- package/icons/phosphor/text-t.svg +1 -0
- package/icons/phosphor/ticket.svg +1 -0
- package/icons/phosphor/toggle-right.svg +1 -0
- package/icons/phosphor/train.svg +1 -0
- package/icons/phosphor/trash.svg +1 -0
- package/icons/phosphor/upload-simple.svg +1 -0
- package/icons/phosphor/user-circle.svg +1 -0
- package/icons/phosphor/user.svg +1 -0
- package/icons/phosphor/users-three.svg +1 -0
- package/icons/phosphor/users.svg +1 -0
- package/icons/phosphor/video-camera.svg +1 -0
- package/icons/phosphor/warning-circle.svg +1 -0
- package/icons/phosphor/warning.svg +1 -0
- package/icons/phosphor/wave-sine.svg +1 -0
- package/icons/phosphor/wheelchair.svg +1 -0
- package/icons/phosphor/wrench.svg +1 -0
- package/icons/phosphor/x.svg +1 -0
- package/lib/apps.d.mts +28 -0
- package/lib/apps.mjs +139 -0
- package/lib/blocks.d.mts +23 -0
- package/lib/blocks.mjs +90 -0
- package/lib/colors.ts +86 -0
- package/lib/contactBar.ts +18 -0
- package/lib/cookieCategories.d.mts +17 -0
- package/lib/cookieCategories.mjs +28 -0
- package/lib/crop.d.mts +34 -0
- package/lib/crop.mjs +83 -0
- package/lib/csp.d.mts +22 -0
- package/lib/csp.mjs +130 -0
- package/lib/cspSources.d.mts +24 -0
- package/lib/cspSources.mjs +60 -0
- package/lib/dynamic-colors.ts +426 -0
- package/lib/git.d.mts +24 -0
- package/lib/git.mjs +64 -0
- package/lib/hooks.ts +51 -0
- package/lib/inline.ts +20 -0
- package/lib/license-texts/Apache-2.0.txt +191 -0
- package/lib/license-texts/BSD-2-Clause.txt +24 -0
- package/lib/license-texts/BSD-3-Clause.txt +28 -0
- package/lib/license-texts/ISC.txt +15 -0
- package/lib/license-texts/MIT.txt +21 -0
- package/lib/licenses.d.mts +190 -0
- package/lib/licenses.mjs +683 -0
- package/lib/markdown.ts +42 -0
- package/lib/motion-schemes.d.mts +2 -0
- package/lib/motion-schemes.mjs +5 -0
- package/lib/motion.ts +131 -0
- package/lib/notice.d.mts +3 -0
- package/lib/notice.mjs +34 -0
- package/lib/scheduled.d.mts +15 -0
- package/lib/scheduled.mjs +37 -0
- package/lib/snackbar.ts +149 -0
- package/lib/status.d.mts +7 -0
- package/lib/status.mjs +18 -0
- package/lib/svg.d.mts +22 -0
- package/lib/svg.mjs +231 -0
- package/lib/text-colors.d.mts +11 -0
- package/lib/text-colors.mjs +43 -0
- package/lib/video-id.d.mts +14 -0
- package/lib/video-id.mjs +72 -0
- package/lib/video.d.mts +20 -0
- package/lib/video.mjs +91 -0
- package/package.json +131 -6
- package/pages/404.astro +10 -0
- package/pages/[...slug].astro +51 -0
- package/pages/_headers.txt +31 -0
- package/pages/blog/index.astro +10 -0
- package/pages/blog/kategori/[category].astro +18 -0
- package/pages/editor/code-images.json.js +25 -0
- package/pages/editor/index.astro +75 -0
- package/pages/editor/manifest.webmanifest.js +23 -0
- package/pages/editor/sw.js +33 -0
- package/pages/editor/sw.js.js +4 -0
- package/pages/editor/thumbnails.json.js +21 -0
- package/pages/editor/version.json.js +22 -0
- package/pages/headers.js +4 -0
- package/pages/index.astro +10 -0
- package/pages/ny.astro +6 -0
- package/pages/robots.txt.js +3 -0
- package/pages/rss.xml.js +20 -0
- package/scripts/app-screenshots.mjs +164 -0
- package/scripts/app-workers.mjs +6 -0
- package/scripts/bin.mjs +12 -0
- package/scripts/built-site.mjs +99 -0
- package/scripts/check-consent.mjs +113 -0
- package/scripts/check-content.mjs +149 -0
- package/scripts/check-demo.mjs +24 -0
- package/scripts/check-themes.mjs +45 -0
- package/scripts/check-worker.mjs +569 -0
- package/scripts/compare-html.mjs +81 -0
- package/scripts/demo-site.mjs +42 -0
- package/scripts/editor-icons.mjs +56 -0
- package/scripts/editor-roundtrip.mjs +134 -0
- package/scripts/editor-screens.mjs +101 -0
- package/scripts/git-env.mjs +9 -0
- package/scripts/icon-packs.mjs +151 -0
- package/scripts/link-counts.mjs +22 -0
- package/scripts/page-colors.mjs +42 -0
- package/scripts/releases.d.mts +10 -0
- package/scripts/releases.mjs +80 -0
- package/scripts/responsive-images.mjs +94 -0
- package/scripts/scheduled-list.mjs +15 -0
- package/scripts/theme-screenshots.mjs +88 -0
- package/scripts/types.mjs +21 -0
- package/scripts/video-thumbnails.mjs +89 -0
- package/scripts/worker-modules.mjs +34 -0
- package/site/appCookies.d.mts +9 -0
- package/site/appCookies.mjs +74 -0
- package/site/apps.ts +21 -0
- package/site/autolinks.d.mts +11 -0
- package/site/autolinks.mjs +200 -0
- package/site/blockScripts.ts +31 -0
- package/site/categories.ts +16 -0
- package/site/consent.ts +26 -0
- package/site/content.config.ts +84 -0
- package/site/content.ts +104 -0
- package/site/cookieList.ts +17 -0
- package/site/defineSite.d.mts +142 -0
- package/site/defineSite.mjs +136 -0
- package/site/directives/interact.d.mts +2 -0
- package/site/directives/interact.mjs +31 -0
- package/site/editor-version.d.mts +1 -0
- package/site/editor-version.mjs +26 -0
- package/site/fill.ts +13 -0
- package/site/format.ts +11 -0
- package/site/home.ts +66 -0
- package/site/iconPacks.d.mts +20 -0
- package/site/iconPacks.mjs +43 -0
- package/site/icons.d.mts +693 -0
- package/site/icons.mjs +605 -0
- package/site/images.d.mts +43 -0
- package/site/images.mjs +157 -0
- package/site/motion.ts +13 -0
- package/site/noindex.d.mts +6 -0
- package/site/noindex.mjs +21 -0
- package/site/pageColors.ts +110 -0
- package/site/popups.ts +98 -0
- package/site/schema.ts +189 -0
- package/site/sections.ts +3 -0
- package/site/seo.ts +28 -0
- package/site/site.ts +76 -0
- package/site/siteConfig.d.mts +1 -0
- package/site/siteConfig.mjs +8 -0
- package/site/siteCsp.d.mts +10 -0
- package/site/siteCsp.mjs +75 -0
- package/site/siteModules.d.mts +7 -0
- package/site/siteModules.mjs +27 -0
- package/site/standardPages.ts +59 -0
- package/site/testimonials.ts +48 -0
- package/site/text.ts +43 -0
- package/site/theme.d.mts +83 -0
- package/site/theme.mjs +472 -0
- package/site/tracking.client.ts +225 -0
- package/site/tracking.ts +9 -0
- package/src/ActionParts.tsx +205 -0
- package/src/Advanced.tsx +152 -0
- package/src/App.tsx +904 -0
- package/src/AppList.tsx +1345 -0
- package/src/BlockDialog.tsx +360 -0
- package/src/BlockParts.tsx +652 -0
- package/src/BlockSettings.tsx +533 -0
- package/src/BrandForm.tsx +164 -0
- package/src/Colors.tsx +476 -0
- package/src/CommunicationParts.tsx +199 -0
- package/src/CompanyForm.tsx +209 -0
- package/src/Consents.tsx +175 -0
- package/src/ContainmentParts.tsx +185 -0
- package/src/Crop.tsx +152 -0
- package/src/DataForm.tsx +434 -0
- package/src/Deleted.tsx +177 -0
- package/src/EntryForm.tsx +740 -0
- package/src/FileView.tsx +30 -0
- package/src/FormFrame.tsx +237 -0
- package/src/Keywords.tsx +225 -0
- package/src/Library.tsx +1563 -0
- package/src/Licenses.tsx +336 -0
- package/src/LinkSheet.tsx +138 -0
- package/src/MarkdownEditor.tsx +1075 -0
- package/src/Media.tsx +677 -0
- package/src/NavigationParts.tsx +350 -0
- package/src/NavigationRestParts.tsx +247 -0
- package/src/Notifications.tsx +59 -0
- package/src/PagePicker.tsx +136 -0
- package/src/Parts.tsx +991 -0
- package/src/PartsShown.tsx +168 -0
- package/src/PickerParts.tsx +183 -0
- package/src/Redirects.tsx +450 -0
- package/src/Screen.tsx +184 -0
- package/src/SectionsField.tsx +65 -0
- package/src/SelectionParts.tsx +134 -0
- package/src/SeoScores.tsx +184 -0
- package/src/Sheet.tsx +35 -0
- package/src/ThemeStore.tsx +376 -0
- package/src/Tokens.tsx +346 -0
- package/src/Versions.tsx +214 -0
- package/src/addresses.ts +75 -0
- package/src/allIcons.ts +7 -0
- package/src/appFiles.ts +29 -0
- package/src/apps.ts +281 -0
- package/src/ask.tsx +123 -0
- package/src/blocks.ts +251 -0
- package/src/brand.ts +153 -0
- package/src/cache.ts +42 -0
- package/src/check.ts +285 -0
- package/src/checkSite.ts +256 -0
- package/src/consents.ts +26 -0
- package/src/cookieList.ts +70 -0
- package/src/countries.ts +59 -0
- package/src/deploy.ts +155 -0
- package/src/editor.css +602 -0
- package/src/examples.ts +85 -0
- package/src/fields.tsx +942 -0
- package/src/frontmatter.d.mts +6 -0
- package/src/frontmatter.mjs +42 -0
- package/src/github.ts +376 -0
- package/src/i18n/da-DK/advanced.ts +28 -0
- package/src/i18n/da-DK/app.ts +71 -0
- package/src/i18n/da-DK/apps.ts +90 -0
- package/src/i18n/da-DK/blockSettings.ts +38 -0
- package/src/i18n/da-DK/blocks.ts +408 -0
- package/src/i18n/da-DK/check.ts +25 -0
- package/src/i18n/da-DK/colors.ts +64 -0
- package/src/i18n/da-DK/common.ts +118 -0
- package/src/i18n/da-DK/company.ts +24 -0
- package/src/i18n/da-DK/consents.ts +23 -0
- package/src/i18n/da-DK/forms.ts +116 -0
- package/src/i18n/da-DK/history.ts +35 -0
- package/src/i18n/da-DK/index.ts +49 -0
- package/src/i18n/da-DK/keywords.ts +19 -0
- package/src/i18n/da-DK/library.ts +135 -0
- package/src/i18n/da-DK/licenses.ts +25 -0
- package/src/i18n/da-DK/media.ts +79 -0
- package/src/i18n/da-DK/parts.ts +696 -0
- package/src/i18n/da-DK/preview.ts +13 -0
- package/src/i18n/da-DK/redirects.ts +51 -0
- package/src/i18n/da-DK/seo.ts +20 -0
- package/src/i18n/da-DK/text.ts +35 -0
- package/src/i18n/da-DK/theme.ts +41 -0
- package/src/i18n/en-US/advanced.ts +32 -0
- package/src/i18n/en-US/app.ts +84 -0
- package/src/i18n/en-US/apps.ts +134 -0
- package/src/i18n/en-US/blockSettings.ts +48 -0
- package/src/i18n/en-US/blocks.ts +441 -0
- package/src/i18n/en-US/check.ts +31 -0
- package/src/i18n/en-US/colors.ts +82 -0
- package/src/i18n/en-US/common.ts +144 -0
- package/src/i18n/en-US/company.ts +25 -0
- package/src/i18n/en-US/consents.ts +25 -0
- package/src/i18n/en-US/forms.ts +145 -0
- package/src/i18n/en-US/history.ts +43 -0
- package/src/i18n/en-US/index.ts +51 -0
- package/src/i18n/en-US/keywords.ts +24 -0
- package/src/i18n/en-US/library.ts +176 -0
- package/src/i18n/en-US/licenses.ts +36 -0
- package/src/i18n/en-US/media.ts +80 -0
- package/src/i18n/en-US/parts.ts +718 -0
- package/src/i18n/en-US/preview.ts +15 -0
- package/src/i18n/en-US/redirects.ts +66 -0
- package/src/i18n/en-US/seo.ts +26 -0
- package/src/i18n/en-US/text.ts +41 -0
- package/src/i18n/en-US/theme.ts +41 -0
- package/src/i18n/index.ts +124 -0
- package/src/icon.tsx +160 -0
- package/src/iconPacks.ts +89 -0
- package/src/images.ts +163 -0
- package/src/licenses.ts +79 -0
- package/src/markdown.d.mts +12 -0
- package/src/markdown.mjs +204 -0
- package/src/nav.ts +68 -0
- package/src/notFound.ts +28 -0
- package/src/notifications.ts +223 -0
- package/src/pagePreview.tsx +204 -0
- package/src/r2Caching.ts +55 -0
- package/src/redirects.ts +149 -0
- package/src/registry.tsx +188 -0
- package/src/schema.ts +417 -0
- package/src/sections.d.mts +45 -0
- package/src/sections.mjs +303 -0
- package/src/seo.ts +333 -0
- package/src/shared.ts +44 -0
- package/src/sidebar.ts +31 -0
- package/src/site.ts +317 -0
- package/src/standard/Block.astro +19 -0
- package/src/standard/BlockSite.astro +18 -0
- package/src/standard/accordion/index.tsx +47 -0
- package/src/standard/accordion/load.ts +23 -0
- package/src/standard/accordion/shared.ts +15 -0
- package/src/standard/accordion/view.ts +32 -0
- package/src/standard/buttons/fields.ts +98 -0
- package/src/standard/buttons/index.tsx +23 -0
- package/src/standard/buttons/load.ts +34 -0
- package/src/standard/buttons/shared.ts +12 -0
- package/src/standard/buttons/view.ts +30 -0
- package/src/standard/cards/index.tsx +71 -0
- package/src/standard/cards/load.ts +17 -0
- package/src/standard/cards/shared.ts +27 -0
- package/src/standard/cards/view.ts +29 -0
- package/src/standard/checklist/index.tsx +27 -0
- package/src/standard/checklist/load.ts +5 -0
- package/src/standard/checklist/view.ts +13 -0
- package/src/standard/cookies/index.tsx +17 -0
- package/src/standard/cookies/list.ts +56 -0
- package/src/standard/cookies/load.ts +11 -0
- package/src/standard/cookies/shared.ts +20 -0
- package/src/standard/cookies/view.ts +28 -0
- package/src/standard/faq/index.tsx +29 -0
- package/src/standard/faq/load.ts +14 -0
- package/src/standard/faq/view.ts +21 -0
- package/src/standard/head.ts +23 -0
- package/src/standard/hero/fields.ts +48 -0
- package/src/standard/hero/index.tsx +57 -0
- package/src/standard/hero/load.ts +23 -0
- package/src/standard/hero/view.ts +38 -0
- package/src/standard/links/index.tsx +41 -0
- package/src/standard/links/load.ts +17 -0
- package/src/standard/links/view.ts +25 -0
- package/src/standard/list/index.tsx +50 -0
- package/src/standard/list/load.ts +5 -0
- package/src/standard/list/view.ts +18 -0
- package/src/standard/load.ts +7 -0
- package/src/standard/notice/index.tsx +30 -0
- package/src/standard/notice/load.ts +16 -0
- package/src/standard/notice/view.ts +10 -0
- package/src/standard/points/index.tsx +42 -0
- package/src/standard/points/load.ts +5 -0
- package/src/standard/points/view.ts +12 -0
- package/src/standard/posts/index.tsx +132 -0
- package/src/standard/posts/load.ts +36 -0
- package/src/standard/posts/shared.ts +21 -0
- package/src/standard/posts/view.ts +63 -0
- package/src/standard/pricecards/index.tsx +57 -0
- package/src/standard/pricecards/load.ts +11 -0
- package/src/standard/pricecards/view.ts +50 -0
- package/src/standard/sharedTexts.ts +6 -0
- package/src/standard/site.ts +124 -0
- package/src/standard/siteLooks.ts +19 -0
- package/src/standard/sites.ts +13 -0
- package/src/standard/steps/index.tsx +28 -0
- package/src/standard/steps/load.ts +5 -0
- package/src/standard/steps/view.ts +11 -0
- package/src/standard/testimonials/index.tsx +87 -0
- package/src/standard/testimonials/list.ts +43 -0
- package/src/standard/testimonials/load.ts +58 -0
- package/src/standard/testimonials/shared.ts +13 -0
- package/src/standard/testimonials/view.ts +76 -0
- package/src/standard/themeBlocks.ts +13 -0
- package/src/standard/video/index.tsx +23 -0
- package/src/standard/video/load.ts +10 -0
- package/src/standard/video/view.ts +42 -0
- package/src/standard/view.tsx +105 -0
- package/src/standard/views.ts +37 -0
- package/src/store.ts +499 -0
- package/src/theme.ts +90 -0
- package/src/themeUi.ts +97 -0
- package/src/themes.ts +91 -0
- package/src/ui.tsx +3402 -0
- package/src/virtual.d.ts +5 -0
- package/src/when.ts +22 -0
- package/starter/.githooks/pre-push +4 -0
- package/starter/.nvmrc +1 -0
- package/starter/.prettierignore +11 -0
- package/starter/.prettierrc.json +7 -0
- package/starter/README.md +26 -0
- package/starter/astro.config.mjs +5 -0
- package/starter/package.json +67 -0
- package/starter/public/_redirects +1 -0
- package/starter/public/apple-touch-icon.png +0 -0
- package/starter/public/editor/apple-touch-icon.png +0 -0
- package/starter/public/editor/icon-192.png +0 -0
- package/starter/public/editor/icon-512.png +0 -0
- package/starter/public/editor/icon-maskable-512.png +0 -0
- package/starter/public/favicon.ico +0 -0
- package/starter/public/favicon.svg +1 -0
- package/starter/public/logo.svg +1 -0
- package/starter/src/content/pages/blog.md +8 -0
- package/starter/src/content/pages/forside.md +9 -0
- package/starter/src/content/pages/kontakt.md +7 -0
- package/starter/src/content/pages/privatlivspolitik.md +9 -0
- package/starter/src/content/pages/siden-findes-ikke.md +7 -0
- package/starter/src/content.config.ts +2 -0
- package/starter/src/data/apps.json +1 -0
- package/starter/src/data/block-settings.json +3 -0
- package/starter/src/data/blocks.json +1 -0
- package/starter/src/data/booking.json +6 -0
- package/starter/src/data/colors.json +70 -0
- package/starter/src/data/contact.json +8 -0
- package/starter/src/data/cookies.json +21 -0
- package/starter/src/data/csp.json +1 -0
- package/starter/src/data/footer.json +15 -0
- package/starter/src/data/internal-links.json +4 -0
- package/starter/src/data/menu.json +4 -0
- package/starter/src/data/mobile-menu.json +4 -0
- package/starter/src/data/old-addresses.json +1 -0
- package/starter/src/data/redirects.json +1 -0
- package/starter/src/data/standard-pages.json +8 -0
- package/starter/src/data/theme.json +1 -0
- package/starter/src/env.d.ts +2 -0
- package/starter/src/site/config.ts +13 -0
- package/starter/src/site/worker.js +14 -0
- package/starter/tsconfig.json +17 -0
- package/starter/worker/apps.js +6 -0
- package/starter/wrangler.jsonc +39 -0
- package/theme/LICENSE +21 -0
- package/theme/blocks/ArrowLink.tsx +14 -0
- package/theme/blocks/BlockHead.tsx +26 -0
- package/theme/blocks/Panel.tsx +32 -0
- package/theme/blocks/Person.tsx +26 -0
- package/theme/blocks/accordion/PageRow.tsx +25 -0
- package/theme/blocks/accordion/View.tsx +17 -0
- package/theme/blocks/buttons/Buttons.tsx +28 -0
- package/theme/blocks/buttons/View.tsx +12 -0
- package/theme/blocks/cards/LinkCards.tsx +72 -0
- package/theme/blocks/cards/View.tsx +20 -0
- package/theme/blocks/checklist/Checks.tsx +15 -0
- package/theme/blocks/checklist/View.tsx +14 -0
- package/theme/blocks/cookies/View.tsx +36 -0
- package/theme/blocks/faq/Accordion.tsx +34 -0
- package/theme/blocks/faq/View.tsx +16 -0
- package/theme/blocks/faq/script.ts +56 -0
- package/theme/blocks/hero/View.tsx +44 -0
- package/theme/blocks/links/LinkGroups.tsx +24 -0
- package/theme/blocks/links/View.tsx +17 -0
- package/theme/blocks/list/Rows.tsx +24 -0
- package/theme/blocks/list/View.tsx +14 -0
- package/theme/blocks/notice/View.tsx +13 -0
- package/theme/blocks/points/PointList.tsx +34 -0
- package/theme/blocks/points/View.tsx +14 -0
- package/theme/blocks/posts/View.tsx +26 -0
- package/theme/blocks/pricecards/View.tsx +40 -0
- package/theme/blocks/steps/StepList.tsx +23 -0
- package/theme/blocks/steps/View.tsx +14 -0
- package/theme/blocks/testimonials/List.tsx +46 -0
- package/theme/blocks/testimonials/Slider.tsx +44 -0
- package/theme/blocks/testimonials/Testimonial.tsx +124 -0
- package/theme/blocks/testimonials/View.tsx +21 -0
- package/theme/blocks/testimonials/script.ts +52 -0
- package/theme/blocks/video/View.tsx +41 -0
- package/theme/components/ActionBar.astro +63 -0
- package/theme/components/AppSlot.astro +21 -0
- package/theme/components/ArrowLink.tsx +21 -0
- package/theme/components/BlogIndex.astro +48 -0
- package/theme/components/BlogPosts.astro +18 -0
- package/theme/components/BlogPosts.tsx +45 -0
- package/theme/components/BookButton.tsx +22 -0
- package/theme/components/Container.astro +11 -0
- package/theme/components/CookieConsent.astro +121 -0
- package/theme/components/EndBlock.astro +21 -0
- package/theme/components/FontPreload.astro +6 -0
- package/theme/components/Footer.astro +85 -0
- package/theme/components/Header.astro +186 -0
- package/theme/components/Icon.astro +16 -0
- package/theme/components/Img.astro +29 -0
- package/theme/components/Img.tsx +33 -0
- package/theme/components/Inline.astro +11 -0
- package/theme/components/Logo.astro +23 -0
- package/theme/components/LogoMark.astro +10 -0
- package/theme/components/Markdown.astro +17 -0
- package/theme/components/MobileMenu.tsx +224 -0
- package/theme/components/MobileNav.astro +33 -0
- package/theme/components/PageHeader.astro +22 -0
- package/theme/components/PageSection.astro +24 -0
- package/theme/components/PhoneButton.tsx +11 -0
- package/theme/components/Popup.astro +145 -0
- package/theme/components/PopupButton.tsx +24 -0
- package/theme/components/PopupView.tsx +48 -0
- package/theme/components/PostList.tsx +58 -0
- package/theme/components/PostMeta.tsx +17 -0
- package/theme/components/RichText.astro +28 -0
- package/theme/components/Section.astro +29 -0
- package/theme/components/SectionHeading.tsx +8 -0
- package/theme/components/TextSection.astro +16 -0
- package/theme/components/home/PageBlock.astro +19 -0
- package/theme/components/home/Text.astro +13 -0
- package/theme/components/loadPopup.ts +22 -0
- package/theme/components/loadPosts.ts +16 -0
- package/theme/components/posts.ts +15 -0
- package/theme/editor/looks.mjs +7 -0
- package/theme/editor/previews.tsx +56 -0
- package/theme/layouts/Base.astro +273 -0
- package/theme/layouts/PageLayout.astro +126 -0
- package/theme/layouts/PostLayout.astro +137 -0
- package/theme/screenshots/1-front.jpg +0 -0
- package/theme/screenshots/2-front-dark.jpg +0 -0
- package/theme/screenshots/3-blog.jpg +0 -0
- package/theme/screenshots/4-contact.jpg +0 -0
- package/theme/scripts/motion.ts +29 -0
- package/theme/styles/base.css +320 -0
- package/theme/styles/blocks.css +1808 -0
- package/theme/styles/components.css +206 -0
- package/theme/styles/global.css +1302 -0
- package/theme/styles/ui.css +6544 -0
- package/theme/templates/Blog.astro +38 -0
- package/theme/templates/Category.astro +19 -0
- package/theme/templates/Home.astro +36 -0
- package/theme/templates/New.astro +68 -0
- package/theme/templates/NotFound.astro +117 -0
- package/theme/theme.json +28 -0
- package/theme/ui/Badge.tsx +45 -0
- package/theme/ui/BottomSheet.tsx +148 -0
- package/theme/ui/Button.tsx +79 -0
- package/theme/ui/ButtonGroup.tsx +31 -0
- package/theme/ui/Card.tsx +45 -0
- package/theme/ui/Carousel.tsx +124 -0
- package/theme/ui/Checkbox.tsx +59 -0
- package/theme/ui/Chip.tsx +101 -0
- package/theme/ui/ChipSet.tsx +27 -0
- package/theme/ui/DatePicker.tsx +149 -0
- package/theme/ui/DatePickerContainer.tsx +316 -0
- package/theme/ui/Dialog.tsx +100 -0
- package/theme/ui/Divider.tsx +27 -0
- package/theme/ui/ExposedDropdownMenu.tsx +77 -0
- package/theme/ui/Fab.tsx +88 -0
- package/theme/ui/FabMenu.tsx +67 -0
- package/theme/ui/IconButton.tsx +78 -0
- package/theme/ui/List.tsx +287 -0
- package/theme/ui/LoadingIndicator.tsx +29 -0
- package/theme/ui/Menu.tsx +278 -0
- package/theme/ui/NavigationBar.tsx +62 -0
- package/theme/ui/NavigationDrawer.tsx +80 -0
- package/theme/ui/NavigationRail.tsx +154 -0
- package/theme/ui/ProgressIndicator.tsx +162 -0
- package/theme/ui/RadioButton.tsx +50 -0
- package/theme/ui/Search.tsx +129 -0
- package/theme/ui/SegmentedButton.tsx +49 -0
- package/theme/ui/SideSheet.tsx +54 -0
- package/theme/ui/Slider.tsx +155 -0
- package/theme/ui/Snackbar.tsx +67 -0
- package/theme/ui/SplitButton.tsx +67 -0
- package/theme/ui/Switch.tsx +60 -0
- package/theme/ui/Tabs.tsx +114 -0
- package/theme/ui/TextField.tsx +278 -0
- package/theme/ui/TimePicker.tsx +128 -0
- package/theme/ui/TimePickerContainer.tsx +234 -0
- package/theme/ui/Toolbar.tsx +67 -0
- package/theme/ui/Tooltip.tsx +58 -0
- package/theme/ui/TopAppBar.tsx +77 -0
- package/theme/ui/bottomSheet.script.ts +8 -0
- package/theme/ui/bottomSheet.ts +211 -0
- package/theme/ui/carousel.script.ts +28 -0
- package/theme/ui/carouselLayout.ts +229 -0
- package/theme/ui/checkbox.script.ts +8 -0
- package/theme/ui/datePicker.script.ts +302 -0
- package/theme/ui/dates.ts +185 -0
- package/theme/ui/dialog.ts +48 -0
- package/theme/ui/dropdownMenu.script.ts +166 -0
- package/theme/ui/fabMenu.script.ts +57 -0
- package/theme/ui/navigationRail.script.ts +47 -0
- package/theme/ui/ripple.script.ts +159 -0
- package/theme/ui/search.script.ts +92 -0
- package/theme/ui/sideSheet.ts +48 -0
- package/theme/ui/slider.script.ts +12 -0
- package/theme/ui/sliderUpdate.ts +52 -0
- package/theme/ui/snackbar.script.ts +16 -0
- package/theme/ui/splitButton.script.ts +63 -0
- package/theme/ui/tabs.script.ts +48 -0
- package/theme/ui/textField.script.ts +17 -0
- package/theme/ui/textFieldUpdate.ts +44 -0
- package/theme/ui/timePicker.script.ts +248 -0
- package/theme/ui/toolbar.script.ts +43 -0
- package/theme/ui/tooltip.script.ts +68 -0
- package/worker/consent.js +141 -0
- package/worker/editor-github.js +167 -0
- package/worker/editor-host.js +74 -0
- package/worker/files.js +401 -0
- package/worker/github.js +36 -0
- package/worker/index.js +184 -0
- package/worker/not-found.js +97 -0
- package/worker/oauth.js +95 -0
- package/worker/publish.js +52 -0
- package/worker/push.js +270 -0
- package/worker/r2-status.js +50 -0
- package/worker/session.js +58 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// A site's colours under "Indstillinger › Farver" (packages/editor/src/Colors.tsx): the colours there
|
|
2
|
+
// are, by their CSS variable in the theme (without "--"), the pairs that must be readable
|
|
3
|
+
// (WCAG AA, checked before a save and before the build), and the colours a site has until it is given its own
|
|
4
|
+
// ("Brug standardfarverne"), and the Material colour role each takes when they are made from one source
|
|
5
|
+
// colour (dynamic colour, @morphemecms/cms/lib/dynamic-colors.ts). The colours themselves are in
|
|
6
|
+
// src/data/colors.json (config.colors).
|
|
7
|
+
import type { ColorPair, Colors } from '../lib/colors';
|
|
8
|
+
import { dynamicColors, type ColorRoles } from '../lib/dynamic-colors';
|
|
9
|
+
|
|
10
|
+
/** The colours, in the order they are shown, with what they are used for. */
|
|
11
|
+
export const colorFields: { name: string; label: string; hint: string }[] = [
|
|
12
|
+
{ name: 'bg', label: 'Baggrund', hint: 'Bag hele siden.' },
|
|
13
|
+
{ name: 'surface', label: 'Flader', hint: 'Kort, felter og menuer.' },
|
|
14
|
+
{ name: 'surface-container-lowest', label: 'Flade (lavest)', hint: 'Flader med mindst vægt.' },
|
|
15
|
+
{ name: 'surface-container-low', label: 'Flade (lav)', hint: 'Kort med skygge, blokke og ark.' },
|
|
16
|
+
{ name: 'surface-container', label: 'Flade (mellem)', hint: 'Menuer og bjælker.' },
|
|
17
|
+
{ name: 'surface-container-high', label: 'Flade (høj)', hint: 'Dialoger og søgefeltet.' },
|
|
18
|
+
{ name: 'surface-container-highest', label: 'Flade (højest)', hint: 'Udfyldte kort, felter og kontakter.' },
|
|
19
|
+
{ name: 'inverse-surface', label: 'Omvendt flade', hint: 'Beskeder nederst og korte tooltips.' },
|
|
20
|
+
{ name: 'inverse-on-surface', label: 'Tekst på omvendt flade', hint: 'Teksten og ikonerne på den omvendte flade.' },
|
|
21
|
+
{ name: 'inverse-primary', label: 'Accentfarve på omvendt flade', hint: 'Knapperne på beskederne nederst.' },
|
|
22
|
+
{ name: 'tint', label: 'Lys farve', hint: 'Lyse bokse og markeringer.' },
|
|
23
|
+
{ name: 'ink', label: 'Tekst', hint: 'Al almindelig tekst og overskrifter.' },
|
|
24
|
+
{ name: 'muted', label: 'Stille tekst', hint: 'Undertekster, datoer og noter.' },
|
|
25
|
+
{ name: 'line', label: 'Streger', hint: 'Skillelinjer og kanten om kort.' },
|
|
26
|
+
{ name: 'outline', label: 'Kanter', hint: 'Kanten om felter, knapper og chips.' },
|
|
27
|
+
{ name: 'accent', label: 'Accentfarve', hint: 'Knapper, links, ikoner og logoet.' },
|
|
28
|
+
{ name: 'accent-hover', label: 'Accentfarve under musen', hint: 'En knap, musen er over: lidt mørkere (i mørk tilstand lysere).' },
|
|
29
|
+
{ name: 'on-accent', label: 'Tekst på accentfarven', hint: 'Teksten på knapperne.' },
|
|
30
|
+
{ name: 'accent-container', label: 'Lys accentfarve', hint: 'Knapper og flader i en lys udgave af accentfarven.' },
|
|
31
|
+
{ name: 'on-accent-container', label: 'Tekst på lys accentfarve', hint: 'Teksten og ikonerne på den lyse accentfarve.' },
|
|
32
|
+
{ name: 'secondary', label: 'Sekundær farve', hint: 'Knapper i en anden farve end accentfarven.' },
|
|
33
|
+
{ name: 'on-secondary', label: 'Tekst på sekundær farve', hint: 'Teksten og ikonerne på den sekundære farve.' },
|
|
34
|
+
{ name: 'secondary-container', label: 'Lys sekundær farve', hint: 'Knapper og flader i en lys udgave af den sekundære farve.' },
|
|
35
|
+
{ name: 'on-secondary-container', label: 'Tekst på lys sekundær farve', hint: 'Teksten og ikonerne på den lyse sekundære farve.' },
|
|
36
|
+
{ name: 'tertiary', label: 'Tertiær farve', hint: 'Knapper i en tredje farve, der skiller sig ud fra de to andre.' },
|
|
37
|
+
{ name: 'on-tertiary', label: 'Tekst på tertiær farve', hint: 'Teksten og ikonerne på den tertiære farve.' },
|
|
38
|
+
{ name: 'tertiary-container', label: 'Lys tertiær farve', hint: 'Knapper og flader i en lys udgave af den tertiære farve.' },
|
|
39
|
+
{ name: 'on-tertiary-container', label: 'Tekst på lys tertiær farve', hint: 'Teksten og ikonerne på den lyse tertiære farve.' },
|
|
40
|
+
{ name: 'error', label: 'Fejlfarve', hint: 'Fejl i felter og mærker.' },
|
|
41
|
+
{ name: 'on-error', label: 'Tekst på fejlfarven', hint: 'Teksten og ikonerne på fejlfarven.' },
|
|
42
|
+
{ name: 'error-container', label: 'Lys fejlfarve', hint: 'Flader i en lys udgave af fejlfarven.' },
|
|
43
|
+
{ name: 'on-error-container', label: 'Tekst på lys fejlfarve', hint: 'Teksten og ikonerne på den lyse fejlfarve.' },
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
/** The text and its background that must be readable, in both modes. */
|
|
47
|
+
export const colorPairs: ColorPair[] = [
|
|
48
|
+
{ text: 'ink', on: 'bg', what: 'Teksten på baggrunden' },
|
|
49
|
+
{ text: 'ink', on: 'surface', what: 'Teksten på flader' },
|
|
50
|
+
{ text: 'ink', on: 'tint', what: 'Teksten i lyse bokse' },
|
|
51
|
+
{ text: 'muted', on: 'bg', what: 'Den stille tekst på baggrunden' },
|
|
52
|
+
{ text: 'muted', on: 'surface', what: 'Den stille tekst på flader' },
|
|
53
|
+
{ text: 'muted', on: 'tint', what: 'Den stille tekst i lyse bokse' },
|
|
54
|
+
{ text: 'ink', on: 'surface-container-lowest', what: 'Teksten på den laveste flade' },
|
|
55
|
+
{ text: 'ink', on: 'surface-container-low', what: 'Teksten på den lave flade' },
|
|
56
|
+
{ text: 'ink', on: 'surface-container', what: 'Teksten på den mellemste flade' },
|
|
57
|
+
{ text: 'ink', on: 'surface-container-high', what: 'Teksten på den høje flade' },
|
|
58
|
+
{ text: 'ink', on: 'surface-container-highest', what: 'Teksten på den højeste flade' },
|
|
59
|
+
{ text: 'muted', on: 'surface-container-lowest', what: 'Den stille tekst på den laveste flade' },
|
|
60
|
+
{ text: 'muted', on: 'surface-container-low', what: 'Den stille tekst på den lave flade' },
|
|
61
|
+
{ text: 'muted', on: 'surface-container', what: 'Den stille tekst på den mellemste flade' },
|
|
62
|
+
{ text: 'muted', on: 'surface-container-high', what: 'Den stille tekst på den høje flade' },
|
|
63
|
+
{ text: 'muted', on: 'surface-container-highest', what: 'Den stille tekst på den højeste flade' },
|
|
64
|
+
{ text: 'accent', on: 'bg', what: 'Links på baggrunden' },
|
|
65
|
+
{ text: 'accent', on: 'surface', what: 'Links på flader' },
|
|
66
|
+
{ text: 'accent', on: 'tint', what: 'Accentfarven i lyse bokse' },
|
|
67
|
+
{ text: 'accent', on: 'surface-container-low', what: 'Links på den lave flade' },
|
|
68
|
+
{ text: 'on-accent', on: 'accent', what: 'Teksten på knapperne' },
|
|
69
|
+
{ text: 'on-accent', on: 'accent-hover', what: 'Teksten på knapperne under musen' },
|
|
70
|
+
{ text: 'on-accent-container', on: 'accent-container', what: 'Teksten på den lyse accentfarve' },
|
|
71
|
+
{ text: 'on-secondary', on: 'secondary', what: 'Teksten på den sekundære farve' },
|
|
72
|
+
{ text: 'on-secondary-container', on: 'secondary-container', what: 'Teksten på den lyse sekundære farve' },
|
|
73
|
+
{ text: 'on-tertiary', on: 'tertiary', what: 'Teksten på den tertiære farve' },
|
|
74
|
+
{ text: 'on-tertiary-container', on: 'tertiary-container', what: 'Teksten på den lyse tertiære farve' },
|
|
75
|
+
{ text: 'error', on: 'bg', what: 'Fejl på baggrunden' },
|
|
76
|
+
{ text: 'error', on: 'surface-container-highest', what: 'Fejl i udfyldte felter' },
|
|
77
|
+
{ text: 'on-error', on: 'error', what: 'Teksten på fejlfarven' },
|
|
78
|
+
{ text: 'on-error-container', on: 'error-container', what: 'Teksten på den lyse fejlfarve' },
|
|
79
|
+
{ text: 'inverse-on-surface', on: 'inverse-surface', what: 'Teksten på den omvendte flade' },
|
|
80
|
+
{ text: 'inverse-primary', on: 'inverse-surface', what: 'Knapperne på den omvendte flade' },
|
|
81
|
+
];
|
|
82
|
+
|
|
83
|
+
/** The Material colour role of each colour, for dynamic colour: the page on Material's surface, cards a step
|
|
84
|
+
* lighter (white in light mode), the light boxes on a higher container, so text and links can be read on them at
|
|
85
|
+
* every contrast level, Material's surface containers, inverse colours, outline and error colours as themselves (the
|
|
86
|
+
* theme's parts take them, as Material 3's do), buttons and links in the primary colour, and the other colours of the scheme (Material 3's
|
|
87
|
+
* containers, secondary and tertiary: the FABs and their menus) as their own roles. */
|
|
88
|
+
export const colorRoles: ColorRoles = {
|
|
89
|
+
bg: 'surface',
|
|
90
|
+
surface: { light: 'surfaceContainerLowest', dark: 'surfaceContainerLow' },
|
|
91
|
+
'surface-container-lowest': 'surfaceContainerLowest',
|
|
92
|
+
'surface-container-low': 'surfaceContainerLow',
|
|
93
|
+
'surface-container': 'surfaceContainer',
|
|
94
|
+
'surface-container-high': 'surfaceContainerHigh',
|
|
95
|
+
'surface-container-highest': 'surfaceContainerHighest',
|
|
96
|
+
'inverse-surface': 'inverseSurface',
|
|
97
|
+
'inverse-on-surface': 'inverseOnSurface',
|
|
98
|
+
'inverse-primary': 'inversePrimary',
|
|
99
|
+
tint: 'surfaceContainerHigh',
|
|
100
|
+
ink: 'onSurface',
|
|
101
|
+
muted: 'onSurfaceVariant',
|
|
102
|
+
line: 'outlineVariant',
|
|
103
|
+
outline: 'outline',
|
|
104
|
+
accent: 'primary',
|
|
105
|
+
'accent-hover': 'primaryHover',
|
|
106
|
+
'on-accent': 'onPrimary',
|
|
107
|
+
'accent-container': 'primaryContainer',
|
|
108
|
+
'on-accent-container': 'onPrimaryContainer',
|
|
109
|
+
secondary: 'secondary',
|
|
110
|
+
'on-secondary': 'onSecondary',
|
|
111
|
+
'secondary-container': 'secondaryContainer',
|
|
112
|
+
'on-secondary-container': 'onSecondaryContainer',
|
|
113
|
+
tertiary: 'tertiary',
|
|
114
|
+
'on-tertiary': 'onTertiary',
|
|
115
|
+
'tertiary-container': 'tertiaryContainer',
|
|
116
|
+
'on-tertiary-container': 'onTertiaryContainer',
|
|
117
|
+
error: 'error',
|
|
118
|
+
'on-error': 'onError',
|
|
119
|
+
'error-container': 'errorContainer',
|
|
120
|
+
'on-error-container': 'onErrorContainer',
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/** The colours a site has until it is given its own ("Brug standardfarverne"): Material 3's scheme of a blue (tonal
|
|
124
|
+
* spot), as the app store's pictures are taken with (packages/editor/scripts/app-screenshots.mjs). */
|
|
125
|
+
export const defaultColors: Colors = dynamicColors({ source: '#1a73e8', variant: 'tonalSpot', contrast: 'standard' }, colorRoles);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// "Virksomheden": the business, in parts, each a screen of its own (CompanyForm.tsx): its phone, e-mail and address
|
|
2
|
+
// (src/data/contact.json) and its bank details (src/data/payment.json, under "Betaling", where a site may add its
|
|
3
|
+
// other ways to pay, and where the settings of the apps installed that are a way to pay come after, as MobilePay's),
|
|
4
|
+
// used all over the site. The logo and the icon are under "Udseende" (BrandForm.tsx); the link to
|
|
5
|
+
// the calendar in Calendly is the app Calendly's (src/apps/calendly/).
|
|
6
|
+
import { AddressBook, Bank, CreditCard } from '@phosphor-icons/react';
|
|
7
|
+
import type { Part } from '../src/schema';
|
|
8
|
+
import { bankFields, contactFields } from '@site/collections';
|
|
9
|
+
|
|
10
|
+
/** The parts of "Virksomheden", in their order, at #virksomheden/<id> ("Betaling"'s at #virksomheden/betaling/<id>). */
|
|
11
|
+
export const companyParts: Part[] = [
|
|
12
|
+
{ id: 'kontakt', label: 'Kontakt', icon: AddressBook, file: 'src/data/contact.json', fields: contactFields },
|
|
13
|
+
{
|
|
14
|
+
id: 'betaling',
|
|
15
|
+
label: 'Betaling',
|
|
16
|
+
icon: CreditCard,
|
|
17
|
+
apps: ['payment'],
|
|
18
|
+
parts: [{ id: 'bank', label: 'Bank', icon: Bank, file: 'src/data/payment.json', fields: bankFields }],
|
|
19
|
+
},
|
|
20
|
+
];
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
// What the editor edits on a site, and how: the one place the editor (packages/editor/, the package
|
|
2
|
+
// @morphemecms/cms) takes the site from, as `@site/editor`. This and the other files of defaults/ are a site's
|
|
3
|
+
// standard parts: a site has them unless its src/site/ has a file of the same name (siteFile in site/theme.mjs), which
|
|
4
|
+
// may take the standard one from @morphemecms/cms/defaults/<file> and add its own.
|
|
5
|
+
// collections the parts of the site and their fields (collections.ts)
|
|
6
|
+
// groups, lists, header, icons the start screen
|
|
7
|
+
// appearance the site's own parts under "Udseende", after the logo and icon ("Standardsider")
|
|
8
|
+
// companyParts, blockParts the screens under "Virksomheden" and "Blokke" (company.ts, blockTexts.ts)
|
|
9
|
+
// partScreens parts of the start screen that are screens with parts of their own (privacy.ts)
|
|
10
|
+
// seoParts the site's own parts under "Søgemaskineoptimering", after the redirects (internalLinks.ts)
|
|
11
|
+
// relationsOf, usedBy, keptBy what a field picks from, what cannot be deleted, and what cannot be saved so (rules.ts)
|
|
12
|
+
// siteProblems what is wrong by the site's own rules, before it is built (rules.ts)
|
|
13
|
+
// usesOf, countsOf the places that use an entry (a tag's "Bruges på") and their number at it in its list (rules.ts)
|
|
14
|
+
// testimonialsOf the testimonials the blocks show (rules.ts)
|
|
15
|
+
// siteOf what the blocks' previews show from the rest of the site (sitedata.ts)
|
|
16
|
+
// fixedPages, everyFixedPage how the front page's sections look in the editor (the theme's editor/previews.tsx)
|
|
17
|
+
// sectionLooks, headingLooks how the text of the front page looks in the editor (the theme's editor/looks.mjs)
|
|
18
|
+
// standardPages, standardPaths, frontLeads the front page, the blog page, the 404 page and the others, and how the front page is
|
|
19
|
+
// written (standardPages.ts)
|
|
20
|
+
// colorFields, colorPairs, colorRoles, defaultColors the colours under "Farver" and their Material roles (colors.ts)
|
|
21
|
+
// siteName the title of the start screen and the way back to it
|
|
22
|
+
// sharing what a page shared on social media shows when it has nothing of its own (Base.astro)
|
|
23
|
+
import {
|
|
24
|
+
Browser,
|
|
25
|
+
Buildings,
|
|
26
|
+
Certificate,
|
|
27
|
+
ChartLineUp,
|
|
28
|
+
DeviceMobile,
|
|
29
|
+
FileText,
|
|
30
|
+
House,
|
|
31
|
+
FolderSimple,
|
|
32
|
+
List as ListIcon,
|
|
33
|
+
MagnifyingGlass,
|
|
34
|
+
Megaphone,
|
|
35
|
+
ListChecks,
|
|
36
|
+
Newspaper,
|
|
37
|
+
PaintBrushBroad,
|
|
38
|
+
Palette,
|
|
39
|
+
PuzzlePiece,
|
|
40
|
+
Shapes,
|
|
41
|
+
ShieldCheck,
|
|
42
|
+
Signpost,
|
|
43
|
+
Smiley,
|
|
44
|
+
SlidersHorizontal,
|
|
45
|
+
SquareHalfBottom,
|
|
46
|
+
SquaresFour,
|
|
47
|
+
Sticker,
|
|
48
|
+
Storefront,
|
|
49
|
+
Swatches,
|
|
50
|
+
Tag,
|
|
51
|
+
ToggleRight,
|
|
52
|
+
WaveSine,
|
|
53
|
+
Wrench,
|
|
54
|
+
type Icon,
|
|
55
|
+
} from '@phosphor-icons/react';
|
|
56
|
+
import type { Part, PartScreen } from '../src/schema';
|
|
57
|
+
import { site } from '../site/site';
|
|
58
|
+
import { privacy } from '@site/privacy';
|
|
59
|
+
import { internalLinks } from '@site/internalLinks';
|
|
60
|
+
|
|
61
|
+
import { config } from '@site/config';
|
|
62
|
+
export { config };
|
|
63
|
+
import { collections, standardPageFieldsOf } from '@site/collections';
|
|
64
|
+
import { drawActionBar, drawPopup } from '@site/popup';
|
|
65
|
+
|
|
66
|
+
// A pop-up and an action bar ("Promovering") drawn beside their form (popup.tsx), and an app's kind with a
|
|
67
|
+
// part in the pop-up's box (Mailchimp's signup: drawPart; an app's other kinds have their own drawing). Set here, as
|
|
68
|
+
// collections.ts is also read by packages/editor/scripts/editor-roundtrip.mjs in plain Node, which cannot read JSX.
|
|
69
|
+
const promotions = collections.find((c) => c.id === 'popups');
|
|
70
|
+
if (promotions?.kind === 'folder') {
|
|
71
|
+
promotions.draws = { standard: (values, data) => drawPopup(values, data), bookingbar: drawActionBar };
|
|
72
|
+
promotions.drawPart = drawPopup;
|
|
73
|
+
}
|
|
74
|
+
export { collections };
|
|
75
|
+
export { companyParts } from '@site/company';
|
|
76
|
+
export { blockParts } from '@site/blockTexts';
|
|
77
|
+
export { countsOf, keptBy, relationsOf, siteProblems, testimonialsOf, usedBy, usesOf, whatIsAt, type Use } from '@site/rules';
|
|
78
|
+
export { siteOf, type SiteData } from '@site/sitedata';
|
|
79
|
+
export { everyFixedPage, fixedPages, Texts, type Props } from '@theme/editor/previews';
|
|
80
|
+
export { HEADINGS as headingLooks, LOOKS as sectionLooks } from '@theme/editor/looks.mjs';
|
|
81
|
+
export { frontLeads, standardPages, standardPaths, type StandardPage } from '@site/standardPages';
|
|
82
|
+
export { colorFields, colorPairs, colorRoles, defaultColors } from '@site/colors';
|
|
83
|
+
|
|
84
|
+
/** Parts of the start screen that are a screen with parts, each a screen of its own: "Privatliv" (privacy.ts), and
|
|
85
|
+
* "Analytics" and "Promovering" with the settings of the apps installed that measure (Google Analytics, Google Ads,
|
|
86
|
+
* Google Tag Manager) and of those that add a kind of promotion (Calendly, Mailchimp), by their kind
|
|
87
|
+
* (AppDefinition.category, the app store's); the apps' own pages under "Apps" only install them. */
|
|
88
|
+
export const partScreens: PartScreen[] = [
|
|
89
|
+
{ id: 'maaling', label: 'Analytics', parts: [], apps: ['analytics'] },
|
|
90
|
+
{ id: 'promovering', label: 'Promovering', parts: [], apps: ['booking', 'newsletter'] },
|
|
91
|
+
privacy,
|
|
92
|
+
];
|
|
93
|
+
|
|
94
|
+
/** The site's own parts under "Søgemaskineoptimering", each a screen of its own at #seo/<id>, after the editor's
|
|
95
|
+
* "Videresendelser": "Interne links" (internalLinks.ts). */
|
|
96
|
+
export const seoParts = [internalLinks];
|
|
97
|
+
|
|
98
|
+
/** The title of the start screen, and of the way back to it on every other screen. */
|
|
99
|
+
export const siteName = site.name;
|
|
100
|
+
|
|
101
|
+
/** What a page shared on social media shows when it has nothing of its own (Base.astro): the site's name after its
|
|
102
|
+
* title, its description and its picture (the owner's, config.picture). For the preview under "Sociale medier" (sharedAs in seo.ts). */
|
|
103
|
+
export const sharing = { name: site.name, description: site.description, picture: site.portrait };
|
|
104
|
+
|
|
105
|
+
/** The icon of each part on the start screen and in the sidebar, by its id. */
|
|
106
|
+
export const icons: Record<string, Icon> = {
|
|
107
|
+
blog: Newspaper,
|
|
108
|
+
pages: FileText,
|
|
109
|
+
header: Browser,
|
|
110
|
+
menu: ListIcon,
|
|
111
|
+
mobilmenu: DeviceMobile,
|
|
112
|
+
kategorier: Tag,
|
|
113
|
+
popups: Megaphone,
|
|
114
|
+
virksomheden: Buildings,
|
|
115
|
+
blokke: SquaresFour,
|
|
116
|
+
filer: FolderSimple,
|
|
117
|
+
privatliv: ShieldCheck,
|
|
118
|
+
maaling: ChartLineUp,
|
|
119
|
+
promovering: SlidersHorizontal,
|
|
120
|
+
lister: ListChecks,
|
|
121
|
+
footer: SquareHalfBottom,
|
|
122
|
+
seo: MagnifyingGlass,
|
|
123
|
+
videresendelser: Signpost,
|
|
124
|
+
udseende: PaintBrushBroad,
|
|
125
|
+
blokvalg: ToggleRight,
|
|
126
|
+
apps: PuzzlePiece,
|
|
127
|
+
appstore: Storefront,
|
|
128
|
+
avanceret: Wrench,
|
|
129
|
+
licenser: Certificate,
|
|
130
|
+
// The screens under "Udseende" (Library.tsx Theme).
|
|
131
|
+
temaer: Swatches,
|
|
132
|
+
farver: Palette,
|
|
133
|
+
logo: Sticker,
|
|
134
|
+
ikonpakker: Smiley,
|
|
135
|
+
bevaegelse: WaveSine,
|
|
136
|
+
dele: Shapes,
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// The parts of the site on the start screen, in groups: the content the owner writes and uploads (the
|
|
140
|
+
// pages, the blog, its tags, the pop-ups and the files), what is on every page (the
|
|
141
|
+
// header with the menus, the footer and "Virksomheden": name, contact and booking), the blocks (their
|
|
142
|
+
// shared texts, "Lister", the testimonials and prices they show, which the standard blocks and the apps bring, and
|
|
143
|
+
// "Blokindstillinger", which of them can be put in); the settings of the whole site are on a page of their own (settings).
|
|
144
|
+
// Each is a collection (collections.ts), except "maaling", "promovering" and "privatliv" (partScreens) and the editor's own "virksomheden" (companyParts), "blokke"
|
|
145
|
+
// (blockParts), "filer" (the pictures, PDFs, videos and zip files), "header", "lister", "udseende" (the theme, the colours, the logo
|
|
146
|
+
// and icon, the standard pages (appearance) and the editor's parts: Colors.tsx, BrandForm.tsx and Parts.tsx), "blokvalg" (which blocks can be put in, BlockSettings.tsx), "apps"
|
|
147
|
+
// (the apps that come with the site, src/apps/, AppList.tsx) and "seo" (the redirects, Redirects.tsx, and seoParts). The editor shows
|
|
148
|
+
// each group's parts A–Å by their names in its language (partsIn in Library.tsx), whatever the order here.
|
|
149
|
+
export const groups: { title: string; ids: string[] }[] = [
|
|
150
|
+
{ title: 'Indhold', ids: ['pages', 'blog', 'kategorier', 'popups', 'filer'] },
|
|
151
|
+
{ title: 'På alle sider', ids: ['header', 'footer', 'virksomheden'] },
|
|
152
|
+
{ title: 'Blokke', ids: ['blokke', 'lister', 'blokvalg'] },
|
|
153
|
+
];
|
|
154
|
+
|
|
155
|
+
/** The settings of the whole site, not on the start screen but on "Indstillinger" (#indstillinger, Library.tsx
|
|
156
|
+
* Settings), which the gear in the top bar opens (Screen.tsx SettingsLink); A–Å as a group's. */
|
|
157
|
+
export const settings: string[] = ['udseende', 'apps', 'appstore', 'maaling', 'promovering', 'privatliv', 'seo', 'avanceret', 'licenser'];
|
|
158
|
+
|
|
159
|
+
/** The site's own short lists, on a screen of their own under "Lister" (#lister), with those the standard blocks
|
|
160
|
+
* bring ("Udtalelser") and the apps (their lists.ts). */
|
|
161
|
+
export const lists: string[] = [];
|
|
162
|
+
|
|
163
|
+
/** What is in the header on every page, on a screen of its own under "Header" (#header). */
|
|
164
|
+
export const header = ['menu', 'mobilmenu'];
|
|
165
|
+
|
|
166
|
+
/** The site's own parts under "Udseende" (#udseende), after the logo and icon, each a screen of its own at #udseende/<id>:
|
|
167
|
+
* "Standardsider", which pages are the front page, the blog page, the 404 page and the contact page, as a list
|
|
168
|
+
* (standardPageFieldsOf in collections.ts; the privacy policy and the cookie policy are under "Privatliv", privacy.ts). */
|
|
169
|
+
export const appearance: Part[] = [
|
|
170
|
+
{
|
|
171
|
+
id: 'standardsider',
|
|
172
|
+
label: 'Standardsider',
|
|
173
|
+
icon: House,
|
|
174
|
+
file: config.standardPages,
|
|
175
|
+
fields: standardPageFieldsOf('front', 'blog', 'notFound', 'contact'),
|
|
176
|
+
rows: true,
|
|
177
|
+
},
|
|
178
|
+
];
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// "Interne links" under "Søgemaskineoptimering": the keywords of the pages, the posts and the blog page become links
|
|
2
|
+
// to them when the site is built (packages/editor/site/autolinks.mjs), in src/data/internal-links.json: whether they do and how many
|
|
3
|
+
// per page; under them the list of the keywords (`below`, Keywords.tsx in the editor).
|
|
4
|
+
import { LinkSimple } from '@phosphor-icons/react';
|
|
5
|
+
import type { Part } from '../src/schema';
|
|
6
|
+
|
|
7
|
+
export const internalLinks: Part = {
|
|
8
|
+
id: 'interne-links',
|
|
9
|
+
label: 'Interne links',
|
|
10
|
+
icon: LinkSimple,
|
|
11
|
+
file: 'src/data/internal-links.json',
|
|
12
|
+
defaults: { enabled: true, maxPerPage: 8 },
|
|
13
|
+
below: 'keywords',
|
|
14
|
+
fields: [
|
|
15
|
+
{
|
|
16
|
+
name: 'enabled',
|
|
17
|
+
label: 'Aktiveret',
|
|
18
|
+
type: 'boolean',
|
|
19
|
+
toggle: ['Til', 'Fra'],
|
|
20
|
+
hint: 'Søgeordene på siderne og blogindlæggene bliver links til dem, når hjemmesiden opdateres.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'maxPerPage',
|
|
24
|
+
label: 'Antal links (pr. side)',
|
|
25
|
+
type: 'number',
|
|
26
|
+
required: true,
|
|
27
|
+
hint: 'Højst så mange automatiske links på en side eller i et indlæg.',
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// What a button can open of a promotion ("Indhold" › "Promovering"), by its kind (Opens in
|
|
2
|
+
// packages/editor/src/schema.ts): the list's own (the pop-up opens itself; the contact bar nothing,
|
|
3
|
+
// FolderCollection.opens in collections.ts) and the apps' (AppKind.opens: Calendly's booking sheet itself, as
|
|
4
|
+
// "Book en tid" does). For a button's choices in the editor (rules.ts) and its link on the site
|
|
5
|
+
// (standard.ts).
|
|
6
|
+
import { appIdOf, type AppDefinition } from '../src/apps';
|
|
7
|
+
import type { FolderCollection, Opens } from '../src/schema';
|
|
8
|
+
import { collections } from '@site/collections';
|
|
9
|
+
|
|
10
|
+
// Only the apps' index.ts: what a button needs, without their blocks (apps.ts loads those too).
|
|
11
|
+
const appFiles = import.meta.glob<{ default: AppDefinition }>('/src/apps/*/index.ts', { eager: true });
|
|
12
|
+
|
|
13
|
+
/** The list's own kinds that a button can open. */
|
|
14
|
+
const ownOpens = (collections.find((c) => c.id === 'popups') as FolderCollection).opens ?? {};
|
|
15
|
+
|
|
16
|
+
/** What a button opens of a promotion of this kind (its `type`; without one, the pop-up), or undefined for nothing. */
|
|
17
|
+
export const opensOf = (kind: string | undefined): Opens | undefined =>
|
|
18
|
+
ownOpens[kind || 'standard'] ?? Object.entries(appFiles).find(([path]) => appIdOf(path) === kind)?.[1].default.kinds?.popups?.opens;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// The site's own kinds of promotion drawn beside their form in the editor. A pop-up ("Promovering", the
|
|
2
|
+
// kind "Pop op-vindue") as it looks on the site: the theme's box (PopupView.tsx, the same as Popup.astro shows on the
|
|
3
|
+
// site) with the picture, heading and text, and its button: "Book en tid", "Ring" with the number, a page by its name,
|
|
4
|
+
// or "Download PDF", with the button's own text when it has one; and an app's kind with a part in it (Mailchimp's
|
|
5
|
+
// signup, drawPart: FolderCollection.drawPart). Links and buttons are only drawn.
|
|
6
|
+
import type { BlockData } from '../src/blocks';
|
|
7
|
+
import type { KindPart } from '../src/schema';
|
|
8
|
+
import { buttonsOf } from '../src/standard/buttons/view';
|
|
9
|
+
import { shownPicture } from '../src/standard/view';
|
|
10
|
+
import PopupView from '@theme/components/PopupView';
|
|
11
|
+
import Button from '@theme/ui/Button';
|
|
12
|
+
import Toolbar from '@theme/ui/Toolbar';
|
|
13
|
+
import List, { ListItem } from '@theme/ui/List';
|
|
14
|
+
import type { PopupButtonView } from '@theme/components/PopupButton';
|
|
15
|
+
import { siteT } from '../src/i18n';
|
|
16
|
+
|
|
17
|
+
// Its button, as the editor has the site's targets and pages.
|
|
18
|
+
function buttonOf(p: Record<string, any>, data: BlockData): PopupButtonView | undefined {
|
|
19
|
+
const own = String(p.label ?? '').trim();
|
|
20
|
+
if (p.button === 'file') return { file: { href: '', label: own || 'Download PDF' } };
|
|
21
|
+
if (p.button !== 'booking' && p.button !== 'phone' && p.button !== 'page') return undefined;
|
|
22
|
+
const icon = p.button === 'phone' ? 'phone' : 'arrow-right';
|
|
23
|
+
return { buttons: buttonsOf([{ to: p.button, label: own, href: p.href, kind: 'filled', icon }], data) };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** A pop-up, of the list's own kind or (`part`) an app's with its part under the text. */
|
|
27
|
+
export function drawPopup(p: Record<string, any>, data: BlockData, part?: KindPart) {
|
|
28
|
+
const popup = {
|
|
29
|
+
slug: 'preview',
|
|
30
|
+
image: p.image ? shownPicture(p.image) : undefined,
|
|
31
|
+
heading: String(p.heading ?? ''),
|
|
32
|
+
text: String(p.text ?? '')
|
|
33
|
+
.split(/\n\s*\n/)
|
|
34
|
+
.map((t) => t.trim())
|
|
35
|
+
.filter(Boolean),
|
|
36
|
+
button: buttonOf(p, data),
|
|
37
|
+
};
|
|
38
|
+
return (
|
|
39
|
+
<div className="not-prose mx-auto max-w-md">
|
|
40
|
+
<PopupView popup={popup} Part={part?.View} part={part?.viewOf(p, data)} />
|
|
41
|
+
</div>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// An action bar ("Promovering", the kind "Handlingslinje") as it looks on a phone (ActionBar.astro in the
|
|
46
|
+
// theme): its one or two items side by side, each a text (a list row of two lines: its heading over its text) or a button, the first button filled, the buttons with their own texts or those of their target
|
|
47
|
+
// ("Book en tid", "Ring"), of what they open (a pop-up's heading, an app's booking sheet: "Book en tid") or of their
|
|
48
|
+
// page; the calendar for what books, the phone for "Ring", the arrow after a page or a pop-up.
|
|
49
|
+
export function drawActionBar(p: Record<string, any>, data: BlockData) {
|
|
50
|
+
const pageName = (href: string) =>
|
|
51
|
+
[...(data.relations.fixed ?? []), ...(data.relations.pages ?? [])].find((o) => o.value === href)?.label;
|
|
52
|
+
const buttons = (
|
|
53
|
+
(p.buttons ?? []) as { type?: string; heading?: string; text?: string; label?: string; to?: string; href?: string; open?: string }[]
|
|
54
|
+
).slice(0, 2);
|
|
55
|
+
if (!buttons.length) return null;
|
|
56
|
+
const first = buttons.findIndex((b) => b.type !== 'text');
|
|
57
|
+
return (
|
|
58
|
+
<Toolbar label={siteT.theme.actions} className="theme-action-bar-drawn not-prose">
|
|
59
|
+
{buttons.map((b, i) => {
|
|
60
|
+
if (b.type === 'text')
|
|
61
|
+
return (
|
|
62
|
+
<List key={i} dividers="none" className="theme-action-bar-text">
|
|
63
|
+
<ListItem headline={String(b.heading ?? '').trim()} supporting={String(b.text ?? '').trim() || undefined} />
|
|
64
|
+
</List>
|
|
65
|
+
);
|
|
66
|
+
const own = String(b.label ?? '').trim();
|
|
67
|
+
const opens = b.to === 'promotion' ? data.relations.promotions?.find((o) => o.value === b.open) : undefined;
|
|
68
|
+
// What it does: "Book en tid" also for a promotion that stands for it (an app's booking sheet).
|
|
69
|
+
const to = opens?.as ?? b.to;
|
|
70
|
+
const text =
|
|
71
|
+
to === 'phone'
|
|
72
|
+
? own || data.site.labels.call
|
|
73
|
+
: to === 'page'
|
|
74
|
+
? own || pageName(b.href ?? '') || ''
|
|
75
|
+
: to === 'promotion'
|
|
76
|
+
? own || opens?.text || ''
|
|
77
|
+
: own || data.site.labels.book;
|
|
78
|
+
const arrow = to === 'page' || to === 'promotion';
|
|
79
|
+
return (
|
|
80
|
+
<Button
|
|
81
|
+
key={i}
|
|
82
|
+
href=""
|
|
83
|
+
kind={i === first ? 'filled' : 'outlined'}
|
|
84
|
+
icon={arrow ? undefined : to === 'phone' ? 'phone' : 'calendar-blank'}
|
|
85
|
+
trailingIcon={arrow ? 'arrow-right' : undefined}
|
|
86
|
+
>
|
|
87
|
+
{text}
|
|
88
|
+
</Button>
|
|
89
|
+
);
|
|
90
|
+
})}
|
|
91
|
+
</Toolbar>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// "Privatliv": what the site asks and tells its visitors about their data, as screens of their own (CompanyForm.tsx),
|
|
2
|
+
// at #privatliv/<id>: the cookie banner (src/data/cookies.json, read by packages/editor/theme/components/CookieConsent.astro),
|
|
3
|
+
// "Privatlivssider", which pages are the privacy policy and the cookie policy, as a list like "Standardsider" (in the
|
|
4
|
+
// same file, config.standardPages; standardPages.ts), and "Samtykker", the visitors' answers in the banner.
|
|
5
|
+
import { Cookie, FileText, ListChecks } from '@phosphor-icons/react';
|
|
6
|
+
import type { CookieCategory } from '../lib/cookieCategories.mjs';
|
|
7
|
+
import type { Field, PartScreen } from '../src/schema';
|
|
8
|
+
import { standardPageFieldsOf } from '@site/collections';
|
|
9
|
+
import { config } from '@site/config';
|
|
10
|
+
|
|
11
|
+
/** The fields of a category of cookies in the banner: its name and what it is for. */
|
|
12
|
+
function categoryFields(category: CookieCategory, place: string, hint = 'Vises, når en app beder om den.'): Field[] {
|
|
13
|
+
return [
|
|
14
|
+
{ name: category, label: `Navn (${place})`, type: 'string', required: true, max: 30, hint },
|
|
15
|
+
{ name: `${category}Text`, label: `Tekst (${place})`, type: 'text', required: true },
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const privacy: PartScreen = {
|
|
20
|
+
id: 'privatliv',
|
|
21
|
+
label: 'Privatliv',
|
|
22
|
+
parts: [
|
|
23
|
+
{
|
|
24
|
+
id: 'cookiebanner',
|
|
25
|
+
label: 'Cookiebanner',
|
|
26
|
+
icon: Cookie,
|
|
27
|
+
file: 'src/data/cookies.json',
|
|
28
|
+
fields: [
|
|
29
|
+
{
|
|
30
|
+
name: 'enabled',
|
|
31
|
+
label: 'Aktiveret',
|
|
32
|
+
type: 'boolean',
|
|
33
|
+
toggle: ['Til', 'Fra'],
|
|
34
|
+
hint: 'Når banneret er fra, er der ingen måling eller annoncer.',
|
|
35
|
+
edit: { to: 'src/content/pages/privatlivspolitik.md', text: 'Rediger privatlivspolitik' },
|
|
36
|
+
},
|
|
37
|
+
{ name: 'heading', label: 'Overskrift', type: 'string', required: true },
|
|
38
|
+
{ name: 'text', label: 'Tekst', type: 'text', required: true },
|
|
39
|
+
{
|
|
40
|
+
name: 'more',
|
|
41
|
+
label: 'Linktekst',
|
|
42
|
+
type: 'string',
|
|
43
|
+
required: true,
|
|
44
|
+
hint: 'Linket går til cookiepolitikken.',
|
|
45
|
+
edit: { to: 'privatliv/privatlivssider', text: 'Rediger privatlivssider' },
|
|
46
|
+
},
|
|
47
|
+
{ name: 'no', label: 'Knaptekst (nej)', type: 'string', required: true, max: 20 },
|
|
48
|
+
{ name: 'yes', label: 'Knaptekst (ja)', type: 'string', required: true, max: 20 },
|
|
49
|
+
{ name: 'choose', label: 'Knaptekst (avanceret)', type: 'string', required: true, max: 30 },
|
|
50
|
+
{ name: 'save', label: 'Knaptekst (gem valg)', type: 'string', required: true, max: 30 },
|
|
51
|
+
{
|
|
52
|
+
name: 'consentId',
|
|
53
|
+
label: 'Tekst (samtykke-id)',
|
|
54
|
+
type: 'string',
|
|
55
|
+
required: true,
|
|
56
|
+
max: 30,
|
|
57
|
+
hint: 'Vises med den besøgendes id efter et svar.',
|
|
58
|
+
},
|
|
59
|
+
// Each category of cookies, with what it is for, when the banner's "Avanceret" shows them (the necessary ones
|
|
60
|
+
// always, the others when an app asks about them, packages/editor/site/consent.ts).
|
|
61
|
+
...categoryFields('necessary', 'nødvendige', 'Vises altid; de kan ikke slås fra.'),
|
|
62
|
+
...categoryFields('preferences', 'præferencer'),
|
|
63
|
+
...categoryFields('statistics', 'statistik'),
|
|
64
|
+
...categoryFields('marketing', 'marketing'),
|
|
65
|
+
...categoryFields('targeting', 'målrettede annoncer'),
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 'privatlivssider',
|
|
70
|
+
label: 'Privatlivssider',
|
|
71
|
+
icon: FileText,
|
|
72
|
+
file: config.standardPages,
|
|
73
|
+
fields: standardPageFieldsOf('privacy', 'cookies'),
|
|
74
|
+
rows: true,
|
|
75
|
+
},
|
|
76
|
+
// The visitors' answers in the banner, kept by the Worker (packages/editor/worker/consent.js): the editor's own screen (Consents.tsx).
|
|
77
|
+
{ id: 'samtykker', label: 'Samtykker', icon: ListChecks, opens: 'consents' },
|
|
78
|
+
],
|
|
79
|
+
};
|