dineway 0.1.48 → 0.2.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/dist/{activity-events-C9u37D5z.mjs → activity-events-y6eT8UW6.mjs} +6 -38
- package/dist/actor-CrObAPV0.mjs +37 -0
- package/dist/after-BfniwgIf.mjs +9 -0
- package/dist/{allowed-origins-DhipQNLb.mjs → allowed-origins-_oeyP6x-.mjs} +1 -1
- package/dist/api/route-utils.d.mts +10 -10
- package/dist/api/route-utils.mjs +17 -14
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +5 -4
- package/dist/{api-Eiy8_zVZ.mjs → api-ByrU2q-Z.mjs} +61 -37
- package/dist/{api-tokens-DtvdtIkm.mjs → api-tokens-CjVMQT-X.mjs} +6 -2
- package/dist/{apply-CX3no7XE.mjs → apply-bZswmZPm.mjs} +117 -77
- package/dist/astro/image-endpoint.d.mts +7 -0
- package/dist/astro/image-endpoint.mjs +54 -0
- package/dist/astro/index.d.mts +35 -11
- package/dist/astro/index.mjs +157 -23
- package/dist/astro/integration/shims/use-sync-external-store-with-selector.js +71 -0
- package/dist/astro/integration/shims/use-sync-external-store.js +1 -0
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.mjs +42 -24
- package/dist/astro/middleware/redirect.mjs +14 -5
- package/dist/astro/middleware/request-context.mjs +9 -6
- package/dist/astro/middleware/seed.d.mts +1 -1
- package/dist/astro/middleware/seed.mjs +2 -2
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.mjs +334 -193
- package/dist/astro/routes/admin.astro +6 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -6
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -6
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
- package/dist/astro/routes/api/admin/briefing.mjs +22 -18
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -8
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -8
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -8
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +18 -15
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +18 -15
- package/dist/astro/routes/api/admin/bylines/index.mjs +18 -15
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +15 -13
- package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -6
- package/dist/astro/routes/api/admin/comments/bulk.mjs +12 -10
- package/dist/astro/routes/api/admin/comments/counts.mjs +7 -6
- package/dist/astro/routes/api/admin/comments/index.mjs +12 -10
- package/dist/astro/routes/api/admin/context/_id_/history.mjs +27 -25
- package/dist/astro/routes/api/admin/context/_id_/index.mjs +27 -25
- package/dist/astro/routes/api/admin/context/_id_/review.mjs +32 -29
- package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +32 -29
- package/dist/astro/routes/api/admin/context/diff.mjs +31 -28
- package/dist/astro/routes/api/admin/context/index.mjs +32 -29
- package/dist/astro/routes/api/admin/context/stale.mjs +31 -28
- package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +27 -25
- package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +31 -28
- package/dist/astro/routes/api/admin/hitl-requests/index.mjs +31 -28
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +28 -26
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +56 -52
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +56 -52
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +48 -44
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +54 -50
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +53 -49
- package/dist/astro/routes/api/admin/plugins/index.mjs +48 -44
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +47 -43
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +53 -49
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +47 -43
- package/dist/astro/routes/api/admin/plugins/updates.mjs +47 -43
- package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +6 -6
- package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +32 -28
- package/dist/astro/routes/api/admin/review-requests/index.mjs +11 -10
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +47 -43
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +47 -43
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -7
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
- package/dist/astro/routes/api/admin/users/index.mjs +7 -6
- package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
- package/dist/astro/routes/api/auth/invite/complete.mjs +12 -11
- package/dist/astro/routes/api/auth/invite/index.mjs +9 -8
- package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -10
- package/dist/astro/routes/api/auth/logout.mjs +2 -2
- package/dist/astro/routes/api/auth/magic-link/send.mjs +11 -10
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
- package/dist/astro/routes/api/auth/me.mjs +10 -9
- package/dist/astro/routes/api/auth/mode.mjs +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -5
- package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/options.mjs +12 -11
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -9
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -10
- package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -10
- package/dist/astro/routes/api/auth/setup-token/index.mjs +6 -6
- package/dist/astro/routes/api/auth/setup-token/verify.mjs +2 -2
- package/dist/astro/routes/api/auth/signup/complete.mjs +12 -11
- package/dist/astro/routes/api/auth/signup/request.mjs +11 -10
- package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +16 -14
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.d.mts +8 -0
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +160 -0
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +12 -11
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +17 -15
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/index.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -6
- package/dist/astro/routes/api/dashboard.mjs +10 -9
- package/dist/astro/routes/api/dev/emails.mjs +2 -2
- package/dist/astro/routes/api/health.mjs +1 -1
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +23 -11
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +9 -6
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +19 -1
- package/dist/astro/routes/api/import/wordpress/execute.mjs +85 -38
- package/dist/astro/routes/api/import/wordpress/media.d.mts +13 -1
- package/dist/astro/routes/api/import/wordpress/media.mjs +20 -14
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +36 -33
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +18 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +121 -101
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -13
- package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +56 -2
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +284 -56
- package/dist/astro/routes/api/manifest.mjs +14 -5
- package/dist/astro/routes/api/mcp.mjs +266 -70
- package/dist/astro/routes/api/media/_id_/confirm.mjs +39 -11
- package/dist/astro/routes/api/media/_id_.mjs +11 -7
- package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
- package/dist/astro/routes/api/media/providers/index.mjs +2 -2
- package/dist/astro/routes/api/media/upload-url.mjs +12 -11
- package/dist/astro/routes/api/media.mjs +28 -35
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +32 -29
- package/dist/astro/routes/api/menus/_name_/items.mjs +32 -29
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +32 -29
- package/dist/astro/routes/api/menus/_name_/translations.mjs +32 -29
- package/dist/astro/routes/api/menus/_name_.mjs +32 -29
- package/dist/astro/routes/api/menus/index.mjs +32 -29
- package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
- package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
- package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
- package/dist/astro/routes/api/oauth/register.mjs +4 -4
- package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
- package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
- package/dist/astro/routes/api/oauth/token.mjs +6 -6
- package/dist/astro/routes/api/openapi.json.mjs +4 -3
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +30 -30
- package/dist/astro/routes/api/redirects/404s/index.mjs +12 -11
- package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -11
- package/dist/astro/routes/api/redirects/_id_.mjs +33 -30
- package/dist/astro/routes/api/redirects/index.mjs +33 -30
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +48 -44
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +48 -44
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +48 -44
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +48 -44
- package/dist/astro/routes/api/schema/collections/index.mjs +48 -44
- package/dist/astro/routes/api/schema/index.mjs +13 -14
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +47 -43
- package/dist/astro/routes/api/schema/orphans/index.mjs +47 -43
- package/dist/astro/routes/api/search/enable.mjs +12 -11
- package/dist/astro/routes/api/search/index.mjs +11 -10
- package/dist/astro/routes/api/search/rebuild.mjs +12 -11
- package/dist/astro/routes/api/search/stats.mjs +7 -7
- package/dist/astro/routes/api/search/suggest.mjs +11 -10
- package/dist/astro/routes/api/sections/_slug_.mjs +32 -29
- package/dist/astro/routes/api/sections/index.mjs +32 -29
- package/dist/astro/routes/api/settings/email.mjs +4 -4
- package/dist/astro/routes/api/settings.mjs +32 -29
- package/dist/astro/routes/api/setup/admin-verify.mjs +14 -13
- package/dist/astro/routes/api/setup/admin.mjs +12 -11
- package/dist/astro/routes/api/setup/dev-bypass.mjs +32 -26
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +30 -26
- package/dist/astro/routes/api/setup/status.mjs +3 -3
- package/dist/astro/routes/api/snapshot.mjs +9 -8
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +35 -32
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +35 -32
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +35 -32
- package/dist/astro/routes/api/taxonomies/index.mjs +35 -32
- package/dist/astro/routes/api/themes/preview.mjs +6 -6
- package/dist/astro/routes/api/typegen.mjs +4 -4
- package/dist/astro/routes/api/well-known/auth.mjs +3 -3
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +31 -28
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +32 -29
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +32 -29
- package/dist/astro/routes/api/widget-areas/_name_.mjs +29 -27
- package/dist/astro/routes/api/widget-areas/index.mjs +32 -29
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +9 -8
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +24 -15
- package/dist/astro/routes/sitemap.xml.mjs +10 -9
- package/dist/astro/session-driver.d.mts +1 -1
- package/dist/astro/session-driver.mjs +3 -3
- package/dist/astro/types.d.mts +21 -13
- package/dist/{audit-D1cbG7xH.mjs → audit-ByVKIwWF.mjs} +1 -1
- package/dist/auth/providers/github.d.mts +1 -1
- package/dist/auth/providers/google.d.mts +1 -1
- package/dist/{auth-control-guard-Dr14I98m.mjs → auth-control-guard-CqeUmQsv.mjs} +1 -1
- package/dist/{authorize-BLO0m7fW.mjs → authorize-CcBxcHtz.mjs} +1 -1
- package/dist/{briefing-CObXGOGz.mjs → briefing-BJaJI8dm.mjs} +2 -1
- package/dist/{briefing-gKWiGLt1.mjs → briefing-CawZ59CY.mjs} +90 -28
- package/dist/bundle-7C_DpkEq.mjs +602 -0
- package/dist/{byline-1ntDwv8c.mjs → byline-e51-fWRs.mjs} +30 -62
- package/dist/{byline-fields-BX7rWKNU.d.mts → byline-fields-CUvbslGc.d.mts} +49 -6
- package/dist/{byline-fields-C9_iaPaM.mjs → byline-fields-D-N5qVIG.mjs} +1 -1
- package/dist/{byline-fields-B-ZkoVft.mjs → byline-fields-DOJO16Gm.mjs} +3 -3
- package/dist/{byline-registry-CUSvkasJ.mjs → byline-registry-87nNnYl4.mjs} +2 -2
- package/dist/{bylines-bC15ZqAv.mjs → bylines-CMQNCNFh.mjs} +9 -3
- package/dist/{bylines-DtxChhN_.mjs → bylines-y4LO-dTj.mjs} +5 -5
- package/dist/{cache-DbKyr60Q.mjs → cache-C-FNTFYK.mjs} +2 -2
- package/dist/{chunks-C5zp2xir.mjs → chunks-CxBt-GxR.mjs} +1 -1
- package/dist/cli/index.mjs +820 -1276
- package/dist/client/external-auth-headers.d.mts +1 -1
- package/dist/client/index.d.mts +1 -1
- package/dist/client/index.mjs +2 -1
- package/dist/{comment-CXDOQ93N.mjs → comment-DlA4iChg.mjs} +13 -3
- package/dist/comment-reaction-DfFao1ST.mjs +58 -0
- package/dist/{comments-hK-rdzJ9.mjs → comments-DApFGMsP.mjs} +1 -1
- package/dist/{content-QaryevFO.mjs → content-Bh4BDjv8.mjs} +51 -34
- package/dist/content-refresh-CgutSUfO.mjs +1576 -0
- package/dist/{context-CoYb_fvK.mjs → context-C5W3G18y.mjs} +111 -50
- package/dist/{context-DBL1ib4v.mjs → context-CK4ym2Sf.mjs} +2 -2
- package/dist/{context-route-helpers-CYQVmbIm.mjs → context-route-helpers-MASyGgWf.mjs} +2 -1
- package/dist/{cron-DxCAU_Sn.mjs → cron-cKcNTix_.mjs} +7 -3
- package/dist/{dashboard-DNlqsknJ.mjs → dashboard-DQkVT7Ei.mjs} +4 -4
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +1 -1
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{device-flow-DygsFPGL.mjs → device-flow-BnqRH-T9.mjs} +5 -5
- package/dist/{placeholder-BDo81Is5.mjs → enrich-DIFIFA8O.mjs} +36 -9
- package/dist/{error-DCSuUAZW.mjs → error-CytFlgcd.mjs} +5 -0
- package/dist/field-defs-cache-DRNdhBJv.mjs +49 -0
- package/dist/{fts-manager-CIZlScg5.mjs → fts-manager-Crzypjqu.mjs} +1 -1
- package/dist/hitl-Hw1RmWOq.mjs +677 -0
- package/dist/{hitl-requests-CGQwOEiq.mjs → hitl-requests-B4Vbcmaq.mjs} +2 -2
- package/dist/{hitl-route-helpers-GSDLNPpN.mjs → hitl-route-helpers-hEVzvP8l.mjs} +5 -4
- package/dist/import-Bh9biJfx.mjs +1354 -0
- package/dist/{index-CwRuZ-u8.d.mts → index-D4y6NGiy.d.mts} +75 -3
- package/dist/index.d.mts +17 -16
- package/dist/index.mjs +81 -69
- package/dist/{jsonld-DZ67souc.d.mts → jsonld-Dq0gsnOH.d.mts} +8 -4
- package/dist/{load-xE01Jm0V.mjs → load-DmYeniXl.mjs} +1 -1
- package/dist/{loader-tg63WSY2.mjs → loader-CjWqjweO.mjs} +117 -31
- package/dist/{manifest-schema-qh2P7RDX.mjs → manifest-schema-BxVPYMJR.mjs} +34 -1
- package/dist/mcp-reviewed-executor-TwVbMzG6.mjs +555 -0
- package/dist/media/image-endpoint.d.mts +32 -0
- package/dist/media/image-endpoint.mjs +111 -0
- package/dist/media/index.d.mts +27 -2
- package/dist/media/index.mjs +5 -3
- package/dist/media/local-runtime.d.mts +16 -11
- package/dist/media/local-runtime.mjs +10 -8
- package/dist/{media-DUAjMfvR.mjs → media-DMj0grzC.mjs} +3 -1
- package/dist/{media-allowlist-BsXkT9RK.mjs → media-allowlist-BlVCSzHx.mjs} +1 -1
- package/dist/media-url-lEKSrpr9.mjs +20 -0
- package/dist/{menus-WpFRMXjz.mjs → menus-TaW1gKnk.mjs} +19 -5
- package/dist/{menus-DU1eZqw_.mjs → menus-xvsnVZXw.mjs} +80 -15
- package/dist/{normalize-DUnoXAa9.mjs → normalize-5ek_z7de.mjs} +8 -1
- package/dist/{oauth-authorization-D-1p52Je.mjs → oauth-authorization-DiaGvRVz.mjs} +5 -5
- package/dist/{oauth-clients-CzeMGyUU.mjs → oauth-clients-Dl9E8dEM.mjs} +2 -2
- package/dist/object-cache/memory.d.mts +14 -0
- package/dist/object-cache/memory.mjs +55 -0
- package/dist/object-cache-D51qOseS.mjs +419 -0
- package/dist/page/index.d.mts +4 -3
- package/dist/page/index.mjs +2 -2
- package/dist/{parse-CneSgl7-.mjs → parse-CbymENaR.mjs} +1 -1
- package/dist/{parser-DxfsARXL.mjs → parser-C1nYd-81.mjs} +151 -9
- package/dist/{placeholder-CXfoCtCd.d.mts → placeholder-uvNRZBX9.d.mts} +12 -4
- package/dist/plugin-utils.d.mts +9 -9
- package/dist/plugins/adapt-sandbox-entry.d.mts +9 -9
- package/dist/plugins/adapt-sandbox-entry.mjs +11 -2
- package/dist/{plugins-C57YQi4l.mjs → plugins-BolVa-tl.mjs} +832 -64
- package/dist/{transport-LSdZVXHF.mjs → portable-text-dA_UlJwW.mjs} +1 -134
- package/dist/{preview-D5rvDhRt.mjs → preview-vSVg6fwG.mjs} +4 -3
- package/dist/process-cache-7xgAO9JY.mjs +106 -0
- package/dist/{provider-loader-9it4vd6L.d.mts → provider-loader-MD8zAbnH.d.mts} +1 -1
- package/dist/{public-url-DLUM5OOv.mjs → public-url-BEz_sM9n.mjs} +24 -18
- package/dist/{public-url-B5HaoGzj.d.mts → public-url-gsp3oUbu.d.mts} +5 -4
- package/dist/{query-BYc3oruA.mjs → query-CfRCdaL3.mjs} +281 -76
- package/dist/{query-DKEwzobh.mjs → query-jaAmw8E1.mjs} +11 -6
- package/dist/{rate-limit-i0G3IAOX.mjs → rate-limit-ZLdyWoZF.mjs} +2 -2
- package/dist/{redirect-C2zXRj3c.mjs → redirect-BAjt4Z6b.mjs} +2 -2
- package/dist/{redirects-YZo_znWG.mjs → redirects-BTdwpQtE.mjs} +47 -24
- package/dist/{redirects-ocRJmQHP.mjs → redirects-CA-xylPG.mjs} +19 -11
- package/dist/{registry-CTkbIDB9.mjs → registry-CtyVedcN.mjs} +130 -77
- package/dist/request-context.d.mts +2 -0
- package/dist/{request-meta-DAb6xaP9.mjs → request-meta-CUypToDJ.mjs} +1 -1
- package/dist/{review-requests-C0un5kdV.mjs → review-requests-C9Ff11Vq.mjs} +1 -1
- package/dist/{review-requests-gGMyYYhy.mjs → review-requests-DUyEmtmG.mjs} +1 -1
- package/dist/{runner-D4FL9usy.d.mts → runner-1tC2tIRV.d.mts} +1 -1
- package/dist/runner-DB7CRfOF.mjs +6740 -0
- package/dist/{runtime-DEWQpZ-4.d.mts → runtime-BOeiQsCv.d.mts} +2028 -1564
- package/dist/runtime.d.mts +10 -10
- package/dist/runtime.mjs +4 -4
- package/dist/schema-DXdYj4R3.mjs +8 -0
- package/dist/{search-axGQ1KY3.mjs → search-DSaLgEFI.mjs} +5 -3
- package/dist/{secrets-062Izo8i.mjs → secrets-CDZo2k8L.mjs} +15 -12
- package/dist/{sections-OLKgXL10.mjs → sections-PVVXHGfp.mjs} +2 -2
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +22 -19
- package/dist/seo/index.d.mts +1 -1
- package/dist/seo/index.mjs +3 -12
- package/dist/{seo-Cd45Po8L.mjs → seo-CQG3GCHQ.mjs} +5 -2
- package/dist/{seo-contributions-CqVvReEj.mjs → seo-contributions-C1EnikHB.mjs} +11 -3
- package/dist/{seo-5lJOtB5J.mjs → seo-qa7Dn0jK.mjs} +22 -4
- package/dist/{service-Bwad8s5h.mjs → service-DiN4ZuPp.mjs} +2 -2
- package/dist/session-user-CAKImna3.mjs +22 -0
- package/dist/{settings-yLjz_I4T.mjs → settings-BbqgHWpU.mjs} +28 -55
- package/dist/{settings-lAHjaUit.mjs → settings-i4VPP8bT.mjs} +2 -2
- package/dist/{setup-complete--PradA4R.mjs → setup-complete-B8fl-mjV.mjs} +1 -1
- package/dist/{site-activity-D7Xyropw.mjs → site-activity-Dy3FROs0.mjs} +1 -1
- package/dist/{site-context-DaN9Z91j.mjs → site-context-DQiL8Fl5.mjs} +23 -652
- package/dist/{site-url-DpGZo9Z6.mjs → site-url-BML3GQYm.mjs} +1 -1
- package/dist/status-DANd8ERo.mjs +21 -0
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/{taxonomies-uXVEoQso.mjs → taxonomies-9s-v03H-.mjs} +36 -29
- package/dist/taxonomies-DRiixp_E.mjs +443 -0
- package/dist/{taxonomy-CBmkmMuU.mjs → taxonomy-Dvsw6BOs.mjs} +44 -9
- package/dist/{tokens-CjSgb0AC.mjs → tokens-1RK1n6ED.mjs} +1 -1
- package/dist/transport-BNmCqLu7.mjs +134 -0
- package/dist/types-4garmdWa.mjs +66 -0
- package/dist/{types-DSPGWjxO.d.mts → types-C8XW6L19.d.mts} +225 -4
- package/dist/{types-GaCtZ1k9.d.mts → types-CDpH6MA4.d.mts} +18 -0
- package/dist/{types-DRIKLmJI.d.mts → types-C_ly5eTp.d.mts} +17 -2
- package/dist/types-DF7ZuGGk.d.mts +118 -0
- package/dist/types-DU0bU2Wu.d.mts +2392 -0
- package/dist/{types-CwawBUTa.d.mts → types-DW_-sFyz.d.mts} +2 -1
- package/dist/{types-DfuD0Afl.mjs → types-Dq1qT19x.mjs} +2 -2
- package/dist/ui/server-runtime.d.mts +15 -15
- package/dist/ui/server-runtime.mjs +25 -21
- package/dist/url-Cac7a9QZ.mjs +33 -0
- package/dist/{user-DtNmjNYt.mjs → user-BIZPzCb9.mjs} +2 -2
- package/dist/{utils-wv-zvC-Y.mjs → utils-CMDhr5Xd.mjs} +129 -7
- package/dist/{validate-BMs11tan.d.mts → validate-CZvb-BKB.d.mts} +10 -7
- package/dist/{validate-7SYRbz2f.mjs → validate-DNs0pTSc.mjs} +11 -6
- package/dist/version-BTvfRGc6.mjs +6 -0
- package/dist/{widgets-DR8EHuRO.mjs → widgets-f0ibZUIq.mjs} +46 -43
- package/dist/{wordpress-slugs-Dvhxh4cl.mjs → wordpress-slugs-BhHJX8XE.mjs} +1 -1
- package/dist/{zod-generator-BS9-umbk.mjs → zod-generator-B7TMjyFJ.mjs} +41 -13
- package/package.json +31 -8
- package/src/components/Block.astro +50 -0
- package/src/components/Comments.astro +143 -1
- package/src/components/DinewayHead.astro +19 -2
- package/src/components/DinewayImage.astro +66 -33
- package/src/components/DinewayMedia.astro +1 -2
- package/src/components/Image.astro +85 -40
- package/src/components/InlinePortableTextEditor.tsx +12 -2
- package/src/components/JsonLdScript.astro +9 -0
- package/src/components/LiveSearch.astro +40 -4
- package/src/components/index.ts +4 -0
- package/src/components/live-search-routing.ts +30 -0
- package/src/components/portable-text-text-align.ts +15 -0
- package/src/ui.ts +2 -0
- package/dist/entity-aliases-Egjmqc7I.mjs +0 -51
- package/dist/import-CvHY6sf5.mjs +0 -684
- package/dist/runner-B-tbV751.mjs +0 -2741
- package/dist/schema-B6zyB-Xn.mjs +0 -8
- package/dist/taxonomies-CNOGeC-3.mjs +0 -327
- package/dist/types-eu5UDgHN.d.mts +0 -652
- package/dist/version-xlzMSXF2.mjs +0 -6
- /package/dist/{adapters-OQCImOL7.d.mts → adapters-NVSs4UH7.d.mts} +0 -0
- /package/dist/{api-tokens-CYUoFGo7.mjs → api-tokens-2r7OWi_I.mjs} +0 -0
- /package/dist/{base64-C1Q9yr0B.mjs → base64-F8-DUraK.mjs} +0 -0
- /package/dist/{challenge-store-CRSz-Xim.mjs → challenge-store-Bjlepa2E.mjs} +0 -0
- /package/dist/{components--pg6zBvu.mjs → components-Bclf98Be.mjs} +0 -0
- /package/dist/{context-types-DQh_XKkn.mjs → context-types-DqTo6C79.mjs} +0 -0
- /package/dist/{default-B6iaLvP7.mjs → default--K40jqm0.mjs} +0 -0
- /package/dist/{email-console-BOVqIYpB.mjs → email-console-ChgKFO8-.mjs} +0 -0
- /package/dist/{escape-BDgouFFY.mjs → escape-Bd4P_xKg.mjs} +0 -0
- /package/dist/{experimental-workflows-Dh4DUoD_.mjs → experimental-workflows-BMsUnIAw.mjs} +0 -0
- /package/dist/{mime-8pAB8-77.mjs → mime-CA7Lgovc.mjs} +0 -0
- /package/dist/{mode-CpyEz8pe.mjs → mode-C4CIyjtR.mjs} +0 -0
- /package/dist/{oauth-state-store-qncPB_IU.mjs → oauth-state-store-CNoXafF7.mjs} +0 -0
- /package/dist/{oauth-user-lookup-BFjWF8wK.mjs → oauth-user-lookup-Ygw4bNyt.mjs} +0 -0
- /package/dist/{options-BvJoSSJR.mjs → options-DQPTH5n0.mjs} +0 -0
- /package/dist/{passkey-config-DzHQK90v.mjs → passkey-config-BUwu8BA3.mjs} +0 -0
- /package/dist/{patterns-r-0n824Y.mjs → patterns-BhAvqO0S.mjs} +0 -0
- /package/dist/{provider-loader-DzUxejk7.mjs → provider-loader-D0w9dqjm.mjs} +0 -0
- /package/dist/{redirect-BjIBtDWY.mjs → redirect-wphRBv4y.mjs} +0 -0
- /package/dist/{request-cache-CYMbwZc6.mjs → request-cache-D9GQBxMP.mjs} +0 -0
- /package/dist/{resolve-DTuDyYKs.mjs → resolve-Cb6Dbz-C.mjs} +0 -0
- /package/dist/{setup-nonce-pyGfc9hV.mjs → setup-nonce-CoyjILvW.mjs} +0 -0
- /package/dist/{sidecar-client-mJxwayYN.mjs → sidecar-client-C3mqXg4C.mjs} +0 -0
- /package/dist/{slugify-BzGxlOFx.mjs → slugify-KSsVD_D3.mjs} +0 -0
- /package/dist/{ssrf-DiKqWd3N.mjs → ssrf-DWe8jwAp.mjs} +0 -0
- /package/dist/{transaction-CShMWIej.mjs → transaction-C2EOMTJA.mjs} +0 -0
- /package/dist/{transport-BnsNxh2l.d.mts → transport-CcJu3Co8.d.mts} +0 -0
- /package/dist/{trusted-proxy-BgIIcbsN.mjs → trusted-proxy-DTXQ2IMv.mjs} +0 -0
- /package/dist/{types-BO8TGjS8.mjs → types-B3t5cxhU.mjs} +0 -0
- /package/dist/{types-nP9vGUFq.d.mts → types-C46EvNdc.d.mts} +0 -0
- /package/dist/{types-Cg276-3z.mjs → types-C5CVgwsV.mjs} +0 -0
- /package/dist/{types-DZpT-PnG.d.mts → types-POH8PQZh.d.mts} +0 -0
- /package/dist/{types-Dryvv7LH.d.mts → types-Rc3gQqqw.d.mts} +0 -0
- /package/dist/{url-w7Mp5qAD.mjs → url-CpyFDFpO.mjs} +0 -0
|
@@ -5,10 +5,9 @@
|
|
|
5
5
|
* Renders image blocks from WordPress imports and Dineway media.
|
|
6
6
|
* Uses the provider's getSrc function for responsive srcset generation.
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
8
|
+
import { Image as AstroImage } from "astro:assets";
|
|
9
9
|
import {
|
|
10
10
|
RESPONSIVE_BREAKPOINTS,
|
|
11
|
-
buildResponsiveImage,
|
|
12
11
|
buildRenderMediaUrl,
|
|
13
12
|
getMediaProvider,
|
|
14
13
|
getPublicOrigin,
|
|
@@ -34,11 +33,19 @@ export interface Props {
|
|
|
34
33
|
width?: number;
|
|
35
34
|
/** Original image height */
|
|
36
35
|
height?: number;
|
|
36
|
+
/** LQIP blurhash -- first-class field (legacy snapshots store it in `asset.meta`). */
|
|
37
|
+
blurhash?: string;
|
|
38
|
+
/** LQIP dominant color -- first-class field (legacy snapshots store it in `asset.meta`). */
|
|
39
|
+
dominantColor?: string;
|
|
37
40
|
/** Display width for this instance (overrides original) */
|
|
38
41
|
displayWidth?: number;
|
|
39
42
|
/** Display height for this instance (overrides original) */
|
|
40
43
|
displayHeight?: number;
|
|
44
|
+
/** Alignment for this image instance (e.g. from a WordPress import) */
|
|
45
|
+
alignment?: "left" | "center" | "right" | "wide" | "full";
|
|
41
46
|
};
|
|
47
|
+
/** Render the LQIP placeholder as an inline background. Disable for strict CSP. */
|
|
48
|
+
placeholder?: boolean;
|
|
42
49
|
}
|
|
43
50
|
|
|
44
51
|
/**
|
|
@@ -57,13 +64,13 @@ function generateSrcset(
|
|
|
57
64
|
.join(", ");
|
|
58
65
|
}
|
|
59
66
|
|
|
60
|
-
const { node } = Astro.props;
|
|
67
|
+
const { node, placeholder = true } = Astro.props;
|
|
61
68
|
|
|
62
69
|
if (!node?.asset) {
|
|
63
70
|
return null;
|
|
64
71
|
}
|
|
65
72
|
|
|
66
|
-
const { asset, alt = "", caption, width, height, displayWidth, displayHeight } = node;
|
|
73
|
+
const { asset, alt = "", caption, width, height, displayWidth, displayHeight, alignment } = node;
|
|
67
74
|
|
|
68
75
|
// Calculate aspect ratio from original dimensions
|
|
69
76
|
const aspectRatio = width && height ? width / height : undefined;
|
|
@@ -90,6 +97,7 @@ if (displayWidth && displayHeight) {
|
|
|
90
97
|
let src = "";
|
|
91
98
|
let srcset: string | undefined;
|
|
92
99
|
let sizes: string | undefined;
|
|
100
|
+
let astroImageSrc = "";
|
|
93
101
|
const providerId = asset.provider;
|
|
94
102
|
|
|
95
103
|
if (providerId && providerId !== "local") {
|
|
@@ -128,58 +136,63 @@ if (providerId && providerId !== "local") {
|
|
|
128
136
|
}
|
|
129
137
|
}
|
|
130
138
|
|
|
131
|
-
// Fallback for local provider
|
|
132
|
-
//
|
|
139
|
+
// Fallback for local provider. `asset.url` carries the storage key with
|
|
140
|
+
// extension when present; `asset._ref` is a bare ULID that only the internal
|
|
141
|
+
// `/file/{id}` route can resolve. `buildRenderMediaUrl` picks the right shape.
|
|
133
142
|
if (!src) {
|
|
134
143
|
src = buildRenderMediaUrl(Astro.locals.dineway?.getPublicMediaUrl, {
|
|
135
144
|
url: asset.url,
|
|
136
145
|
id: asset._ref,
|
|
137
146
|
});
|
|
138
|
-
|
|
139
|
-
|
|
147
|
+
if (renderWidth && renderHeight) {
|
|
148
|
+
astroImageSrc = toAbsoluteMediaUrl(
|
|
140
149
|
src,
|
|
141
|
-
getPublicOrigin(Astro.url, Astro.locals.dineway?.config)
|
|
142
|
-
)
|
|
143
|
-
width: renderWidth,
|
|
144
|
-
height: renderHeight,
|
|
145
|
-
});
|
|
146
|
-
if (optimized) {
|
|
147
|
-
src = optimized.src;
|
|
148
|
-
srcset = optimized.srcset;
|
|
149
|
-
sizes = optimized.sizes;
|
|
150
|
+
getPublicOrigin(Astro.url, Astro.locals.dineway?.config),
|
|
151
|
+
);
|
|
150
152
|
}
|
|
151
153
|
}
|
|
152
154
|
|
|
153
|
-
// Build placeholder background style
|
|
154
|
-
|
|
155
|
-
const
|
|
155
|
+
// Build placeholder background style. Prefer first-class LQIP fields; fall
|
|
156
|
+
// back to `asset.meta` for legacy snapshots persisted before LQIP was promoted.
|
|
157
|
+
const blurhash = node.blurhash ?? (asset.meta?.blurhash as string | undefined);
|
|
158
|
+
const dominantColor = node.dominantColor ?? (asset.meta?.dominantColor as string | undefined);
|
|
156
159
|
|
|
157
160
|
let placeholderStyle = "";
|
|
158
|
-
if (blurhash) {
|
|
161
|
+
if (placeholder && blurhash) {
|
|
159
162
|
const { blurhashToImageCssString } = await import("@unpic/placeholder");
|
|
160
163
|
placeholderStyle = blurhashToImageCssString(blurhash);
|
|
161
|
-
} else if (dominantColor) {
|
|
164
|
+
} else if (placeholder && dominantColor) {
|
|
162
165
|
placeholderStyle = `background-color: ${dominantColor};`;
|
|
163
166
|
}
|
|
164
|
-
|
|
165
|
-
const baseStyle = aspectRatio
|
|
166
|
-
? `aspect-ratio: ${aspectRatio}; max-width: 100%; height: auto;`
|
|
167
|
-
: "max-width: 100%; height: auto;";
|
|
168
|
-
const imgStyle = placeholderStyle ? `${baseStyle} ${placeholderStyle}` : baseStyle;
|
|
169
167
|
---
|
|
170
168
|
|
|
171
|
-
<figure class="dineway-image">
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
169
|
+
<figure class:list={["dineway-image", alignment && `dineway-image--align-${alignment}`]}>
|
|
170
|
+
{
|
|
171
|
+
astroImageSrc ? (
|
|
172
|
+
<AstroImage
|
|
173
|
+
src={astroImageSrc}
|
|
174
|
+
alt={alt}
|
|
175
|
+
width={renderWidth}
|
|
176
|
+
height={renderHeight}
|
|
177
|
+
layout="constrained"
|
|
178
|
+
loading="lazy"
|
|
179
|
+
decoding="async"
|
|
180
|
+
style={placeholderStyle || undefined}
|
|
181
|
+
/>
|
|
182
|
+
) : (
|
|
183
|
+
<img
|
|
184
|
+
src={src}
|
|
185
|
+
srcset={srcset}
|
|
186
|
+
sizes={sizes}
|
|
187
|
+
alt={alt}
|
|
188
|
+
width={renderWidth}
|
|
189
|
+
height={renderHeight}
|
|
190
|
+
loading="lazy"
|
|
191
|
+
decoding="async"
|
|
192
|
+
style={placeholderStyle || undefined}
|
|
193
|
+
/>
|
|
194
|
+
)
|
|
195
|
+
}
|
|
183
196
|
{caption && <figcaption>{caption}</figcaption>}
|
|
184
197
|
</figure>
|
|
185
198
|
|
|
@@ -193,8 +206,40 @@ const imgStyle = placeholderStyle ? `${baseStyle} ${placeholderStyle}` : baseSty
|
|
|
193
206
|
}
|
|
194
207
|
.dineway-image figcaption {
|
|
195
208
|
font-size: 0.875rem;
|
|
196
|
-
color: #666;
|
|
209
|
+
color: var(--dineway-caption-color, var(--color-muted, #666));
|
|
197
210
|
margin-top: 0.5rem;
|
|
198
211
|
text-align: center;
|
|
199
212
|
}
|
|
213
|
+
/* Alignment (WordPress-style). Floats wrap surrounding text; wide/full span the column. */
|
|
214
|
+
.dineway-image--align-left,
|
|
215
|
+
.dineway-image--align-right {
|
|
216
|
+
width: fit-content;
|
|
217
|
+
max-width: 50%;
|
|
218
|
+
}
|
|
219
|
+
.dineway-image--align-left {
|
|
220
|
+
float: left;
|
|
221
|
+
margin: 0 1.5rem 1rem 0;
|
|
222
|
+
}
|
|
223
|
+
.dineway-image--align-right {
|
|
224
|
+
float: right;
|
|
225
|
+
margin: 0 0 1rem 1.5rem;
|
|
226
|
+
}
|
|
227
|
+
.dineway-image--align-center {
|
|
228
|
+
width: fit-content;
|
|
229
|
+
margin-inline: auto;
|
|
230
|
+
}
|
|
231
|
+
.dineway-image--align-wide,
|
|
232
|
+
.dineway-image--align-full {
|
|
233
|
+
width: 100%;
|
|
234
|
+
}
|
|
235
|
+
/* On narrow screens, un-float left/right so the image is not cramped beside text. */
|
|
236
|
+
@media (max-width: 640px) {
|
|
237
|
+
.dineway-image--align-left,
|
|
238
|
+
.dineway-image--align-right {
|
|
239
|
+
float: none;
|
|
240
|
+
width: 100%;
|
|
241
|
+
max-width: 100%;
|
|
242
|
+
margin-inline: 0;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
200
245
|
</style>
|
|
@@ -51,6 +51,7 @@ interface PTTextBlock {
|
|
|
51
51
|
level?: number;
|
|
52
52
|
children: PTSpan[];
|
|
53
53
|
markDefs?: PTMarkDef[];
|
|
54
|
+
textAlign?: "left" | "center" | "right" | "justify";
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
type PTBlock = PTTextBlock | { _type: string; _key: string; [key: string]: unknown };
|
|
@@ -101,6 +102,10 @@ function attrNum(attrs: Record<string, unknown> | undefined, key: string): numbe
|
|
|
101
102
|
return typeof v === "number" ? v : undefined;
|
|
102
103
|
}
|
|
103
104
|
|
|
105
|
+
function normalizeTextAlign(value: unknown): "center" | "right" | "justify" | undefined {
|
|
106
|
+
return value === "center" || value === "right" || value === "justify" ? value : undefined;
|
|
107
|
+
}
|
|
108
|
+
|
|
104
109
|
function pmToPortableText(doc: PMNode): PTBlock[] {
|
|
105
110
|
if (!doc || doc.type !== "doc" || !doc.content) return [];
|
|
106
111
|
const blocks: PTBlock[] = [];
|
|
@@ -118,6 +123,7 @@ function convertPMNode(node: PMNode): PTBlock | PTBlock[] | null {
|
|
|
118
123
|
switch (node.type) {
|
|
119
124
|
case "paragraph": {
|
|
120
125
|
const { children, markDefs } = convertInline(node.content || []);
|
|
126
|
+
const textAlign = normalizeTextAlign(node.attrs?.textAlign);
|
|
121
127
|
if (children.length === 0) return null;
|
|
122
128
|
return {
|
|
123
129
|
_type: "block",
|
|
@@ -125,11 +131,13 @@ function convertPMNode(node: PMNode): PTBlock | PTBlock[] | null {
|
|
|
125
131
|
style: "normal",
|
|
126
132
|
children,
|
|
127
133
|
markDefs: markDefs.length > 0 ? markDefs : undefined,
|
|
134
|
+
...(textAlign ? { textAlign } : {}),
|
|
128
135
|
};
|
|
129
136
|
}
|
|
130
137
|
case "heading": {
|
|
131
138
|
const { children, markDefs } = convertInline(node.content || []);
|
|
132
139
|
const level = attrNum(node.attrs, "level") ?? 1;
|
|
140
|
+
const textAlign = normalizeTextAlign(node.attrs?.textAlign);
|
|
133
141
|
if (children.length === 0) return null;
|
|
134
142
|
const headingStyles: Record<number, PTTextBlock["style"]> = {
|
|
135
143
|
1: "h1",
|
|
@@ -146,6 +154,7 @@ function convertPMNode(node: PMNode): PTBlock | PTBlock[] | null {
|
|
|
146
154
|
style: headingStyle,
|
|
147
155
|
children,
|
|
148
156
|
markDefs: markDefs.length > 0 ? markDefs : undefined,
|
|
157
|
+
...(textAlign ? { textAlign } : {}),
|
|
149
158
|
};
|
|
150
159
|
}
|
|
151
160
|
case "bulletList":
|
|
@@ -358,7 +367,7 @@ function portableTextToPM(blocks: PTBlock[]): JSONContent {
|
|
|
358
367
|
|
|
359
368
|
function convertPTBlock(block: PTBlock): JSONContent | null {
|
|
360
369
|
if (isPTTextBlock(block)) {
|
|
361
|
-
const { style = "normal", children, markDefs = [] } = block;
|
|
370
|
+
const { style = "normal", children, markDefs = [], textAlign } = block;
|
|
362
371
|
const pmContent = convertPTSpans(children, markDefs);
|
|
363
372
|
|
|
364
373
|
if (style === "blockquote") {
|
|
@@ -376,12 +385,13 @@ function convertPTBlock(block: PTBlock): JSONContent | null {
|
|
|
376
385
|
const level = parseInt(style.substring(1), 10);
|
|
377
386
|
return {
|
|
378
387
|
type: "heading",
|
|
379
|
-
attrs: { level },
|
|
388
|
+
attrs: { level, ...(textAlign ? { textAlign } : {}) },
|
|
380
389
|
content: pmContent.length > 0 ? pmContent : undefined,
|
|
381
390
|
};
|
|
382
391
|
}
|
|
383
392
|
return {
|
|
384
393
|
type: "paragraph",
|
|
394
|
+
attrs: textAlign ? { textAlign } : undefined,
|
|
385
395
|
content: pmContent.length > 0 ? pmContent : undefined,
|
|
386
396
|
};
|
|
387
397
|
}
|
|
@@ -34,6 +34,8 @@ export interface Props {
|
|
|
34
34
|
limit?: number;
|
|
35
35
|
/** CSS class for the container */
|
|
36
36
|
class?: string;
|
|
37
|
+
/** Inline style for the container */
|
|
38
|
+
style?: string;
|
|
37
39
|
/** CSS class for the input */
|
|
38
40
|
inputClass?: string;
|
|
39
41
|
/** CSS class for the results container */
|
|
@@ -48,6 +50,10 @@ export interface Props {
|
|
|
48
50
|
suggestMode?: boolean;
|
|
49
51
|
/** Expand input width on focus (provide collapsed and expanded widths) */
|
|
50
52
|
expandOnFocus?: { collapsed: string; expanded: string };
|
|
53
|
+
/** Search results page to navigate to when pressing Enter without a focused result */
|
|
54
|
+
searchPage?: string;
|
|
55
|
+
/** Per-collection URL templates, e.g. { posts: "/blog/:path" } */
|
|
56
|
+
routeMap?: Record<string, string>;
|
|
51
57
|
}
|
|
52
58
|
|
|
53
59
|
const {
|
|
@@ -57,6 +63,7 @@ const {
|
|
|
57
63
|
debounce = 300,
|
|
58
64
|
limit = 10,
|
|
59
65
|
class: className = "",
|
|
66
|
+
style: styleAttr = "",
|
|
60
67
|
inputClass = "",
|
|
61
68
|
resultsClass = "",
|
|
62
69
|
resultClass = "",
|
|
@@ -64,6 +71,8 @@ const {
|
|
|
64
71
|
autofocus = false,
|
|
65
72
|
suggestMode = false,
|
|
66
73
|
expandOnFocus,
|
|
74
|
+
searchPage = "",
|
|
75
|
+
routeMap = {},
|
|
67
76
|
} = Astro.props;
|
|
68
77
|
|
|
69
78
|
const config = {
|
|
@@ -74,11 +83,14 @@ const config = {
|
|
|
74
83
|
showSnippets,
|
|
75
84
|
suggestMode,
|
|
76
85
|
expandOnFocus: expandOnFocus ?? null,
|
|
86
|
+
searchPage,
|
|
87
|
+
routeMap,
|
|
77
88
|
};
|
|
78
89
|
---
|
|
79
90
|
|
|
80
91
|
<dineway-live-search
|
|
81
92
|
class:list={["dineway-live-search", className]}
|
|
93
|
+
style={styleAttr}
|
|
82
94
|
data-config={JSON.stringify(config)}
|
|
83
95
|
>
|
|
84
96
|
<input
|
|
@@ -109,6 +121,12 @@ const config = {
|
|
|
109
121
|
</dineway-live-search>
|
|
110
122
|
|
|
111
123
|
<script>
|
|
124
|
+
import {
|
|
125
|
+
buildLiveSearchResultUrl,
|
|
126
|
+
type LiveSearchRoutableResult,
|
|
127
|
+
type LiveSearchRouteMap,
|
|
128
|
+
} from "./live-search-routing.js";
|
|
129
|
+
|
|
112
130
|
// Sanitization patterns for search snippets (allow only <mark> tags from FTS5)
|
|
113
131
|
const SNIPPET_AMP_RE = /&/g;
|
|
114
132
|
const SNIPPET_LT_RE = /</g;
|
|
@@ -128,6 +146,7 @@ const config = {
|
|
|
128
146
|
interface Suggestion {
|
|
129
147
|
collection: string;
|
|
130
148
|
id: string;
|
|
149
|
+
slug?: string | null;
|
|
131
150
|
title: string;
|
|
132
151
|
}
|
|
133
152
|
|
|
@@ -139,6 +158,8 @@ const config = {
|
|
|
139
158
|
showSnippets: boolean;
|
|
140
159
|
suggestMode: boolean;
|
|
141
160
|
expandOnFocus: { collapsed: string; expanded: string } | null;
|
|
161
|
+
searchPage: string;
|
|
162
|
+
routeMap: LiveSearchRouteMap;
|
|
142
163
|
}
|
|
143
164
|
|
|
144
165
|
class DinewayLiveSearch extends HTMLElement {
|
|
@@ -156,6 +177,8 @@ const config = {
|
|
|
156
177
|
showSnippets: true,
|
|
157
178
|
suggestMode: false,
|
|
158
179
|
expandOnFocus: null,
|
|
180
|
+
searchPage: "",
|
|
181
|
+
routeMap: {},
|
|
159
182
|
};
|
|
160
183
|
private debounceTimer: ReturnType<typeof setTimeout> | null = null;
|
|
161
184
|
private abortController: AbortController | null = null;
|
|
@@ -275,11 +298,25 @@ const config = {
|
|
|
275
298
|
".dineway-live-search-result:focus, .dineway-live-search-result.focused"
|
|
276
299
|
) as HTMLAnchorElement | null;
|
|
277
300
|
if (focused?.href) {
|
|
301
|
+
e.preventDefault();
|
|
278
302
|
window.location.href = focused.href;
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
const query = this.input?.value.trim();
|
|
307
|
+
if (query && this.config.searchPage) {
|
|
308
|
+
e.preventDefault();
|
|
309
|
+
const url = new URL(this.config.searchPage, window.location.origin);
|
|
310
|
+
url.searchParams.set("q", query);
|
|
311
|
+
window.location.href = url.toString();
|
|
279
312
|
}
|
|
280
313
|
}
|
|
281
314
|
}
|
|
282
315
|
|
|
316
|
+
private buildResultUrl(result: LiveSearchRoutableResult): string {
|
|
317
|
+
return buildLiveSearchResultUrl(result, this.config.routeMap);
|
|
318
|
+
}
|
|
319
|
+
|
|
283
320
|
private navigateResults(direction: number) {
|
|
284
321
|
if (!this.resultsList) return;
|
|
285
322
|
|
|
@@ -376,9 +413,7 @@ const config = {
|
|
|
376
413
|
const link = clone.querySelector("a");
|
|
377
414
|
|
|
378
415
|
if (link) {
|
|
379
|
-
|
|
380
|
-
const path = result.slug ?? result.id;
|
|
381
|
-
link.href = `/${result.collection}/${path}`;
|
|
416
|
+
link.href = this.buildResultUrl(result);
|
|
382
417
|
|
|
383
418
|
// Fill in title
|
|
384
419
|
const titleEl = link.querySelector(
|
|
@@ -439,7 +474,7 @@ const config = {
|
|
|
439
474
|
const link = clone.querySelector("a");
|
|
440
475
|
|
|
441
476
|
if (link) {
|
|
442
|
-
link.href =
|
|
477
|
+
link.href = this.buildResultUrl(suggestion);
|
|
443
478
|
|
|
444
479
|
const titleEl = link.querySelector(
|
|
445
480
|
".dineway-live-search-result-title"
|
|
@@ -465,6 +500,7 @@ const config = {
|
|
|
465
500
|
|
|
466
501
|
link.dataset.id = suggestion.id;
|
|
467
502
|
link.dataset.collection = suggestion.collection;
|
|
503
|
+
link.dataset.slug = suggestion.slug ?? "";
|
|
468
504
|
}
|
|
469
505
|
|
|
470
506
|
this.resultsList.appendChild(clone);
|
package/src/components/index.ts
CHANGED
|
@@ -36,6 +36,7 @@ export { default as DinewayImage } from "./DinewayImage.astro";
|
|
|
36
36
|
export { default as DinewayMedia } from "./DinewayMedia.astro";
|
|
37
37
|
|
|
38
38
|
// Portable Text block type components
|
|
39
|
+
export { default as Block } from "./Block.astro";
|
|
39
40
|
export { default as Image } from "./Image.astro";
|
|
40
41
|
export { default as Code } from "./Code.astro";
|
|
41
42
|
export { default as Embed } from "./Embed.astro";
|
|
@@ -57,6 +58,7 @@ export { default as Underline } from "./marks/Underline.astro";
|
|
|
57
58
|
export { default as StrikeThrough } from "./marks/StrikeThrough.astro";
|
|
58
59
|
export { default as Link } from "./marks/Link.astro";
|
|
59
60
|
|
|
61
|
+
import BlockComponent from "./Block.astro";
|
|
60
62
|
import BreakComponent from "./Break.astro";
|
|
61
63
|
import ButtonComponent from "./Button.astro";
|
|
62
64
|
import ButtonsComponent from "./Buttons.astro";
|
|
@@ -77,11 +79,13 @@ import TableComponent from "./Table.astro";
|
|
|
77
79
|
* Pre-configured components for Dineway Portable Text content
|
|
78
80
|
*
|
|
79
81
|
* Includes renderers for:
|
|
82
|
+
* - Block styles: paragraph, h1..h6, blockquote, with text alignment classes
|
|
80
83
|
* - Block types: image, code, embed, gallery, columns, break, htmlBlock, table,
|
|
81
84
|
* button, buttons, cover, file, pullquote
|
|
82
85
|
* - Marks: superscript, subscript, underline, strike-through, link
|
|
83
86
|
*/
|
|
84
87
|
export const dinewayComponents = {
|
|
88
|
+
block: BlockComponent,
|
|
85
89
|
type: {
|
|
86
90
|
image: ImageComponent,
|
|
87
91
|
code: CodeComponent,
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface LiveSearchRoutableResult {
|
|
2
|
+
collection: string;
|
|
3
|
+
id: string;
|
|
4
|
+
slug?: string | null;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export type LiveSearchRouteMap = Record<string, string>;
|
|
8
|
+
|
|
9
|
+
const ROUTE_TOKEN_RE = /:(collection|id|slug|path)/g;
|
|
10
|
+
|
|
11
|
+
export function buildLiveSearchResultUrl(
|
|
12
|
+
result: LiveSearchRoutableResult,
|
|
13
|
+
routeMap: LiveSearchRouteMap = {},
|
|
14
|
+
): string {
|
|
15
|
+
const path = result.slug ?? result.id;
|
|
16
|
+
const template = routeMap[result.collection];
|
|
17
|
+
|
|
18
|
+
if (!template) {
|
|
19
|
+
return `/${result.collection}/${path}`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const replacements: Record<string, string> = {
|
|
23
|
+
collection: result.collection,
|
|
24
|
+
id: result.id,
|
|
25
|
+
slug: result.slug ?? result.id,
|
|
26
|
+
path,
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
return template.replace(ROUTE_TOKEN_RE, (_token, key: string) => replacements[key] ?? "");
|
|
30
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type AlignClassName = "has-text-align-center" | "has-text-align-right" | "has-text-align-justify";
|
|
2
|
+
|
|
3
|
+
const ALIGN_CLASS_MAP: Record<string, AlignClassName> = {
|
|
4
|
+
center: "has-text-align-center",
|
|
5
|
+
right: "has-text-align-right",
|
|
6
|
+
justify: "has-text-align-justify",
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export function textAlignClassName(value: string | undefined): AlignClassName | undefined {
|
|
10
|
+
if (value === undefined) return undefined;
|
|
11
|
+
if (Object.hasOwn(ALIGN_CLASS_MAP, value)) {
|
|
12
|
+
return ALIGN_CLASS_MAP[value];
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
package/src/ui.ts
CHANGED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { ulid } from "ulidx";
|
|
2
|
-
|
|
3
|
-
//#region src/database/repositories/entity-aliases.ts
|
|
4
|
-
const WHITESPACE_PATTERN = /\s+/g;
|
|
5
|
-
function isResolvableEntityType(value) {
|
|
6
|
-
return value === "content" || value === "collection" || value === "plugin" || value === "taxonomy" || value === "menu";
|
|
7
|
-
}
|
|
8
|
-
function mapEntityAlias(row) {
|
|
9
|
-
if (!isResolvableEntityType(row.entity_type)) throw new Error(`Invalid entity alias type: ${row.entity_type}`);
|
|
10
|
-
return {
|
|
11
|
-
id: row.id,
|
|
12
|
-
entityType: row.entity_type,
|
|
13
|
-
collectionSlug: row.collection_slug,
|
|
14
|
-
entityId: row.entity_id,
|
|
15
|
-
alias: row.alias,
|
|
16
|
-
normalizedAlias: row.normalized_alias,
|
|
17
|
-
createdAt: row.created_at
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
function normalizeEntityAlias(value) {
|
|
21
|
-
return value.trim().toLowerCase().replace(WHITESPACE_PATTERN, " ");
|
|
22
|
-
}
|
|
23
|
-
var EntityAliasRepository = class {
|
|
24
|
-
constructor(db) {
|
|
25
|
-
this.db = db;
|
|
26
|
-
}
|
|
27
|
-
async create(input) {
|
|
28
|
-
const id = ulid();
|
|
29
|
-
const normalizedAlias = normalizeEntityAlias(input.alias);
|
|
30
|
-
await this.db.insertInto("_dineway_entity_aliases").values({
|
|
31
|
-
id,
|
|
32
|
-
entity_type: input.entityType,
|
|
33
|
-
collection_slug: input.collectionSlug ?? null,
|
|
34
|
-
entity_id: input.entityId,
|
|
35
|
-
alias: input.alias,
|
|
36
|
-
normalized_alias: normalizedAlias
|
|
37
|
-
}).execute();
|
|
38
|
-
return mapEntityAlias(await this.db.selectFrom("_dineway_entity_aliases").selectAll().where("id", "=", id).executeTakeFirstOrThrow());
|
|
39
|
-
}
|
|
40
|
-
async findByNormalizedAlias(input) {
|
|
41
|
-
const limit = Math.min(Math.max(input.limit ?? 10, 1), 50);
|
|
42
|
-
const collectionSlug = input.collectionSlug;
|
|
43
|
-
let query = this.db.selectFrom("_dineway_entity_aliases").selectAll().where("normalized_alias", "=", input.normalizedAlias);
|
|
44
|
-
if (input.entityTypes && input.entityTypes.length > 0) query = query.where("entity_type", "in", input.entityTypes);
|
|
45
|
-
if (collectionSlug) query = query.where((eb) => eb.or([eb("collection_slug", "is", null), eb("collection_slug", "=", collectionSlug)]));
|
|
46
|
-
return (await query.orderBy("created_at", "desc").limit(limit).execute()).map(mapEntityAlias);
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
//#endregion
|
|
51
|
-
export { normalizeEntityAlias as n, EntityAliasRepository as t };
|