@wix/himalaya-cli 0.1582.0 → 0.1584.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/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/builder.d.ts +8 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/schema.d.ts +26 -2
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/validator.d.ts +18 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/blog-v3/src/extensions.d.ts +2 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/comments-v1/src/extensions.d.ts +2 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/events/src/index.d.ts +3 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/groups/src/extensions.d.ts +15 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/loyalty/src/extensions.d.ts +13 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/members-v1/src/index.d.ts +19 -4
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/core.mjs +5 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/sdui.mjs +5 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-comments.mjs +3 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-events.mjs +4 -2
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-groups.mjs +5 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-loyalty.mjs +4 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-members.mjs +10 -3
- package/dist/cli.mjs +1098 -702
- package/dist/preview-assets.generated.bin +0 -0
- package/fixtures/wix-canned.json +25 -0
- package/guides/component-reference.json +4 -3
- package/guides/component-reference.md +24 -2
- package/guides/one-app-to-himi-app.md +52 -1
- package/guides/sdk-reference.json +37 -9
- package/guides/wix-api-usage.md +9 -0
- package/package.json +2 -2
- package/templates/beauty-salon/config.ts +27 -1
- package/templates/beauty-salon/dev/index.ts +2285 -757
- package/templates/beauty-salon/himalaya.content.json +3 -0
- package/templates/beauty-salon/tier5-src/_shared/booking-location.ts +147 -0
- package/templates/beauty-salon/tier5-src/_shared/booking-session.ts +222 -0
- package/templates/beauty-salon/tier5-src/_shared/branded-lite-hosted.ts +1 -1
- package/templates/beauty-salon/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/beauty-salon/tier5-src/_shared/himi-restaurants.ts +2 -1
- package/templates/beauty-salon/tier5-src/_shared/owner-editor-value.ts +164 -0
- package/templates/beauty-salon/tier5-src/_shared/store-product-info.ts +50 -0
- package/templates/beauty-salon/tier5-src/himi-blog-post/index.ts +21 -8
- package/templates/beauty-salon/tier5-src/himi-booking-service/index.ts +277 -14
- package/templates/beauty-salon/tier5-src/himi-booking-services/index.ts +351 -92
- package/templates/beauty-salon/tier5-src/himi-booking-time/index.ts +25 -5
- package/templates/beauty-salon/tier5-src/himi-branded-lite-agenda/index.ts +219 -220
- package/templates/beauty-salon/tier5-src/himi-branded-lite-category/index.ts +3 -2
- package/templates/beauty-salon/tier5-src/himi-branded-lite-notifsettings/index.ts +173 -0
- package/templates/beauty-salon/tier5-src/himi-branded-lite-plans/index.ts +2 -1
- package/templates/beauty-salon/tier5-src/himi-store-product/index.ts +14 -3
- package/templates/beauty-salon/tier5-src/wix-spaces-plan-detail/index.ts +2 -1
- package/templates/beauty-salon/tier5-src/wix-spaces-whats-new/index.ts +2 -1
- package/templates/beauty-salon-owner/dev/index.ts +129 -66
- package/templates/beauty-salon-owner/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-post/index.ts +7 -0
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-product/index.ts +39 -6
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-product-form/index.ts +14 -8
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-products/index.ts +7 -4
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-service/index.ts +38 -7
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-service-form/index.ts +53 -7
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-services/index.ts +4 -2
- package/templates/branded-lite/config.ts +29 -1
- package/templates/branded-lite/dev/index.ts +8371 -5565
- package/templates/branded-lite/himalaya.content.json +3 -0
- package/templates/branded-lite/l10n/en.json +2 -2
- package/templates/branded-lite/tier5-src/_shared/booking-location.ts +147 -0
- package/templates/branded-lite/tier5-src/_shared/booking-session.ts +222 -0
- package/templates/branded-lite/tier5-src/_shared/branded-lite-hosted.ts +1 -1
- package/templates/branded-lite/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/branded-lite/tier5-src/_shared/event-registration.ts +86 -0
- package/templates/branded-lite/tier5-src/_shared/himi-restaurants.ts +2 -1
- package/templates/branded-lite/tier5-src/_shared/owner-editor-value.ts +164 -0
- package/templates/branded-lite/tier5-src/_shared/store-product-info.ts +50 -0
- package/templates/branded-lite/tier5-src/himi-blog-post/index.ts +21 -8
- package/templates/branded-lite/tier5-src/himi-booking-service/index.ts +277 -14
- package/templates/branded-lite/tier5-src/himi-booking-services/index.ts +351 -92
- package/templates/branded-lite/tier5-src/himi-booking-time/index.ts +25 -5
- package/templates/branded-lite/tier5-src/himi-branded-lite-agenda/index.ts +219 -220
- package/templates/branded-lite/tier5-src/himi-branded-lite-badges/index.ts +2 -1
- package/templates/branded-lite/tier5-src/himi-branded-lite-category/index.ts +3 -2
- package/templates/branded-lite/tier5-src/himi-branded-lite-feed/index.ts +4 -3
- package/templates/branded-lite/tier5-src/himi-branded-lite-group-about/index.ts +243 -0
- package/templates/branded-lite/tier5-src/himi-branded-lite-loyalty/index.ts +115 -49
- package/templates/branded-lite/tier5-src/himi-branded-lite-plans/index.ts +2 -1
- package/templates/branded-lite/tier5-src/himi-branded-lite-podcasts/index.ts +2 -1
- package/templates/branded-lite/tier5-src/himi-branded-lite-portfolio/index.ts +2 -1
- package/templates/branded-lite/tier5-src/himi-branded-lite-portfolio-project/index.ts +3 -2
- package/templates/branded-lite/tier5-src/himi-branded-lite-program/facts.ts +52 -0
- package/templates/branded-lite/tier5-src/himi-branded-lite-program/index.ts +21 -11
- package/templates/branded-lite/tier5-src/himi-branded-lite-video/index.ts +2 -1
- package/templates/branded-lite/tier5-src/himi-events-detail/index.ts +12 -86
- package/templates/branded-lite/tier5-src/himi-events-list/index.ts +47 -6
- package/templates/branded-lite/tier5-src/himi-store-product/index.ts +13 -3
- package/templates/branded-lite/tier5-src/wix-spaces-forum-post/index.ts +3 -2
- package/templates/branded-lite/tier5-src/wix-spaces-member-detail/index.ts +53 -37
- package/templates/branded-lite/tier5-src/wix-spaces-members/index.ts +100 -34
- package/templates/branded-lite/tier5-src/wix-spaces-plan-detail/index.ts +2 -1
- package/templates/branded-lite/tier5-src/wix-spaces-whats-new/index.ts +2 -1
- package/templates/community-club/config.ts +36 -1
- package/templates/community-club/dev/index.ts +1930 -401
- package/templates/community-club/himalaya.content.json +6 -0
- package/templates/community-club/tier5-src/_shared/branded-lite-hosted.ts +1 -1
- package/templates/community-club/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/community-club/tier5-src/_shared/event-registration.ts +86 -0
- package/templates/community-club/tier5-src/_shared/himi-restaurants.ts +2 -1
- package/templates/community-club/tier5-src/himi-blog-post/index.ts +21 -8
- package/templates/community-club/tier5-src/himi-branded-lite-feed/index.ts +4 -3
- package/templates/community-club/tier5-src/himi-branded-lite-group-about/index.ts +243 -0
- package/templates/community-club/tier5-src/himi-branded-lite-notifsettings/index.ts +173 -0
- package/templates/community-club/tier5-src/himi-events-detail/index.ts +12 -86
- package/templates/community-club/tier5-src/himi-events-list/index.ts +47 -6
- package/templates/community-club/tier5-src/wix-spaces-whats-new/index.ts +2 -1
- package/templates/community-club-owner/dev/index.ts +53 -1
- package/templates/community-club-owner/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/community-club-owner/tier5-src/himi-owner-lite-event/index.ts +16 -8
- package/templates/community-club-owner/tier5-src/himi-owner-lite-event-form/index.ts +16 -7
- package/templates/community-club-owner/tier5-src/himi-owner-lite-events/index.ts +4 -2
- package/templates/community-club-owner/tier5-src/himi-owner-lite-post/index.ts +7 -0
- package/templates/community-club-owner/tier5-src/himi-owner-lite-product/index.ts +39 -6
- package/templates/community-club-owner/tier5-src/himi-owner-lite-product-form/index.ts +14 -8
- package/templates/community-club-owner/tier5-src/himi-owner-lite-products/index.ts +7 -4
- package/templates/events-meetups/config.ts +36 -1
- package/templates/events-meetups/dev/index.ts +1930 -401
- package/templates/events-meetups/himalaya.content.json +6 -0
- package/templates/events-meetups/tier5-src/_shared/branded-lite-hosted.ts +1 -1
- package/templates/events-meetups/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/events-meetups/tier5-src/_shared/event-registration.ts +86 -0
- package/templates/events-meetups/tier5-src/_shared/himi-restaurants.ts +2 -1
- package/templates/events-meetups/tier5-src/himi-blog-post/index.ts +21 -8
- package/templates/events-meetups/tier5-src/himi-branded-lite-feed/index.ts +4 -3
- package/templates/events-meetups/tier5-src/himi-branded-lite-group-about/index.ts +243 -0
- package/templates/events-meetups/tier5-src/himi-branded-lite-notifsettings/index.ts +173 -0
- package/templates/events-meetups/tier5-src/himi-events-detail/index.ts +12 -86
- package/templates/events-meetups/tier5-src/himi-events-list/index.ts +47 -6
- package/templates/events-meetups/tier5-src/wix-spaces-whats-new/index.ts +2 -1
- package/templates/events-meetups-owner/dev/index.ts +6 -0
- package/templates/events-meetups-owner/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-event/index.ts +16 -8
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-event-form/index.ts +16 -7
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-events/index.ts +4 -2
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-post/index.ts +7 -0
- package/templates/gym-fitness/config.ts +27 -1
- package/templates/gym-fitness/dev/index.ts +2803 -844
- package/templates/gym-fitness/himalaya.content.json +3 -0
- package/templates/gym-fitness/tier5-src/_shared/booking-location.ts +147 -0
- package/templates/gym-fitness/tier5-src/_shared/booking-session.ts +222 -0
- package/templates/gym-fitness/tier5-src/_shared/branded-lite-hosted.ts +1 -1
- package/templates/gym-fitness/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/gym-fitness/tier5-src/_shared/event-registration.ts +86 -0
- package/templates/gym-fitness/tier5-src/_shared/himi-restaurants.ts +2 -1
- package/templates/gym-fitness/tier5-src/_shared/owner-editor-value.ts +164 -0
- package/templates/gym-fitness/tier5-src/_shared/store-product-info.ts +50 -0
- package/templates/gym-fitness/tier5-src/himi-blog-post/index.ts +21 -8
- package/templates/gym-fitness/tier5-src/himi-booking-service/index.ts +277 -14
- package/templates/gym-fitness/tier5-src/himi-booking-services/index.ts +351 -92
- package/templates/gym-fitness/tier5-src/himi-booking-time/index.ts +25 -5
- package/templates/gym-fitness/tier5-src/himi-branded-lite-agenda/index.ts +219 -220
- package/templates/gym-fitness/tier5-src/himi-branded-lite-category/index.ts +3 -2
- package/templates/gym-fitness/tier5-src/himi-branded-lite-notifsettings/index.ts +173 -0
- package/templates/gym-fitness/tier5-src/himi-branded-lite-plans/index.ts +2 -1
- package/templates/gym-fitness/tier5-src/himi-events-detail/index.ts +12 -86
- package/templates/gym-fitness/tier5-src/himi-events-list/index.ts +47 -6
- package/templates/gym-fitness/tier5-src/himi-store-product/index.ts +14 -3
- package/templates/gym-fitness/tier5-src/wix-spaces-plan-detail/index.ts +2 -1
- package/templates/gym-fitness/tier5-src/wix-spaces-whats-new/index.ts +2 -1
- package/templates/gym-fitness-owner/dev/index.ts +132 -66
- package/templates/gym-fitness-owner/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-event/index.ts +16 -8
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-event-form/index.ts +16 -7
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-events/index.ts +4 -2
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-post/index.ts +7 -0
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-product/index.ts +39 -6
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-product-form/index.ts +14 -8
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-products/index.ts +7 -4
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-service/index.ts +38 -7
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-service-form/index.ts +53 -7
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-services/index.ts +4 -2
- package/templates/nonprofit-cause/config.ts +36 -1
- package/templates/nonprofit-cause/dev/index.ts +1925 -396
- package/templates/nonprofit-cause/himalaya.content.json +6 -0
- package/templates/nonprofit-cause/tier5-src/_shared/branded-lite-hosted.ts +1 -1
- package/templates/nonprofit-cause/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/nonprofit-cause/tier5-src/_shared/event-registration.ts +86 -0
- package/templates/nonprofit-cause/tier5-src/_shared/himi-restaurants.ts +2 -1
- package/templates/nonprofit-cause/tier5-src/himi-blog-post/index.ts +21 -8
- package/templates/nonprofit-cause/tier5-src/himi-branded-lite-feed/index.ts +4 -3
- package/templates/nonprofit-cause/tier5-src/himi-branded-lite-group-about/index.ts +243 -0
- package/templates/nonprofit-cause/tier5-src/himi-branded-lite-notifsettings/index.ts +173 -0
- package/templates/nonprofit-cause/tier5-src/himi-branded-lite-plans/index.ts +2 -1
- package/templates/nonprofit-cause/tier5-src/himi-events-detail/index.ts +12 -86
- package/templates/nonprofit-cause/tier5-src/himi-events-list/index.ts +47 -6
- package/templates/nonprofit-cause/tier5-src/wix-spaces-plan-detail/index.ts +2 -1
- package/templates/nonprofit-cause/tier5-src/wix-spaces-whats-new/index.ts +2 -1
- package/templates/nonprofit-cause-owner/dev/index.ts +85 -65
- package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-rich-guard.ts +27 -0
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-event/index.ts +16 -8
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-event-form/index.ts +16 -7
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-events/index.ts +4 -2
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-post/index.ts +7 -0
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-service/index.ts +38 -7
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-service-form/index.ts +53 -7
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-services/index.ts +4 -2
- package/templates/owner-lite/dev/index.ts +132 -66
- package/templates/owner-lite/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/owner-lite/tier5-src/himi-owner-lite-event/index.ts +16 -8
- package/templates/owner-lite/tier5-src/himi-owner-lite-event-form/index.ts +16 -7
- package/templates/owner-lite/tier5-src/himi-owner-lite-events/index.ts +4 -2
- package/templates/owner-lite/tier5-src/himi-owner-lite-post/index.ts +7 -0
- package/templates/owner-lite/tier5-src/himi-owner-lite-product/index.ts +39 -6
- package/templates/owner-lite/tier5-src/himi-owner-lite-product-form/index.ts +14 -8
- package/templates/owner-lite/tier5-src/himi-owner-lite-products/index.ts +7 -4
- package/templates/owner-lite/tier5-src/himi-owner-lite-service/index.ts +38 -7
- package/templates/owner-lite/tier5-src/himi-owner-lite-service-form/index.ts +53 -7
- package/templates/owner-lite/tier5-src/himi-owner-lite-services/index.ts +4 -2
- package/templates/podcast-creator/config.ts +27 -1
- package/templates/podcast-creator/dev/index.ts +1051 -158
- package/templates/podcast-creator/himalaya.content.json +3 -0
- package/templates/podcast-creator/tier5-src/_shared/branded-lite-hosted.ts +1 -1
- package/templates/podcast-creator/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/podcast-creator/tier5-src/_shared/event-registration.ts +86 -0
- package/templates/podcast-creator/tier5-src/_shared/himi-restaurants.ts +2 -1
- package/templates/podcast-creator/tier5-src/himi-blog-post/index.ts +21 -8
- package/templates/podcast-creator/tier5-src/himi-branded-lite-feed/index.ts +4 -3
- package/templates/podcast-creator/tier5-src/himi-branded-lite-notifsettings/index.ts +173 -0
- package/templates/podcast-creator/tier5-src/himi-branded-lite-plans/index.ts +2 -1
- package/templates/podcast-creator/tier5-src/himi-branded-lite-podcasts/index.ts +2 -1
- package/templates/podcast-creator/tier5-src/himi-events-detail/index.ts +12 -86
- package/templates/podcast-creator/tier5-src/himi-events-list/index.ts +47 -6
- package/templates/podcast-creator/tier5-src/wix-spaces-plan-detail/index.ts +2 -1
- package/templates/podcast-creator/tier5-src/wix-spaces-whats-new/index.ts +2 -1
- package/templates/podcast-creator-owner/dev/index.ts +53 -1
- package/templates/podcast-creator-owner/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-event/index.ts +16 -8
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-event-form/index.ts +16 -7
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-events/index.ts +4 -2
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-post/index.ts +7 -0
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-product/index.ts +39 -6
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-product-form/index.ts +14 -8
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-products/index.ts +7 -4
- package/templates/portfolio-creative/config.ts +27 -1
- package/templates/portfolio-creative/dev/index.ts +1305 -468
- package/templates/portfolio-creative/himalaya.content.json +3 -0
- package/templates/portfolio-creative/tier5-src/_shared/branded-lite-hosted.ts +1 -1
- package/templates/portfolio-creative/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/portfolio-creative/tier5-src/_shared/event-registration.ts +86 -0
- package/templates/portfolio-creative/tier5-src/_shared/himi-restaurants.ts +2 -1
- package/templates/portfolio-creative/tier5-src/_shared/owner-editor-value.ts +164 -0
- package/templates/portfolio-creative/tier5-src/_shared/store-product-info.ts +50 -0
- package/templates/portfolio-creative/tier5-src/himi-blog-post/index.ts +21 -8
- package/templates/portfolio-creative/tier5-src/himi-branded-lite-category/index.ts +3 -2
- package/templates/portfolio-creative/tier5-src/himi-branded-lite-notifsettings/index.ts +173 -0
- package/templates/portfolio-creative/tier5-src/himi-branded-lite-portfolio/index.ts +2 -1
- package/templates/portfolio-creative/tier5-src/himi-branded-lite-portfolio-project/index.ts +3 -2
- package/templates/portfolio-creative/tier5-src/himi-events-detail/index.ts +12 -86
- package/templates/portfolio-creative/tier5-src/himi-events-list/index.ts +47 -6
- package/templates/portfolio-creative/tier5-src/himi-store-product/index.ts +14 -3
- package/templates/portfolio-creative/tier5-src/wix-spaces-whats-new/index.ts +2 -1
- package/templates/portfolio-creative-owner/dev/index.ts +129 -66
- package/templates/portfolio-creative-owner/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-post/index.ts +7 -0
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-product/index.ts +39 -6
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-product-form/index.ts +14 -8
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-products/index.ts +7 -4
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-service/index.ts +38 -7
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-service-form/index.ts +53 -7
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-services/index.ts +4 -2
- package/templates/restaurant/config.ts +27 -1
- package/templates/restaurant/dev/index.ts +1051 -158
- package/templates/restaurant/himalaya.content.json +3 -0
- package/templates/restaurant/tier5-src/_shared/branded-lite-hosted.ts +1 -1
- package/templates/restaurant/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/restaurant/tier5-src/_shared/event-registration.ts +86 -0
- package/templates/restaurant/tier5-src/_shared/himi-restaurants.ts +2 -1
- package/templates/restaurant/tier5-src/himi-blog-post/index.ts +21 -8
- package/templates/restaurant/tier5-src/himi-branded-lite-notifsettings/index.ts +173 -0
- package/templates/restaurant/tier5-src/himi-events-detail/index.ts +12 -86
- package/templates/restaurant/tier5-src/himi-events-list/index.ts +47 -6
- package/templates/restaurant/tier5-src/wix-spaces-whats-new/index.ts +2 -1
- package/templates/restaurant-owner/dev/index.ts +132 -66
- package/templates/restaurant-owner/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-event/index.ts +16 -8
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-event-form/index.ts +16 -7
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-events/index.ts +4 -2
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-post/index.ts +7 -0
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-product/index.ts +39 -6
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-product-form/index.ts +14 -8
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-products/index.ts +7 -4
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-service/index.ts +38 -7
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-service-form/index.ts +53 -7
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-services/index.ts +4 -2
- package/templates/retail-store/config.ts +27 -1
- package/templates/retail-store/dev/index.ts +597 -191
- package/templates/retail-store/himalaya.content.json +3 -0
- package/templates/retail-store/tier5-src/_shared/branded-lite-hosted.ts +1 -1
- package/templates/retail-store/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/retail-store/tier5-src/_shared/himi-restaurants.ts +2 -1
- package/templates/retail-store/tier5-src/_shared/owner-editor-value.ts +164 -0
- package/templates/retail-store/tier5-src/_shared/store-product-info.ts +50 -0
- package/templates/retail-store/tier5-src/himi-blog-post/index.ts +21 -8
- package/templates/retail-store/tier5-src/himi-branded-lite-category/index.ts +3 -2
- package/templates/retail-store/tier5-src/himi-branded-lite-notifsettings/index.ts +173 -0
- package/templates/retail-store/tier5-src/himi-store-product/index.ts +13 -3
- package/templates/retail-store/tier5-src/wix-spaces-whats-new/index.ts +2 -1
- package/templates/retail-store-owner/dev/index.ts +50 -1
- package/templates/retail-store-owner/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-post/index.ts +7 -0
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-product/index.ts +39 -6
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-product-form/index.ts +14 -8
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-products/index.ts +7 -4
- package/templates/yoga-studio/config.ts +27 -1
- package/templates/yoga-studio/dev/index.ts +2996 -877
- package/templates/yoga-studio/himalaya.content.json +3 -0
- package/templates/yoga-studio/tier5-src/_shared/booking-location.ts +147 -0
- package/templates/yoga-studio/tier5-src/_shared/booking-session.ts +222 -0
- package/templates/yoga-studio/tier5-src/_shared/branded-lite-hosted.ts +1 -1
- package/templates/yoga-studio/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/yoga-studio/tier5-src/_shared/event-registration.ts +86 -0
- package/templates/yoga-studio/tier5-src/_shared/himi-restaurants.ts +2 -1
- package/templates/yoga-studio/tier5-src/himi-blog-post/index.ts +21 -8
- package/templates/yoga-studio/tier5-src/himi-booking-service/index.ts +277 -14
- package/templates/yoga-studio/tier5-src/himi-booking-services/index.ts +351 -92
- package/templates/yoga-studio/tier5-src/himi-booking-time/index.ts +25 -5
- package/templates/yoga-studio/tier5-src/himi-branded-lite-agenda/index.ts +219 -220
- package/templates/yoga-studio/tier5-src/himi-branded-lite-notifsettings/index.ts +173 -0
- package/templates/yoga-studio/tier5-src/himi-branded-lite-plans/index.ts +2 -1
- package/templates/yoga-studio/tier5-src/himi-branded-lite-program/facts.ts +52 -0
- package/templates/yoga-studio/tier5-src/himi-branded-lite-program/index.ts +21 -11
- package/templates/yoga-studio/tier5-src/himi-events-detail/index.ts +12 -86
- package/templates/yoga-studio/tier5-src/himi-events-list/index.ts +47 -6
- package/templates/yoga-studio/tier5-src/wix-spaces-plan-detail/index.ts +2 -1
- package/templates/yoga-studio/tier5-src/wix-spaces-whats-new/index.ts +2 -1
- package/templates/yoga-studio-owner/dev/index.ts +85 -65
- package/templates/yoga-studio-owner/tier5-src/_shared/collection-contract.ts +19 -3
- package/templates/yoga-studio-owner/tier5-src/_shared/owner-rich-guard.ts +27 -0
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-event/index.ts +16 -8
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-event-form/index.ts +16 -7
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-events/index.ts +4 -2
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-post/index.ts +7 -0
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-service/index.ts +38 -7
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-service-form/index.ts +53 -7
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-services/index.ts +4 -2
package/dist/cli.mjs
CHANGED
|
@@ -38,8 +38,8 @@ var init_define_HHP_CATALOG = __esm({
|
|
|
38
38
|
"<define:__HHP_CATALOG__>"() {
|
|
39
39
|
define_HHP_CATALOG_default = {
|
|
40
40
|
encoding: "gzip-base64",
|
|
41
|
-
sha256: "
|
|
42
|
-
data: "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"
|
|
41
|
+
sha256: "27a12a793989cc3aa6da6fef766f435ae02ea2faac473e4443b61f708131bcdc",
|
|
42
|
+
data: "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"
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
45
|
});
|
|
@@ -5863,15 +5863,15 @@ function analyzeController(source, file2, profile, diagnostics) {
|
|
|
5863
5863
|
error(declaration ?? sf2, "Default-export defineController({ initialState, handlers }).");
|
|
5864
5864
|
return;
|
|
5865
5865
|
}
|
|
5866
|
-
const
|
|
5867
|
-
if (!
|
|
5866
|
+
const object13 = declaration.expression.arguments[0];
|
|
5867
|
+
if (!object13 || !ts2.isObjectLiteralExpression(object13)) {
|
|
5868
5868
|
error(declaration, "Controller definition must be an object literal.");
|
|
5869
5869
|
return;
|
|
5870
5870
|
}
|
|
5871
|
-
const props = new Map(
|
|
5871
|
+
const props = new Map(object13.properties.map((p2) => [p2.name?.getText(sf2).replace(/^["']|["']$/g, ""), p2]));
|
|
5872
5872
|
const state = props.get("initialState"), handlers = props.get("handlers");
|
|
5873
5873
|
if (!state || !ts2.isPropertyAssignment(state) || !handlers || !ts2.isPropertyAssignment(handlers) || !ts2.isObjectLiteralExpression(handlers.initializer)) {
|
|
5874
|
-
error(
|
|
5874
|
+
error(object13, "initialState and handlers must be object literals.");
|
|
5875
5875
|
return;
|
|
5876
5876
|
}
|
|
5877
5877
|
function literal(n2) {
|
|
@@ -12588,9 +12588,9 @@ function manualPaginationIssues(descriptor) {
|
|
|
12588
12588
|
while (pending.length) {
|
|
12589
12589
|
const { value: value2, path: path2 } = pending.pop();
|
|
12590
12590
|
if (!value2 || typeof value2 !== "object") continue;
|
|
12591
|
-
const
|
|
12592
|
-
if (
|
|
12593
|
-
for (const [key3, child] of Object.entries(
|
|
12591
|
+
const object13 = value2;
|
|
12592
|
+
if (object13.body?.props) nodes.push({ path: path2, type: object13.body.type, props: object13.body.props });
|
|
12593
|
+
for (const [key3, child] of Object.entries(object13)) {
|
|
12594
12594
|
if (key3 === "args" || key3 === "input") continue;
|
|
12595
12595
|
if (child && typeof child === "object") pending.push({ value: child, path: path2 ? `${path2}.${key3}` : key3 });
|
|
12596
12596
|
}
|
|
@@ -13377,7 +13377,11 @@ var init_validator = __esm({
|
|
|
13377
13377
|
label: { type: "string" },
|
|
13378
13378
|
accessibilityLabel: { type: "string" },
|
|
13379
13379
|
onTap: { $ref: "#/$defs/action" },
|
|
13380
|
-
badge: { $ref: "#/$defs/navBadge" }
|
|
13380
|
+
badge: { $ref: "#/$defs/navBadge" },
|
|
13381
|
+
// RFC 0010 slot bindings (core.proto TopBarAction 7–9): they bind the app's nav worker.
|
|
13382
|
+
hiddenPath: { type: "string" },
|
|
13383
|
+
labelPath: { type: "string" },
|
|
13384
|
+
iconPath: { type: "string" }
|
|
13381
13385
|
}
|
|
13382
13386
|
},
|
|
13383
13387
|
navBadge: {
|
|
@@ -14832,7 +14836,6 @@ function webViewOriginAllowed(url, origins) {
|
|
|
14832
14836
|
}
|
|
14833
14837
|
var init_webview_origin = __esm({
|
|
14834
14838
|
"../../core/ts/src/webview-origin.ts"() {
|
|
14835
|
-
"use strict";
|
|
14836
14839
|
init_define_HHP_CATALOG();
|
|
14837
14840
|
}
|
|
14838
14841
|
});
|
|
@@ -16646,6 +16649,7 @@ function collectServiceBindings(descriptor) {
|
|
|
16646
16649
|
const ownCollapse = node.collapseWhenEmpty === true;
|
|
16647
16650
|
for (const [k2, v2] of Object.entries(node)) {
|
|
16648
16651
|
if (at2 === "" && k2 === "input" && v2 !== null && typeof v2 === "object") continue;
|
|
16652
|
+
if (/^topBar\.actions\[\d+\]$/.test(at2) && (k2 === "hiddenPath" || k2 === "labelPath" || k2 === "iconPath")) continue;
|
|
16649
16653
|
visit(v2, at2 ? `${at2}.${k2}` : k2, ownCollapse && typeof v2 === "string");
|
|
16650
16654
|
}
|
|
16651
16655
|
}
|
|
@@ -18687,6 +18691,7 @@ var init_validate_descriptor_core = __esm({
|
|
|
18687
18691
|
events: "array",
|
|
18688
18692
|
eventsPath: "string",
|
|
18689
18693
|
onSelectEvent: "any",
|
|
18694
|
+
onVisibleDateChange: "any",
|
|
18690
18695
|
scrollToDate: "string",
|
|
18691
18696
|
scrollToDatePath: "string",
|
|
18692
18697
|
stickyHeaders: "boolean"
|
|
@@ -18964,9 +18969,11 @@ var init_validate_descriptor_core = __esm({
|
|
|
18964
18969
|
items: "array",
|
|
18965
18970
|
itemsPath: "string",
|
|
18966
18971
|
onPullToRefresh: "any",
|
|
18972
|
+
onTopItemChange: "any",
|
|
18967
18973
|
pagination: "any",
|
|
18968
18974
|
reverseLayout: "boolean",
|
|
18969
18975
|
rowSwipeActions: "any",
|
|
18976
|
+
scrollToItemPath: "string",
|
|
18970
18977
|
spacing: "number",
|
|
18971
18978
|
staggerMs: "number",
|
|
18972
18979
|
stickyHeader: "any"
|
|
@@ -19517,7 +19524,7 @@ var init_validate_descriptor_core = __esm({
|
|
|
19517
19524
|
transcriptScroll: "TranscriptScroll"
|
|
19518
19525
|
};
|
|
19519
19526
|
NATIVE_NESTED_PROPS = {
|
|
19520
|
-
Agenda: { events: "list:CalendarEvent", onSelectEvent: "Action" },
|
|
19527
|
+
Agenda: { events: "list:CalendarEvent", onSelectEvent: "Action", onVisibleDateChange: "Action" },
|
|
19521
19528
|
AlertDialog: { confirmAction: "Action", cancelAction: "Action" },
|
|
19522
19529
|
AvatarStrip: { onTap: "Action" },
|
|
19523
19530
|
Banner: { action: "Action" },
|
|
@@ -19536,7 +19543,7 @@ var init_validate_descriptor_core = __esm({
|
|
|
19536
19543
|
Form: { onSubmit: "Action" },
|
|
19537
19544
|
FragmentSlot: { cases: "list:FragmentSlotCase" },
|
|
19538
19545
|
Grid: { onPullToRefresh: "Action", pagination: "Pagination" },
|
|
19539
|
-
LazyList: { onPullToRefresh: "Action", pagination: "Pagination", rowSwipeActions: "SwipeActionSet" },
|
|
19546
|
+
LazyList: { onPullToRefresh: "Action", onTopItemChange: "Action", pagination: "Pagination", rowSwipeActions: "SwipeActionSet" },
|
|
19540
19547
|
ListItem: { onTap: "Action" },
|
|
19541
19548
|
Map: {
|
|
19542
19549
|
markers: "list:MapMarker",
|
|
@@ -22113,7 +22120,7 @@ var init_pixels = __esm({
|
|
|
22113
22120
|
// ../../core/dev-server/src/declared-navigation-ast.ts
|
|
22114
22121
|
function literalTargets(bundleJs, ts15) {
|
|
22115
22122
|
const name = (n2) => n2 && (ts15.isIdentifier(n2) || ts15.isStringLiteral(n2) || ts15.isNoSubstitutionTemplateLiteral(n2)) ? n2.text : void 0;
|
|
22116
|
-
const
|
|
22123
|
+
const object13 = (n2) => {
|
|
22117
22124
|
while (n2 && ts15.isParenthesizedExpression(n2)) n2 = n2.expression;
|
|
22118
22125
|
return n2 && ts15.isObjectLiteralExpression(n2) ? n2 : void 0;
|
|
22119
22126
|
};
|
|
@@ -22150,14 +22157,14 @@ function literalTargets(bundleJs, ts15) {
|
|
|
22150
22157
|
const callee = ts15.isPropertyAccessExpression(node.expression) ? node.expression.name.text : name(node.expression);
|
|
22151
22158
|
const service = node.arguments[0];
|
|
22152
22159
|
if (callee && /^defineService[0-9]*$/.test(callee) && service && ts15.isStringLiteralLike(service)) {
|
|
22153
|
-
const actions =
|
|
22160
|
+
const actions = object13(initializer(property2(object13(node.arguments[1]), "actions")));
|
|
22154
22161
|
for (const member of actions?.properties ?? []) {
|
|
22155
22162
|
const action = name(member.name);
|
|
22156
22163
|
const fn2 = ts15.isMethodDeclaration(member) ? member : resolve93(ts15.isShorthandPropertyAssignment(member) ? member.name : initializer(member));
|
|
22157
22164
|
if (!action || !fn2?.body) continue;
|
|
22158
22165
|
const targets = [];
|
|
22159
22166
|
const target = (expr) => {
|
|
22160
|
-
const sid = initializer(property2(
|
|
22167
|
+
const sid = initializer(property2(object13(expr), "screenId"));
|
|
22161
22168
|
if (!sid || !ts15.isStringLiteralLike(sid)) return;
|
|
22162
22169
|
const position = file2.getLineAndCharacterOfPosition(sid.getStart(file2));
|
|
22163
22170
|
targets.push({ screenId: sid.text, line: position.line + 1, column: position.character });
|
|
@@ -22215,7 +22222,7 @@ var init_player_host_manifest = __esm({
|
|
|
22215
22222
|
"../../apps/himi-player/player-host-manifest.ts"() {
|
|
22216
22223
|
init_define_HHP_CATALOG();
|
|
22217
22224
|
PLAYER_HOST_MANIFEST = {
|
|
22218
|
-
"version": "1.
|
|
22225
|
+
"version": "1.8.0",
|
|
22219
22226
|
"capabilities": [
|
|
22220
22227
|
"animation",
|
|
22221
22228
|
"app_info",
|
|
@@ -27136,6 +27143,7 @@ function resolveIdiom(tokens2, ctx = {}) {
|
|
|
27136
27143
|
var IDIOM_CONTEXTS, UNSAFE_KEYS;
|
|
27137
27144
|
var init_idiom = __esm({
|
|
27138
27145
|
"../../core/ts/src/idiom.ts"() {
|
|
27146
|
+
"use strict";
|
|
27139
27147
|
init_define_HHP_CATALOG();
|
|
27140
27148
|
IDIOM_CONTEXTS = {
|
|
27141
27149
|
ios: { native: ["ios"] },
|
|
@@ -36431,7 +36439,7 @@ function sameJson(a2, b2) {
|
|
|
36431
36439
|
}
|
|
36432
36440
|
return true;
|
|
36433
36441
|
}
|
|
36434
|
-
var resolveScalarStatic, Bound, BOUND_LIST_WINDOW_START, BOUND_LIST_WINDOW_STEP, BoundListWindowContext, WindowGrowth, PageCycle, PageCycleContext, cursorString, BoundList, readsService, BoundRow;
|
|
36442
|
+
var resolveScalarStatic, Bound, BOUND_LIST_WINDOW_START, BOUND_LIST_WINDOW_STEP, BoundListWindowContext, RevealRowContext, WindowGrowth, PageCycle, PageCycleContext, cursorString, BoundList, ROW_SHELL_STYLE, readsService, BoundRow;
|
|
36435
36443
|
var init_bindings2 = __esm({
|
|
36436
36444
|
"../../core/web-renderer/src/bindings.tsx"() {
|
|
36437
36445
|
"use strict";
|
|
@@ -36456,6 +36464,7 @@ var init_bindings2 = __esm({
|
|
|
36456
36464
|
BOUND_LIST_WINDOW_START = 30;
|
|
36457
36465
|
BOUND_LIST_WINDOW_STEP = 30;
|
|
36458
36466
|
BoundListWindowContext = React4.createContext(true);
|
|
36467
|
+
RevealRowContext = React4.createContext(void 0);
|
|
36459
36468
|
WindowGrowth = ({ onNear, style }) => {
|
|
36460
36469
|
const ref = React4.useRef(null);
|
|
36461
36470
|
React4.useEffect(() => {
|
|
@@ -36530,7 +36539,7 @@ var init_bindings2 = __esm({
|
|
|
36530
36539
|
};
|
|
36531
36540
|
PageCycleContext = React4.createContext(null);
|
|
36532
36541
|
cursorString = (v2) => typeof v2 === "string" ? v2 : "";
|
|
36533
|
-
BoundList = ({ ctx, itemsPath, template, renderRow, windowed = false, wrapRows, footer, rowSize = 1, markerStyle, pageCursor }) => {
|
|
36542
|
+
BoundList = ({ ctx, itemsPath, template, renderRow, windowed = false, wrapRows, footer, rowSize = 1, markerStyle, pageCursor, tagRows = false }) => {
|
|
36534
36543
|
const local = itemsPath.startsWith("$item.");
|
|
36535
36544
|
const bound2 = useBoundValue(ctx, local ? "" : itemsPath);
|
|
36536
36545
|
const arr2 = local ? ctx.itemScope?.[itemsPath.slice("$item.".length)] : bound2;
|
|
@@ -36541,16 +36550,26 @@ var init_bindings2 = __esm({
|
|
|
36541
36550
|
useEveryRowForFindAndPrint(on4, () => setSize(Number.POSITIVE_INFINITY));
|
|
36542
36551
|
const pages2 = usePageCycle(ctx, pageCursor);
|
|
36543
36552
|
const per = Math.max(1, Math.floor(rowSize));
|
|
36544
|
-
const
|
|
36553
|
+
const revealId = React4.useContext(RevealRowContext);
|
|
36554
|
+
const revealAt = on4 && tagRows && revealId ? items.findIndex((item) => item?.id === revealId) : -1;
|
|
36555
|
+
React4.useEffect(() => {
|
|
36556
|
+
if (revealAt >= 0) setSize((n2) => Math.max(n2, revealAt + 1));
|
|
36557
|
+
}, [revealAt]);
|
|
36558
|
+
const count2 = on4 ? Math.min(Math.max(Math.ceil(size / per) * per, revealAt + 1), items.length) : items.length;
|
|
36545
36559
|
const rows = items.slice(0, count2).map((item, i2) => {
|
|
36546
|
-
const
|
|
36547
|
-
|
|
36560
|
+
const id = item?.id;
|
|
36561
|
+
const key3 = String(id ?? i2);
|
|
36562
|
+
if (tagRows && typeof id === "string" && id) {
|
|
36563
|
+
return /* @__PURE__ */ jsx3("div", { "data-himalaya-row-id": id, style: ROW_SHELL_STYLE, children: /* @__PURE__ */ jsx3(BoundRow, { ctx, template, item, index: i2, renderRow }) }, key3);
|
|
36564
|
+
}
|
|
36565
|
+
return /* @__PURE__ */ jsx3(BoundRow, { ctx, template, item, index: i2, renderRow }, key3);
|
|
36548
36566
|
});
|
|
36549
36567
|
return /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
36550
36568
|
wrapRows ? wrapRows(rows) : rows,
|
|
36551
36569
|
count2 < items.length ? /* @__PURE__ */ jsx3(WindowGrowth, { style: markerStyle, onNear: () => setSize((n2) => Math.max(n2, count2) + BOUND_LIST_WINDOW_STEP) }, count2) : footer && pageCursor !== void 0 ? /* @__PURE__ */ jsx3(PageCycleContext.Provider, { value: pages2, children: footer }) : footer ?? null
|
|
36552
36570
|
] });
|
|
36553
36571
|
};
|
|
36572
|
+
ROW_SHELL_STYLE = { display: "contents" };
|
|
36554
36573
|
readsService = /* @__PURE__ */ new WeakMap();
|
|
36555
36574
|
BoundRow = React4.memo(
|
|
36556
36575
|
({ ctx, template, item, index, renderRow }) => {
|
|
@@ -36562,6 +36581,238 @@ var init_bindings2 = __esm({
|
|
|
36562
36581
|
}
|
|
36563
36582
|
});
|
|
36564
36583
|
|
|
36584
|
+
// ../../core/web-renderer/src/scrollAnchors.ts
|
|
36585
|
+
import React5 from "react";
|
|
36586
|
+
function topAnchorId(anchors, tolerance = TOP_ANCHOR_TOLERANCE_PX) {
|
|
36587
|
+
let picked = anchors[0]?.id ?? null;
|
|
36588
|
+
for (const a2 of anchors) if (a2.top <= tolerance) picked = a2.id;
|
|
36589
|
+
return picked;
|
|
36590
|
+
}
|
|
36591
|
+
function anchorRowId(value2) {
|
|
36592
|
+
if (typeof value2 !== "string") return null;
|
|
36593
|
+
return value2.split("|", 1)[0] || null;
|
|
36594
|
+
}
|
|
36595
|
+
function boxOf(el2) {
|
|
36596
|
+
const view = el2.ownerDocument.defaultView;
|
|
36597
|
+
let node = el2;
|
|
36598
|
+
while (node && view?.getComputedStyle(node).display === "contents") node = node.firstElementChild;
|
|
36599
|
+
return node && view?.getComputedStyle(node).display === "none" ? null : node;
|
|
36600
|
+
}
|
|
36601
|
+
function screenScale(el2, axis) {
|
|
36602
|
+
const r3 = el2.getBoundingClientRect();
|
|
36603
|
+
const drawn = axis === "y" ? r3.height : r3.width;
|
|
36604
|
+
const laidOut = axis === "y" ? el2.offsetHeight : el2.offsetWidth;
|
|
36605
|
+
return drawn > 0 && laidOut > 0 ? drawn / laidOut : 1;
|
|
36606
|
+
}
|
|
36607
|
+
function scrollChain(el2) {
|
|
36608
|
+
const doc = el2.ownerDocument;
|
|
36609
|
+
const view = doc.defaultView;
|
|
36610
|
+
const page = doc.scrollingElement;
|
|
36611
|
+
const chain = [];
|
|
36612
|
+
for (let node = el2.parentElement; node && view; node = node.parentElement) {
|
|
36613
|
+
if (node === page) break;
|
|
36614
|
+
if (/(auto|scroll|overlay)/.test(view.getComputedStyle(node).overflowY) && node.scrollHeight > node.clientHeight) chain.push(node);
|
|
36615
|
+
}
|
|
36616
|
+
if (page && page.scrollHeight > page.clientHeight) chain.push(page);
|
|
36617
|
+
return chain;
|
|
36618
|
+
}
|
|
36619
|
+
function visibleArea(el2) {
|
|
36620
|
+
const doc = el2.ownerDocument;
|
|
36621
|
+
const view = doc.defaultView;
|
|
36622
|
+
const chain = scrollChain(el2);
|
|
36623
|
+
const scale = chain[0] ? screenScale(chain[0], "y") : 1;
|
|
36624
|
+
const boxes = chain.filter((s2) => s2 !== doc.scrollingElement);
|
|
36625
|
+
const outer = boxes[boxes.length - 1] ?? null;
|
|
36626
|
+
let top = 0;
|
|
36627
|
+
let edge = 0;
|
|
36628
|
+
for (const s2 of boxes) {
|
|
36629
|
+
top = s2.getBoundingClientRect().top + s2.clientTop * screenScale(s2, "y");
|
|
36630
|
+
edge = Math.max(edge, top);
|
|
36631
|
+
}
|
|
36632
|
+
for (let node = el2; node && node !== outer; node = node.parentElement) {
|
|
36633
|
+
for (let sib = node.previousElementSibling; sib; sib = sib.previousElementSibling) {
|
|
36634
|
+
const style = view?.getComputedStyle(sib);
|
|
36635
|
+
if (style?.position !== "sticky" || style.top === "auto") continue;
|
|
36636
|
+
const r3 = sib.getBoundingClientRect();
|
|
36637
|
+
if (r3.height > 0 && r3.top <= edge + TOP_ANCHOR_TOLERANCE_PX * scale) edge = Math.max(edge, r3.bottom);
|
|
36638
|
+
}
|
|
36639
|
+
}
|
|
36640
|
+
return { chain, top, edge, scale };
|
|
36641
|
+
}
|
|
36642
|
+
function coveredTopInset(el2) {
|
|
36643
|
+
const { top, edge, scale } = visibleArea(el2);
|
|
36644
|
+
return Math.max(0, (edge - top) / scale);
|
|
36645
|
+
}
|
|
36646
|
+
function reachesVisibleTop(el2) {
|
|
36647
|
+
const box = boxOf(el2);
|
|
36648
|
+
if (!box) return false;
|
|
36649
|
+
const { edge, scale } = visibleArea(box);
|
|
36650
|
+
return (box.getBoundingClientRect().top - edge) / scale <= TOP_ANCHOR_TOLERANCE_PX;
|
|
36651
|
+
}
|
|
36652
|
+
function readTopAnchor(anchors) {
|
|
36653
|
+
const boxed = [];
|
|
36654
|
+
for (const a2 of anchors) {
|
|
36655
|
+
const box = boxOf(a2.el);
|
|
36656
|
+
if (box) boxed.push({ id: a2.id, box });
|
|
36657
|
+
}
|
|
36658
|
+
if (!boxed.length) return null;
|
|
36659
|
+
const { edge, scale } = visibleArea(boxed[0].box);
|
|
36660
|
+
return topAnchorId(boxed.map((b2) => ({ id: b2.id, top: (b2.box.getBoundingClientRect().top - edge) / scale })));
|
|
36661
|
+
}
|
|
36662
|
+
function scrollAnchorToTop(el2, instant) {
|
|
36663
|
+
const box = boxOf(el2);
|
|
36664
|
+
if (!box) return 0;
|
|
36665
|
+
const { chain, edge } = visibleArea(box);
|
|
36666
|
+
let rest = box.getBoundingClientRect().top - edge;
|
|
36667
|
+
const moves = [];
|
|
36668
|
+
for (const target of chain) {
|
|
36669
|
+
const scale = screenScale(target, "y");
|
|
36670
|
+
const from = target.scrollTop;
|
|
36671
|
+
const max = target.scrollHeight - target.clientHeight;
|
|
36672
|
+
const to2 = max <= SCROLL_SLACK_PX ? 0 : Math.max(0, Math.min(from + rest / scale, max));
|
|
36673
|
+
moves.push({ target, axis: "top", from, to: to2 });
|
|
36674
|
+
rest -= (to2 - from) * scale;
|
|
36675
|
+
}
|
|
36676
|
+
return easeScroll(moves, instant);
|
|
36677
|
+
}
|
|
36678
|
+
function revealInRow(el2, row2, instant) {
|
|
36679
|
+
const scale = screenScale(row2, "x");
|
|
36680
|
+
const left = row2.getBoundingClientRect().left + row2.clientLeft * scale;
|
|
36681
|
+
const right = left + row2.clientWidth * scale;
|
|
36682
|
+
const r3 = el2.getBoundingClientRect();
|
|
36683
|
+
const delta = r3.left < left ? r3.left - left : r3.right > right ? r3.right - right : 0;
|
|
36684
|
+
return easeScroll([{ target: row2, axis: "left", from: row2.scrollLeft, to: row2.scrollLeft + delta / scale }], instant);
|
|
36685
|
+
}
|
|
36686
|
+
function easeScroll(all, instant) {
|
|
36687
|
+
for (const m2 of all) tweens.get(m2.target)?.();
|
|
36688
|
+
const moves = all.filter((m2) => Math.abs(m2.to - m2.from) >= 1);
|
|
36689
|
+
const view = moves[0]?.target.ownerDocument.defaultView;
|
|
36690
|
+
if (!view) return 0;
|
|
36691
|
+
const set = (m2, v2) => {
|
|
36692
|
+
if (typeof m2.target.scrollTo === "function") m2.target.scrollTo(m2.axis === "top" ? { top: v2, behavior: "instant" } : { left: v2, behavior: "instant" });
|
|
36693
|
+
else if (m2.axis === "top") m2.target.scrollTop = v2;
|
|
36694
|
+
else m2.target.scrollLeft = v2;
|
|
36695
|
+
};
|
|
36696
|
+
if (instant || typeof view.requestAnimationFrame !== "function") {
|
|
36697
|
+
for (const m2 of moves) set(m2, m2.to);
|
|
36698
|
+
return 0;
|
|
36699
|
+
}
|
|
36700
|
+
let start = -1;
|
|
36701
|
+
let frame = 0;
|
|
36702
|
+
const stop = () => {
|
|
36703
|
+
view.cancelAnimationFrame(frame);
|
|
36704
|
+
for (const m2 of moves) tweens.delete(m2.target);
|
|
36705
|
+
for (const type of INTERRUPTS) view.removeEventListener(type, stop, true);
|
|
36706
|
+
};
|
|
36707
|
+
const step = (now) => {
|
|
36708
|
+
if (start < 0) start = now;
|
|
36709
|
+
const t2 = Math.min(1, (now - start) / ANCHOR_JUMP_MS);
|
|
36710
|
+
const eased = t2 < 0.5 ? 4 * t2 * t2 * t2 : 1 - Math.pow(-2 * t2 + 2, 3) / 2;
|
|
36711
|
+
for (const m2 of moves) set(m2, m2.from + (m2.to - m2.from) * eased);
|
|
36712
|
+
if (t2 < 1) frame = view.requestAnimationFrame(step);
|
|
36713
|
+
else stop();
|
|
36714
|
+
};
|
|
36715
|
+
for (const type of INTERRUPTS) view.addEventListener(type, stop, { capture: true, passive: true });
|
|
36716
|
+
for (const m2 of moves) tweens.set(m2.target, stop);
|
|
36717
|
+
frame = view.requestAnimationFrame(step);
|
|
36718
|
+
return ANCHOR_JUMP_MS;
|
|
36719
|
+
}
|
|
36720
|
+
function useTopAnchorReport(root, anchors, report3, content) {
|
|
36721
|
+
const live3 = React5.useRef({ anchors, report: report3 });
|
|
36722
|
+
live3.current = { anchors, report: report3 };
|
|
36723
|
+
const tracker = React5.useRef(null);
|
|
36724
|
+
if (!tracker.current) {
|
|
36725
|
+
tracker.current = new TopAnchorTracker(
|
|
36726
|
+
() => readTopAnchor(live3.current.anchors?.() ?? []),
|
|
36727
|
+
(id) => live3.current.report(id)
|
|
36728
|
+
);
|
|
36729
|
+
}
|
|
36730
|
+
const t2 = tracker.current;
|
|
36731
|
+
const on4 = anchors != null;
|
|
36732
|
+
React5.useEffect(() => {
|
|
36733
|
+
if (on4) t2.baseline();
|
|
36734
|
+
}, [on4, content, t2]);
|
|
36735
|
+
React5.useEffect(() => {
|
|
36736
|
+
if (!on4 || typeof document === "undefined") return;
|
|
36737
|
+
const onScroll = (e2) => {
|
|
36738
|
+
const el2 = root.current;
|
|
36739
|
+
const scrolledNode = e2.target;
|
|
36740
|
+
if (el2 && scrolledNode && typeof scrolledNode.contains === "function" && scrolledNode.contains(el2)) t2.scrolled();
|
|
36741
|
+
};
|
|
36742
|
+
document.addEventListener("scroll", onScroll, { capture: true, passive: true });
|
|
36743
|
+
return () => {
|
|
36744
|
+
document.removeEventListener("scroll", onScroll, { capture: true });
|
|
36745
|
+
t2.dispose();
|
|
36746
|
+
};
|
|
36747
|
+
}, [on4, t2, root]);
|
|
36748
|
+
return React5.useCallback((ms2) => {
|
|
36749
|
+
if (live3.current.anchors) t2.jump(ms2);
|
|
36750
|
+
}, [t2]);
|
|
36751
|
+
}
|
|
36752
|
+
var TOP_ANCHOR_TOLERANCE_PX, TOP_ANCHOR_SETTLE_MS, TOP_ANCHOR_JUMP_GRACE_MS, ANCHOR_JUMP_MS, SCROLL_SLACK_PX, tweens, INTERRUPTS, TopAnchorTracker;
|
|
36753
|
+
var init_scrollAnchors = __esm({
|
|
36754
|
+
"../../core/web-renderer/src/scrollAnchors.ts"() {
|
|
36755
|
+
init_define_HHP_CATALOG();
|
|
36756
|
+
TOP_ANCHOR_TOLERANCE_PX = 8;
|
|
36757
|
+
TOP_ANCHOR_SETTLE_MS = 150;
|
|
36758
|
+
TOP_ANCHOR_JUMP_GRACE_MS = 150;
|
|
36759
|
+
ANCHOR_JUMP_MS = 250;
|
|
36760
|
+
SCROLL_SLACK_PX = 16;
|
|
36761
|
+
tweens = /* @__PURE__ */ new WeakMap();
|
|
36762
|
+
INTERRUPTS = ["wheel", "touchstart", "pointerdown", "keydown"];
|
|
36763
|
+
TopAnchorTracker = class {
|
|
36764
|
+
constructor(read, report3) {
|
|
36765
|
+
this.read = read;
|
|
36766
|
+
this.report = report3;
|
|
36767
|
+
}
|
|
36768
|
+
last = null;
|
|
36769
|
+
timer;
|
|
36770
|
+
quietUntil = 0;
|
|
36771
|
+
jumped = false;
|
|
36772
|
+
/** The content changed: take where the reader now is as known, unless a scroll is still settling. */
|
|
36773
|
+
baseline() {
|
|
36774
|
+
if (this.timer === void 0) this.last = this.read();
|
|
36775
|
+
}
|
|
36776
|
+
/** The reader's scroller moved. */
|
|
36777
|
+
scrolled() {
|
|
36778
|
+
this.arm(TOP_ANCHOR_SETTLE_MS);
|
|
36779
|
+
}
|
|
36780
|
+
/** A programmatic jump starts, running [ms]. */
|
|
36781
|
+
jump(ms2) {
|
|
36782
|
+
this.jumped = true;
|
|
36783
|
+
this.quietUntil = Date.now() + ms2 + TOP_ANCHOR_JUMP_GRACE_MS;
|
|
36784
|
+
this.arm(ms2 + TOP_ANCHOR_JUMP_GRACE_MS);
|
|
36785
|
+
}
|
|
36786
|
+
dispose() {
|
|
36787
|
+
clearTimeout(this.timer);
|
|
36788
|
+
this.timer = void 0;
|
|
36789
|
+
}
|
|
36790
|
+
arm(ms2) {
|
|
36791
|
+
clearTimeout(this.timer);
|
|
36792
|
+
this.timer = setTimeout(() => this.settle(), ms2);
|
|
36793
|
+
}
|
|
36794
|
+
settle() {
|
|
36795
|
+
this.timer = void 0;
|
|
36796
|
+
const wait = this.quietUntil - Date.now();
|
|
36797
|
+
if (wait > 0) {
|
|
36798
|
+
this.arm(wait);
|
|
36799
|
+
return;
|
|
36800
|
+
}
|
|
36801
|
+
const value2 = this.read();
|
|
36802
|
+
if (this.jumped) {
|
|
36803
|
+
this.jumped = false;
|
|
36804
|
+
this.last = value2;
|
|
36805
|
+
return;
|
|
36806
|
+
}
|
|
36807
|
+
if (value2 != null && value2 !== this.last) {
|
|
36808
|
+
this.last = value2;
|
|
36809
|
+
this.report(value2);
|
|
36810
|
+
}
|
|
36811
|
+
}
|
|
36812
|
+
};
|
|
36813
|
+
}
|
|
36814
|
+
});
|
|
36815
|
+
|
|
36565
36816
|
// ../../core/web-renderer/src/snackbarTiming.ts
|
|
36566
36817
|
function snackbarAutoHideMs(durationMs) {
|
|
36567
36818
|
const ms2 = typeof durationMs === "number" && Number.isFinite(durationMs) ? durationMs : SNACKBAR_DEFAULT_DURATION_MS;
|
|
@@ -36583,7 +36834,7 @@ var init_snackbarTiming = __esm({
|
|
|
36583
36834
|
});
|
|
36584
36835
|
|
|
36585
36836
|
// ../../core/web-renderer/src/formBag.ts
|
|
36586
|
-
import
|
|
36837
|
+
import React6 from "react";
|
|
36587
36838
|
function hasContributed(bag, fieldId) {
|
|
36588
36839
|
return Object.prototype.hasOwnProperty.call(bag.values, fieldId);
|
|
36589
36840
|
}
|
|
@@ -36700,7 +36951,7 @@ var init_formBag = __esm({
|
|
|
36700
36951
|
init_validation();
|
|
36701
36952
|
validity = /* @__PURE__ */ new WeakMap();
|
|
36702
36953
|
formValidityProbe = { validations: 0 };
|
|
36703
|
-
FormValuesContext =
|
|
36954
|
+
FormValuesContext = React6.createContext(null);
|
|
36704
36955
|
}
|
|
36705
36956
|
});
|
|
36706
36957
|
|
|
@@ -36921,7 +37172,7 @@ var init_actionParams = __esm({
|
|
|
36921
37172
|
});
|
|
36922
37173
|
|
|
36923
37174
|
// ../../core/web-renderer/src/workerTapBusy.ts
|
|
36924
|
-
import
|
|
37175
|
+
import React7, { useEffect as useEffect3, useRef, useState as useState3 } from "react";
|
|
36925
37176
|
function tracksWorkerTap(action) {
|
|
36926
37177
|
if (!action || typeof action !== "object") return false;
|
|
36927
37178
|
const a2 = action;
|
|
@@ -36954,7 +37205,7 @@ function WorkerTapGate({ gate, action, children, ...forwarded }) {
|
|
|
36954
37205
|
const next = { ...forwarded };
|
|
36955
37206
|
if (forwarded.style || busy) next.style = { ...own6 ?? {}, ...forwarded.style ?? {}, ...busy ? { opacity: 0.5 } : {} };
|
|
36956
37207
|
if (busy) next["aria-disabled"] = "true";
|
|
36957
|
-
return
|
|
37208
|
+
return React7.cloneElement(children, next);
|
|
36958
37209
|
}
|
|
36959
37210
|
var WORKER_TAP_DELAY_MS, WORKER_TAP_CAP_MS, listeners, WorkerTap;
|
|
36960
37211
|
var init_workerTapBusy = __esm({
|
|
@@ -37303,10 +37554,10 @@ var init_pickerField = __esm({
|
|
|
37303
37554
|
});
|
|
37304
37555
|
|
|
37305
37556
|
// ../../core/web-renderer/src/symbolEffects.ts
|
|
37306
|
-
import
|
|
37557
|
+
import React8 from "react";
|
|
37307
37558
|
function useSymbolEffect(effect, reduceMotion) {
|
|
37308
|
-
const [, changed] =
|
|
37309
|
-
|
|
37559
|
+
const [, changed] = React8.useReducer((value2) => value2 + 1, 0);
|
|
37560
|
+
React8.useEffect(() => {
|
|
37310
37561
|
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
|
|
37311
37562
|
const query = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
37312
37563
|
const listener = () => changed();
|
|
@@ -37314,7 +37565,7 @@ function useSymbolEffect(effect, reduceMotion) {
|
|
|
37314
37565
|
return () => query.removeEventListener("change", listener);
|
|
37315
37566
|
}, []);
|
|
37316
37567
|
const supported = !reduceMotion() && (effect === "bounce" || effect === "pulse") ? effect : void 0;
|
|
37317
|
-
|
|
37568
|
+
React8.useEffect(() => {
|
|
37318
37569
|
if (!supported || typeof document === "undefined" || document.getElementById("himalaya-symbol-effects")) return;
|
|
37319
37570
|
const style = document.createElement("style");
|
|
37320
37571
|
style.id = "himalaya-symbol-effects";
|
|
@@ -38000,7 +38251,7 @@ var init_host_toolbar = __esm({
|
|
|
38000
38251
|
});
|
|
38001
38252
|
|
|
38002
38253
|
// ../../core/web-renderer/src/richContentEditor.tsx
|
|
38003
|
-
import
|
|
38254
|
+
import React9 from "react";
|
|
38004
38255
|
import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
38005
38256
|
function effectiveTools(tools, uploadService) {
|
|
38006
38257
|
return ricosEffectiveTools(tools, typeof uploadService === "string" && uploadService !== "");
|
|
@@ -38015,32 +38266,32 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
|
|
|
38015
38266
|
const id = String(nodeId ?? dom["data-component-id"] ?? "rich_content_editor");
|
|
38016
38267
|
const C2 = ctx.color;
|
|
38017
38268
|
const name = typeof props.name === "string" && props.name ? props.name : void 0;
|
|
38018
|
-
const bag =
|
|
38269
|
+
const bag = React9.useContext(FormValuesContext);
|
|
38019
38270
|
const live3 = !!ctx.onAction;
|
|
38020
38271
|
const toolsKey = JSON.stringify(props.tools ?? null);
|
|
38021
|
-
const tools =
|
|
38272
|
+
const tools = React9.useMemo(() => effectiveTools(props.tools, props.uploadService), [toolsKey, props.uploadService]);
|
|
38022
38273
|
const seedMode = typeof props.documentJson === "string" ? "literal" : typeof props.documentPath === "string" && props.documentPath ? "binding" : "none";
|
|
38023
38274
|
const boundSeed = useBoundValue(ctx, seedMode === "binding" ? props.documentPath : "");
|
|
38024
38275
|
const fill = props.fillAvailable === true;
|
|
38025
38276
|
const minHeight = typeof props.minHeight === "number" && props.minHeight >= 0 ? props.minHeight : 240;
|
|
38026
38277
|
const placeholder3 = typeof props.placeholder === "string" ? props.placeholder : "";
|
|
38027
|
-
const onChangeRef =
|
|
38278
|
+
const onChangeRef = React9.useRef(props.onChange);
|
|
38028
38279
|
onChangeRef.current = props.onChange;
|
|
38029
|
-
const bagRef =
|
|
38280
|
+
const bagRef = React9.useRef(bag);
|
|
38030
38281
|
bagRef.current = bag;
|
|
38031
|
-
const nameRef =
|
|
38282
|
+
const nameRef = React9.useRef(name);
|
|
38032
38283
|
nameRef.current = name;
|
|
38033
|
-
const [status, setStatus] =
|
|
38034
|
-
const [toolbar, setToolbar] =
|
|
38035
|
-
const [focused, setFocused] =
|
|
38036
|
-
const [src, setSrc] =
|
|
38037
|
-
const [link, setLink] =
|
|
38038
|
-
const [uploadError, setUploadError] =
|
|
38039
|
-
const [, repaint] =
|
|
38040
|
-
const iframeRef =
|
|
38041
|
-
const fileRef =
|
|
38042
|
-
const sessionRef =
|
|
38043
|
-
|
|
38284
|
+
const [status, setStatus] = React9.useState("loading");
|
|
38285
|
+
const [toolbar, setToolbar] = React9.useState(EMPTY_TOOLBAR);
|
|
38286
|
+
const [focused, setFocused] = React9.useState(false);
|
|
38287
|
+
const [src, setSrc] = React9.useState(null);
|
|
38288
|
+
const [link, setLink] = React9.useState(null);
|
|
38289
|
+
const [uploadError, setUploadError] = React9.useState(false);
|
|
38290
|
+
const [, repaint] = React9.useReducer((n2) => n2 + 1, 0);
|
|
38291
|
+
const iframeRef = React9.useRef(null);
|
|
38292
|
+
const fileRef = React9.useRef(null);
|
|
38293
|
+
const sessionRef = React9.useRef(null);
|
|
38294
|
+
React9.useEffect(() => {
|
|
38044
38295
|
if (!bag || !name) return;
|
|
38045
38296
|
bag.register(name, void 0);
|
|
38046
38297
|
const current = sessionRef.current?.currentContent();
|
|
@@ -38056,12 +38307,12 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
|
|
|
38056
38307
|
if (!act || !ctx.onAction) return;
|
|
38057
38308
|
ctx.onAction({ ...act, args: { ...act.args ?? {}, dirty: "true" } });
|
|
38058
38309
|
};
|
|
38059
|
-
const fireOnChangeRef =
|
|
38310
|
+
const fireOnChangeRef = React9.useRef(fireOnChange);
|
|
38060
38311
|
fireOnChangeRef.current = fireOnChange;
|
|
38061
|
-
|
|
38312
|
+
React9.useEffect(() => {
|
|
38062
38313
|
if (live3) setSrc(new URL(ENGINE_PAGE_PATH, document.baseURI).toString());
|
|
38063
38314
|
}, [live3]);
|
|
38064
|
-
|
|
38315
|
+
React9.useEffect(() => {
|
|
38065
38316
|
const frame = iframeRef.current;
|
|
38066
38317
|
if (!live3 || !src || !frame) return;
|
|
38067
38318
|
const t2 = ricosEditorWebTimings;
|
|
@@ -38109,13 +38360,13 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
|
|
|
38109
38360
|
sessionRef.current = null;
|
|
38110
38361
|
};
|
|
38111
38362
|
}, [live3, src]);
|
|
38112
|
-
|
|
38363
|
+
React9.useEffect(() => {
|
|
38113
38364
|
sessionRef.current?.updateLocale(ctx.localeTag ?? "en", ctx.isRTL ?? document.documentElement.dir === "rtl");
|
|
38114
38365
|
}, [ctx.localeTag, ctx.isRTL]);
|
|
38115
|
-
|
|
38366
|
+
React9.useEffect(() => {
|
|
38116
38367
|
sessionRef.current?.setSeed(seedMode === "literal" ? props.documentJson : seedMode === "binding" ? boundSeed : "");
|
|
38117
38368
|
}, [seedMode, props.documentJson, boundSeed, src]);
|
|
38118
|
-
|
|
38369
|
+
React9.useEffect(() => {
|
|
38119
38370
|
const vv = typeof window !== "undefined" ? window.visualViewport : null;
|
|
38120
38371
|
if (!vv || !focused) return;
|
|
38121
38372
|
vv.addEventListener("resize", repaint);
|
|
@@ -38625,21 +38876,21 @@ var init_radioGroups = __esm({
|
|
|
38625
38876
|
});
|
|
38626
38877
|
|
|
38627
38878
|
// ../../core/web-renderer/src/a11y/radioGroupScope.tsx
|
|
38628
|
-
import
|
|
38879
|
+
import React10 from "react";
|
|
38629
38880
|
var scope, RadioGroupScope, useRadioGroups;
|
|
38630
38881
|
var init_radioGroupScope = __esm({
|
|
38631
38882
|
"../../core/web-renderer/src/a11y/radioGroupScope.tsx"() {
|
|
38632
38883
|
"use strict";
|
|
38633
38884
|
init_define_HHP_CATALOG();
|
|
38634
38885
|
init_radioGroups();
|
|
38635
|
-
scope =
|
|
38886
|
+
scope = React10.createContext(radioGroups);
|
|
38636
38887
|
RadioGroupScope = scope.Provider;
|
|
38637
|
-
useRadioGroups = () =>
|
|
38888
|
+
useRadioGroups = () => React10.useContext(scope);
|
|
38638
38889
|
}
|
|
38639
38890
|
});
|
|
38640
38891
|
|
|
38641
38892
|
// ../../core/web-renderer/src/a11y/controls.tsx
|
|
38642
|
-
import
|
|
38893
|
+
import React11 from "react";
|
|
38643
38894
|
import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
38644
38895
|
function labelText(label3, ctx) {
|
|
38645
38896
|
if (typeof label3 === "string" && isBinding(label3)) {
|
|
@@ -38684,32 +38935,32 @@ var init_controls = __esm({
|
|
|
38684
38935
|
A11ySwitch = ({ props, ctx, wrap }) => {
|
|
38685
38936
|
const C2 = ctx.color;
|
|
38686
38937
|
const bound2 = useResolvedScalar(props.valuePath, ctx);
|
|
38687
|
-
const bag =
|
|
38938
|
+
const bag = React11.useContext(FormValuesContext);
|
|
38688
38939
|
const fieldId = props.__formFieldId;
|
|
38689
38940
|
const inForm = Boolean(bag && fieldId);
|
|
38690
38941
|
const standaloneService = fieldId == null && ctx.provider != null && typeof props.valuePath === "string" && props.valuePath.startsWith("$service:");
|
|
38691
38942
|
const resolved2 = ctx.empty ? false : standaloneService ? serviceToggleBool(bound2) ?? encodeToggleFieldValue(props.value) === "true" : props.valuePath != null ? encodeToggleFieldValue(bound2) === "true" : encodeToggleFieldValue(props.value, props.on === true) === "true";
|
|
38692
|
-
const [formOn, setFormOn] =
|
|
38693
|
-
const touchedField =
|
|
38694
|
-
|
|
38943
|
+
const [formOn, setFormOn] = React11.useState(null);
|
|
38944
|
+
const touchedField = React11.useRef(void 0);
|
|
38945
|
+
React11.useEffect(() => {
|
|
38695
38946
|
if (bag && fieldId && touchedField.current === fieldId) bag.set(fieldId, encodeToggleFieldValue(resolved2));
|
|
38696
38947
|
setFormOn(null);
|
|
38697
38948
|
}, [resolved2]);
|
|
38698
38949
|
const toggleServiceBound = typeof props.valuePath === "string" && props.valuePath.startsWith("$service:");
|
|
38699
38950
|
const toggleReady = !toggleServiceBound || bound2 !== void 0;
|
|
38700
|
-
|
|
38951
|
+
React11.useEffect(() => {
|
|
38701
38952
|
if (!bag || !fieldId) return;
|
|
38702
38953
|
if (!toggleReady && !hasContributed(bag, fieldId)) return;
|
|
38703
38954
|
bag.set(fieldId, encodeToggleFieldValue(resolved2));
|
|
38704
38955
|
}, [toggleReady, resolved2, fieldId, bag]);
|
|
38705
|
-
const [tapped, setTapped] =
|
|
38706
|
-
|
|
38956
|
+
const [tapped, setTapped] = React11.useState(null);
|
|
38957
|
+
React11.useEffect(() => {
|
|
38707
38958
|
setTapped(null);
|
|
38708
38959
|
}, [bound2, props.valuePath, ctx.provider]);
|
|
38709
38960
|
const live3 = standaloneService && tapped && tapped.path === props.valuePath && Object.is(tapped.over, bound2) && tapped.provider === ctx.provider ? tapped.on : null;
|
|
38710
38961
|
const on4 = inForm && touchedField.current === fieldId && formOn !== null ? formOn : live3 ?? resolved2;
|
|
38711
38962
|
const ruleKey = props.validation ? JSON.stringify(props.validation) : "";
|
|
38712
|
-
|
|
38963
|
+
React11.useEffect(() => {
|
|
38713
38964
|
if (!bag || !fieldId) return;
|
|
38714
38965
|
bag.register(fieldId, props.validation);
|
|
38715
38966
|
return () => bag.unregister(fieldId);
|
|
@@ -38770,15 +39021,15 @@ var init_controls = __esm({
|
|
|
38770
39021
|
const tint = C2(props.tint ?? "accentPrimary", "#116DFF");
|
|
38771
39022
|
const step = typeof props.step === "number" && props.step > 0 ? props.step : (max - min) / 100 || 0.01;
|
|
38772
39023
|
const range = props.range === true && typeof props.upperValue === "number";
|
|
38773
|
-
const [val, setVal] =
|
|
38774
|
-
const latestValue =
|
|
38775
|
-
const dragging =
|
|
38776
|
-
|
|
39024
|
+
const [val, setVal] = React11.useState(bound2);
|
|
39025
|
+
const latestValue = React11.useRef(bound2);
|
|
39026
|
+
const dragging = React11.useRef(false);
|
|
39027
|
+
React11.useEffect(() => {
|
|
38777
39028
|
if (dragging.current) return;
|
|
38778
39029
|
latestValue.current = bound2;
|
|
38779
39030
|
setVal(bound2);
|
|
38780
39031
|
}, [bound2]);
|
|
38781
|
-
const lastEmit =
|
|
39032
|
+
const lastEmit = React11.useRef(void 0);
|
|
38782
39033
|
const canFire = !!(ctx.onAction && props.onChange && !props.disabled);
|
|
38783
39034
|
const commit = (nv) => {
|
|
38784
39035
|
latestValue.current = nv;
|
|
@@ -38788,8 +39039,8 @@ var init_controls = __esm({
|
|
|
38788
39039
|
ctx.onAction({ ...act, args: { ...act.args ?? {}, value: nv } });
|
|
38789
39040
|
};
|
|
38790
39041
|
const clampPct = (n2) => max > min ? Math.max(0, Math.min(1, (n2 - min) / (max - min))) : 0;
|
|
38791
|
-
const [pair, setPair] =
|
|
38792
|
-
|
|
39042
|
+
const [pair, setPair] = React11.useState(() => [Math.min(bound2, props.upperValue ?? bound2), Math.max(bound2, props.upperValue ?? bound2)]);
|
|
39043
|
+
React11.useEffect(() => {
|
|
38793
39044
|
if (range) setPair([Math.min(bound2, props.upperValue), Math.max(bound2, props.upperValue)]);
|
|
38794
39045
|
}, [range, bound2, props.upperValue]);
|
|
38795
39046
|
if (range) {
|
|
@@ -38947,25 +39198,25 @@ var init_controls = __esm({
|
|
|
38947
39198
|
const boundValue = useResolvedScalar(props.valuePath, ctx);
|
|
38948
39199
|
const raw = props.valuePath != null ? boundValue : props.value;
|
|
38949
39200
|
const groupId = isRadio && typeof props.groupId === "string" && props.groupId !== "" ? props.groupId : void 0;
|
|
38950
|
-
const [local, setLocal] =
|
|
38951
|
-
|
|
39201
|
+
const [local, setLocal] = React11.useState(void 0);
|
|
39202
|
+
React11.useEffect(() => {
|
|
38952
39203
|
setLocal(void 0);
|
|
38953
39204
|
}, [raw, radioGroups2, groupId]);
|
|
38954
39205
|
const localValue2 = local?.registry === radioGroups2 && local.groupId === groupId ? local.value : void 0;
|
|
38955
39206
|
const on4 = ctx.empty ? false : localValue2 ?? raw === true;
|
|
38956
|
-
const member =
|
|
38957
|
-
const owner =
|
|
39207
|
+
const member = React11.useMemo(() => radioGroups2.newMember(), [radioGroups2]);
|
|
39208
|
+
const owner = React11.useSyncExternalStore(
|
|
38958
39209
|
radioGroups2.subscribe,
|
|
38959
39210
|
() => groupId ? radioGroups2.owner(groupId) : void 0,
|
|
38960
39211
|
() => void 0
|
|
38961
39212
|
);
|
|
38962
|
-
|
|
39213
|
+
React11.useEffect(() => {
|
|
38963
39214
|
if (!groupId) return;
|
|
38964
39215
|
radioGroups2.join(groupId);
|
|
38965
39216
|
return () => radioGroups2.leave(groupId, member);
|
|
38966
39217
|
}, [radioGroups2, groupId, member]);
|
|
38967
|
-
const seenRaw =
|
|
38968
|
-
|
|
39218
|
+
const seenRaw = React11.useRef(null);
|
|
39219
|
+
React11.useEffect(() => {
|
|
38969
39220
|
const prev = seenRaw.current;
|
|
38970
39221
|
seenRaw.current = { raw, groupId, registry: radioGroups2 };
|
|
38971
39222
|
if (!groupId) return;
|
|
@@ -38975,7 +39226,7 @@ var init_controls = __esm({
|
|
|
38975
39226
|
radioGroups2.adopt(groupId, member, raw === true);
|
|
38976
39227
|
}
|
|
38977
39228
|
}, [radioGroups2, raw, groupId, member]);
|
|
38978
|
-
|
|
39229
|
+
React11.useEffect(() => {
|
|
38979
39230
|
if (groupId && radioGroups2.deselects(radioGroups2.owner(groupId), member)) setLocal({ value: false, registry: radioGroups2, groupId });
|
|
38980
39231
|
}, [radioGroups2, owner, member, groupId]);
|
|
38981
39232
|
const accent = C2("accentPrimary", "#116DFF");
|
|
@@ -39047,8 +39298,8 @@ var init_controls = __esm({
|
|
|
39047
39298
|
const selectedId = useResolvedId(props.selectedId, ctx);
|
|
39048
39299
|
const tabs = Array.isArray(boundTabs) && boundTabs.length ? boundTabs : Array.isArray(props.tabs) ? props.tabs : [];
|
|
39049
39300
|
const pages2 = props.style === "swipe" ? props.swipePages : void 0;
|
|
39050
|
-
const [local, setLocal] =
|
|
39051
|
-
|
|
39301
|
+
const [local, setLocal] = React11.useState(void 0);
|
|
39302
|
+
React11.useEffect(() => {
|
|
39052
39303
|
setLocal(void 0);
|
|
39053
39304
|
}, [selectedId]);
|
|
39054
39305
|
const current = local != null && tabs.some((t2) => t2.id === local) ? local : selectedId;
|
|
@@ -39068,15 +39319,15 @@ var init_controls = __esm({
|
|
|
39068
39319
|
e2.preventDefault();
|
|
39069
39320
|
if (ni2 !== selIdx) select2(ni2);
|
|
39070
39321
|
};
|
|
39071
|
-
const pagerRef =
|
|
39072
|
-
const settle2 =
|
|
39073
|
-
|
|
39322
|
+
const pagerRef = React11.useRef(null);
|
|
39323
|
+
const settle2 = React11.useRef(void 0);
|
|
39324
|
+
React11.useEffect(() => {
|
|
39074
39325
|
const el2 = pagerRef.current;
|
|
39075
39326
|
if (!el2 || !el2.clientWidth) return;
|
|
39076
39327
|
const x2 = selIdx * el2.clientWidth;
|
|
39077
39328
|
if (Math.abs(el2.scrollLeft - x2) > 1) el2.scrollTo?.({ left: x2, behavior: "smooth" });
|
|
39078
39329
|
}, [selIdx, pages2]);
|
|
39079
|
-
|
|
39330
|
+
React11.useEffect(() => () => clearTimeout(settle2.current), []);
|
|
39080
39331
|
const onPagerScroll = () => {
|
|
39081
39332
|
clearTimeout(settle2.current);
|
|
39082
39333
|
settle2.current = setTimeout(() => {
|
|
@@ -39187,7 +39438,7 @@ var init_controls = __esm({
|
|
|
39187
39438
|
const expanded = useResolvedScalar(props.expandedPath ?? props.expanded, ctx);
|
|
39188
39439
|
const open = expanded === true;
|
|
39189
39440
|
const fire = ctx.onAction && props.onToggle ? () => ctx.onAction(resolveRowAction(props.onToggle, ctx)) : void 0;
|
|
39190
|
-
const regionId =
|
|
39441
|
+
const regionId = React11.useMemo(() => `himi-disclosure-${++disclosureSeq}`, []);
|
|
39191
39442
|
return /* @__PURE__ */ jsxs5("div", { style: { width: "100%", ...wrap }, children: [
|
|
39192
39443
|
/* @__PURE__ */ jsxs5(
|
|
39193
39444
|
"button",
|
|
@@ -39206,7 +39457,7 @@ var init_controls = __esm({
|
|
|
39206
39457
|
]
|
|
39207
39458
|
}
|
|
39208
39459
|
),
|
|
39209
|
-
/* @__PURE__ */ jsx7("div", { id: regionId, role: "region", hidden: !open, style: open ? { padding: "2px 2px 8px 24px" } : void 0, children: open && (Array.isArray(props.content) ? props.content.map((c2, i2) => /* @__PURE__ */ jsx7(
|
|
39460
|
+
/* @__PURE__ */ jsx7("div", { id: regionId, role: "region", hidden: !open, style: open ? { padding: "2px 2px 8px 24px" } : void 0, children: open && (Array.isArray(props.content) ? props.content.map((c2, i2) => /* @__PURE__ */ jsx7(React11.Fragment, { children: renderChild(c2) }, c2?.id ?? i2)) : renderChild(props.content)) })
|
|
39210
39461
|
] });
|
|
39211
39462
|
};
|
|
39212
39463
|
}
|
|
@@ -39501,7 +39752,7 @@ var init_listGestures = __esm({
|
|
|
39501
39752
|
init_tokens2();
|
|
39502
39753
|
PULL_THRESHOLD = 56;
|
|
39503
39754
|
SWIPE_OPEN = 76;
|
|
39504
|
-
PullToRefreshList = ({ onRefresh, accent, fg, surface, label: label3 = "Pull to refresh", fontFamily = '"Wix Madefor Text", system-ui', style, children }) => {
|
|
39755
|
+
PullToRefreshList = ({ onRefresh, accent, fg, surface, label: label3 = "Pull to refresh", fontFamily = '"Wix Madefor Text", system-ui', style, children, ...extras }) => {
|
|
39505
39756
|
const [pull, setPull] = useState4(0);
|
|
39506
39757
|
const [busy, setBusy] = useState4(false);
|
|
39507
39758
|
const startY = useRef2(null);
|
|
@@ -39529,6 +39780,7 @@ var init_listGestures = __esm({
|
|
|
39529
39780
|
return /* @__PURE__ */ jsxs6(
|
|
39530
39781
|
"div",
|
|
39531
39782
|
{
|
|
39783
|
+
...extras,
|
|
39532
39784
|
"data-himalaya-pull-host": true,
|
|
39533
39785
|
onTouchStart,
|
|
39534
39786
|
onTouchMove,
|
|
@@ -40345,7 +40597,7 @@ var init_rich_text_field = __esm({
|
|
|
40345
40597
|
});
|
|
40346
40598
|
|
|
40347
40599
|
// ../../core/web-renderer/src/richContent.tsx
|
|
40348
|
-
import
|
|
40600
|
+
import React13 from "react";
|
|
40349
40601
|
import { Fragment as Fragment3, jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
40350
40602
|
function richContentFollow(ctx, onLink) {
|
|
40351
40603
|
return (url) => {
|
|
@@ -40450,7 +40702,7 @@ function Block({ b: b2, env, depth }) {
|
|
|
40450
40702
|
minHeight: b2.spans.length ? void 0 : "1.5em"
|
|
40451
40703
|
}, children: /* @__PURE__ */ jsx9(Spans, { spans: b2.spans, env }) });
|
|
40452
40704
|
case "heading":
|
|
40453
|
-
return
|
|
40705
|
+
return React13.createElement(
|
|
40454
40706
|
`h${b2.level}`,
|
|
40455
40707
|
{ ...tid(env, b2.id, b2.kind), style: textStyle(ctx, RICH_CONTENT_HEADING_TOKENS[b2.level - 1], text13) },
|
|
40456
40708
|
/* @__PURE__ */ jsx9(Spans, { spans: b2.spans, env })
|
|
@@ -41022,12 +41274,12 @@ var webviewBridgeHost_exports = {};
|
|
|
41022
41274
|
__export(webviewBridgeHost_exports, {
|
|
41023
41275
|
default: () => WebViewBridgeHost
|
|
41024
41276
|
});
|
|
41025
|
-
import
|
|
41277
|
+
import React14 from "react";
|
|
41026
41278
|
function WebViewBridgeHost(p2) {
|
|
41027
41279
|
const { channel: channel3, props, ctx } = p2;
|
|
41028
41280
|
const explicit2 = useResolvedScalar(props.instanceId, ctx);
|
|
41029
41281
|
const explicitId = typeof explicit2 === "string" || typeof explicit2 === "number" ? String(explicit2) : "";
|
|
41030
|
-
const pageActive =
|
|
41282
|
+
const pageActive = React14.useContext(PageActiveContext);
|
|
41031
41283
|
const active = useResolvedScalar(bound(props.activePath), ctx) !== false && pageActive;
|
|
41032
41284
|
const muted = useResolvedScalar(bound(props.mutedPath), ctx) === true;
|
|
41033
41285
|
const cfg = props.config && typeof props.config === "object" ? props.config : {};
|
|
@@ -41036,10 +41288,10 @@ function WebViewBridgeHost(p2) {
|
|
|
41036
41288
|
const screenArgs = JSON.stringify(ctx.screenArgs ?? null);
|
|
41037
41289
|
const source = p2.htmlStr != null ? "\0html" : p2.urlStr ?? "";
|
|
41038
41290
|
const origins = p2.allowedOrigins.join("\n");
|
|
41039
|
-
const sessionRef =
|
|
41040
|
-
const live3 =
|
|
41291
|
+
const sessionRef = React14.useRef(null);
|
|
41292
|
+
const live3 = React14.useRef({ active, muted });
|
|
41041
41293
|
live3.current = { active, muted };
|
|
41042
|
-
|
|
41294
|
+
React14.useEffect(() => {
|
|
41043
41295
|
if (typeof window === "undefined") return;
|
|
41044
41296
|
if (p2.urlStr == null && p2.htmlStr == null) return;
|
|
41045
41297
|
let instanceId;
|
|
@@ -41078,13 +41330,13 @@ function WebViewBridgeHost(p2) {
|
|
|
41078
41330
|
p2.load.onLoad = void 0;
|
|
41079
41331
|
};
|
|
41080
41332
|
}, [channel3, ctx.screenId, screenArgs, p2.nodeId, explicitId, source, origins, security, consoleForwarding]);
|
|
41081
|
-
|
|
41333
|
+
React14.useEffect(() => {
|
|
41082
41334
|
sessionRef.current?.setActive(active);
|
|
41083
41335
|
}, [active]);
|
|
41084
|
-
|
|
41336
|
+
React14.useEffect(() => {
|
|
41085
41337
|
sessionRef.current?.setMuted(muted);
|
|
41086
41338
|
}, [muted]);
|
|
41087
|
-
const first =
|
|
41339
|
+
const first = React14.useRef(true);
|
|
41088
41340
|
useLayoutEffectInBrowser(() => {
|
|
41089
41341
|
if (first.current) {
|
|
41090
41342
|
first.current = false;
|
|
@@ -41104,7 +41356,7 @@ var init_webviewBridgeHost = __esm({
|
|
|
41104
41356
|
init_helpers();
|
|
41105
41357
|
init_liveWindow();
|
|
41106
41358
|
init_webviewBridge();
|
|
41107
|
-
useLayoutEffectInBrowser = typeof globalThis.document === "undefined" ?
|
|
41359
|
+
useLayoutEffectInBrowser = typeof globalThis.document === "undefined" ? React14.useEffect : React14.useLayoutEffect;
|
|
41108
41360
|
bound = (v2) => typeof v2 === "string" && isBinding(v2) ? v2 : void 0;
|
|
41109
41361
|
}
|
|
41110
41362
|
});
|
|
@@ -43357,11 +43609,11 @@ var init_pdf = __esm({
|
|
|
43357
43609
|
var DESCRIPTORS = __webpack_require__3(3724);
|
|
43358
43610
|
var definePropertyModule = __webpack_require__3(4913);
|
|
43359
43611
|
var createPropertyDescriptor = __webpack_require__3(6980);
|
|
43360
|
-
module.exports = DESCRIPTORS ? function(
|
|
43361
|
-
return definePropertyModule.f(
|
|
43362
|
-
} : function(
|
|
43363
|
-
|
|
43364
|
-
return
|
|
43612
|
+
module.exports = DESCRIPTORS ? function(object13, key3, value2) {
|
|
43613
|
+
return definePropertyModule.f(object13, key3, createPropertyDescriptor(1, value2));
|
|
43614
|
+
} : function(object13, key3, value2) {
|
|
43615
|
+
object13[key3] = value2;
|
|
43616
|
+
return object13;
|
|
43365
43617
|
};
|
|
43366
43618
|
},
|
|
43367
43619
|
/***/
|
|
@@ -43380,9 +43632,9 @@ var init_pdf = __esm({
|
|
|
43380
43632
|
var DESCRIPTORS = __webpack_require__3(3724);
|
|
43381
43633
|
var definePropertyModule = __webpack_require__3(4913);
|
|
43382
43634
|
var createPropertyDescriptor = __webpack_require__3(6980);
|
|
43383
|
-
module.exports = function(
|
|
43384
|
-
if (DESCRIPTORS) definePropertyModule.f(
|
|
43385
|
-
else
|
|
43635
|
+
module.exports = function(object13, key3, value2) {
|
|
43636
|
+
if (DESCRIPTORS) definePropertyModule.f(object13, key3, createPropertyDescriptor(0, value2));
|
|
43637
|
+
else object13[key3] = value2;
|
|
43386
43638
|
};
|
|
43387
43639
|
},
|
|
43388
43640
|
/***/
|
|
@@ -43672,9 +43924,9 @@ var init_pdf = __esm({
|
|
|
43672
43924
|
6706(module, __unused_webpack_exports, __webpack_require__3) {
|
|
43673
43925
|
var uncurryThis = __webpack_require__3(9504);
|
|
43674
43926
|
var aCallable = __webpack_require__3(9306);
|
|
43675
|
-
module.exports = function(
|
|
43927
|
+
module.exports = function(object13, key3, method) {
|
|
43676
43928
|
try {
|
|
43677
|
-
return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(
|
|
43929
|
+
return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object13, key3)[method]));
|
|
43678
43930
|
} catch (error) {
|
|
43679
43931
|
}
|
|
43680
43932
|
};
|
|
@@ -44642,13 +44894,13 @@ var init_pdf = __esm({
|
|
|
44642
44894
|
var $Object = Object;
|
|
44643
44895
|
var ObjectPrototype = $Object.prototype;
|
|
44644
44896
|
module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O2) {
|
|
44645
|
-
var
|
|
44646
|
-
if (hasOwn(
|
|
44647
|
-
var constructor =
|
|
44648
|
-
if (isCallable(constructor) &&
|
|
44897
|
+
var object13 = toObject(O2);
|
|
44898
|
+
if (hasOwn(object13, IE_PROTO)) return object13[IE_PROTO];
|
|
44899
|
+
var constructor = object13.constructor;
|
|
44900
|
+
if (isCallable(constructor) && object13 instanceof constructor) {
|
|
44649
44901
|
return constructor.prototype;
|
|
44650
44902
|
}
|
|
44651
|
-
return
|
|
44903
|
+
return object13 instanceof $Object ? ObjectPrototype : null;
|
|
44652
44904
|
};
|
|
44653
44905
|
},
|
|
44654
44906
|
/***/
|
|
@@ -44664,8 +44916,8 @@ var init_pdf = __esm({
|
|
|
44664
44916
|
var indexOf = __webpack_require__3(9617).indexOf;
|
|
44665
44917
|
var hiddenKeys = __webpack_require__3(421);
|
|
44666
44918
|
var push = uncurryThis([].push);
|
|
44667
|
-
module.exports = function(
|
|
44668
|
-
var O2 = toIndexedObject(
|
|
44919
|
+
module.exports = function(object13, names2) {
|
|
44920
|
+
var O2 = toIndexedObject(object13);
|
|
44669
44921
|
var i2 = 0;
|
|
44670
44922
|
var result = [];
|
|
44671
44923
|
var key3;
|
|
@@ -46108,13 +46360,13 @@ var init_pdf = __esm({
|
|
|
46108
46360
|
}
|
|
46109
46361
|
return call(reviver, holder, name, val, context);
|
|
46110
46362
|
};
|
|
46111
|
-
var internalizeProperty = function(
|
|
46363
|
+
var internalizeProperty = function(object13, key3, value2) {
|
|
46112
46364
|
if (DESCRIPTORS) {
|
|
46113
|
-
var descriptor = getOwnPropertyDescriptor(
|
|
46365
|
+
var descriptor = getOwnPropertyDescriptor(object13, key3);
|
|
46114
46366
|
if (descriptor && !descriptor.configurable) return;
|
|
46115
46367
|
}
|
|
46116
|
-
if (value2 === void 0) delete
|
|
46117
|
-
else createProperty(
|
|
46368
|
+
if (value2 === void 0) delete object13[key3];
|
|
46369
|
+
else createProperty(object13, key3, value2);
|
|
46118
46370
|
};
|
|
46119
46371
|
var Node2 = function(value2, end, source, nodes) {
|
|
46120
46372
|
this.value = value2;
|
|
@@ -46159,7 +46411,7 @@ var init_pdf = __esm({
|
|
|
46159
46411
|
var source = this.source;
|
|
46160
46412
|
var i2 = this.index + 1;
|
|
46161
46413
|
var expectKeypair = false;
|
|
46162
|
-
var
|
|
46414
|
+
var object13 = {};
|
|
46163
46415
|
var nodes = {};
|
|
46164
46416
|
var closed = false;
|
|
46165
46417
|
while (i2 < source.length) {
|
|
@@ -46176,7 +46428,7 @@ var init_pdf = __esm({
|
|
|
46176
46428
|
i2 = this.skip(IS_WHITESPACE, i2);
|
|
46177
46429
|
result = this.fork(i2).parse();
|
|
46178
46430
|
createProperty(nodes, key3, result);
|
|
46179
|
-
createProperty(
|
|
46431
|
+
createProperty(object13, key3, result.value);
|
|
46180
46432
|
i2 = this.until([",", "}"], result.end);
|
|
46181
46433
|
var chr = at2(source, i2);
|
|
46182
46434
|
if (chr === ",") {
|
|
@@ -46189,7 +46441,7 @@ var init_pdf = __esm({
|
|
|
46189
46441
|
}
|
|
46190
46442
|
}
|
|
46191
46443
|
if (!closed) throw new SyntaxError2("Unterminated object at: " + i2);
|
|
46192
|
-
return this.node(OBJECT,
|
|
46444
|
+
return this.node(OBJECT, object13, this.index, i2, nodes);
|
|
46193
46445
|
},
|
|
46194
46446
|
array: function() {
|
|
46195
46447
|
var source = this.source;
|
|
@@ -121720,7 +121972,7 @@ __export(pdfDocument_exports, {
|
|
|
121720
121972
|
PdfDocument: () => PdfDocument,
|
|
121721
121973
|
destroyPdfDocumentLoad: () => destroyPdfDocumentLoad
|
|
121722
121974
|
});
|
|
121723
|
-
import
|
|
121975
|
+
import React15 from "react";
|
|
121724
121976
|
import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
121725
121977
|
async function loadPdfDocument(src, ownerDocument) {
|
|
121726
121978
|
const [pdfjs, pdfWorkerAsset] = await Promise.all([
|
|
@@ -121739,18 +121991,18 @@ async function destroyPdfDocumentLoad(loading) {
|
|
|
121739
121991
|
}
|
|
121740
121992
|
}
|
|
121741
121993
|
function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, style, onPageCount, onFallback, loadDocument = loadPdfDocument }) {
|
|
121742
|
-
const [pages2, setPages] =
|
|
121743
|
-
const [failedRequest, setFailedRequest] =
|
|
121994
|
+
const [pages2, setPages] = React15.useState(0);
|
|
121995
|
+
const [failedRequest, setFailedRequest] = React15.useState(null);
|
|
121744
121996
|
const request = JSON.stringify([src, zoomPercent]);
|
|
121745
121997
|
const failed3 = failedRequest === request;
|
|
121746
|
-
const containerRef =
|
|
121747
|
-
const frameRef =
|
|
121748
|
-
const startPageRef =
|
|
121998
|
+
const containerRef = React15.useRef(null);
|
|
121999
|
+
const frameRef = React15.useRef(null);
|
|
122000
|
+
const startPageRef = React15.useRef(startPage);
|
|
121749
122001
|
startPageRef.current = startPage;
|
|
121750
|
-
|
|
122002
|
+
React15.useEffect(() => {
|
|
121751
122003
|
if (failed3) onFallback?.();
|
|
121752
122004
|
}, [failed3, onFallback]);
|
|
121753
|
-
|
|
122005
|
+
React15.useEffect(() => {
|
|
121754
122006
|
const frame2 = frameRef.current;
|
|
121755
122007
|
const page = Math.min(pages2, Math.max(1, Math.floor(startPage ?? 1) || 1));
|
|
121756
122008
|
const canvas = pages2 ? containerRef.current?.querySelector(`[data-pdf-page="${page}"]`) : null;
|
|
@@ -121759,7 +122011,7 @@ function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, st
|
|
|
121759
122011
|
const scale = frame2.offsetHeight > 0 && box.height > 0 ? box.height / frame2.offsetHeight : 1;
|
|
121760
122012
|
frame2.scrollTop += (canvas.getBoundingClientRect().top - box.top) / scale;
|
|
121761
122013
|
}, [startPage, pages2]);
|
|
121762
|
-
|
|
122014
|
+
React15.useEffect(() => {
|
|
121763
122015
|
let live3 = true;
|
|
121764
122016
|
let loading;
|
|
121765
122017
|
const container = containerRef.current;
|
|
@@ -121822,7 +122074,7 @@ var init_pdfDocument = __esm({
|
|
|
121822
122074
|
});
|
|
121823
122075
|
|
|
121824
122076
|
// ../../core/web-renderer/src/renderNode.tsx
|
|
121825
|
-
import
|
|
122077
|
+
import React16 from "react";
|
|
121826
122078
|
import { createPortal } from "react-dom";
|
|
121827
122079
|
import { Fragment as Fragment4, jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
121828
122080
|
function boundTokenName(path2, fallback, ctx) {
|
|
@@ -121934,8 +122186,8 @@ function isNumericLike(s2) {
|
|
|
121934
122186
|
return NUMERIC_TEXT.test(s2.trim());
|
|
121935
122187
|
}
|
|
121936
122188
|
function useValueSwap(value2, enabled2) {
|
|
121937
|
-
const prev =
|
|
121938
|
-
const gen =
|
|
122189
|
+
const prev = React16.useRef(value2);
|
|
122190
|
+
const gen = React16.useRef(0);
|
|
121939
122191
|
if (prev.current !== value2) {
|
|
121940
122192
|
if (enabled2 && prev.current !== void 0 && value2 !== void 0) gen.current += 1;
|
|
121941
122193
|
prev.current = value2;
|
|
@@ -122003,9 +122255,9 @@ function revealOnFocusStyle(C2) {
|
|
|
122003
122255
|
};
|
|
122004
122256
|
}
|
|
122005
122257
|
function FormFieldLabelIdScope({ render, fieldKey, ...extras }) {
|
|
122006
|
-
const id =
|
|
122258
|
+
const id = React16.useId().replace(/[^A-Za-z0-9_-]/g, "");
|
|
122007
122259
|
const el2 = render(`${fieldKey ? `${fieldKey}-` : ""}auto-${id}`);
|
|
122008
|
-
return Object.keys(extras).length ?
|
|
122260
|
+
return Object.keys(extras).length ? React16.cloneElement(el2, extras) : el2;
|
|
122009
122261
|
}
|
|
122010
122262
|
function formFieldA11y(props) {
|
|
122011
122263
|
const labelledBy = props.__labelledBy;
|
|
@@ -122034,9 +122286,10 @@ function ensureListAnimateRuntime() {
|
|
|
122034
122286
|
listAnimateRuntimeInstalled = true;
|
|
122035
122287
|
const prevRects = /* @__PURE__ */ new WeakMap();
|
|
122036
122288
|
const rowKey = (c2) => c2.dataset?.componentId ?? c2.querySelector("[data-component-id]")?.dataset?.componentId;
|
|
122289
|
+
const rowBoxes = (host) => Array.from(host.children, (c2) => c2.hasAttribute("data-himalaya-row-id") ? c2.firstElementChild : c2).filter((c2) => c2 != null);
|
|
122037
122290
|
const snapshot4 = (host) => {
|
|
122038
122291
|
const m2 = /* @__PURE__ */ new Map();
|
|
122039
|
-
|
|
122292
|
+
rowBoxes(host).forEach((c2) => {
|
|
122040
122293
|
const id = rowKey(c2);
|
|
122041
122294
|
if (id) m2.set(id, c2.getBoundingClientRect());
|
|
122042
122295
|
});
|
|
@@ -122050,11 +122303,12 @@ function ensureListAnimateRuntime() {
|
|
|
122050
122303
|
return;
|
|
122051
122304
|
}
|
|
122052
122305
|
const next = /* @__PURE__ */ new Map();
|
|
122053
|
-
|
|
122306
|
+
const boxes = rowBoxes(host);
|
|
122307
|
+
boxes.forEach((c2) => {
|
|
122054
122308
|
const id = rowKey(c2);
|
|
122055
122309
|
if (id) next.set(id, c2.getBoundingClientRect());
|
|
122056
122310
|
});
|
|
122057
|
-
|
|
122311
|
+
boxes.forEach((c2) => {
|
|
122058
122312
|
const el2 = c2;
|
|
122059
122313
|
const id = rowKey(c2);
|
|
122060
122314
|
if (!id) return;
|
|
@@ -122740,9 +122994,9 @@ function sectionSlot(raw) {
|
|
|
122740
122994
|
}
|
|
122741
122995
|
}
|
|
122742
122996
|
function useLoadingTiming(target, graceMs, floorMs) {
|
|
122743
|
-
const [shown2, setShown] =
|
|
122744
|
-
const loadingSince =
|
|
122745
|
-
|
|
122997
|
+
const [shown2, setShown] = React16.useState(() => target === "loading" && graceMs > 0 ? "pending" : target);
|
|
122998
|
+
const loadingSince = React16.useRef(shown2 === "loading" ? Date.now() : null);
|
|
122999
|
+
React16.useEffect(() => {
|
|
122746
123000
|
if (target === shown2) return void 0;
|
|
122747
123001
|
if (target === "loading") {
|
|
122748
123002
|
if (graceMs <= 0) {
|
|
@@ -122781,8 +123035,8 @@ function autoGrowBox(contentHeight, lineHeight, verticalPadding, maxLines) {
|
|
|
122781
123035
|
function PreviewMenuOverlay({ label: label3, dialogRef, preview, ctx, onClose, anchorHost, children }) {
|
|
122782
123036
|
const host = anchorHost?.closest(`[${MODAL_SCOPE_ATTR}]`) ?? (typeof document !== "undefined" ? document.body : null);
|
|
122783
123037
|
const reduce = ctx.reduceMotion();
|
|
122784
|
-
const [shown2, setShown] =
|
|
122785
|
-
|
|
123038
|
+
const [shown2, setShown] = React16.useState(reduce);
|
|
123039
|
+
React16.useEffect(() => {
|
|
122786
123040
|
if (reduce || typeof requestAnimationFrame !== "function") {
|
|
122787
123041
|
setShown(true);
|
|
122788
123042
|
return;
|
|
@@ -122791,7 +123045,7 @@ function PreviewMenuOverlay({ label: label3, dialogRef, preview, ctx, onClose, a
|
|
|
122791
123045
|
return () => cancelAnimationFrame(raf);
|
|
122792
123046
|
}, [reduce]);
|
|
122793
123047
|
const inScope = host != null && host !== host.ownerDocument.body;
|
|
122794
|
-
const previewCtx =
|
|
123048
|
+
const previewCtx = React16.useMemo(() => ctx.onAction ? { ...ctx, onAction: (a2) => {
|
|
122795
123049
|
onClose();
|
|
122796
123050
|
ctx.onAction(a2);
|
|
122797
123051
|
} } : ctx, [ctx, onClose]);
|
|
@@ -122858,7 +123112,7 @@ function youtubeId(item) {
|
|
|
122858
123112
|
}
|
|
122859
123113
|
}
|
|
122860
123114
|
function useResolvedMediaItems(items, ctx) {
|
|
122861
|
-
const paths2 =
|
|
123115
|
+
const paths2 = React16.useMemo(() => {
|
|
122862
123116
|
const set = /* @__PURE__ */ new Set();
|
|
122863
123117
|
for (const it2 of items) {
|
|
122864
123118
|
if (!it2 || typeof it2 !== "object") continue;
|
|
@@ -122870,17 +123124,17 @@ function useResolvedMediaItems(items, ctx) {
|
|
|
122870
123124
|
return [...set];
|
|
122871
123125
|
}, [items]);
|
|
122872
123126
|
const key3 = paths2.join("\0");
|
|
122873
|
-
const [values, setValues] =
|
|
123127
|
+
const [values, setValues] = React16.useState(() => {
|
|
122874
123128
|
const seed2 = {};
|
|
122875
123129
|
if (ctx.provider) for (const p2 of paths2) seed2[p2] = ctx.provider.value(p2);
|
|
122876
123130
|
return seed2;
|
|
122877
123131
|
});
|
|
122878
|
-
|
|
123132
|
+
React16.useEffect(() => {
|
|
122879
123133
|
if (!ctx.provider || paths2.length === 0) return;
|
|
122880
123134
|
const unsubs = paths2.map((p2) => ctx.provider.subscribe(p2, (v2) => setValues((prev) => prev[p2] === v2 ? prev : { ...prev, [p2]: v2 })));
|
|
122881
123135
|
return () => unsubs.forEach((u2) => u2());
|
|
122882
123136
|
}, [ctx.provider, key3]);
|
|
122883
|
-
return
|
|
123137
|
+
return React16.useMemo(() => items.map((it2) => {
|
|
122884
123138
|
if (!it2 || typeof it2 !== "object") return it2;
|
|
122885
123139
|
let out2 = null;
|
|
122886
123140
|
for (const f2 of MEDIA_ITEM_BINDABLE) {
|
|
@@ -122923,8 +123177,8 @@ function reloadKeyOf(v2) {
|
|
|
122923
123177
|
return String(v2);
|
|
122924
123178
|
}
|
|
122925
123179
|
function cloneWithKids(el2, props, kids3) {
|
|
122926
|
-
if (kids3 === el2.props.children) return
|
|
122927
|
-
return
|
|
123180
|
+
if (kids3 === el2.props.children) return React16.cloneElement(el2, props);
|
|
123181
|
+
return React16.cloneElement(el2, props, ...Array.isArray(kids3) ? kids3 : [kids3]);
|
|
122928
123182
|
}
|
|
122929
123183
|
function editA11yParts(node, edit) {
|
|
122930
123184
|
if (Array.isArray(node)) {
|
|
@@ -122936,7 +123190,7 @@ function editA11yParts(node, edit) {
|
|
|
122936
123190
|
});
|
|
122937
123191
|
return changed ? out2 : node;
|
|
122938
123192
|
}
|
|
122939
|
-
if (!
|
|
123193
|
+
if (!React16.isValidElement(node) || typeof node.type !== "string") return node;
|
|
122940
123194
|
const own6 = node.props;
|
|
122941
123195
|
if (own6["data-component-id"] != null) return node;
|
|
122942
123196
|
const part4 = own6[A11Y_PART];
|
|
@@ -122980,8 +123234,8 @@ function isNativeInteractiveElement(el2) {
|
|
|
122980
123234
|
return typeof el2.type === "string" && (["button", "input", "select", "textarea"].includes(el2.type) || el2.type === "a" && typeof props.href === "string");
|
|
122981
123235
|
}
|
|
122982
123236
|
function hasInteractiveReactDescendant(el2) {
|
|
122983
|
-
return
|
|
122984
|
-
if (!
|
|
123237
|
+
return React16.Children.toArray(el2.props.children).some((child) => {
|
|
123238
|
+
if (!React16.isValidElement(child)) return false;
|
|
122985
123239
|
if (isNativeInteractiveElement(child)) return true;
|
|
122986
123240
|
const props = child.props;
|
|
122987
123241
|
if (typeof child.type === "string" && typeof props.role === "string" && INTERACTIVE_ROLES.has(props.role)) return true;
|
|
@@ -123058,8 +123312,8 @@ function trackActivatorName(activator) {
|
|
|
123058
123312
|
activatorNameObservers.set(activator, observer);
|
|
123059
123313
|
}
|
|
123060
123314
|
function TapActivator({ label: label3, state, tabIndex = 0, role = "button", hint, initialFocus }) {
|
|
123061
|
-
const ref =
|
|
123062
|
-
const hintId = `hm-tap-hint${
|
|
123315
|
+
const ref = React16.useRef(null);
|
|
123316
|
+
const hintId = `hm-tap-hint${React16.useId()}`;
|
|
123063
123317
|
useIsomorphicLayoutEffect(() => {
|
|
123064
123318
|
const el2 = ref.current;
|
|
123065
123319
|
if (!el2 || label3) return;
|
|
@@ -123098,9 +123352,9 @@ function TapActivator({ label: label3, state, tabIndex = 0, role = "button", hin
|
|
|
123098
123352
|
function withExtras(name, render) {
|
|
123099
123353
|
const Wrapped = ({ props, ctx, wrap, nodeId, gap, ...pass }) => {
|
|
123100
123354
|
const el2 = render({ props, ctx, wrap, nodeId, gap, nodeExtras: pass });
|
|
123101
|
-
if (!
|
|
123355
|
+
if (!React16.isValidElement(el2)) return /* @__PURE__ */ jsx11(Fragment4, { children: el2 });
|
|
123102
123356
|
if (el2.props[NODE_EXTRAS_TARGET] === "bottom-drawer-panel") {
|
|
123103
|
-
return
|
|
123357
|
+
return React16.cloneElement(el2, { [NODE_EXTRAS_TARGET]: void 0 });
|
|
123104
123358
|
}
|
|
123105
123359
|
const additive = addIntrinsicPadding(el2.props.style, wrap ?? {});
|
|
123106
123360
|
const inferredDecorative = el2.props[INFERRED_DECORATIVE] === true;
|
|
@@ -123120,7 +123374,7 @@ function withExtras(name, render) {
|
|
|
123120
123374
|
}, hasA11yParts ? editA11yParts(kids3, a11yPartEdit({}, false, () => {
|
|
123121
123375
|
})) : kids3));
|
|
123122
123376
|
}
|
|
123123
|
-
return withCircleClipBorder(additive ?
|
|
123377
|
+
return withCircleClipBorder(additive ? React16.cloneElement(el2, { style: additive }) : el2);
|
|
123124
123378
|
}
|
|
123125
123379
|
const prev = el2.props;
|
|
123126
123380
|
const next = { ...pass };
|
|
@@ -123221,7 +123475,7 @@ function withExtras(name, render) {
|
|
|
123221
123475
|
}
|
|
123222
123476
|
return withCircleClipBorder(cloneWithKids(el2, next, kids3));
|
|
123223
123477
|
}
|
|
123224
|
-
return withCircleClipBorder(
|
|
123478
|
+
return withCircleClipBorder(React16.cloneElement(el2, next));
|
|
123225
123479
|
};
|
|
123226
123480
|
Wrapped.displayName = name;
|
|
123227
123481
|
return Wrapped;
|
|
@@ -123329,7 +123583,7 @@ function overlayEdgeStyle(edge, gap) {
|
|
|
123329
123583
|
}
|
|
123330
123584
|
function useFlippedEdge(edge, open, bubbleRef, anchorRef, gap = TOOLTIP_GAP) {
|
|
123331
123585
|
const initial = { edge, x: 0, y: 0, maxWidth: Infinity };
|
|
123332
|
-
const [placed, setPlaced] =
|
|
123586
|
+
const [placed, setPlaced] = React16.useState(initial);
|
|
123333
123587
|
useIsomorphicLayoutEffect(() => {
|
|
123334
123588
|
if (!open) {
|
|
123335
123589
|
setPlaced((previous) => previous.edge === edge && previous.x === 0 && previous.y === 0 && previous.maxWidth === Infinity ? previous : initial);
|
|
@@ -124153,7 +124407,7 @@ function renderNodeInner(node, ctx) {
|
|
|
124153
124407
|
return /* @__PURE__ */ jsx11(ScrollIntoViewNode, { node: bare, ctx, path: node.modifiers.scrollIntoViewPath });
|
|
124154
124408
|
}
|
|
124155
124409
|
const el2 = renderInner(node, ctx);
|
|
124156
|
-
if (!
|
|
124410
|
+
if (!React16.isValidElement(el2)) return el2;
|
|
124157
124411
|
const extra = {};
|
|
124158
124412
|
const material = node?.modifiers?.material;
|
|
124159
124413
|
const materialName = typeof material === "string" ? material : material?.token ?? material?.name;
|
|
@@ -124338,9 +124592,9 @@ function renderNodeInner(node, ctx) {
|
|
|
124338
124592
|
const finalStyle = extra.style ?? el2.props.style;
|
|
124339
124593
|
if (!finalStyle?.position) extra.style = { ...finalStyle ?? {}, position: "relative" };
|
|
124340
124594
|
}
|
|
124341
|
-
let out2 = tapActivator ?
|
|
124342
|
-
if (
|
|
124343
|
-
if (busyGate &&
|
|
124595
|
+
let out2 = tapActivator ? React16.cloneElement(el2, extra, tapActivator, el2.props.children) : Object.keys(extra).length ? React16.cloneElement(el2, extra) : el2;
|
|
124596
|
+
if (React16.isValidElement(out2)) out2 = withCircleClipBorder(out2);
|
|
124597
|
+
if (busyGate && React16.isValidElement(out2)) out2 = /* @__PURE__ */ jsx11(WorkerTapGate, { gate: busyGate, action: tap, children: out2 });
|
|
124344
124598
|
if (a11yHint && !tapActivator) {
|
|
124345
124599
|
out2 = /* @__PURE__ */ jsx11(A11yHintDescription, { hint: a11yHint, idBase: componentId, children: out2 });
|
|
124346
124600
|
}
|
|
@@ -124353,10 +124607,10 @@ function renderNodeInner(node, ctx) {
|
|
|
124353
124607
|
return out2;
|
|
124354
124608
|
}
|
|
124355
124609
|
function NodeOnAppear({ action, ctx, children }) {
|
|
124356
|
-
const fired =
|
|
124357
|
-
const appearanceAction =
|
|
124610
|
+
const fired = React16.useRef(false);
|
|
124611
|
+
const appearanceAction = React16.useContext(AppearanceActionContext);
|
|
124358
124612
|
const onAction = appearanceAction === void 0 ? ctx.onAction : appearanceAction;
|
|
124359
|
-
|
|
124613
|
+
React16.useEffect(() => {
|
|
124360
124614
|
if (fired.current || ctx.staticRender || !onAction) return;
|
|
124361
124615
|
const resolved2 = resolveItemDeep2(action, ctx);
|
|
124362
124616
|
if (!resolved2?.actionId) return;
|
|
@@ -124569,22 +124823,26 @@ function renderInner(node, ctx) {
|
|
|
124569
124823
|
const boundStagger = ctx.reduceMotion() ? 0 : Number(props.staggerMs ?? props.stagger_ms ?? 0);
|
|
124570
124824
|
const boundAnimateItems = listAnimateItemsEnabled(ctx) && (props.animateItems ?? props.animate_items) === true && !props.horizontal;
|
|
124571
124825
|
if (boundAnimateItems) ensureListAnimateRuntime();
|
|
124826
|
+
const jumpPath = props.scrollToItemPath ?? props.scroll_to_item_path;
|
|
124827
|
+
const onTopItem = props.onTopItemChange ?? props.on_top_item_change;
|
|
124828
|
+
const anchored = !props.horizontal && !!(jumpPath || onTopItem);
|
|
124572
124829
|
const boundBody = /* @__PURE__ */ jsx11(
|
|
124573
124830
|
BoundList,
|
|
124574
124831
|
{
|
|
124575
124832
|
ctx,
|
|
124576
124833
|
itemsPath,
|
|
124577
124834
|
template: items[0],
|
|
124835
|
+
tagRows: anchored,
|
|
124578
124836
|
windowed: !props.horizontal,
|
|
124579
124837
|
wrapRows: boundAnimateItems ? (rows) => /* @__PURE__ */ jsx11("div", { "data-himalaya-animate-items": "1", style: { display: "contents" }, children: rows }) : void 0,
|
|
124580
124838
|
footer: boundPagination ? /* @__PURE__ */ jsx11(LoadMoreSentinel, { ctx, pagination: boundPagination }) : null,
|
|
124581
124839
|
pageCursor: boundPagination?.cursor,
|
|
124582
124840
|
renderRow: keptRowRenderer(ctx, props, () => (t2, ic) => {
|
|
124583
124841
|
let row2 = renderNode(t2, asItem(ic));
|
|
124584
|
-
if (boundStagger > 0 &&
|
|
124842
|
+
if (boundStagger > 0 && React16.isValidElement(row2) && (props.horizontal || Number(ic.itemScope?.__index ?? 0) < BOUND_LIST_WINDOW_START)) {
|
|
124585
124843
|
const i2 = Number(ic.itemScope?.__index ?? 0);
|
|
124586
124844
|
const prev = row2.props.style ?? {};
|
|
124587
|
-
row2 =
|
|
124845
|
+
row2 = React16.cloneElement(row2, { style: { ...prev, animationDelay: `${i2 * boundStagger}ms` } });
|
|
124588
124846
|
}
|
|
124589
124847
|
if (boundSwipe && ctx.onAction && !props.horizontal) {
|
|
124590
124848
|
const leading = resolveSwipeActions(boundSwipe.leading, ic);
|
|
@@ -124609,7 +124867,7 @@ function renderInner(node, ctx) {
|
|
|
124609
124867
|
})
|
|
124610
124868
|
}
|
|
124611
124869
|
);
|
|
124612
|
-
const withSentinel = boundBody;
|
|
124870
|
+
const withSentinel = anchored ? /* @__PURE__ */ jsx11(RowAnchors, { ctx, itemsPath, jumpPath, onTopItem, children: boundBody }) : boundBody;
|
|
124613
124871
|
if (boundRefresh && ctx.onAction && !props.horizontal) {
|
|
124614
124872
|
return /* @__PURE__ */ jsx11(
|
|
124615
124873
|
PullToRefreshList,
|
|
@@ -124639,7 +124897,7 @@ function renderInner(node, ctx) {
|
|
|
124639
124897
|
if (swipe && ctx.onAction && !props.horizontal) {
|
|
124640
124898
|
const leading = swipe.leading ?? [];
|
|
124641
124899
|
const trailing = swipe.trailing ?? [];
|
|
124642
|
-
const arr2 =
|
|
124900
|
+
const arr2 = React16.Children.toArray(rendered);
|
|
124643
124901
|
body = arr2.map((child, i2) => /* @__PURE__ */ jsx11(
|
|
124644
124902
|
SwipeRow,
|
|
124645
124903
|
{
|
|
@@ -125152,7 +125410,7 @@ function reportUnknownComponent(ctx, pkg, type) {
|
|
|
125152
125410
|
function unknownComponentShowsDeveloperLabel(ctx) {
|
|
125153
125411
|
return ctx.debugUnknownComponents ?? ctx.previewSurface != null;
|
|
125154
125412
|
}
|
|
125155
|
-
var AppearanceActionContext, rowValue, loadPdfFetch, WebViewBridgeHost2, useIsomorphicLayoutEffect, GridColumnsContext, GridBoundList, GRID_SPAN_ALL, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, valueSwapKeyframesInjected, NUMERIC_TEXT, shimmerKeyframesInjected, pressStylesInjected, REVEAL_ON_FOCUS_ATTR, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, AMBIENT_HOST_STYLE, AmbientMotionBox, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, LOTTIE_RUNTIME_ATTRIBUTES, lottieAnims, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asFinalTextL10n, asBoundText, useBoundString, asBoundCopy, useBoundCopy, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, MediaFieldNode, WorkerSubtreeNode, RichContentNode, resolveItemDeep2, resolveRowAction2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, withRootStyle, ReactiveDirectScalars, HiddenGate, ExitPresence, StatefulSectionNode, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MENU_ANCHOR_CONTROL, MenuNode, MENU_LONG_PRESS_MS, menuOpensOnLongPress, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfDocumentCanvas, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, NODE_EXTRAS_TARGET, SYNTHETIC_TAP_ROLE, SYNTHETIC_TABINDEX, INFERRED_DECORATIVE, SELF_RENDERED_LEAF, ROLE_WHEN_NAMED, AUTHORED_ROLE, PENDING_RANGE, RANGE_ROLES, NODE_A11Y_ATTRS, INTERACTIVE_ROLES, ALWAYS_INTERACTIVE_COMPONENT_TYPES, TAP_ACTIVATOR_ATTR, TAP_GROUP_ATTR, NESTED_CONTROL_SELECTOR, VISUALLY_HIDDEN, NAME_SKIP_SELECTOR, activatorNameObservers, ACTIVATOR_STATE_ATTRS, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, REVEAL_RELEASE_MS, REVEAL_FADE_MS, REVEAL_BUFFER, revealProgress, countWords, RevealText, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, EMPTY_STATE_SPACING, EmptyStateNode, ERROR_STATE_VARIANTS, ERROR_STATE_SPACING, ErrorStateNode, ButtonNode, OtpInputNode, ProgressBarNode, SnackbarNode, ACTIVITY_DEFAULT_NAME, ACTIVITY_RING_ARC, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, BOTTOM_DRAWER_HOST_STACK_EVENT, ModalBottomSheetNode, BottomDrawerNode, PRESENTED_OVERLAY_ATTR, TooltipNode, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, ShapeNode, LegendMarker, LegendNode, cellAlign, dataTableProbe, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, LiveWindowMeasured, LiveWindowPage, PagingNode, WheelPickerNode, ColorPickerNode, FilterChipsNode, TILE_PX, MAX_MERCATOR_LAT, DEFAULT_TILE_MAX_ZOOM, CIRCLE_SEGMENTS, METRES_PER_DEG_LAT, MARKER_HIT_RADIUS, SHAPE_HIT_RADIUS, MapNode, CAROUSEL_SETTLE_MS, scrollCarouselTo, CarouselNode, BannerNode, CollapsingHeaderNode, UnsupportedOnSurface, CALENDAR_DATE_ONLY_RE, CAL_DEFAULT_MAX_DOTS, CAL_AGENDA_INITIAL_DAYS, CAL_AGENDA_PAGE_DAYS, CAL_DEFAULT_SNAP_MINUTES, CAL_UNASSIGNED_LANE_ID, MonthCalendarNode, TimeGridNode, AgendaNode, ARIA_ROLE, initialFocusScheduled, PRESENTED_SCOPE, focusRoots, A11yHintDescription, rowRenderers, railRowFrame, renderRailRow, reportedUnknownComponents, UnknownComponentNode, WebRenderer, ScrollIntoViewNode;
|
|
125413
|
+
var AppearanceActionContext, rowValue, loadPdfFetch, WebViewBridgeHost2, useIsomorphicLayoutEffect, GridColumnsContext, GridBoundList, GRID_SPAN_ALL, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, valueSwapKeyframesInjected, NUMERIC_TEXT, shimmerKeyframesInjected, pressStylesInjected, REVEAL_ON_FOCUS_ATTR, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, AMBIENT_HOST_STYLE, AmbientMotionBox, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, LOTTIE_RUNTIME_ATTRIBUTES, lottieAnims, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asFinalTextL10n, asBoundText, useBoundString, asBoundCopy, useBoundCopy, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, MediaFieldNode, WorkerSubtreeNode, RichContentNode, resolveItemDeep2, resolveRowAction2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, withRootStyle, ReactiveDirectScalars, HiddenGate, ExitPresence, StatefulSectionNode, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MENU_ANCHOR_CONTROL, MenuNode, MENU_LONG_PRESS_MS, menuOpensOnLongPress, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfDocumentCanvas, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, NODE_EXTRAS_TARGET, SYNTHETIC_TAP_ROLE, SYNTHETIC_TABINDEX, INFERRED_DECORATIVE, SELF_RENDERED_LEAF, ROLE_WHEN_NAMED, AUTHORED_ROLE, PENDING_RANGE, RANGE_ROLES, NODE_A11Y_ATTRS, INTERACTIVE_ROLES, ALWAYS_INTERACTIVE_COMPONENT_TYPES, TAP_ACTIVATOR_ATTR, TAP_GROUP_ATTR, NESTED_CONTROL_SELECTOR, VISUALLY_HIDDEN, NAME_SKIP_SELECTOR, activatorNameObservers, ACTIVATOR_STATE_ATTRS, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, REVEAL_RELEASE_MS, REVEAL_FADE_MS, REVEAL_BUFFER, revealProgress, countWords, RevealText, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, EMPTY_STATE_SPACING, EmptyStateNode, ERROR_STATE_VARIANTS, ERROR_STATE_SPACING, ErrorStateNode, ButtonNode, OtpInputNode, ProgressBarNode, SnackbarNode, ACTIVITY_DEFAULT_NAME, ACTIVITY_RING_ARC, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, BOTTOM_DRAWER_HOST_STACK_EVENT, ModalBottomSheetNode, BottomDrawerNode, PRESENTED_OVERLAY_ATTR, TooltipNode, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, ShapeNode, LegendMarker, LegendNode, cellAlign, dataTableProbe, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, LiveWindowMeasured, LiveWindowPage, PagingNode, WheelPickerNode, ColorPickerNode, FilterChipsNode, TILE_PX, MAX_MERCATOR_LAT, DEFAULT_TILE_MAX_ZOOM, CIRCLE_SEGMENTS, METRES_PER_DEG_LAT, MARKER_HIT_RADIUS, SHAPE_HIT_RADIUS, MapNode, CAROUSEL_SETTLE_MS, scrollCarouselTo, CarouselNode, BannerNode, CollapsingHeaderNode, UnsupportedOnSurface, CALENDAR_DATE_ONLY_RE, CAL_DEFAULT_MAX_DOTS, CAL_AGENDA_INITIAL_DAYS, CAL_AGENDA_PAGE_DAYS, CAL_DEFAULT_SNAP_MINUTES, CAL_UNASSIGNED_LANE_ID, MonthCalendarNode, TimeGridNode, AgendaNode, ARIA_ROLE, initialFocusScheduled, PRESENTED_SCOPE, focusRoots, A11yHintDescription, rowRenderers, railRowFrame, renderRailRow, RowAnchors, reportedUnknownComponents, UnknownComponentNode, WebRenderer, ScrollIntoViewNode;
|
|
125156
125414
|
var init_renderNode = __esm({
|
|
125157
125415
|
"../../core/web-renderer/src/renderNode.tsx"() {
|
|
125158
125416
|
"use strict";
|
|
@@ -125168,6 +125426,7 @@ var init_renderNode = __esm({
|
|
|
125168
125426
|
init_helpers();
|
|
125169
125427
|
init_liveWindow();
|
|
125170
125428
|
init_bindings2();
|
|
125429
|
+
init_scrollAnchors();
|
|
125171
125430
|
init_snackbarTiming();
|
|
125172
125431
|
init_bindings();
|
|
125173
125432
|
init_tokens();
|
|
@@ -125204,21 +125463,21 @@ var init_renderNode = __esm({
|
|
|
125204
125463
|
init_rich_content();
|
|
125205
125464
|
init_rich_text_field();
|
|
125206
125465
|
init_richContent();
|
|
125207
|
-
AppearanceActionContext =
|
|
125466
|
+
AppearanceActionContext = React16.createContext(void 0);
|
|
125208
125467
|
rowValue = (v2, ctx) => typeof v2 === "string" && v2.startsWith("$item") ? resolveScalarStatic(v2, ctx) : v2;
|
|
125209
125468
|
loadPdfFetch = () => Promise.resolve().then(() => (init_pdfFetch(), pdfFetch_exports));
|
|
125210
|
-
WebViewBridgeHost2 =
|
|
125211
|
-
useIsomorphicLayoutEffect = typeof globalThis.document === "undefined" ?
|
|
125212
|
-
GridColumnsContext =
|
|
125469
|
+
WebViewBridgeHost2 = React16.lazy(() => Promise.resolve().then(() => (init_webviewBridgeHost(), webviewBridgeHost_exports)));
|
|
125470
|
+
useIsomorphicLayoutEffect = typeof globalThis.document === "undefined" ? React16.useEffect : React16.useLayoutEffect;
|
|
125471
|
+
GridColumnsContext = React16.createContext(1);
|
|
125213
125472
|
GridBoundList = (props) => {
|
|
125214
|
-
const columns =
|
|
125473
|
+
const columns = React16.useContext(GridColumnsContext);
|
|
125215
125474
|
return /* @__PURE__ */ jsx11(BoundList, { ...props, windowed: true, rowSize: columns, markerStyle: GRID_SPAN_ALL });
|
|
125216
125475
|
};
|
|
125217
125476
|
GRID_SPAN_ALL = { gridColumn: "1 / -1" };
|
|
125218
125477
|
ResponsiveGrid = ({ base, medium, expanded, initialCols, seedWidth, spacing, extra, children }) => {
|
|
125219
|
-
const [el2, setEl] =
|
|
125220
|
-
const [cols, setCols] =
|
|
125221
|
-
|
|
125478
|
+
const [el2, setEl] = React16.useState(null);
|
|
125479
|
+
const [cols, setCols] = React16.useState(initialCols);
|
|
125480
|
+
React16.useEffect(() => {
|
|
125222
125481
|
if (!el2) return;
|
|
125223
125482
|
const measure2 = () => {
|
|
125224
125483
|
const w2 = seededWidth(el2.clientWidth, seedWidth);
|
|
@@ -125244,9 +125503,9 @@ var init_renderNode = __esm({
|
|
|
125244
125503
|
SPLIT_EXPANDED_MIN_WIDTH = 840;
|
|
125245
125504
|
SPLIT_COLUMN_GAP = 16;
|
|
125246
125505
|
ResponsiveSplitView = ({ primary, detail, primaryMaxWidth, initialWide, seedWidth, extra }) => {
|
|
125247
|
-
const ref =
|
|
125248
|
-
const [wide, setWide] =
|
|
125249
|
-
|
|
125506
|
+
const ref = React16.useRef(null);
|
|
125507
|
+
const [wide, setWide] = React16.useState(initialWide);
|
|
125508
|
+
React16.useEffect(() => {
|
|
125250
125509
|
const el2 = ref.current;
|
|
125251
125510
|
if (!el2) return;
|
|
125252
125511
|
const measure2 = () => {
|
|
@@ -125292,9 +125551,9 @@ var init_renderNode = __esm({
|
|
|
125292
125551
|
revealRuntimeInjected = false;
|
|
125293
125552
|
AMBIENT_HOST_STYLE = { display: "contents" };
|
|
125294
125553
|
AmbientMotionBox = ({ spec, kind, children }) => {
|
|
125295
|
-
const ref =
|
|
125554
|
+
const ref = React16.useRef(null);
|
|
125296
125555
|
const { minGapMs, maxGapMs } = spec;
|
|
125297
|
-
|
|
125556
|
+
React16.useEffect(() => {
|
|
125298
125557
|
const el2 = ref.current?.firstElementChild;
|
|
125299
125558
|
if (!el2 || typeof el2.animate !== "function") return;
|
|
125300
125559
|
let timer;
|
|
@@ -125378,14 +125637,14 @@ var init_renderNode = __esm({
|
|
|
125378
125637
|
}
|
|
125379
125638
|
};
|
|
125380
125639
|
bodyFont = (ctx) => fontStack(ctx.font("body").family, ctx.idiom);
|
|
125381
|
-
kids2 = (arr2, ctx) => Array.isArray(arr2) ? arr2.map((n2, i2) => /* @__PURE__ */ jsx11(
|
|
125640
|
+
kids2 = (arr2, ctx) => Array.isArray(arr2) ? arr2.map((n2, i2) => /* @__PURE__ */ jsx11(React16.Fragment, { children: renderNode(n2, ctx) }, n2?.id ?? i2)) : null;
|
|
125382
125641
|
rowKidCtx = (n2, ctx) => wantsRowStretch(n2) ? { ...ctx, rowStretch: true } : normalize2(n2).type === "Divider" ? { ...ctx, rowDivider: true } : ctx;
|
|
125383
|
-
rowKids = (arr2, ctx) => Array.isArray(arr2) ? arr2.map((n2, i2) => /* @__PURE__ */ jsx11(
|
|
125642
|
+
rowKids = (arr2, ctx) => Array.isArray(arr2) ? arr2.map((n2, i2) => /* @__PURE__ */ jsx11(React16.Fragment, { children: renderNode(n2, rowKidCtx(n2, ctx)) }, n2?.id ?? i2)) : null;
|
|
125384
125643
|
staggeredKids = (arr2, ctx, staggerMs) => Array.isArray(arr2) ? arr2.map((n2, i2) => {
|
|
125385
125644
|
const el2 = renderNode(n2, ctx);
|
|
125386
|
-
if (!
|
|
125645
|
+
if (!React16.isValidElement(el2)) return /* @__PURE__ */ jsx11(React16.Fragment, { children: el2 }, n2?.id ?? i2);
|
|
125387
125646
|
const prev = el2.props.style ?? {};
|
|
125388
|
-
return
|
|
125647
|
+
return React16.cloneElement(el2, { key: n2?.id ?? i2, style: { ...prev, animationDelay: `${i2 * staggerMs}ms` } });
|
|
125389
125648
|
}) : null;
|
|
125390
125649
|
asTextL10n = (v2, ctx) => typeof v2 === "string" && v2.startsWith(TRANSLATION_PREFIX) ? asText2(resolveTranslation(v2, ctx.catalog)) : asText2(v2);
|
|
125391
125650
|
asFinalTextL10n = (v2, ctx) => typeof v2 === "string" ? v2.startsWith(TRANSLATION_PREFIX) ? asText2(resolveTranslation(v2, ctx.catalog)) : v2 : asText2(v2);
|
|
@@ -125403,13 +125662,13 @@ var init_renderNode = __esm({
|
|
|
125403
125662
|
const bound2 = Object.entries(params).filter(
|
|
125404
125663
|
([, v2]) => typeof v2 === "string" && v2.startsWith("$service:")
|
|
125405
125664
|
);
|
|
125406
|
-
const [live3, setLive] =
|
|
125665
|
+
const [live3, setLive] = React16.useState(() => {
|
|
125407
125666
|
const seed2 = {};
|
|
125408
125667
|
if (ctx.provider) for (const [k2, p2] of bound2) seed2[k2] = ctx.provider.value(servicePath(p2));
|
|
125409
125668
|
return seed2;
|
|
125410
125669
|
});
|
|
125411
125670
|
const subKey = bound2.map(([k2, p2]) => `${k2}=${p2}`).join("|");
|
|
125412
|
-
|
|
125671
|
+
React16.useEffect(() => {
|
|
125413
125672
|
const provider = ctx.provider;
|
|
125414
125673
|
if (!provider) return;
|
|
125415
125674
|
const unsubs = bound2.map(
|
|
@@ -125451,11 +125710,11 @@ var init_renderNode = __esm({
|
|
|
125451
125710
|
fragmentSlotContent = ({ props, ctx, discriminator, slotId, extra }) => {
|
|
125452
125711
|
const selected = selectFragmentCase(props, discriminator);
|
|
125453
125712
|
const selectedId = typeof selected?.id === "string" ? selected.id : "";
|
|
125454
|
-
const previousId =
|
|
125455
|
-
const reportedUnknown =
|
|
125456
|
-
const reportedInvalid =
|
|
125457
|
-
const [announcement, setAnnouncement] =
|
|
125458
|
-
|
|
125713
|
+
const previousId = React16.useRef(selectedId);
|
|
125714
|
+
const reportedUnknown = React16.useRef(/* @__PURE__ */ new Set());
|
|
125715
|
+
const reportedInvalid = React16.useRef(/* @__PURE__ */ new Set());
|
|
125716
|
+
const [announcement, setAnnouncement] = React16.useState("");
|
|
125717
|
+
React16.useEffect(() => {
|
|
125459
125718
|
if (typeof discriminator === "string") {
|
|
125460
125719
|
if (discriminator && !props.cases?.some((candidate) => candidate.id === discriminator) && !reportedUnknown.current.has(discriminator)) {
|
|
125461
125720
|
reportedUnknown.current.add(discriminator);
|
|
@@ -125469,7 +125728,7 @@ var init_renderNode = __esm({
|
|
|
125469
125728
|
}
|
|
125470
125729
|
}
|
|
125471
125730
|
}, [ctx, discriminator, props.cases, slotId]);
|
|
125472
|
-
|
|
125731
|
+
React16.useEffect(() => {
|
|
125473
125732
|
if (previousId.current !== selectedId) {
|
|
125474
125733
|
const next = selected?.accessibilityAnnouncement ?? selected?.accessibility_announcement;
|
|
125475
125734
|
setAnnouncement(typeof next === "string" ? next : "");
|
|
@@ -125483,7 +125742,7 @@ var init_renderNode = __esm({
|
|
|
125483
125742
|
// and the right edge clips (branded-lite's home is a FragmentSlot → 32px cut in
|
|
125484
125743
|
// the phone preview). Included before ...extra so a modifier can still override.
|
|
125485
125744
|
/* @__PURE__ */ jsxs9("div", { "data-fragment-slot": slotId ?? "", "data-fragment-case": selectedId, style: { width: "100%", boxSizing: "border-box", ...extra }, children: [
|
|
125486
|
-
selected?.content ? /* @__PURE__ */ jsx11(
|
|
125745
|
+
selected?.content ? /* @__PURE__ */ jsx11(React16.Fragment, { children: renderNode(selected.content, ctx) }, selectedId) : null,
|
|
125487
125746
|
/* @__PURE__ */ jsx11("span", { "aria-live": "polite", style: { position: "absolute", width: 1, height: 1, padding: 0, margin: -1, overflow: "hidden", clip: "rect(0, 0, 0, 0)", whiteSpace: "nowrap", border: 0 }, children: announcement })
|
|
125488
125747
|
] })
|
|
125489
125748
|
);
|
|
@@ -125504,11 +125763,11 @@ var init_renderNode = __esm({
|
|
|
125504
125763
|
const fallbackPathStr = mediaFieldServicePath(props.fallbackTextPath);
|
|
125505
125764
|
const fallbackBound = useBoundValue(ctx, fallbackPathStr ? String(props.fallbackTextPath) : "");
|
|
125506
125765
|
const fallbackText = typeof fallbackBound === "string" ? fallbackBound : "";
|
|
125507
|
-
const [uploading, setUploading] =
|
|
125508
|
-
const [failed3, setFailed] =
|
|
125509
|
-
const fileRef =
|
|
125510
|
-
const previewRef =
|
|
125511
|
-
const [localPreview, setLocalPreview] =
|
|
125766
|
+
const [uploading, setUploading] = React16.useState(false);
|
|
125767
|
+
const [failed3, setFailed] = React16.useState(false);
|
|
125768
|
+
const fileRef = React16.useRef(null);
|
|
125769
|
+
const previewRef = React16.useRef(null);
|
|
125770
|
+
const [localPreview, setLocalPreview] = React16.useState("");
|
|
125512
125771
|
const uploadService = typeof props.uploadService === "string" ? props.uploadService : "";
|
|
125513
125772
|
const resolvedLabel = asText2(resolveScalarStatic(props.label, ctx));
|
|
125514
125773
|
const name = mediaFieldName(resolvedLabel);
|
|
@@ -125553,7 +125812,7 @@ var init_renderNode = __esm({
|
|
|
125553
125812
|
setUploading(false);
|
|
125554
125813
|
}
|
|
125555
125814
|
};
|
|
125556
|
-
|
|
125815
|
+
React16.useEffect(() => () => {
|
|
125557
125816
|
const previewUrl = previewRef.current;
|
|
125558
125817
|
if (previewUrl && typeof URL.revokeObjectURL === "function") URL.revokeObjectURL(previewUrl);
|
|
125559
125818
|
previewRef.current = null;
|
|
@@ -125625,7 +125884,7 @@ var init_renderNode = __esm({
|
|
|
125625
125884
|
const value2 = useBoundValue(ctx, typeof path2 === "string" ? path2 : "");
|
|
125626
125885
|
const policy = props.policy;
|
|
125627
125886
|
const catalog4 = ctx.provider && typeof ctx.provider.listActions === "function" ? ctx.provider : null;
|
|
125628
|
-
const validation =
|
|
125887
|
+
const validation = React16.useMemo(() => {
|
|
125629
125888
|
if (value2 === void 0 || value2 === null) return { ok: false, reason: "unresolved" };
|
|
125630
125889
|
if (typeof value2 !== "string") return { ok: false, reason: "value_type" };
|
|
125631
125890
|
if (!policy || typeof policy !== "object") return { ok: false, reason: "typed_decode" };
|
|
@@ -125635,8 +125894,8 @@ var init_renderNode = __esm({
|
|
|
125635
125894
|
return { ok: false, reason: "typed_decode" };
|
|
125636
125895
|
}
|
|
125637
125896
|
}, [catalog4, policy, slotId, value2]);
|
|
125638
|
-
const reported =
|
|
125639
|
-
|
|
125897
|
+
const reported = React16.useRef(/* @__PURE__ */ new Set());
|
|
125898
|
+
React16.useEffect(() => {
|
|
125640
125899
|
const key3 = validation.ok ? `ok:${validation.treeHash}` : `bad:${validation.treeHash ?? validation.reason}`;
|
|
125641
125900
|
if (reported.current.has(key3)) return;
|
|
125642
125901
|
reported.current.add(key3);
|
|
@@ -125665,10 +125924,10 @@ var init_renderNode = __esm({
|
|
|
125665
125924
|
const hasPath = typeof path2 === "string" && path2 !== "";
|
|
125666
125925
|
const bound2 = useResolvedScalar(hasPath ? path2 : void 0, ctx);
|
|
125667
125926
|
const raw = hasPath ? bound2 : props.documentJson ?? props.document_json;
|
|
125668
|
-
const result =
|
|
125927
|
+
const result = React16.useMemo(() => layoutRichContentValue(raw), [raw]);
|
|
125669
125928
|
const reason = result && "rejected" in result ? result.rejected : void 0;
|
|
125670
|
-
const reported =
|
|
125671
|
-
|
|
125929
|
+
const reported = React16.useRef(/* @__PURE__ */ new Set());
|
|
125930
|
+
React16.useEffect(() => {
|
|
125672
125931
|
if (!reason) return;
|
|
125673
125932
|
const key3 = typeof raw === "string" ? `${reason}:${raw.length}:${richContentDocumentHash(raw)}` : `${reason}:non-string`;
|
|
125674
125933
|
if (reported.current.has(key3)) return;
|
|
@@ -125762,17 +126021,17 @@ var init_renderNode = __esm({
|
|
|
125762
126021
|
};
|
|
125763
126022
|
withRootStyle = (content, style) => {
|
|
125764
126023
|
if (Array.isArray(content)) return content.map((child) => withRootStyle(child, style));
|
|
125765
|
-
if (!
|
|
125766
|
-
if (content.type ===
|
|
125767
|
-
return
|
|
126024
|
+
if (!React16.isValidElement(content)) return content;
|
|
126025
|
+
if (content.type === React16.Fragment) {
|
|
126026
|
+
return React16.cloneElement(content, {}, React16.Children.map(content.props.children, (child) => withRootStyle(child, style)));
|
|
125768
126027
|
}
|
|
125769
126028
|
const element = content;
|
|
125770
|
-
return
|
|
126029
|
+
return React16.cloneElement(element, { style: { ...element.props.style, ...style } });
|
|
125771
126030
|
};
|
|
125772
126031
|
ReactiveDirectScalars = ({ node, ctx, bindings, style }) => {
|
|
125773
|
-
const [, rerender] =
|
|
126032
|
+
const [, rerender] = React16.useState(0);
|
|
125774
126033
|
const bindingKey = bindings.join("|");
|
|
125775
|
-
|
|
126034
|
+
React16.useEffect(() => {
|
|
125776
126035
|
if (!ctx.provider) return;
|
|
125777
126036
|
const unsubs = bindings.map((binding2) => ctx.provider.subscribe(servicePath(binding2), () => rerender((n2) => n2 + 1)));
|
|
125778
126037
|
return () => unsubs.forEach((unsubscribe) => unsubscribe());
|
|
@@ -125785,14 +126044,14 @@ var init_renderNode = __esm({
|
|
|
125785
126044
|
return /* @__PURE__ */ jsx11(ExitPresence, { hidden: hiddenBool(v2), exit: exit ?? null, children });
|
|
125786
126045
|
};
|
|
125787
126046
|
ExitPresence = ({ hidden, exit, children }) => {
|
|
125788
|
-
const [prevHidden, setPrevHidden] =
|
|
125789
|
-
const [exiting, setExiting] =
|
|
126047
|
+
const [prevHidden, setPrevHidden] = React16.useState(hidden);
|
|
126048
|
+
const [exiting, setExiting] = React16.useState(false);
|
|
125790
126049
|
if (hidden !== prevHidden) {
|
|
125791
126050
|
setPrevHidden(hidden);
|
|
125792
126051
|
setExiting(hidden && exit != null);
|
|
125793
126052
|
}
|
|
125794
|
-
const ref =
|
|
125795
|
-
const exitRef =
|
|
126053
|
+
const ref = React16.useRef(null);
|
|
126054
|
+
const exitRef = React16.useRef(exit);
|
|
125796
126055
|
exitRef.current = exit;
|
|
125797
126056
|
useIsomorphicLayoutEffect(() => {
|
|
125798
126057
|
if (!exiting) return void 0;
|
|
@@ -125825,8 +126084,8 @@ var init_renderNode = __esm({
|
|
|
125825
126084
|
const target = raw == null || raw === "" || isBound && !ctx.provider ? legacy : sectionSlot(isBound ? bound2 : raw);
|
|
125826
126085
|
const { graceMs, floorMs } = loadingTiming(ctx.kit, props.loadingGraceMs ?? props.loading_grace_ms, props.loadingFloorMs ?? props.loading_floor_ms);
|
|
125827
126086
|
const shown2 = useLoadingTiming(target, graceMs, floorMs);
|
|
125828
|
-
const changed =
|
|
125829
|
-
const first =
|
|
126087
|
+
const changed = React16.useRef(false);
|
|
126088
|
+
const first = React16.useRef(shown2);
|
|
125830
126089
|
if (shown2 !== first.current) changed.current = true;
|
|
125831
126090
|
const renderCfg = (cfg) => cfg && typeof cfg === "object" ? /* @__PURE__ */ jsxs9("div", { style: { textAlign: "center", padding: "24px 12px", color: C2("textSecondary", "#9aa2ad") }, children: [
|
|
125832
126091
|
cfg.title && /* @__PURE__ */ jsx11("div", { style: { fontSize: pxToRem(15), fontWeight: 600, color: C2("textPrimary", "#111") }, children: asText2(cfg.title) }),
|
|
@@ -125858,8 +126117,8 @@ var init_renderNode = __esm({
|
|
|
125858
126117
|
}
|
|
125859
126118
|
const animate = motionDefaultsAnimate(ctx);
|
|
125860
126119
|
const fadeMs = motionDefaultsDuration(ctx.kit, 220);
|
|
125861
|
-
const lastShown =
|
|
125862
|
-
const [outgoing, setOutgoing] =
|
|
126120
|
+
const lastShown = React16.useRef(null);
|
|
126121
|
+
const [outgoing, setOutgoing] = React16.useState(null);
|
|
125863
126122
|
useIsomorphicLayoutEffect(() => {
|
|
125864
126123
|
const was = lastShown.current;
|
|
125865
126124
|
if (!animate || !was || was.slot === shown2 || was.node == null) return void 0;
|
|
@@ -125867,7 +126126,7 @@ var init_renderNode = __esm({
|
|
|
125867
126126
|
const t2 = setTimeout(() => setOutgoing(null), fadeMs);
|
|
125868
126127
|
return () => clearTimeout(t2);
|
|
125869
126128
|
}, [shown2]);
|
|
125870
|
-
|
|
126129
|
+
React16.useEffect(() => {
|
|
125871
126130
|
lastShown.current = { slot: shown2, node: content };
|
|
125872
126131
|
});
|
|
125873
126132
|
if (changed.current && animate) {
|
|
@@ -125903,7 +126162,7 @@ var init_renderNode = __esm({
|
|
|
125903
126162
|
const onChangeAction = resolveRowAction2(props.onChange ?? cfg.onChange, ctx);
|
|
125904
126163
|
const borderless = props.borderless === true || cfg.borderless === true;
|
|
125905
126164
|
const secure = props.secure === true || cfg.secure === true;
|
|
125906
|
-
const [valueVisible, setValueVisible] =
|
|
126165
|
+
const [valueVisible, setValueVisible] = React16.useState(false);
|
|
125907
126166
|
const visibilityToggle = secure && (props.visibilityToggle === true || cfg.visibilityToggle === true);
|
|
125908
126167
|
const visibilityLabel = ctx.catalog?.get(valueVisible ? "auth.gate.password.hide" : "auth.gate.password.show") ?? (valueVisible ? "Hide password" : "Show password");
|
|
125909
126168
|
const erroredProp = props.error === true || cfg.error === true;
|
|
@@ -125917,20 +126176,20 @@ var init_renderNode = __esm({
|
|
|
125917
126176
|
const boundRawText = typeof boundVal === "string" ? boundVal : typeof boundVal === "number" ? String(boundVal) : void 0;
|
|
125918
126177
|
const boundText = serializeRichText && boundRawText !== void 0 ? richTextHtmlToPlainText(boundRawText) : boundRawText;
|
|
125919
126178
|
const literalText = typeof valueBinding === "string" ? serializeRichText ? richTextHtmlToPlainText(valueBinding) : valueBinding : "";
|
|
125920
|
-
const [local, setLocal] =
|
|
126179
|
+
const [local, setLocal] = React16.useState(
|
|
125921
126180
|
isBound ? boundText ?? "" : literalText
|
|
125922
126181
|
);
|
|
125923
|
-
const [edited, setEdited] =
|
|
125924
|
-
const [pristineRichValue, setPristineRichValue] =
|
|
126182
|
+
const [edited, setEdited] = React16.useState(false);
|
|
126183
|
+
const [pristineRichValue, setPristineRichValue] = React16.useState(
|
|
125925
126184
|
serializeRichText ? isBound ? boundRawText : typeof valueBinding === "string" ? valueBinding : void 0 : void 0
|
|
125926
126185
|
);
|
|
125927
|
-
const focused =
|
|
125928
|
-
const [touched, setTouched] =
|
|
125929
|
-
const [isFocused, setIsFocused] =
|
|
125930
|
-
const pendingEdits =
|
|
125931
|
-
const previousBoundText =
|
|
125932
|
-
const previousBoundRawText =
|
|
125933
|
-
|
|
126186
|
+
const focused = React16.useRef(false);
|
|
126187
|
+
const [touched, setTouched] = React16.useState(false);
|
|
126188
|
+
const [isFocused, setIsFocused] = React16.useState(false);
|
|
126189
|
+
const pendingEdits = React16.useRef([]);
|
|
126190
|
+
const previousBoundText = React16.useRef(boundText);
|
|
126191
|
+
const previousBoundRawText = React16.useRef(boundRawText);
|
|
126192
|
+
React16.useEffect(() => {
|
|
125934
126193
|
if (!isBound || boundText === void 0) return;
|
|
125935
126194
|
const boundTextChanged = previousBoundText.current !== boundText;
|
|
125936
126195
|
const boundRawTextChanged = previousBoundRawText.current !== boundRawText;
|
|
@@ -125962,23 +126221,23 @@ var init_renderNode = __esm({
|
|
|
125962
126221
|
}
|
|
125963
126222
|
if (!focused.current && boundText !== local && changes.current?.pending == null) setLocal(boundText);
|
|
125964
126223
|
}, [boundText, serializeRichText ? boundRawText : void 0, isFocused, serializeRichText ? edited : false]);
|
|
125965
|
-
const formBag =
|
|
126224
|
+
const formBag = React16.useContext(FormValuesContext);
|
|
125966
126225
|
const fieldId = props.__formFieldId;
|
|
125967
|
-
const previousBinding =
|
|
126226
|
+
const previousBinding = React16.useRef(binding2);
|
|
125968
126227
|
const rule = props.validation ?? cfg.validation;
|
|
125969
126228
|
const { "aria-labelledby": labelledBy } = formFieldA11y(props);
|
|
125970
126229
|
const required3 = rule?.required === true || void 0;
|
|
125971
|
-
const ruleKey =
|
|
125972
|
-
|
|
126230
|
+
const ruleKey = React16.useMemo(() => rule ? JSON.stringify(rule) : "", [rule]);
|
|
126231
|
+
React16.useEffect(() => {
|
|
125973
126232
|
if (!formBag || !fieldId) return;
|
|
125974
126233
|
formBag.register(fieldId, rule);
|
|
125975
126234
|
return () => formBag.unregister(fieldId);
|
|
125976
126235
|
}, [fieldId, formBag, ruleKey]);
|
|
125977
126236
|
const formValue = serializeRichText && !edited && pristineRichValue !== void 0 ? pristineRichValue : serializeRichText ? richTextEditedHtml(pristineRichValue, pristineRichValue === void 0 ? "" : richTextHtmlToPlainText(pristineRichValue), local) : local;
|
|
125978
|
-
|
|
126237
|
+
React16.useEffect(() => {
|
|
125979
126238
|
if (formBag && fieldId) formBag.set(fieldId, formValue);
|
|
125980
126239
|
}, [formValue, fieldId, formBag, binding2]);
|
|
125981
|
-
|
|
126240
|
+
React16.useEffect(() => {
|
|
125982
126241
|
if (previousBinding.current === binding2) return;
|
|
125983
126242
|
previousBinding.current = binding2;
|
|
125984
126243
|
pendingEdits.current = [];
|
|
@@ -125997,7 +126256,7 @@ var init_renderNode = __esm({
|
|
|
125997
126256
|
const errorTextRaw = props.errorText ?? cfg.errorText;
|
|
125998
126257
|
const errorTextResolved = useBoundString(errorTextRaw, ctx);
|
|
125999
126258
|
const workerError = typeof boundError === "string" ? boundError : errorTextRaw == null ? void 0 : errorTextResolved;
|
|
126000
|
-
const validationCatalog =
|
|
126259
|
+
const validationCatalog = React16.useMemo(
|
|
126001
126260
|
() => ctx.catalog ? new Proxy({}, { get: (_t2, k2) => typeof k2 === "string" ? ctx.catalog.get(k2) : void 0 }) : void 0,
|
|
126002
126261
|
[ctx.catalog]
|
|
126003
126262
|
);
|
|
@@ -126012,7 +126271,7 @@ var init_renderNode = __esm({
|
|
|
126012
126271
|
const hasWorkerError = Boolean(workerError && workerError.trim());
|
|
126013
126272
|
const painted2 = rawMessage === null ? "" : translateOnly(rawMessage);
|
|
126014
126273
|
const message2 = !painted2.trim() || ruleMessagePending && !hasWorkerError ? null : painted2;
|
|
126015
|
-
const [feedbackShown, setFeedbackShown] =
|
|
126274
|
+
const [feedbackShown, setFeedbackShown] = React16.useState(false);
|
|
126016
126275
|
const revealed = message2 !== null && shouldRevealError({
|
|
126017
126276
|
rule,
|
|
126018
126277
|
feedbackShown,
|
|
@@ -126021,11 +126280,11 @@ var init_renderNode = __esm({
|
|
|
126021
126280
|
focused: isFocused,
|
|
126022
126281
|
submitAttempted: formBag?.submitAttempted ?? false
|
|
126023
126282
|
});
|
|
126024
|
-
|
|
126283
|
+
React16.useEffect(() => {
|
|
126025
126284
|
if (revealed) setFeedbackShown(true);
|
|
126026
126285
|
}, [revealed]);
|
|
126027
126286
|
const errored = erroredProp || revealed;
|
|
126028
|
-
const generatedId =
|
|
126287
|
+
const generatedId = React16.useId();
|
|
126029
126288
|
const errorId = revealed ? `${componentId ?? generatedId}__error` : void 0;
|
|
126030
126289
|
const emit = (v2) => {
|
|
126031
126290
|
if (onChangeAction && ctx.onAction) {
|
|
@@ -126038,23 +126297,23 @@ var init_renderNode = __esm({
|
|
|
126038
126297
|
}
|
|
126039
126298
|
};
|
|
126040
126299
|
const changeDebounceMs = typeof props.debounceMs === "number" ? props.debounceMs : typeof cfg.debounceMs === "number" ? cfg.debounceMs : 0;
|
|
126041
|
-
const changes =
|
|
126300
|
+
const changes = React16.useRef(null);
|
|
126042
126301
|
if (!changes.current) changes.current = new ChangeDebouncer();
|
|
126043
|
-
|
|
126302
|
+
React16.useEffect(() => () => changes.current?.drop(), []);
|
|
126044
126303
|
const emitNow = (v2) => {
|
|
126045
126304
|
changes.current?.drop();
|
|
126046
126305
|
emit(v2);
|
|
126047
126306
|
};
|
|
126048
|
-
const ownsPrivateDraft =
|
|
126049
|
-
|
|
126307
|
+
const ownsPrivateDraft = React16.useRef(false);
|
|
126308
|
+
React16.useEffect(() => {
|
|
126050
126309
|
if (visibilityToggle && !isBound) ownsPrivateDraft.current = true;
|
|
126051
126310
|
}, [visibilityToggle, isBound]);
|
|
126052
|
-
const clearSensitiveDraft =
|
|
126311
|
+
const clearSensitiveDraft = React16.useRef(() => {
|
|
126053
126312
|
});
|
|
126054
126313
|
clearSensitiveDraft.current = () => {
|
|
126055
126314
|
if (ownsPrivateDraft.current && !isBound) emitNow("");
|
|
126056
126315
|
};
|
|
126057
|
-
|
|
126316
|
+
React16.useEffect(() => () => clearSensitiveDraft.current(), []);
|
|
126058
126317
|
const onInput = (e2) => {
|
|
126059
126318
|
const v2 = e2.currentTarget.value;
|
|
126060
126319
|
setLocal(v2);
|
|
@@ -126086,7 +126345,7 @@ var init_renderNode = __esm({
|
|
|
126086
126345
|
const submitLabelRaw = props.submitLabel ?? cfg.submitLabel;
|
|
126087
126346
|
const onSubmitAction = props.onSubmit ?? cfg.onSubmit;
|
|
126088
126347
|
const enterKeyHint = !multilineBox && ENTER_KEY_HINTS.has(submitLabelRaw) ? submitLabelRaw : !multilineBox && onSubmitAction ? "done" : void 0;
|
|
126089
|
-
const inputRef =
|
|
126348
|
+
const inputRef = React16.useRef(null);
|
|
126090
126349
|
useIsomorphicLayoutEffect(() => {
|
|
126091
126350
|
const el2 = inputRef.current;
|
|
126092
126351
|
const view = el2?.ownerDocument?.defaultView;
|
|
@@ -126101,8 +126360,8 @@ var init_renderNode = __esm({
|
|
|
126101
126360
|
}, [local, multilineBox, maxLines]);
|
|
126102
126361
|
const focusBinding = (typeof props.focusPath === "string" ? props.focusPath : typeof cfg.focusPath === "string" ? cfg.focusPath : void 0) ?? "";
|
|
126103
126362
|
const focusTokenVal = useBoundValue(ctx, focusBinding);
|
|
126104
|
-
const lastFocusToken =
|
|
126105
|
-
|
|
126363
|
+
const lastFocusToken = React16.useRef(void 0);
|
|
126364
|
+
React16.useEffect(() => {
|
|
126106
126365
|
if (!focusBinding) return;
|
|
126107
126366
|
const next = typeof focusTokenVal === "string" ? focusTokenVal : typeof focusTokenVal === "number" ? String(focusTokenVal) : "";
|
|
126108
126367
|
if (!next || next === lastFocusToken.current) return;
|
|
@@ -126178,8 +126437,8 @@ var init_renderNode = __esm({
|
|
|
126178
126437
|
};
|
|
126179
126438
|
MENU_ANCHOR_CONTROL = 'a[href], button, input, select, textarea, [tabindex]:not([tabindex="-1"]), [role="button"], [role="link"]';
|
|
126180
126439
|
MenuNode = withExtras("MenuNode", ({ props, ctx, wrap }) => {
|
|
126181
|
-
const [open, setOpen] =
|
|
126182
|
-
const hostRef =
|
|
126440
|
+
const [open, setOpen] = React16.useState(false);
|
|
126441
|
+
const hostRef = React16.useRef(null);
|
|
126183
126442
|
const context = menuOpensOnLongPress(props.style);
|
|
126184
126443
|
const itemsPath = typeof props.itemsPath === "string" && props.itemsPath.startsWith("$service:") ? props.itemsPath : "";
|
|
126185
126444
|
const boundItems = useBoundValue(ctx, itemsPath);
|
|
@@ -126187,7 +126446,7 @@ var init_renderNode = __esm({
|
|
|
126187
126446
|
const previewMode = context && props.preview != null;
|
|
126188
126447
|
const items = sourceItems.map((it2) => ({ ...it2, label: typeof it2?.label === "string" && it2.label.startsWith("$item") ? resolveItemDeep2(it2.label, ctx) : it2?.label, disabled: it2?.disabled === true || !it2?.action }));
|
|
126189
126448
|
const C2 = ctx.color;
|
|
126190
|
-
|
|
126449
|
+
React16.useEffect(() => {
|
|
126191
126450
|
if (!open) return;
|
|
126192
126451
|
const onTop = () => menuRef.current != null && isWithinTopModal(menuRef.current);
|
|
126193
126452
|
const onDown = (e2) => {
|
|
@@ -126213,11 +126472,11 @@ var init_renderNode = __esm({
|
|
|
126213
126472
|
const flexGrow = typeof wrap?.flex === "string" ? parseFloat(wrap.flex) : typeof wrap?.flex === "number" ? wrap.flex : Number(wrap?.flexGrow ?? 0);
|
|
126214
126473
|
const fill = wrap?.width === "100%" || Number.isFinite(flexGrow) && flexGrow > 0;
|
|
126215
126474
|
const popupPlacement = fill ? { position: "absolute", top: "100%", left: 0, right: 0, zIndex: 20, marginTop: 4 } : { position: "absolute", top: "100%", right: 0, zIndex: 20, marginTop: 4 };
|
|
126216
|
-
const anchorRef =
|
|
126217
|
-
const menuRef =
|
|
126218
|
-
const dialogRef =
|
|
126219
|
-
const [popupAlignLeft, setPopupAlignLeft] =
|
|
126220
|
-
const [popupAbove, setPopupAbove] =
|
|
126475
|
+
const anchorRef = React16.useRef(null);
|
|
126476
|
+
const menuRef = React16.useRef(null);
|
|
126477
|
+
const dialogRef = React16.useRef(null);
|
|
126478
|
+
const [popupAlignLeft, setPopupAlignLeft] = React16.useState(false);
|
|
126479
|
+
const [popupAbove, setPopupAbove] = React16.useState(false);
|
|
126221
126480
|
useIsomorphicLayoutEffect(() => {
|
|
126222
126481
|
if (!open || !anchorRef.current || !menuRef.current) return;
|
|
126223
126482
|
const anchor = anchorRef.current.getBoundingClientRect();
|
|
@@ -126239,8 +126498,8 @@ var init_renderNode = __esm({
|
|
|
126239
126498
|
setPopupAlignLeft(anchor.right - popup.width < left);
|
|
126240
126499
|
setPopupAbove(anchor.bottom + popup.height + 4 > bottom && anchor.top - popup.height - 4 >= top);
|
|
126241
126500
|
});
|
|
126242
|
-
const [innerControl, setInnerControl] =
|
|
126243
|
-
const innerControlRef =
|
|
126501
|
+
const [innerControl, setInnerControl] = React16.useState(null);
|
|
126502
|
+
const innerControlRef = React16.useRef(null);
|
|
126244
126503
|
useIsomorphicLayoutEffect(() => {
|
|
126245
126504
|
const anchor = anchorRef.current;
|
|
126246
126505
|
const refresh = () => {
|
|
@@ -126256,7 +126515,7 @@ var init_renderNode = __esm({
|
|
|
126256
126515
|
observer.observe(anchor, { childList: true, subtree: true, attributes: true, attributeFilter: ["disabled", "tabindex", "href", "role"] });
|
|
126257
126516
|
return () => observer.disconnect();
|
|
126258
126517
|
});
|
|
126259
|
-
|
|
126518
|
+
React16.useEffect(() => {
|
|
126260
126519
|
if (!innerControl) return;
|
|
126261
126520
|
innerControl.setAttribute("aria-haspopup", "menu");
|
|
126262
126521
|
innerControl.setAttribute("aria-expanded", String(open));
|
|
@@ -126268,13 +126527,13 @@ var init_renderNode = __esm({
|
|
|
126268
126527
|
};
|
|
126269
126528
|
}, [innerControl, open]);
|
|
126270
126529
|
const itemsKey = items.map((it2, i2) => `${it2?.id ?? i2}:${it2?.disabled ? 0 : 1}`).join("|");
|
|
126271
|
-
|
|
126530
|
+
React16.useEffect(() => {
|
|
126272
126531
|
if (!open || !modal) return;
|
|
126273
126532
|
const menu = menuRef.current;
|
|
126274
126533
|
if (!menu || menu.contains(document.activeElement)) return;
|
|
126275
126534
|
(menu.querySelector('[role="menuitem"][tabindex="0"]') ?? menu).focus();
|
|
126276
126535
|
}, [open, modal, itemsKey]);
|
|
126277
|
-
|
|
126536
|
+
React16.useEffect(() => {
|
|
126278
126537
|
if (!open || !modal) return;
|
|
126279
126538
|
const layer = pushModalLayer(() => dialogRef.current);
|
|
126280
126539
|
return () => {
|
|
@@ -126296,11 +126555,11 @@ var init_renderNode = __esm({
|
|
|
126296
126555
|
e2.preventDefault();
|
|
126297
126556
|
items2[next].focus();
|
|
126298
126557
|
};
|
|
126299
|
-
const pressTimer =
|
|
126300
|
-
const longPressed =
|
|
126301
|
-
const touchOrigin =
|
|
126302
|
-
const suppressNextClick =
|
|
126303
|
-
const suppressTimer =
|
|
126558
|
+
const pressTimer = React16.useRef(null);
|
|
126559
|
+
const longPressed = React16.useRef(false);
|
|
126560
|
+
const touchOrigin = React16.useRef(null);
|
|
126561
|
+
const suppressNextClick = React16.useRef(false);
|
|
126562
|
+
const suppressTimer = React16.useRef(null);
|
|
126304
126563
|
const clearSuppress = () => {
|
|
126305
126564
|
suppressNextClick.current = false;
|
|
126306
126565
|
if (suppressTimer.current != null) {
|
|
@@ -126314,7 +126573,7 @@ var init_renderNode = __esm({
|
|
|
126314
126573
|
pressTimer.current = null;
|
|
126315
126574
|
}
|
|
126316
126575
|
};
|
|
126317
|
-
|
|
126576
|
+
React16.useEffect(() => () => {
|
|
126318
126577
|
cancelPress();
|
|
126319
126578
|
clearSuppress();
|
|
126320
126579
|
}, []);
|
|
@@ -126476,15 +126735,15 @@ var init_renderNode = __esm({
|
|
|
126476
126735
|
MENU_LONG_PRESS_MS = 500;
|
|
126477
126736
|
menuOpensOnLongPress = (style) => style === "context";
|
|
126478
126737
|
LoadMoreSentinel = ({ ctx, pagination, style }) => {
|
|
126479
|
-
const owned =
|
|
126738
|
+
const owned = React16.useContext(PageCycleContext);
|
|
126480
126739
|
const own6 = usePageCycle(ctx, owned ? void 0 : pagination?.cursor);
|
|
126481
126740
|
const pages2 = owned ?? own6;
|
|
126482
126741
|
const cycle = usePageCycleId(pages2);
|
|
126483
126742
|
const cursor = pages2.cursor;
|
|
126484
126743
|
const action = pagination.onLoadMore ?? pagination.on_load_more;
|
|
126485
126744
|
const workerTap = useWorkerTap(action);
|
|
126486
|
-
const ref =
|
|
126487
|
-
|
|
126745
|
+
const ref = React16.useRef(null);
|
|
126746
|
+
React16.useEffect(() => {
|
|
126488
126747
|
const el2 = ref.current;
|
|
126489
126748
|
if (!cursor || !ctx.onAction || !el2 || typeof IntersectionObserver === "undefined") return;
|
|
126490
126749
|
let live3 = true;
|
|
@@ -126521,11 +126780,11 @@ var init_renderNode = __esm({
|
|
|
126521
126780
|
] });
|
|
126522
126781
|
});
|
|
126523
126782
|
FormView = withExtras("FormView", ({ props, ctx, wrap }) => {
|
|
126524
|
-
const bagRef =
|
|
126783
|
+
const bagRef = React16.useRef(null);
|
|
126525
126784
|
if (!bagRef.current) bagRef.current = createFormBag();
|
|
126526
126785
|
const bag = bagRef.current;
|
|
126527
|
-
|
|
126528
|
-
|
|
126786
|
+
React16.useSyncExternalStore(
|
|
126787
|
+
React16.useCallback((cb) => bag.subscribe(cb), [bag]),
|
|
126529
126788
|
() => bag.version,
|
|
126530
126789
|
() => bag.version
|
|
126531
126790
|
);
|
|
@@ -126542,7 +126801,7 @@ var init_renderNode = __esm({
|
|
|
126542
126801
|
ctx.onAction?.({ ...action, args: merged });
|
|
126543
126802
|
}
|
|
126544
126803
|
};
|
|
126545
|
-
const submitNode =
|
|
126804
|
+
const submitNode = React16.useMemo(() => {
|
|
126546
126805
|
const node = props.submitButton;
|
|
126547
126806
|
if (!node || valid) return node;
|
|
126548
126807
|
if (node.body) return { ...node, body: { ...node.body, props: { ...node.body.props ?? {}, disabled: true } } };
|
|
@@ -126592,11 +126851,11 @@ var init_renderNode = __esm({
|
|
|
126592
126851
|
const startPositionPath = typeof props.startPositionSeconds === "string" && isBinding(props.startPositionSeconds) ? props.startPositionSeconds : "";
|
|
126593
126852
|
const boundStartPosition = useResolvedScalar(startPositionPath || void 0, ctx);
|
|
126594
126853
|
const initialStartPosition = startPositionPath && typeof boundStartPosition === "number" && Number.isFinite(boundStartPosition) ? Math.max(0, boundStartPosition) : Math.max(0, Number.isFinite(Number(props.startPositionSeconds)) ? Number(props.startPositionSeconds) : 0);
|
|
126595
|
-
const [index, setIndex] =
|
|
126854
|
+
const [index, setIndex] = React16.useState(initialIndex);
|
|
126596
126855
|
const queueReady = !itemsPath || Array.isArray(boundQueue);
|
|
126597
126856
|
const seatKey = `${itemsPath ?? ""}|${startIndex}`;
|
|
126598
|
-
const seated =
|
|
126599
|
-
|
|
126857
|
+
const seated = React16.useRef(null);
|
|
126858
|
+
React16.useEffect(() => {
|
|
126600
126859
|
const last = Math.max(0, resolvedItems.length - 1);
|
|
126601
126860
|
if (resolvedItems.length === 0) return;
|
|
126602
126861
|
if (queueReady && seated.current !== seatKey) {
|
|
@@ -126611,19 +126870,19 @@ var init_renderNode = __esm({
|
|
|
126611
126870
|
}
|
|
126612
126871
|
setIndex((i2) => Math.min(Math.max(0, i2), last));
|
|
126613
126872
|
}, [resolvedItems.length, startIndex, queueReady, seatKey]);
|
|
126614
|
-
const [status, setStatus] =
|
|
126615
|
-
const [position, setPosition] =
|
|
126616
|
-
const [duration2, setDuration] =
|
|
126617
|
-
const [buffered, setBuffered] =
|
|
126618
|
-
const [rate, setRateState] =
|
|
126619
|
-
const [fullscreen, setFullscreen] =
|
|
126620
|
-
const [error, setError] =
|
|
126621
|
-
const mediaRef =
|
|
126622
|
-
const hostRef =
|
|
126623
|
-
const autoplayConsumed =
|
|
126873
|
+
const [status, setStatus] = React16.useState("idle");
|
|
126874
|
+
const [position, setPosition] = React16.useState(initialStartPosition);
|
|
126875
|
+
const [duration2, setDuration] = React16.useState(0);
|
|
126876
|
+
const [buffered, setBuffered] = React16.useState(0);
|
|
126877
|
+
const [rate, setRateState] = React16.useState(1);
|
|
126878
|
+
const [fullscreen, setFullscreen] = React16.useState(false);
|
|
126879
|
+
const [error, setError] = React16.useState("");
|
|
126880
|
+
const mediaRef = React16.useRef(null);
|
|
126881
|
+
const hostRef = React16.useRef(null);
|
|
126882
|
+
const autoplayConsumed = React16.useRef(false);
|
|
126624
126883
|
const item = resolvedItems[index];
|
|
126625
126884
|
const mediaKey2 = `${index}:${item?.id ?? item?.url ?? ""}`;
|
|
126626
|
-
|
|
126885
|
+
React16.useEffect(() => {
|
|
126627
126886
|
const outgoing = mediaRef.current;
|
|
126628
126887
|
return () => {
|
|
126629
126888
|
try {
|
|
@@ -126637,7 +126896,7 @@ var init_renderNode = __esm({
|
|
|
126637
126896
|
const isYouTube = provider === "youtube";
|
|
126638
126897
|
const isUnsupportedProvider = provider !== "direct" && !isYouTube;
|
|
126639
126898
|
const isAudio = ["audio", "podcast", "radio"].includes(String(item?.kind ?? ""));
|
|
126640
|
-
const capabilities =
|
|
126899
|
+
const capabilities = React16.useMemo(() => ({
|
|
126641
126900
|
seek: !isUnsupportedProvider && item?.live !== true,
|
|
126642
126901
|
rate: !isUnsupportedProvider && item?.live !== true,
|
|
126643
126902
|
queue: !isUnsupportedProvider && items.length > 1,
|
|
@@ -126665,9 +126924,9 @@ var init_renderNode = __esm({
|
|
|
126665
126924
|
error,
|
|
126666
126925
|
capabilities
|
|
126667
126926
|
};
|
|
126668
|
-
const slotProvider =
|
|
126669
|
-
|
|
126670
|
-
|
|
126927
|
+
const slotProvider = React16.useMemo(() => new MediaSlotProvider(state), []);
|
|
126928
|
+
React16.useEffect(() => slotProvider.set(state));
|
|
126929
|
+
React16.useEffect(() => {
|
|
126671
126930
|
if (!startPositionPath || typeof boundStartPosition !== "number" || !Number.isFinite(boundStartPosition) || status !== "idle") return;
|
|
126672
126931
|
const next = Math.max(0, boundStartPosition);
|
|
126673
126932
|
setPosition(next);
|
|
@@ -126678,7 +126937,7 @@ var init_renderNode = __esm({
|
|
|
126678
126937
|
}
|
|
126679
126938
|
}
|
|
126680
126939
|
}, [startPositionPath, boundStartPosition, status]);
|
|
126681
|
-
const emit =
|
|
126940
|
+
const emit = React16.useCallback((action, extra = {}) => {
|
|
126682
126941
|
if (!action || !ctx.onAction) return;
|
|
126683
126942
|
const snapshot4 = {
|
|
126684
126943
|
sessionId,
|
|
@@ -126697,13 +126956,13 @@ var init_renderNode = __esm({
|
|
|
126697
126956
|
};
|
|
126698
126957
|
ctx.onAction({ ...action, args: { ...action.args ?? {}, ...snapshot4, ...extra }, params: { ...action.params ?? {}, sessionId, index: String(index), ...Object.fromEntries(Object.entries(extra).map(([k2, v2]) => [k2, String(v2)])) } });
|
|
126699
126958
|
}, [ctx.onAction, sessionId, status, index, position, duration2, item, buffered, rate, props.muted, fullscreen, error]);
|
|
126700
|
-
|
|
126959
|
+
React16.useEffect(() => {
|
|
126701
126960
|
if (!isUnsupportedProvider || status === "error") return;
|
|
126702
126961
|
setStatus("error");
|
|
126703
126962
|
setError("provider_unsupported");
|
|
126704
126963
|
emit(props.onError, { state: "error", status: "error", error: "provider_unsupported", code: "provider_unsupported" });
|
|
126705
126964
|
}, [isUnsupportedProvider, status, emit, props.onError]);
|
|
126706
|
-
const play =
|
|
126965
|
+
const play = React16.useCallback(async () => {
|
|
126707
126966
|
if (isYouTube) return;
|
|
126708
126967
|
if (isUnsupportedProvider) {
|
|
126709
126968
|
setStatus("error");
|
|
@@ -126725,17 +126984,17 @@ var init_renderNode = __esm({
|
|
|
126725
126984
|
emit(props.onError, { state: "blocked", status: "blocked", error: message2, code: "playback_blocked" });
|
|
126726
126985
|
}
|
|
126727
126986
|
}, [isYouTube, isUnsupportedProvider, emit, props.onError]);
|
|
126728
|
-
const pause =
|
|
126987
|
+
const pause = React16.useCallback(() => {
|
|
126729
126988
|
mediaRef.current?.pause();
|
|
126730
126989
|
setStatus("paused");
|
|
126731
126990
|
}, []);
|
|
126732
|
-
const seek =
|
|
126991
|
+
const seek = React16.useCallback((seconds) => {
|
|
126733
126992
|
const media = mediaRef.current;
|
|
126734
126993
|
if (!media || !Number.isFinite(seconds)) return;
|
|
126735
126994
|
media.currentTime = Math.max(0, Math.min(seconds, Number.isFinite(media.duration) ? media.duration : seconds));
|
|
126736
126995
|
setPosition(media.currentTime);
|
|
126737
126996
|
}, []);
|
|
126738
|
-
const select2 =
|
|
126997
|
+
const select2 = React16.useCallback((next) => {
|
|
126739
126998
|
if (resolvedItems.length === 0) return;
|
|
126740
126999
|
const normalized = (next % resolvedItems.length + resolvedItems.length) % resolvedItems.length;
|
|
126741
127000
|
const nextItem = resolvedItems[normalized];
|
|
@@ -126757,7 +127016,7 @@ var init_renderNode = __esm({
|
|
|
126757
127016
|
error: ""
|
|
126758
127017
|
});
|
|
126759
127018
|
}, [resolvedItems, emit, props.onItemChange]);
|
|
126760
|
-
const toggleFullscreen =
|
|
127019
|
+
const toggleFullscreen = React16.useCallback(async () => {
|
|
126761
127020
|
if (props.fullscreen === "disabled") return;
|
|
126762
127021
|
const host = hostRef.current;
|
|
126763
127022
|
try {
|
|
@@ -126767,7 +127026,7 @@ var init_renderNode = __esm({
|
|
|
126767
127026
|
setFullscreen((value2) => !value2);
|
|
126768
127027
|
}
|
|
126769
127028
|
}, [props.fullscreen]);
|
|
126770
|
-
|
|
127029
|
+
React16.useEffect(() => {
|
|
126771
127030
|
const listener = (event) => {
|
|
126772
127031
|
const detail = event.detail;
|
|
126773
127032
|
if (!detail || detail.sessionId !== sessionId) return;
|
|
@@ -126815,7 +127074,7 @@ var init_renderNode = __esm({
|
|
|
126815
127074
|
window.addEventListener("himalaya-media-command", listener);
|
|
126816
127075
|
return () => window.removeEventListener("himalaya-media-command", listener);
|
|
126817
127076
|
}, [sessionId, index, play, pause, seek, select2, toggleFullscreen]);
|
|
126818
|
-
|
|
127077
|
+
React16.useEffect(() => {
|
|
126819
127078
|
const listener = () => {
|
|
126820
127079
|
const value2 = document.fullscreenElement === hostRef.current;
|
|
126821
127080
|
setFullscreen(value2);
|
|
@@ -126824,14 +127083,14 @@ var init_renderNode = __esm({
|
|
|
126824
127083
|
document.addEventListener("fullscreenchange", listener);
|
|
126825
127084
|
return () => document.removeEventListener("fullscreenchange", listener);
|
|
126826
127085
|
}, [emit, props.onFullscreenChange]);
|
|
126827
|
-
|
|
127086
|
+
React16.useEffect(() => {
|
|
126828
127087
|
const media = mediaRef.current;
|
|
126829
127088
|
if (!media || isYouTube || isUnsupportedProvider) return;
|
|
126830
127089
|
media.muted = props.muted === true;
|
|
126831
127090
|
media.playbackRate = rate;
|
|
126832
127091
|
if (position > 0) media.currentTime = position;
|
|
126833
127092
|
}, [item?.url, isUnsupportedProvider]);
|
|
126834
|
-
|
|
127093
|
+
React16.useEffect(() => {
|
|
126835
127094
|
if (isYouTube || isUnsupportedProvider || props.autoplay === "never" || autoplayConsumed.current) return;
|
|
126836
127095
|
if (props.autoplay === "once") {
|
|
126837
127096
|
autoplayConsumed.current = true;
|
|
@@ -127033,15 +127292,15 @@ var init_renderNode = __esm({
|
|
|
127033
127292
|
}
|
|
127034
127293
|
);
|
|
127035
127294
|
});
|
|
127036
|
-
PdfDocumentCanvas =
|
|
127295
|
+
PdfDocumentCanvas = React16.lazy(() => Promise.resolve().then(() => (init_pdfDocument(), pdfDocument_exports)).then((module) => ({ default: module.PdfDocument })));
|
|
127037
127296
|
PdfViewNode = withExtras("PdfViewNode", ({ props, ctx, wrap }) => {
|
|
127038
127297
|
const boundUrl = useResolvedScalar(props.url != null && isBinding(props.url) ? props.url : void 0, ctx);
|
|
127039
127298
|
const url = props.url != null && isBinding(props.url) ? boundUrl : props.url;
|
|
127040
127299
|
const rawUrl = typeof url === "string" && !isBinding(url) ? url : "";
|
|
127041
127300
|
const plan = rawUrl ? pdfEmbedPlan(rawUrl, void 0, typeof document !== "undefined" ? document.baseURI : void 0) : null;
|
|
127042
127301
|
const retypeSrc = plan?.mode === "retype" ? plan.src : null;
|
|
127043
|
-
const [retyped, setRetyped] =
|
|
127044
|
-
|
|
127302
|
+
const [retyped, setRetyped] = React16.useState(null);
|
|
127303
|
+
React16.useEffect(() => {
|
|
127045
127304
|
if (!retypeSrc) return;
|
|
127046
127305
|
let live3 = true;
|
|
127047
127306
|
let made = null;
|
|
@@ -127063,11 +127322,11 @@ var init_renderNode = __esm({
|
|
|
127063
127322
|
}, [retypeSrc]);
|
|
127064
127323
|
const settled = retyped && retyped.from === retypeSrc ? retyped : null;
|
|
127065
127324
|
const wantsShare = props.allowShare === true;
|
|
127066
|
-
const [fellBackFrom, setFellBackFrom] =
|
|
127325
|
+
const [fellBackFrom, setFellBackFrom] = React16.useState(null);
|
|
127067
127326
|
const directFellBack = plan?.mode === "direct" && fellBackFrom === plan.src;
|
|
127068
127327
|
const directSrc = plan?.mode === "direct" && (wantsShare || props.showPageControls !== false && directFellBack) ? plan.src : null;
|
|
127069
|
-
const [direct, setDirect] =
|
|
127070
|
-
|
|
127328
|
+
const [direct, setDirect] = React16.useState(null);
|
|
127329
|
+
React16.useEffect(() => {
|
|
127071
127330
|
if (!directSrc) return;
|
|
127072
127331
|
let live3 = true;
|
|
127073
127332
|
let made = null;
|
|
@@ -127084,16 +127343,16 @@ var init_renderNode = __esm({
|
|
|
127084
127343
|
}, [directSrc, wantsShare]);
|
|
127085
127344
|
const directDoc = direct && direct.from === directSrc ? direct : null;
|
|
127086
127345
|
const fallbackPageCount = plan?.mode === "retype" ? settled?.pageCount ?? null : directDoc?.count ?? null;
|
|
127087
|
-
const [nav, setNav] =
|
|
127346
|
+
const [nav, setNav] = React16.useState({ from: rawUrl, page: null, zoom: null });
|
|
127088
127347
|
const view = nav.from === rawUrl ? nav : { from: rawUrl, page: null, zoom: null };
|
|
127089
127348
|
const src = plan?.mode === "direct" ? plan.src : settled?.url ?? null;
|
|
127090
|
-
const [canvasCount, setCanvasCount] =
|
|
127091
|
-
const onPageCount =
|
|
127349
|
+
const [canvasCount, setCanvasCount] = React16.useState(null);
|
|
127350
|
+
const onPageCount = React16.useCallback((count2) => {
|
|
127092
127351
|
if (!Number.isInteger(count2) || count2 < 1) return;
|
|
127093
127352
|
setCanvasCount((cur) => cur?.from === src && cur.count === count2 ? cur : { from: src, count: count2 });
|
|
127094
127353
|
}, [src]);
|
|
127095
127354
|
const pageCount = canvasCount?.from === src ? canvasCount.count : fallbackPageCount;
|
|
127096
|
-
const onFallback =
|
|
127355
|
+
const onFallback = React16.useCallback(() => setFellBackFrom(src), [src]);
|
|
127097
127356
|
const loading = plan?.mode === "retype" && !settled || directSrc != null && wantsShare && !directDoc && typeof window !== "undefined";
|
|
127098
127357
|
const loadSrc = plan?.mode === "direct" && wantsShare ? directDoc?.blobUrl ?? src : src;
|
|
127099
127358
|
const ph = typeof props.height === "number" && props.height > 0 ? props.height : void 0;
|
|
@@ -127143,7 +127402,7 @@ var init_renderNode = __esm({
|
|
|
127143
127402
|
const data = base + pdfOpenFragment(sourceHash, { page, zoom: zoomable ? view.zoom : null, fitWidth: !zoomable });
|
|
127144
127403
|
const label3 = typeof props.title === "string" && props.title ? props.title : "PDF document";
|
|
127145
127404
|
const documentStyle = showPageControls || zoomable || allowShare ? { display: "block", width: "100%", flex: "1 1 auto", minHeight: ph ? 0 : 280, border: "none" } : frame;
|
|
127146
|
-
const
|
|
127405
|
+
const object13 = typeof window === "undefined" ? /* @__PURE__ */ jsx11("object", { "data-himalaya-pdf": "static-fallback", data, type: "application/pdf", "aria-label": label3, style: documentStyle }) : /* @__PURE__ */ jsx11(React16.Suspense, { fallback: /* @__PURE__ */ jsx11("div", { "data-himalaya-pdf": "loading", role: "img", "aria-label": "loading document", "aria-busy": "true", style: documentStyle }), children: /* @__PURE__ */ jsx11(
|
|
127147
127406
|
PdfDocumentCanvas,
|
|
127148
127407
|
{
|
|
127149
127408
|
src: loadSrc ?? src,
|
|
@@ -127157,7 +127416,7 @@ var init_renderNode = __esm({
|
|
|
127157
127416
|
style: documentStyle
|
|
127158
127417
|
}
|
|
127159
127418
|
) });
|
|
127160
|
-
if (!showPageControls && !zoomable && !allowShare) return
|
|
127419
|
+
if (!showPageControls && !zoomable && !allowShare) return object13;
|
|
127161
127420
|
const C2 = ctx.color;
|
|
127162
127421
|
const go2 = (p2) => setNav({ from: rawUrl, page: Math.max(1, pageCount != null ? Math.min(p2, pageCount) : p2), zoom: view.zoom });
|
|
127163
127422
|
const zoomBy = (d2) => setNav({ from: rawUrl, page: view.page, zoom: pdfZoomStep(view.zoom ?? sourceZoomPercent(sourceHash) ?? null, d2) });
|
|
@@ -127175,7 +127434,7 @@ var init_renderNode = __esm({
|
|
|
127175
127434
|
const downloadHref = plan?.mode === "retype" ? base : directDoc?.blobUrl ?? null;
|
|
127176
127435
|
const openHref = base + pdfOpenFragment(sourceHash, { page: shownPage, zoom: zoomable ? view.zoom : null, viewerChrome: true });
|
|
127177
127436
|
return /* @__PURE__ */ jsxs9("div", { "data-himalaya-pdf": "reader", style: { ...frame, display: "flex", flexDirection: "column", background: C2("surfaceTertiary", "#f4f4f4") }, children: [
|
|
127178
|
-
|
|
127437
|
+
object13,
|
|
127179
127438
|
/* @__PURE__ */ jsxs9(
|
|
127180
127439
|
"div",
|
|
127181
127440
|
{
|
|
@@ -127225,7 +127484,7 @@ var init_renderNode = __esm({
|
|
|
127225
127484
|
const ar2 = typeof props.aspectRatio === "number" && props.aspectRatio > 0 ? props.aspectRatio : void 0;
|
|
127226
127485
|
const frameStyle = { width: "100%", boxSizing: "border-box", border: "none", borderRadius: ctx.radius("md", 8), background: "#fff", ...scrollEnabled ? {} : { overflow: "hidden" }, ...fill ? { flex: "1 1 0", minHeight: 0 } : h2 ? { height: h2 } : ar2 ? { aspectRatio: String(ar2) } : { height: 200 } };
|
|
127227
127486
|
const reloadValue = reloadKeyOf(useResolvedScalar(props.reloadKeyPath != null && isBinding(props.reloadKeyPath) ? props.reloadKeyPath : void 0, ctx));
|
|
127228
|
-
const reloadState =
|
|
127487
|
+
const reloadState = React16.useRef({ base: null, epoch: 0 });
|
|
127229
127488
|
if (reloadValue !== null && reloadValue !== reloadState.current.base) {
|
|
127230
127489
|
if (reloadState.current.base !== null) reloadState.current.epoch++;
|
|
127231
127490
|
reloadState.current.base = reloadValue;
|
|
@@ -127233,11 +127492,11 @@ var init_renderNode = __esm({
|
|
|
127233
127492
|
const reloadKey = reloadState.current.epoch > 0 ? String(reloadState.current.epoch) : "";
|
|
127234
127493
|
const sourceKey = htmlStr ?? urlFrame?.src ?? null;
|
|
127235
127494
|
const frameKey = sourceKey == null ? null : reloadKey ? `${sourceKey}\0${reloadKey}` : sourceKey;
|
|
127236
|
-
const [loadedKey, setLoadedKey] =
|
|
127495
|
+
const [loadedKey, setLoadedKey] = React16.useState(null);
|
|
127237
127496
|
const loaded2 = loadedKey === frameKey;
|
|
127238
127497
|
const bridgeChannel = props.bridge === "worker" ? webViewChannelOf(ctx.provider) : null;
|
|
127239
|
-
const frameRef =
|
|
127240
|
-
const bridgeLoad =
|
|
127498
|
+
const frameRef = React16.useRef(null);
|
|
127499
|
+
const bridgeLoad = React16.useRef({ loaded: false });
|
|
127241
127500
|
if (bridgeLoad.current.key !== frameKey) {
|
|
127242
127501
|
bridgeLoad.current.key = frameKey;
|
|
127243
127502
|
bridgeLoad.current.loaded = false;
|
|
@@ -127261,7 +127520,7 @@ var init_renderNode = __esm({
|
|
|
127261
127520
|
return /* @__PURE__ */ jsxs9("div", { ...{ [ROLE_WHEN_NAMED]: "group" }, style: { width: "100%", position: "relative", ...fill ? { height: "100%", flex: "1 1 0", minHeight: 0, display: "flex", flexDirection: "column" } : {}, ...bandColor ? { background: bandColor, borderRadius: ctx.radius("md", 8), overflow: "hidden" } : {}, ...wrap }, children: [
|
|
127262
127521
|
bandColor ? /* @__PURE__ */ jsx11("div", { "data-testid": "webview-cover-band", style: { height: 8, background: bandColor } }) : null,
|
|
127263
127522
|
htmlStr ? /* @__PURE__ */ jsx11("iframe", { ...frameProps, srcDoc: htmlStr, sandbox: "allow-scripts" }, frameKey ?? void 0) : urlFrame ? /* @__PURE__ */ jsx11("iframe", { ...frameProps, src: urlFrame.src, sandbox: urlFrame.sandbox }, frameKey ?? void 0) : /* @__PURE__ */ jsx11("div", { style: { ...frameStyle, display: "grid", placeItems: "center", color: "#999", fontFamily: "ui-monospace, monospace", fontSize: pxToRem(11), border: "1px dashed #ccc" }, children: urlStr ? "WebView (url not allowed)" : "WebView (no url)" }),
|
|
127264
|
-
bridgeChannel ? /* @__PURE__ */ jsx11(
|
|
127523
|
+
bridgeChannel ? /* @__PURE__ */ jsx11(React16.Suspense, { fallback: null, children: /* @__PURE__ */ jsx11(
|
|
127265
127524
|
WebViewBridgeHost2,
|
|
127266
127525
|
{
|
|
127267
127526
|
channel: bridgeChannel,
|
|
@@ -127291,19 +127550,19 @@ var init_renderNode = __esm({
|
|
|
127291
127550
|
const onChange = props.onChange;
|
|
127292
127551
|
const boundSel = useResolvedScalar(isBinding(props.selectedId) ? props.selectedId : void 0, ctx);
|
|
127293
127552
|
const selectedId = isBinding(props.selectedId) ? boundSel : props.selectedId;
|
|
127294
|
-
const [sel, setSel] =
|
|
127295
|
-
|
|
127553
|
+
const [sel, setSel] = React16.useState(ctx.empty ? "" : String(selectedId ?? ""));
|
|
127554
|
+
React16.useEffect(() => {
|
|
127296
127555
|
if (!ctx.empty && selectedId != null) setSel(String(selectedId));
|
|
127297
127556
|
}, [selectedId, ctx.empty]);
|
|
127298
|
-
const pickerBag =
|
|
127557
|
+
const pickerBag = React16.useContext(FormValuesContext);
|
|
127299
127558
|
const pickerFieldId = props.__formFieldId;
|
|
127300
127559
|
const pickerRuleKey = props.validation ? JSON.stringify(props.validation) : "";
|
|
127301
|
-
|
|
127560
|
+
React16.useEffect(() => {
|
|
127302
127561
|
if (!pickerBag || !pickerFieldId) return;
|
|
127303
127562
|
pickerBag.register(pickerFieldId, props.validation);
|
|
127304
127563
|
return () => pickerBag.unregister(pickerFieldId);
|
|
127305
127564
|
}, [pickerFieldId, pickerBag, pickerRuleKey]);
|
|
127306
|
-
|
|
127565
|
+
React16.useEffect(() => {
|
|
127307
127566
|
if (pickerBag && pickerFieldId) pickerBag.set(pickerFieldId, sel);
|
|
127308
127567
|
}, [sel, pickerFieldId, pickerBag]);
|
|
127309
127568
|
const emitPick = (id) => {
|
|
@@ -127419,24 +127678,24 @@ var init_renderNode = __esm({
|
|
|
127419
127678
|
const s2 = seedUnix();
|
|
127420
127679
|
return s2 == null ? null : clampUnix(s2);
|
|
127421
127680
|
};
|
|
127422
|
-
const [val, setVal] =
|
|
127681
|
+
const [val, setVal] = React16.useState(ctx.empty ? "" : toInput(shownSeed()));
|
|
127423
127682
|
const dateServiceBound = typeof props.valuePath === "string" && props.valuePath.startsWith("$service:");
|
|
127424
127683
|
const bagSource = () => dateServiceBound ? boundRaw : boundRaw !== void 0 && boundRaw !== null && boundRaw !== "" ? boundRaw : props.valueUnix;
|
|
127425
|
-
const [dateBagVal, setDateBagVal] =
|
|
127426
|
-
|
|
127684
|
+
const [dateBagVal, setDateBagVal] = React16.useState(ctx.empty ? "" : clampDateFieldValue(encodeDateFieldValue(bagSource()), props.minUnix, props.maxUnix, props.mode));
|
|
127685
|
+
React16.useEffect(() => {
|
|
127427
127686
|
if (ctx.empty) return;
|
|
127428
127687
|
setVal(toInput(shownSeed()));
|
|
127429
127688
|
setDateBagVal(clampDateFieldValue(encodeDateFieldValue(bagSource()), props.minUnix, props.maxUnix, props.mode));
|
|
127430
127689
|
}, [boundRaw, props.valueUnix, props.valuePath, ctx.empty]);
|
|
127431
|
-
const dateBag =
|
|
127690
|
+
const dateBag = React16.useContext(FormValuesContext);
|
|
127432
127691
|
const dateFieldId = props.__formFieldId;
|
|
127433
127692
|
const dateRuleKey = props.validation ? JSON.stringify(props.validation) : "";
|
|
127434
|
-
|
|
127693
|
+
React16.useEffect(() => {
|
|
127435
127694
|
if (!dateBag || !dateFieldId) return;
|
|
127436
127695
|
dateBag.register(dateFieldId, props.validation);
|
|
127437
127696
|
return () => dateBag.unregister(dateFieldId);
|
|
127438
127697
|
}, [dateFieldId, dateBag, dateRuleKey]);
|
|
127439
|
-
|
|
127698
|
+
React16.useEffect(() => {
|
|
127440
127699
|
if (dateBag && dateFieldId) dateBag.set(dateFieldId, dateBagVal);
|
|
127441
127700
|
}, [dateBagVal, dateFieldId, dateBag]);
|
|
127442
127701
|
if (!ctx.onAction) {
|
|
@@ -127505,11 +127764,11 @@ var init_renderNode = __esm({
|
|
|
127505
127764
|
const valueBinding = isBinding(props.value) ? props.value : void 0;
|
|
127506
127765
|
const boundValue = useResolvedScalar(valueBinding, ctx);
|
|
127507
127766
|
const initialValue2 = ctx.empty ? "" : valueBinding ? boundValue == null ? "" : String(boundValue) : String(props.value ?? "");
|
|
127508
|
-
const [local, setLocal] =
|
|
127509
|
-
const changes =
|
|
127767
|
+
const [local, setLocal] = React16.useState(initialValue2);
|
|
127768
|
+
const changes = React16.useRef(null);
|
|
127510
127769
|
if (!changes.current) changes.current = new ChangeDebouncer();
|
|
127511
|
-
|
|
127512
|
-
|
|
127770
|
+
React16.useEffect(() => () => changes.current?.drop(), []);
|
|
127771
|
+
React16.useEffect(() => {
|
|
127513
127772
|
if (ctx.empty || !valueBinding) return;
|
|
127514
127773
|
const next = boundValue == null ? "" : String(boundValue);
|
|
127515
127774
|
if (next === "") changes.current?.drop();
|
|
@@ -127524,12 +127783,12 @@ var init_renderNode = __esm({
|
|
|
127524
127783
|
if (!onChange) return;
|
|
127525
127784
|
changes.current?.change(v2, debounceMs, (value2) => dispatch(onChange, value2));
|
|
127526
127785
|
};
|
|
127527
|
-
const inputRef =
|
|
127786
|
+
const inputRef = React16.useRef(null);
|
|
127528
127787
|
const focusBinding = typeof props.focusPath === "string" && props.focusPath.startsWith("$service:") && props.focusPath.length > "$service:".length ? props.focusPath : "";
|
|
127529
127788
|
const focusTokenVal = useBoundValue(ctx, focusBinding);
|
|
127530
|
-
const lastFocusToken =
|
|
127531
|
-
const lastFocusBinding =
|
|
127532
|
-
|
|
127789
|
+
const lastFocusToken = React16.useRef(void 0);
|
|
127790
|
+
const lastFocusBinding = React16.useRef(focusBinding);
|
|
127791
|
+
React16.useEffect(() => {
|
|
127533
127792
|
if (lastFocusBinding.current !== focusBinding) {
|
|
127534
127793
|
lastFocusBinding.current = focusBinding;
|
|
127535
127794
|
lastFocusToken.current = void 0;
|
|
@@ -127582,12 +127841,12 @@ var init_renderNode = __esm({
|
|
|
127582
127841
|
const boundValue = useResolvedScalar(props.valuePath, ctx);
|
|
127583
127842
|
const effectiveValue = props.valuePath != null ? boundValue : props.value;
|
|
127584
127843
|
const fallbackValue = effectiveValue ?? props.value ?? 0;
|
|
127585
|
-
const [value2, setValue] =
|
|
127844
|
+
const [value2, setValue] = React16.useState(() => {
|
|
127586
127845
|
const seed2 = Number(fallbackValue);
|
|
127587
127846
|
return Number.isFinite(seed2) ? Math.min(max, Math.max(min, seed2)) : 0;
|
|
127588
127847
|
});
|
|
127589
|
-
const previousFallbackValue =
|
|
127590
|
-
|
|
127848
|
+
const previousFallbackValue = React16.useRef(fallbackValue);
|
|
127849
|
+
React16.useEffect(() => {
|
|
127591
127850
|
const fallbackChanged = !Object.is(previousFallbackValue.current, fallbackValue);
|
|
127592
127851
|
previousFallbackValue.current = fallbackValue;
|
|
127593
127852
|
const next = Number(fallbackValue);
|
|
@@ -127596,25 +127855,25 @@ var init_renderNode = __esm({
|
|
|
127596
127855
|
return Math.min(max, Math.max(min, candidate));
|
|
127597
127856
|
});
|
|
127598
127857
|
}, [fallbackValue, min, max]);
|
|
127599
|
-
const stepperBag =
|
|
127858
|
+
const stepperBag = React16.useContext(FormValuesContext);
|
|
127600
127859
|
const stepperFieldId = props.__formFieldId;
|
|
127601
127860
|
const stepperRuleKey = props.validation ? JSON.stringify(props.validation) : "";
|
|
127602
|
-
|
|
127861
|
+
React16.useEffect(() => {
|
|
127603
127862
|
if (!stepperBag || !stepperFieldId) return;
|
|
127604
127863
|
stepperBag.register(stepperFieldId, props.validation);
|
|
127605
127864
|
return () => stepperBag.unregister(stepperFieldId);
|
|
127606
127865
|
}, [stepperFieldId, stepperBag, stepperRuleKey]);
|
|
127607
127866
|
const serviceBound = typeof props.valuePath === "string" && isBinding(props.valuePath) && props.valuePath.startsWith("$service:");
|
|
127608
|
-
const [bagValue, setBagValue] =
|
|
127609
|
-
|
|
127867
|
+
const [bagValue, setBagValue] = React16.useState(() => serviceBound ? boundValue != null ? encodeStepperFieldValue(boundValue, { min, max }) : "" : encodeStepperFieldValue(value2, { min, max }));
|
|
127868
|
+
React16.useEffect(() => {
|
|
127610
127869
|
if (!serviceBound || boundValue == null) return;
|
|
127611
127870
|
setBagValue(encodeStepperFieldValue(boundValue, { min, max }));
|
|
127612
127871
|
}, [boundValue, serviceBound, min, max]);
|
|
127613
|
-
|
|
127872
|
+
React16.useEffect(() => {
|
|
127614
127873
|
if (serviceBound) return;
|
|
127615
127874
|
setBagValue(encodeStepperFieldValue(value2, { min, max }));
|
|
127616
127875
|
}, [value2, serviceBound, min, max]);
|
|
127617
|
-
|
|
127876
|
+
React16.useEffect(() => {
|
|
127618
127877
|
if (stepperBag && stepperFieldId) stepperBag.set(stepperFieldId, bagValue);
|
|
127619
127878
|
}, [bagValue, stepperFieldId, stepperBag]);
|
|
127620
127879
|
const dispatch = (next) => {
|
|
@@ -127629,7 +127888,7 @@ var init_renderNode = __esm({
|
|
|
127629
127888
|
dispatch(next);
|
|
127630
127889
|
return next;
|
|
127631
127890
|
};
|
|
127632
|
-
const [pressed, setPressed] =
|
|
127891
|
+
const [pressed, setPressed] = React16.useState({ text: "", count: 0 });
|
|
127633
127892
|
const bump = (delta) => commit(value2 + delta);
|
|
127634
127893
|
const press = (delta) => {
|
|
127635
127894
|
const next = bump(delta);
|
|
@@ -127773,9 +128032,9 @@ var init_renderNode = __esm({
|
|
|
127773
128032
|
const items = Array.isArray(props.items) ? props.items : [];
|
|
127774
128033
|
const gridStagger = ctx.reduceMotion() ? 0 : Number(props.staggerMs ?? props.stagger_ms ?? 0);
|
|
127775
128034
|
const stagger = (el2, i2) => {
|
|
127776
|
-
if (!(gridStagger > 0) || !
|
|
128035
|
+
if (!(gridStagger > 0) || !React16.isValidElement(el2)) return el2;
|
|
127777
128036
|
const prev = el2.props.style ?? {};
|
|
127778
|
-
return
|
|
128037
|
+
return React16.cloneElement(el2, { style: { ...prev, animationDelay: `${i2 * gridStagger}ms` } });
|
|
127779
128038
|
};
|
|
127780
128039
|
const pagination = props.pagination;
|
|
127781
128040
|
const sentinel = pagination ? /* @__PURE__ */ jsx11(LoadMoreSentinel, { ctx, pagination, style: GRID_SPAN_ALL }) : null;
|
|
@@ -127857,13 +128116,13 @@ var init_renderNode = __esm({
|
|
|
127857
128116
|
revealProgress = /* @__PURE__ */ new Map();
|
|
127858
128117
|
countWords = (s2) => s2.split(/\s+/).filter((t2) => t2 !== "").length;
|
|
127859
128118
|
RevealText = ({ text: text13, reduce, markdownHtml }) => {
|
|
127860
|
-
const tokens2 =
|
|
127861
|
-
const total =
|
|
128119
|
+
const tokens2 = React16.useMemo(() => text13.split(/(\s+)/).filter((t2) => t2 !== ""), [text13]);
|
|
128120
|
+
const total = React16.useMemo(
|
|
127862
128121
|
() => markdownHtml != null ? revealHtml(markdownHtml, 0, void 0).total : countWords(text13),
|
|
127863
128122
|
[text13, markdownHtml]
|
|
127864
128123
|
);
|
|
127865
|
-
const [shown2, setShown] =
|
|
127866
|
-
const prevRef =
|
|
128124
|
+
const [shown2, setShown] = React16.useState(total);
|
|
128125
|
+
const prevRef = React16.useRef(null);
|
|
127867
128126
|
useIsomorphicLayoutEffect(() => {
|
|
127868
128127
|
const prev = prevRef.current;
|
|
127869
128128
|
prevRef.current = text13;
|
|
@@ -127986,8 +128245,8 @@ var init_renderNode = __esm({
|
|
|
127986
128245
|
const boundInitials = useResolvedScalar(props.initials != null && isBinding(props.initials) ? props.initials : void 0, ctx);
|
|
127987
128246
|
const boundAlt = useResolvedScalar(contentDescription, ctx);
|
|
127988
128247
|
const fadeIn = motionDefaultsAnimate(ctx);
|
|
127989
|
-
const [shownSrc, setShownSrc] =
|
|
127990
|
-
const imgRef =
|
|
128248
|
+
const [shownSrc, setShownSrc] = React16.useState(null);
|
|
128249
|
+
const imgRef = React16.useRef(null);
|
|
127991
128250
|
const hasSource = props.url != null || props.initials != null || props.asset != null || props.icon != null;
|
|
127992
128251
|
const banner = fillWidth === true || props.width == null && props.height == null && !props.initials;
|
|
127993
128252
|
const w2 = banner ? "100%" : props.width ?? 40;
|
|
@@ -128001,7 +128260,7 @@ var init_renderNode = __esm({
|
|
|
128001
128260
|
const ph = props.placeholder ? C2(props.placeholder, "#e6e6e6") : void 0;
|
|
128002
128261
|
const imgUrl = props.url != null && isBinding(props.url) ? boundUrl : props.url;
|
|
128003
128262
|
const imgInitials = props.initials != null && isBinding(props.initials) ? boundInitials : props.initials;
|
|
128004
|
-
const [failedSrc, setFailedSrc] =
|
|
128263
|
+
const [failedSrc, setFailedSrc] = React16.useState(null);
|
|
128005
128264
|
const resolvedSrc = useImageSource(
|
|
128006
128265
|
imgUrl && typeof imgUrl === "string" ? resolveAssetUrl(imgUrl, ctx.assetBaseUrl, ctx.assetPin) : null,
|
|
128007
128266
|
{ width: w2, height: boxHeight, mode: renditionMode(contentMode), ratio: effectiveAr || void 0 }
|
|
@@ -128039,7 +128298,7 @@ var init_renderNode = __esm({
|
|
|
128039
128298
|
if (imgInitials && typeof imgInitials === "string") {
|
|
128040
128299
|
const alt = asFinalTextL10n(boundAlt, ctx).trim();
|
|
128041
128300
|
const circle = avatarCircle(String(imgInitials), typeof w2 === "number" ? w2 : 40, C2, false, bodyFont(ctx));
|
|
128042
|
-
return
|
|
128301
|
+
return React16.cloneElement(circle, alt ? { role: "img", "aria-label": alt, [SELF_RENDERED_LEAF]: true } : { [ROLE_WHEN_NAMED]: "img", [SELF_RENDERED_LEAF]: true });
|
|
128043
128302
|
}
|
|
128044
128303
|
if (props.icon != null && props.url == null && props.asset == null && imgInitials == null) {
|
|
128045
128304
|
const side2 = typeof w2 === "number" ? w2 : 40;
|
|
@@ -128054,13 +128313,13 @@ var init_renderNode = __esm({
|
|
|
128054
128313
|
const reduce = ctx.reduceMotion();
|
|
128055
128314
|
const servicePlayPath = typeof props.playPath === "string" && props.playPath.startsWith("$service:") ? props.playPath : void 0;
|
|
128056
128315
|
const nonce = lottieNonce(useResolvedScalar(servicePlayPath, ctx));
|
|
128057
|
-
const [replay, setReplay] =
|
|
128058
|
-
const [gen, setGen] =
|
|
128059
|
-
|
|
128316
|
+
const [replay, setReplay] = React16.useState({ plays: 0 });
|
|
128317
|
+
const [gen, setGen] = React16.useState(0);
|
|
128318
|
+
React16.useEffect(() => {
|
|
128060
128319
|
setReplay((s2) => ({ plays: s2.plays }));
|
|
128061
128320
|
setGen((g2) => g2 + 1);
|
|
128062
128321
|
}, [servicePlayPath, ctx.provider, props.source]);
|
|
128063
|
-
|
|
128322
|
+
React16.useEffect(() => {
|
|
128064
128323
|
setReplay((s2) => lottieReplayStep(s2, nonce, reduce));
|
|
128065
128324
|
}, [nonce, servicePlayPath, ctx.provider, props.source]);
|
|
128066
128325
|
return /* @__PURE__ */ jsx11(
|
|
@@ -128102,12 +128361,14 @@ var init_renderNode = __esm({
|
|
|
128102
128361
|
const initials = isBinding(props.initials) ? boundInitials : props.initials;
|
|
128103
128362
|
const size = props.size ?? 48;
|
|
128104
128363
|
const a11y = { [ROLE_WHEN_NAMED]: "img", [SELF_RENDERED_LEAF]: true };
|
|
128364
|
+
const [failedUrl, setFailedUrl] = React16.useState(null);
|
|
128365
|
+
const source = typeof imageUrl === "string" && imageUrl && failedUrl !== imageUrl ? imageUrl : null;
|
|
128105
128366
|
const photo = useImageSource(
|
|
128106
|
-
|
|
128367
|
+
source ? resolveAssetUrl(source, ctx.assetBaseUrl, ctx.assetPin) : null,
|
|
128107
128368
|
{ width: size, height: size, mode: "fill" }
|
|
128108
128369
|
).url;
|
|
128109
|
-
if (photo) {
|
|
128110
|
-
return /* @__PURE__ */ jsx11("img", { ...a11y, ...responsiveImage(photo, size, size, "fill"), alt: "", style: { width: size, height: size, borderRadius: "50%", objectFit: "cover", flex: "none", ...wrap } });
|
|
128370
|
+
if (photo && source) {
|
|
128371
|
+
return /* @__PURE__ */ jsx11("img", { ...a11y, ...responsiveImage(photo, size, size, "fill"), alt: "", "data-himi-avatar-photo": "", onError: () => setFailedUrl(source), style: { width: size, height: size, borderRadius: "50%", objectFit: "cover", flex: "none", background: C2("accentPrimary", "#116DFF"), ...wrap } });
|
|
128111
128372
|
}
|
|
128112
128373
|
return /* @__PURE__ */ jsx11("div", { ...a11y, style: { width: size, height: size, borderRadius: "50%", background: C2("accentPrimary", "#116DFF"), color: C2("textOnAccent", "#fff"), display: "grid", placeItems: "center", fontWeight: 600, fontSize: size * 0.4, fontFamily: bodyFont(ctx), flex: "none", ...wrap }, children: avatarInitials(asText2(initials) || "?") });
|
|
128113
128374
|
});
|
|
@@ -128122,7 +128383,7 @@ var init_renderNode = __esm({
|
|
|
128122
128383
|
const a11y = described ? { role: "img", "aria-label": String(contentDescription), [SELF_RENDERED_LEAF]: true } : { "aria-hidden": "true", [INFERRED_DECORATIVE]: true, [SELF_RENDERED_LEAF]: true, [ROLE_WHEN_NAMED]: "img" };
|
|
128123
128384
|
const glyph = iconSvg(iconName, { size, color: C2(resolveScalarStatic(props.tint, ctx) ?? "textPrimary", "#636b78") });
|
|
128124
128385
|
const swap = useIconSwap(iconName, ctx);
|
|
128125
|
-
const animatedGlyph = Object.keys(effectStyle).length || swap.key > 0 ?
|
|
128386
|
+
const animatedGlyph = Object.keys(effectStyle).length || swap.key > 0 ? React16.cloneElement(glyph, { style: { ...glyph.props.style, ...swap.style, ...effectStyle }, key: swap.key }) : glyph;
|
|
128126
128387
|
return /* @__PURE__ */ jsx11("span", { ...a11y, style: { display: "inline-grid", placeItems: "center", width: size + 6, height: size + 6, lineHeight: 1, flex: "none", ...wrap }, children: animatedGlyph });
|
|
128127
128388
|
});
|
|
128128
128389
|
EMPTY_STATE_SPACING = {
|
|
@@ -128364,12 +128625,12 @@ var init_renderNode = __esm({
|
|
|
128364
128625
|
const C2 = ctx.color;
|
|
128365
128626
|
const bound2 = useResolvedScalar(props.valuePath, ctx);
|
|
128366
128627
|
const boundText = props.valuePath != null ? typeof bound2 === "string" ? bound2 : typeof bound2 === "number" ? String(bound2) : "" : void 0;
|
|
128367
|
-
const [typed, setTyped] =
|
|
128368
|
-
|
|
128628
|
+
const [typed, setTyped] = React16.useState(void 0);
|
|
128629
|
+
React16.useEffect(() => {
|
|
128369
128630
|
setTyped(void 0);
|
|
128370
128631
|
}, [boundText, props.value, props.valuePath, typeof props.valuePath === "string" && props.valuePath.startsWith("$service:") ? ctx.provider : null]);
|
|
128371
128632
|
const otpPath = typeof props.valuePath === "string" && props.valuePath.startsWith("$service:") ? servicePath(props.valuePath) : "";
|
|
128372
|
-
|
|
128633
|
+
React16.useEffect(() => {
|
|
128373
128634
|
if (!ctx.provider || !otpPath) return;
|
|
128374
128635
|
let subscribing = true;
|
|
128375
128636
|
let active = true;
|
|
@@ -128460,10 +128721,10 @@ var init_renderNode = __esm({
|
|
|
128460
128721
|
return /* @__PURE__ */ jsx11("div", { ...a11y, style: { width: "100%", height: 6, borderRadius: 999, background: C2(boundTokenName(props.trackColorPath, props.trackColor, ctx) ?? "surfaceTertiary", "#eee"), overflow: "hidden", ...wrap }, children: /* @__PURE__ */ jsx11("div", { style: { width: `${Math.round((p2 ?? 0.4) * 100)}%`, height: "100%", borderRadius: 999, background: C2(boundTokenName(props.tintPath, props.tint, ctx) ?? "accentPrimary", "#116DFF"), opacity: p2 == null ? 0.45 : 1, ...animatedFill ? { transition: ctx.motionTransition(ctx.kit?.motion) } : {} } }) });
|
|
128461
128722
|
});
|
|
128462
128723
|
SnackbarNode = withExtras("SnackbarNode", ({ props, ctx, wrap }) => {
|
|
128463
|
-
const [phase, setPhase] =
|
|
128724
|
+
const [phase, setPhase] = React16.useState("shown");
|
|
128464
128725
|
const hideAfter = ctx.empty ? void 0 : snackbarAutoHideMs(props.durationMs);
|
|
128465
128726
|
const identity = snackbarIdentity(props);
|
|
128466
|
-
|
|
128727
|
+
React16.useEffect(() => {
|
|
128467
128728
|
setPhase("shown");
|
|
128468
128729
|
if (hideAfter === void 0) return;
|
|
128469
128730
|
let fade;
|
|
@@ -128519,8 +128780,8 @@ var init_renderNode = __esm({
|
|
|
128519
128780
|
const gated2 = props.presentedPath != null || props.presented != null;
|
|
128520
128781
|
const presented = props.presentedPath != null ? bound2 : props.presented;
|
|
128521
128782
|
const gateOpen = !gated2 || presented === true || presented === "true";
|
|
128522
|
-
const [dismissed, setDismissed] =
|
|
128523
|
-
|
|
128783
|
+
const [dismissed, setDismissed] = React16.useState(false);
|
|
128784
|
+
React16.useEffect(() => {
|
|
128524
128785
|
if (!gateOpen) setDismissed(false);
|
|
128525
128786
|
}, [gateOpen]);
|
|
128526
128787
|
const shown2 = gateOpen && !dismissed;
|
|
@@ -128528,26 +128789,26 @@ var init_renderNode = __esm({
|
|
|
128528
128789
|
const dismissible = props.dismissible !== false;
|
|
128529
128790
|
const edge = sheetEdge(props.edge);
|
|
128530
128791
|
const detents = edge === "bottom" ? sheetDetents(props.detents) : [];
|
|
128531
|
-
const [detentIndex, setDetentIndex] =
|
|
128532
|
-
|
|
128792
|
+
const [detentIndex, setDetentIndex] = React16.useState(0);
|
|
128793
|
+
React16.useEffect(() => {
|
|
128533
128794
|
if (!shown2) setDetentIndex(0);
|
|
128534
128795
|
}, [shown2]);
|
|
128535
|
-
const dialogRef =
|
|
128796
|
+
const dialogRef = React16.useRef(null);
|
|
128536
128797
|
const trapTab = useModalOverlay(dialogRef, shown2 && modal);
|
|
128537
|
-
const latest =
|
|
128798
|
+
const latest = React16.useRef({ ctx, onDismiss: props.onDismiss });
|
|
128538
128799
|
latest.current = { ctx, onDismiss: props.onDismiss };
|
|
128539
|
-
const closed =
|
|
128540
|
-
|
|
128800
|
+
const closed = React16.useRef(false);
|
|
128801
|
+
React16.useEffect(() => {
|
|
128541
128802
|
if (shown2) closed.current = false;
|
|
128542
128803
|
}, [shown2]);
|
|
128543
|
-
const dismiss =
|
|
128804
|
+
const dismiss = React16.useCallback(() => {
|
|
128544
128805
|
if (closed.current) return;
|
|
128545
128806
|
closed.current = true;
|
|
128546
128807
|
setDismissed(true);
|
|
128547
128808
|
const { ctx: now, onDismiss } = latest.current;
|
|
128548
128809
|
if (onDismiss != null) now.onAction?.(resolveItemDeep2(onDismiss, now));
|
|
128549
128810
|
}, []);
|
|
128550
|
-
|
|
128811
|
+
React16.useEffect(() => {
|
|
128551
128812
|
if (!shown2 || !dismissible) return;
|
|
128552
128813
|
const doc = dialogRef.current?.ownerDocument;
|
|
128553
128814
|
if (!doc) return;
|
|
@@ -128561,11 +128822,11 @@ var init_renderNode = __esm({
|
|
|
128561
128822
|
doc.addEventListener("keydown", onKey, true);
|
|
128562
128823
|
return () => doc.removeEventListener("keydown", onKey, true);
|
|
128563
128824
|
}, [shown2, dismissible, dismiss]);
|
|
128564
|
-
const drag =
|
|
128825
|
+
const drag = React16.useRef(null);
|
|
128565
128826
|
const reduceMotion = ctx.reduceMotion();
|
|
128566
|
-
const [mounted, setMounted] =
|
|
128567
|
-
const [entered, setEntered] =
|
|
128568
|
-
|
|
128827
|
+
const [mounted, setMounted] = React16.useState(shown2);
|
|
128828
|
+
const [entered, setEntered] = React16.useState(shown2 && ctx.staticRender === true);
|
|
128829
|
+
React16.useEffect(() => {
|
|
128569
128830
|
if (shown2) {
|
|
128570
128831
|
setMounted(true);
|
|
128571
128832
|
if (reduceMotion || typeof requestAnimationFrame !== "function") {
|
|
@@ -128589,8 +128850,8 @@ var init_renderNode = __esm({
|
|
|
128589
128850
|
const t2 = setTimeout(() => setMounted(false), DRAWER_EXIT_MS);
|
|
128590
128851
|
return () => clearTimeout(t2);
|
|
128591
128852
|
}, [shown2, reduceMotion]);
|
|
128592
|
-
const scrimRef =
|
|
128593
|
-
const [rtl, setRtl] =
|
|
128853
|
+
const scrimRef = React16.useRef(null);
|
|
128854
|
+
const [rtl, setRtl] = React16.useState(false);
|
|
128594
128855
|
useIsomorphicLayoutEffect(() => {
|
|
128595
128856
|
const el2 = scrimRef.current;
|
|
128596
128857
|
if (el2 && el2.ownerDocument.defaultView) setRtl(el2.ownerDocument.defaultView.getComputedStyle(el2).direction === "rtl");
|
|
@@ -128698,8 +128959,8 @@ var init_renderNode = __esm({
|
|
|
128698
128959
|
const gated2 = props.presentedPath != null || props.presented != null;
|
|
128699
128960
|
const presented = props.presentedPath != null ? bound2 : props.presented;
|
|
128700
128961
|
const gateOpen = !gated2 || presented === true || presented === "true";
|
|
128701
|
-
const [dismissed, setDismissed] =
|
|
128702
|
-
|
|
128962
|
+
const [dismissed, setDismissed] = React16.useState(false);
|
|
128963
|
+
React16.useEffect(() => {
|
|
128703
128964
|
if (!gateOpen) setDismissed(false);
|
|
128704
128965
|
}, [gateOpen]);
|
|
128705
128966
|
const shown2 = gateOpen && !dismissed;
|
|
@@ -128707,18 +128968,18 @@ var init_renderNode = __esm({
|
|
|
128707
128968
|
const autoMs = drawerAutoDismissMs(props.autoDismissMs);
|
|
128708
128969
|
const placement = sheetPlacement(props.placement);
|
|
128709
128970
|
const detents = sheetDetents(props.detents);
|
|
128710
|
-
const [detentIndex, setDetentIndex] =
|
|
128711
|
-
const [expanded, setExpanded] =
|
|
128712
|
-
|
|
128971
|
+
const [detentIndex, setDetentIndex] = React16.useState(0);
|
|
128972
|
+
const [expanded, setExpanded] = React16.useState(false);
|
|
128973
|
+
React16.useEffect(() => {
|
|
128713
128974
|
if (!shown2) {
|
|
128714
128975
|
setDetentIndex(0);
|
|
128715
128976
|
setExpanded(false);
|
|
128716
128977
|
}
|
|
128717
128978
|
}, [shown2]);
|
|
128718
128979
|
const reduceMotion = ctx.reduceMotion();
|
|
128719
|
-
const [mounted, setMounted] =
|
|
128720
|
-
const [entered, setEntered] =
|
|
128721
|
-
|
|
128980
|
+
const [mounted, setMounted] = React16.useState(shown2);
|
|
128981
|
+
const [entered, setEntered] = React16.useState(shown2 && ctx.staticRender === true);
|
|
128982
|
+
React16.useEffect(() => {
|
|
128722
128983
|
if (shown2) {
|
|
128723
128984
|
setMounted(true);
|
|
128724
128985
|
if (reduceMotion || typeof requestAnimationFrame !== "function") {
|
|
@@ -128742,10 +129003,10 @@ var init_renderNode = __esm({
|
|
|
128742
129003
|
const t2 = setTimeout(() => setMounted(false), DRAWER_EXIT_MS);
|
|
128743
129004
|
return () => clearTimeout(t2);
|
|
128744
129005
|
}, [shown2, reduceMotion]);
|
|
128745
|
-
const anchorRef =
|
|
128746
|
-
const panelRef =
|
|
128747
|
-
const [host, setHost] =
|
|
128748
|
-
const [hostTop, setHostTop] =
|
|
129006
|
+
const anchorRef = React16.useRef(null);
|
|
129007
|
+
const panelRef = React16.useRef(null);
|
|
129008
|
+
const [host, setHost] = React16.useState(null);
|
|
129009
|
+
const [hostTop, setHostTop] = React16.useState(true);
|
|
128749
129010
|
useIsomorphicLayoutEffect(() => {
|
|
128750
129011
|
if (!host) {
|
|
128751
129012
|
setHostTop(true);
|
|
@@ -128773,7 +129034,7 @@ var init_renderNode = __esm({
|
|
|
128773
129034
|
setHost(overlay ?? own6(DRAWER_HOST_ATTR));
|
|
128774
129035
|
}, [mounted, placement]);
|
|
128775
129036
|
const overHost = host?.hasAttribute(SHEET_OVERLAY_HOST_ATTR) ?? false;
|
|
128776
|
-
const [regionPx, setRegionPx] =
|
|
129037
|
+
const [regionPx, setRegionPx] = React16.useState(0);
|
|
128777
129038
|
useIsomorphicLayoutEffect(() => {
|
|
128778
129039
|
if (!detents.length || !mounted) return;
|
|
128779
129040
|
const region = host ? overHost ? host.parentElement : host.previousElementSibling : null;
|
|
@@ -128800,38 +129061,38 @@ var init_renderNode = __esm({
|
|
|
128800
129061
|
resizeObserver?.disconnect();
|
|
128801
129062
|
};
|
|
128802
129063
|
}, [host, overHost, mounted, detents.length]);
|
|
128803
|
-
const latest =
|
|
129064
|
+
const latest = React16.useRef({ ctx, onDismiss: props.onDismiss });
|
|
128804
129065
|
latest.current = { ctx, onDismiss: props.onDismiss };
|
|
128805
|
-
const closed =
|
|
128806
|
-
const remaining =
|
|
128807
|
-
|
|
129066
|
+
const closed = React16.useRef(false);
|
|
129067
|
+
const remaining = React16.useRef(autoMs ?? 0);
|
|
129068
|
+
React16.useEffect(() => {
|
|
128808
129069
|
if (!shown2) return;
|
|
128809
129070
|
closed.current = false;
|
|
128810
129071
|
remaining.current = autoMs ?? 0;
|
|
128811
129072
|
}, [shown2, autoMs]);
|
|
128812
|
-
const close =
|
|
129073
|
+
const close = React16.useCallback(() => {
|
|
128813
129074
|
if (closed.current) return;
|
|
128814
129075
|
closed.current = true;
|
|
128815
129076
|
setDismissed(true);
|
|
128816
129077
|
const { ctx: now, onDismiss } = latest.current;
|
|
128817
129078
|
if (onDismiss != null) now.onAction?.(resolveItemDeep2(onDismiss, now));
|
|
128818
129079
|
}, []);
|
|
128819
|
-
const toDetent =
|
|
129080
|
+
const toDetent = React16.useCallback((next, from) => {
|
|
128820
129081
|
if (next > from) setExpanded(true);
|
|
128821
129082
|
setDetentIndex(next);
|
|
128822
129083
|
}, []);
|
|
128823
|
-
const [hover, setHover] =
|
|
128824
|
-
const [pressed, setPressed] =
|
|
128825
|
-
const [focusIn, setFocusIn] =
|
|
129084
|
+
const [hover, setHover] = React16.useState(false);
|
|
129085
|
+
const [pressed, setPressed] = React16.useState(false);
|
|
129086
|
+
const [focusIn, setFocusIn] = React16.useState(false);
|
|
128826
129087
|
const paused = hover || pressed || focusIn;
|
|
128827
|
-
|
|
129088
|
+
React16.useEffect(() => {
|
|
128828
129089
|
if (!shown2) {
|
|
128829
129090
|
setHover(false);
|
|
128830
129091
|
setPressed(false);
|
|
128831
129092
|
setFocusIn(false);
|
|
128832
129093
|
}
|
|
128833
129094
|
}, [shown2]);
|
|
128834
|
-
|
|
129095
|
+
React16.useEffect(() => {
|
|
128835
129096
|
if (!shown2 || !hostTop || autoMs == null || paused || expanded) return;
|
|
128836
129097
|
const since = Date.now();
|
|
128837
129098
|
const t2 = setTimeout(() => {
|
|
@@ -128842,7 +129103,7 @@ var init_renderNode = __esm({
|
|
|
128842
129103
|
remaining.current = drawerRemainingMs(remaining.current, Date.now() - since);
|
|
128843
129104
|
};
|
|
128844
129105
|
}, [shown2, hostTop, autoMs, paused, expanded, close]);
|
|
128845
|
-
|
|
129106
|
+
React16.useEffect(() => {
|
|
128846
129107
|
if (!shown2 || !dismissible) return;
|
|
128847
129108
|
const doc = panelRef.current?.ownerDocument;
|
|
128848
129109
|
if (!doc) return;
|
|
@@ -128855,13 +129116,13 @@ var init_renderNode = __esm({
|
|
|
128855
129116
|
doc.addEventListener("keydown", onKey, true);
|
|
128856
129117
|
return () => doc.removeEventListener("keydown", onKey, true);
|
|
128857
129118
|
}, [shown2, dismissible, close, host]);
|
|
128858
|
-
const drag =
|
|
128859
|
-
const dragged =
|
|
128860
|
-
const [dragDy, setDragDy] =
|
|
128861
|
-
|
|
129119
|
+
const drag = React16.useRef(null);
|
|
129120
|
+
const dragged = React16.useRef(false);
|
|
129121
|
+
const [dragDy, setDragDy] = React16.useState(0);
|
|
129122
|
+
React16.useEffect(() => {
|
|
128862
129123
|
if (!shown2) setDragDy(0);
|
|
128863
129124
|
}, [shown2]);
|
|
128864
|
-
const dragState =
|
|
129125
|
+
const dragState = React16.useRef({ index: 0, count: 0, dismissible });
|
|
128865
129126
|
if (!shown2 && !mounted) return /* @__PURE__ */ jsx11("span", { ref: anchorRef, "data-bottom-drawer-anchor": "", hidden: true, ...{ [NODE_EXTRAS_TARGET]: "bottom-drawer-panel" } });
|
|
128866
129127
|
const sheet = idiomControls(ctx.idiom).sheet;
|
|
128867
129128
|
const r3 = `${sheet.cornerRadius}px`;
|
|
@@ -129003,23 +129264,23 @@ var init_renderNode = __esm({
|
|
|
129003
129264
|
const rich = title !== "";
|
|
129004
129265
|
const trigger = resolveTooltipTrigger(props.trigger, "pointer");
|
|
129005
129266
|
const edge = resolveOverlayEdge("Tooltip", props.edge);
|
|
129006
|
-
const [open, setOpen] =
|
|
129007
|
-
const anchorRef =
|
|
129008
|
-
const bubbleRef =
|
|
129009
|
-
const pressTimer =
|
|
129267
|
+
const [open, setOpen] = React16.useState(false);
|
|
129268
|
+
const anchorRef = React16.useRef(null);
|
|
129269
|
+
const bubbleRef = React16.useRef(null);
|
|
129270
|
+
const pressTimer = React16.useRef(null);
|
|
129010
129271
|
const placement = useFlippedEdge(edge, open, bubbleRef, anchorRef);
|
|
129011
129272
|
const placed = placement.edge;
|
|
129012
|
-
const latest =
|
|
129273
|
+
const latest = React16.useRef({ ctx, onDismiss: props.onDismiss, open });
|
|
129013
129274
|
latest.current = { ctx, onDismiss: props.onDismiss, open };
|
|
129014
|
-
const holding =
|
|
129015
|
-
const [needsTabStop, setNeedsTabStop] =
|
|
129275
|
+
const holding = React16.useRef({ hover: false, focus: false });
|
|
129276
|
+
const [needsTabStop, setNeedsTabStop] = React16.useState(false);
|
|
129016
129277
|
useIsomorphicLayoutEffect(() => {
|
|
129017
129278
|
const el2 = anchorRef.current;
|
|
129018
129279
|
const want = trigger === "hover" && el2 != null && !hasTabStop(el2);
|
|
129019
129280
|
if (want !== needsTabStop) setNeedsTabStop(want);
|
|
129020
129281
|
});
|
|
129021
|
-
const show =
|
|
129022
|
-
const dismiss =
|
|
129282
|
+
const show = React16.useCallback(() => setOpen(true), []);
|
|
129283
|
+
const dismiss = React16.useCallback(() => {
|
|
129023
129284
|
holding.current = { hover: false, focus: false };
|
|
129024
129285
|
const { ctx: now, onDismiss, open: wasOpen } = latest.current;
|
|
129025
129286
|
if (!wasOpen) return;
|
|
@@ -129027,7 +129288,7 @@ var init_renderNode = __esm({
|
|
|
129027
129288
|
setOpen(false);
|
|
129028
129289
|
if (onDismiss != null) now.onAction?.(resolveItemDeep2(onDismiss, now));
|
|
129029
129290
|
}, []);
|
|
129030
|
-
|
|
129291
|
+
React16.useEffect(() => {
|
|
129031
129292
|
if (!open) return;
|
|
129032
129293
|
const doc = bubbleRef.current?.ownerDocument;
|
|
129033
129294
|
if (!doc) return;
|
|
@@ -129051,7 +129312,7 @@ var init_renderNode = __esm({
|
|
|
129051
129312
|
if (timer) clearTimeout(timer);
|
|
129052
129313
|
};
|
|
129053
129314
|
}, [open, trigger, dismiss]);
|
|
129054
|
-
|
|
129315
|
+
React16.useEffect(() => () => {
|
|
129055
129316
|
if (pressTimer.current) clearTimeout(pressTimer.current);
|
|
129056
129317
|
}, []);
|
|
129057
129318
|
const cancelPress = () => {
|
|
@@ -129091,7 +129352,7 @@ var init_renderNode = __esm({
|
|
|
129091
129352
|
};
|
|
129092
129353
|
const hint = [title, text13].filter((s2) => s2 !== "").join(". ");
|
|
129093
129354
|
const anchor = props.anchor ? renderNode(props.anchor, ctx) : null;
|
|
129094
|
-
const wrapperHintId = `hm-tip-hint${
|
|
129355
|
+
const wrapperHintId = `hm-tip-hint${React16.useId()}`;
|
|
129095
129356
|
useIsomorphicLayoutEffect(() => {
|
|
129096
129357
|
const wrapper = anchorRef.current;
|
|
129097
129358
|
if (!wrapper || !hint || needsTabStop) return;
|
|
@@ -129113,7 +129374,7 @@ var init_renderNode = __esm({
|
|
|
129113
129374
|
/* @__PURE__ */ jsx11(OverlayAnchorClip, { wrap, children: needsTabStop ? /* @__PURE__ */ jsxs9(Fragment4, { children: [
|
|
129114
129375
|
anchor,
|
|
129115
129376
|
hint && /* @__PURE__ */ jsx11("span", { id: wrapperHintId, hidden: true, "data-hm-a11y-hint": "", children: hint })
|
|
129116
|
-
] }) : hint &&
|
|
129377
|
+
] }) : hint && React16.isValidElement(anchor) ? /* @__PURE__ */ jsxs9(Fragment4, { children: [
|
|
129117
129378
|
/* @__PURE__ */ jsx11(A11yHintDescription, { hint, children: anchor }),
|
|
129118
129379
|
/* @__PURE__ */ jsx11("span", { id: wrapperHintId, hidden: true, "data-hm-a11y-hint": "", children: hint })
|
|
129119
129380
|
] }) : /* @__PURE__ */ jsxs9(Fragment4, { children: [
|
|
@@ -129134,24 +129395,24 @@ var init_renderNode = __esm({
|
|
|
129134
129395
|
const gateOpen = gate === true || gate === "true";
|
|
129135
129396
|
const literal = props.presentedPath == null && props.presented != null;
|
|
129136
129397
|
const identity = { path: props.presentedPath, presented: props.presented, provider: ctx.provider };
|
|
129137
|
-
const [local, setLocal] =
|
|
129398
|
+
const [local, setLocal] = React16.useState({ ...identity, opened: false, dismissed: false });
|
|
129138
129399
|
const sameGate = local.path === identity.path && local.presented === identity.presented && local.provider === identity.provider;
|
|
129139
129400
|
const current = sameGate ? local : { ...identity, opened: false, dismissed: false };
|
|
129140
129401
|
if (!sameGate) setLocal(current);
|
|
129141
|
-
|
|
129402
|
+
React16.useEffect(() => {
|
|
129142
129403
|
if (!gateOpen) setLocal((previous) => previous.dismissed ? { ...previous, dismissed: false } : previous);
|
|
129143
129404
|
}, [gateOpen]);
|
|
129144
129405
|
const shown2 = !gated2 || (gateOpen || current.opened) && !current.dismissed;
|
|
129145
129406
|
const modal = gated2 && isOverlayModal("Popover", props.modal);
|
|
129146
|
-
const dialogRef =
|
|
129147
|
-
const anchorRef =
|
|
129148
|
-
const boxRef =
|
|
129407
|
+
const dialogRef = React16.useRef(null);
|
|
129408
|
+
const anchorRef = React16.useRef(null);
|
|
129409
|
+
const boxRef = React16.useRef(null);
|
|
129149
129410
|
const trapTab = useModalOverlay(dialogRef, shown2 && modal);
|
|
129150
129411
|
const placement = useFlippedEdge(resolveOverlayEdge("Popover", props.edge), gated2 && shown2, dialogRef, boxRef, 6);
|
|
129151
129412
|
const placed = placement.edge;
|
|
129152
|
-
const latest =
|
|
129413
|
+
const latest = React16.useRef({ ctx, onDismiss: props.onDismiss });
|
|
129153
129414
|
latest.current = { ctx, onDismiss: props.onDismiss };
|
|
129154
|
-
|
|
129415
|
+
React16.useEffect(() => {
|
|
129155
129416
|
if (!gated2 || !shown2) return;
|
|
129156
129417
|
const doc = dialogRef.current?.ownerDocument;
|
|
129157
129418
|
if (!doc) return;
|
|
@@ -129189,8 +129450,8 @@ var init_renderNode = __esm({
|
|
|
129189
129450
|
if (shown2) return;
|
|
129190
129451
|
setLocal({ ...identity, opened: true, dismissed: false });
|
|
129191
129452
|
} : void 0;
|
|
129192
|
-
const [anchorIsButton, setAnchorIsButton] =
|
|
129193
|
-
const [needsSeparateOpener, setNeedsSeparateOpener] =
|
|
129453
|
+
const [anchorIsButton, setAnchorIsButton] = React16.useState(false);
|
|
129454
|
+
const [needsSeparateOpener, setNeedsSeparateOpener] = React16.useState(false);
|
|
129194
129455
|
useIsomorphicLayoutEffect(() => {
|
|
129195
129456
|
const el2 = anchorRef.current;
|
|
129196
129457
|
const want = literal && el2 != null && !hasTabStop(el2);
|
|
@@ -129217,7 +129478,7 @@ var init_renderNode = __esm({
|
|
|
129217
129478
|
});
|
|
129218
129479
|
ChipsInputNode = withExtras("ChipsInputNode", ({ props, ctx, wrap }) => {
|
|
129219
129480
|
const placeholderText = useBoundString(props.placeholder, ctx);
|
|
129220
|
-
const [draft, setDraft] =
|
|
129481
|
+
const [draft, setDraft] = React16.useState("");
|
|
129221
129482
|
const C2 = ctx.color;
|
|
129222
129483
|
const bound2 = useResolvedScalar(props.valuesPath, ctx);
|
|
129223
129484
|
const raw = props.valuesPath != null ? bound2 : props.values;
|
|
@@ -129414,7 +129675,7 @@ var init_renderNode = __esm({
|
|
|
129414
129675
|
const who = asText2(a2.initials).trim();
|
|
129415
129676
|
const initials = avatarCircle(who || "?", size, C2, true, bodyFont(ctx));
|
|
129416
129677
|
const photo = typeof a2.imageUrl === "string" && a2.imageUrl && !isBinding(a2.imageUrl) ? a2.imageUrl : "";
|
|
129417
|
-
const circle = photo ?
|
|
129678
|
+
const circle = photo ? React16.cloneElement(
|
|
129418
129679
|
initials,
|
|
129419
129680
|
{ style: { ...initials.props.style, position: "relative", overflow: "hidden" } },
|
|
129420
129681
|
initials.props.children,
|
|
@@ -129422,7 +129683,7 @@ var init_renderNode = __esm({
|
|
|
129422
129683
|
e2.currentTarget.style.display = "none";
|
|
129423
129684
|
}, style: { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover" } })
|
|
129424
129685
|
) : initials;
|
|
129425
|
-
return who ? /* @__PURE__ */ jsx11("div", { role: "listitem", style: wrapStyle, children:
|
|
129686
|
+
return who ? /* @__PURE__ */ jsx11("div", { role: "listitem", style: wrapStyle, children: React16.cloneElement(circle, { role: "img", "aria-label": who }) }, i2) : /* @__PURE__ */ jsx11("div", { "aria-hidden": "true", style: wrapStyle, children: circle }, i2);
|
|
129426
129687
|
}),
|
|
129427
129688
|
overflow > 0 && /* @__PURE__ */ jsx11("div", { role: "listitem", style: { marginLeft: -(size - shift), width: size, height: size, borderRadius: "50%", border: `2px solid ${C2("surfacePrimary", "#fff")}`, background: C2("surfaceTertiary", "#e6e6e6"), color: C2("textPrimary", "#111"), display: "grid", placeItems: "center", fontSize: size * 0.32, fontWeight: 700, fontFamily: bodyFont(ctx) }, children: /* @__PURE__ */ jsxs9("span", { role: "img", "aria-label": `${overflow} more`, children: [
|
|
129428
129689
|
"+",
|
|
@@ -129443,7 +129704,7 @@ var init_renderNode = __esm({
|
|
|
129443
129704
|
const declared = Array.isArray(props.series) ? props.series : [];
|
|
129444
129705
|
const multi = declared.length > 0;
|
|
129445
129706
|
const singleBound = useBoundValue(ctx, typeof props.valuesPath === "string" && !multi ? props.valuesPath : "");
|
|
129446
|
-
const seriesBindings =
|
|
129707
|
+
const seriesBindings = React16.useMemo(
|
|
129447
129708
|
() => declared.map((d2) => typeof d2?.valuesPath === "string" ? d2.valuesPath : ""),
|
|
129448
129709
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
129449
129710
|
[declared.map((d2) => String(d2?.valuesPath ?? "")).join("\0")]
|
|
@@ -129589,9 +129850,9 @@ var init_renderNode = __esm({
|
|
|
129589
129850
|
] }) });
|
|
129590
129851
|
});
|
|
129591
129852
|
ShapeNode = withExtras("ShapeNode", ({ props, ctx, wrap }) => {
|
|
129592
|
-
const ref =
|
|
129593
|
-
const [box, setBox] =
|
|
129594
|
-
|
|
129853
|
+
const ref = React16.useRef(null);
|
|
129854
|
+
const [box, setBox] = React16.useState(null);
|
|
129855
|
+
React16.useEffect(() => {
|
|
129595
129856
|
const el2 = ref.current;
|
|
129596
129857
|
if (!el2) return;
|
|
129597
129858
|
const measure2 = () => {
|
|
@@ -129749,10 +130010,10 @@ var init_renderNode = __esm({
|
|
|
129749
130010
|
const isPlayable = !isFailed && !isUploading;
|
|
129750
130011
|
const isPlaying = state === "playing";
|
|
129751
130012
|
const isLoading = state === "loading";
|
|
129752
|
-
const [scrub, setScrub] =
|
|
129753
|
-
const [seeked, setSeeked] =
|
|
130013
|
+
const [scrub, setScrub] = React16.useState(null);
|
|
130014
|
+
const [seeked, setSeeked] = React16.useState(null);
|
|
129754
130015
|
const positionMs = Math.max(0, num4(props.positionMsPath != null ? boundPosition : void 0, props.positionMs, 0));
|
|
129755
|
-
|
|
130016
|
+
React16.useEffect(() => {
|
|
129756
130017
|
setSeeked(null);
|
|
129757
130018
|
}, [positionMs]);
|
|
129758
130019
|
const effectivePositionMs = seeked ?? positionMs;
|
|
@@ -129794,8 +130055,8 @@ var init_renderNode = __esm({
|
|
|
129794
130055
|
const barW = Math.max(0.6, slot * 0.58);
|
|
129795
130056
|
const cut2 = progress * W2;
|
|
129796
130057
|
const rates = Array.isArray(props.rates) ? props.rates.map(Number).filter((n2) => n2 > 0) : [];
|
|
129797
|
-
const [pickedRate, setPickedRate] =
|
|
129798
|
-
|
|
130058
|
+
const [pickedRate, setPickedRate] = React16.useState(null);
|
|
130059
|
+
React16.useEffect(() => {
|
|
129799
130060
|
setPickedRate(null);
|
|
129800
130061
|
}, [rate]);
|
|
129801
130062
|
const effectiveRate = pickedRate ?? rate;
|
|
@@ -129969,8 +130230,8 @@ var init_renderNode = __esm({
|
|
|
129969
130230
|
}) });
|
|
129970
130231
|
});
|
|
129971
130232
|
LiveWindowMeasured = ({ index, heights, children }) => {
|
|
129972
|
-
const ref =
|
|
129973
|
-
|
|
130233
|
+
const ref = React16.useRef(null);
|
|
130234
|
+
React16.useLayoutEffect(() => {
|
|
129974
130235
|
const el2 = ref.current;
|
|
129975
130236
|
if (!el2) return;
|
|
129976
130237
|
const record3 = () => {
|
|
@@ -129989,7 +130250,7 @@ var init_renderNode = __esm({
|
|
|
129989
130250
|
return /* @__PURE__ */ jsx11("div", { ref, style: { width: "100%" }, children });
|
|
129990
130251
|
};
|
|
129991
130252
|
LiveWindowPage = ({ page, index, count: count2, current, liveWindow, ownerId, heights, ctx }) => {
|
|
129992
|
-
const outerActive =
|
|
130253
|
+
const outerActive = React16.useContext(PageActiveContext);
|
|
129993
130254
|
if (liveWindowRange(current, count2, liveWindow) == null) return /* @__PURE__ */ jsx11(Fragment4, { children: renderNode(page, ctx) });
|
|
129994
130255
|
if (liveWindowMounted(index, current, count2, liveWindow)) {
|
|
129995
130256
|
return /* @__PURE__ */ jsx11(PageActiveContext.Provider, { value: outerActive && liveWindowActive(index, current, count2, liveWindow), children: /* @__PURE__ */ jsx11(LiveWindowMeasured, { index, heights, children: renderNode(page, ctx) }) });
|
|
@@ -130018,27 +130279,27 @@ var init_renderNode = __esm({
|
|
|
130018
130279
|
const items = (props.__pager ? props.pages : props.items) ?? [];
|
|
130019
130280
|
const pages2 = items.filter((page) => isNodeLike(page) || page?.type);
|
|
130020
130281
|
const requested = Math.max(0, Math.min(pages2.length - 1, props.currentIndex ?? 0));
|
|
130021
|
-
const [current, setCurrent] =
|
|
130022
|
-
const rail =
|
|
130023
|
-
const currentRef =
|
|
130282
|
+
const [current, setCurrent] = React16.useState(requested);
|
|
130283
|
+
const rail = React16.useRef(null);
|
|
130284
|
+
const currentRef = React16.useRef(current);
|
|
130024
130285
|
const itemsPath = props.itemsPath ?? props.items_path;
|
|
130025
130286
|
const boundRail = !!itemsPath && !!items[0] && !!ctx.provider;
|
|
130026
130287
|
const { settled, scrolling } = useSettledPage(current);
|
|
130027
|
-
const [, heightsChanged] =
|
|
130288
|
+
const [, heightsChanged] = React16.useReducer((n2) => n2 + 1, 0);
|
|
130028
130289
|
const pageKey = pages2.map((p2, i2) => p2?.id ?? `#${i2}`).join("\0");
|
|
130029
|
-
const pageHeights =
|
|
130290
|
+
const pageHeights = React16.useMemo(() => ({ map: /* @__PURE__ */ new Map(), changed: heightsChanged }), [pageKey]);
|
|
130030
130291
|
const select2 = (index) => {
|
|
130031
130292
|
if (index === currentRef.current) return;
|
|
130032
130293
|
currentRef.current = index;
|
|
130033
130294
|
setCurrent(index);
|
|
130034
130295
|
if (props.onChange && ctx.onAction) ctx.onAction({ ...props.onChange, args: { ...props.onChange.args ?? {}, index } });
|
|
130035
130296
|
};
|
|
130036
|
-
|
|
130297
|
+
React16.useEffect(() => {
|
|
130037
130298
|
currentRef.current = requested;
|
|
130038
130299
|
setCurrent(requested);
|
|
130039
130300
|
if (rail.current && !boundRail) rail.current.scrollLeft = requested * rail.current.clientWidth;
|
|
130040
130301
|
}, [requested, boundRail, pages2.length]);
|
|
130041
|
-
|
|
130302
|
+
React16.useEffect(() => {
|
|
130042
130303
|
const interval = props.autoplayIntervalMs;
|
|
130043
130304
|
if (props.__pager || boundRail || !Number.isFinite(interval) || interval <= 0 || pages2.length < 2 || ctx.reduceMotion()) return;
|
|
130044
130305
|
const timer = setInterval(() => {
|
|
@@ -130085,19 +130346,19 @@ var init_renderNode = __esm({
|
|
|
130085
130346
|
const opts = Array.isArray(rawOpts) ? rawOpts : [];
|
|
130086
130347
|
const selectedId = isBinding(props.selectedId) ? boundSel : props.selectedId;
|
|
130087
130348
|
const selIdx = Math.max(0, opts.findIndex((o2) => o2?.id === selectedId));
|
|
130088
|
-
const viewport =
|
|
130089
|
-
const settle2 =
|
|
130090
|
-
const pickerId =
|
|
130349
|
+
const viewport = React16.useRef(null);
|
|
130350
|
+
const settle2 = React16.useRef(void 0);
|
|
130351
|
+
const pickerId = React16.useId();
|
|
130091
130352
|
const interactive = !!ctx.onAction && !!props.onChange;
|
|
130092
130353
|
const emit = (index) => {
|
|
130093
130354
|
const id = opts[index]?.id;
|
|
130094
130355
|
if (!interactive || id == null || index === selIdx) return;
|
|
130095
130356
|
ctx.onAction({ ...props.onChange, args: { ...props.onChange.args ?? {}, selectedId: String(id) } });
|
|
130096
130357
|
};
|
|
130097
|
-
|
|
130358
|
+
React16.useEffect(() => {
|
|
130098
130359
|
if (viewport.current) viewport.current.scrollTop = selIdx * 32;
|
|
130099
130360
|
}, [selIdx, opts.length]);
|
|
130100
|
-
|
|
130361
|
+
React16.useEffect(() => () => clearTimeout(settle2.current), []);
|
|
130101
130362
|
return /* @__PURE__ */ jsxs9("div", { style: { position: "relative", width: "100%", maxWidth: 220, height: 160, overflow: "hidden", background: C2("surfaceSecondary", "#f5f7fa"), borderRadius: 12, ...wrap }, children: [
|
|
130102
130363
|
/* @__PURE__ */ jsx11("div", { "aria-hidden": "true", style: { position: "absolute", top: 64, left: 8, right: 8, height: 32, background: C2("surfacePrimary", "#fff"), borderRadius: 8, boxShadow: "inset 0 0 0 1px rgba(0,0,0,.06)" } }),
|
|
130103
130364
|
/* @__PURE__ */ jsx11(
|
|
@@ -130173,11 +130434,23 @@ var init_renderNode = __esm({
|
|
|
130173
130434
|
const next = multiSelect ? isSel ? selected.filter((x2) => x2 !== id) : [...selected, id] : isSel ? [] : [id];
|
|
130174
130435
|
ctx.onAction({ ...onChange, args: { ...onChange.args ?? {}, selectedIds: next } });
|
|
130175
130436
|
};
|
|
130437
|
+
const rowRef = React16.useRef(null);
|
|
130438
|
+
const shownSelection = React16.useRef(void 0);
|
|
130439
|
+
const selectedId = multiSelect ? null : selected[0] ?? null;
|
|
130440
|
+
React16.useEffect(() => {
|
|
130441
|
+
const row2 = rowRef.current;
|
|
130442
|
+
if (multiSelect || !row2 || selectedId === shownSelection.current) return;
|
|
130443
|
+
const chip = selectedId == null ? null : Array.from(row2.children).find((el2) => el2.getAttribute("data-chip-id") === selectedId);
|
|
130444
|
+
if (selectedId != null && !chip) return;
|
|
130445
|
+
const first = shownSelection.current === void 0;
|
|
130446
|
+
shownSelection.current = selectedId;
|
|
130447
|
+
if (chip) revealInRow(chip, row2, first || ctx.reduceMotion());
|
|
130448
|
+
}, [selectedId, chips, multiSelect]);
|
|
130176
130449
|
return (
|
|
130177
130450
|
// ONE horizontally scrolling row, like the iOS ScrollView(.horizontal) and the
|
|
130178
130451
|
// Android LazyRow. Wrapping here turned a long filter set into a ragged grid and
|
|
130179
130452
|
// pushed a sibling count onto two lines (#3080, #3004).
|
|
130180
|
-
/* @__PURE__ */ jsx11("div", { role: "group", style: { display: "flex", gap: 8, flexWrap: "nowrap", overflowX: "auto", scrollbarWidth: "none", width: "100%", minWidth: 0, ...wrap }, children: chips.map((c2, i2) => {
|
|
130453
|
+
/* @__PURE__ */ jsx11("div", { ref: rowRef, role: "group", style: { display: "flex", gap: 8, flexWrap: "nowrap", overflowX: "auto", scrollbarWidth: "none", width: "100%", minWidth: 0, ...wrap }, children: chips.map((c2, i2) => {
|
|
130181
130454
|
const on4 = selected.includes(c2.id);
|
|
130182
130455
|
const chipStyle = { display: "flex", flex: "none", whiteSpace: "nowrap", gap: 6, alignItems: "center", fontFamily: bodyFont(ctx), fontWeight: 500, fontSize: pxToRem(13), border: `1px solid ${on4 ? "transparent" : C2("border", "#ddd")}`, background: on4 ? C2("accentPrimary", "#116DFF") : "transparent", color: on4 ? C2("textOnAccent", "#fff") : C2("textSecondary", "#666"), padding: "6px 12px", borderRadius: 999 };
|
|
130183
130456
|
const inner = /* @__PURE__ */ jsxs9(Fragment4, { children: [
|
|
@@ -130187,7 +130460,7 @@ var init_renderNode = __esm({
|
|
|
130187
130460
|
/* @__PURE__ */ jsx11("span", { style: { ...on4 ? {} : { opacity: 0.7 }, fontSize: pxToRem(11) }, children: c2.count })
|
|
130188
130461
|
] })
|
|
130189
130462
|
] });
|
|
130190
|
-
return interactive ? /* @__PURE__ */ jsx11("button", { type: "button", "aria-pressed": on4, onClick: () => toggle(c2.id), style: { all: "unset", cursor: "pointer", boxSizing: "border-box", ...chipStyle }, children: inner }, c2.id ?? i2) : /* @__PURE__ */ jsx11("span", { style: chipStyle, children: inner }, c2.id ?? i2);
|
|
130463
|
+
return interactive ? /* @__PURE__ */ jsx11("button", { "data-chip-id": c2.id, type: "button", "aria-pressed": on4, onClick: () => toggle(c2.id), style: { all: "unset", cursor: "pointer", boxSizing: "border-box", ...chipStyle }, children: inner }, c2.id ?? i2) : /* @__PURE__ */ jsx11("span", { "data-chip-id": c2.id, style: chipStyle, children: inner }, c2.id ?? i2);
|
|
130191
130464
|
}) })
|
|
130192
130465
|
);
|
|
130193
130466
|
});
|
|
@@ -130208,23 +130481,23 @@ var init_renderNode = __esm({
|
|
|
130208
130481
|
const hasEvents = !!(props.onMapTap || props.onMarkerTap || props.onRegionChange || props.onShapeTap);
|
|
130209
130482
|
const boundShapes = useResolvedScalar(props.shapesPath, ctx);
|
|
130210
130483
|
const shapesRaw = Array.isArray(boundShapes) ? boundShapes : Array.isArray(props.shapes) ? props.shapes : [];
|
|
130211
|
-
const shapes =
|
|
130484
|
+
const shapes = React16.useMemo(() => shapesRaw.map((sh) => {
|
|
130212
130485
|
const kind = parseShapeKind(sh?.kind);
|
|
130213
130486
|
const pts = Array.isArray(sh?.points) ? sh.points.filter((p2) => p2 && typeof p2.latitude === "number" && typeof p2.longitude === "number") : [];
|
|
130214
130487
|
const ring = kind === "circle" && pts.length ? circleRing(pts[0].latitude, pts[0].longitude, typeof sh.radiusM === "number" ? sh.radiusM : 0) : pts;
|
|
130215
130488
|
return { ...sh, kind, points: ring };
|
|
130216
130489
|
}), [JSON.stringify(shapesRaw)]);
|
|
130217
130490
|
const boundCameraRaw = useResolvedScalar(props.cameraPath, ctx);
|
|
130218
|
-
const commandedCamera =
|
|
130219
|
-
const [box, setBox] =
|
|
130220
|
-
const [tileStatus, setTileStatus] =
|
|
130221
|
-
const [userCam, setUserCam] =
|
|
130222
|
-
const dragRef =
|
|
130223
|
-
const dragMovedRef =
|
|
130224
|
-
const regionReportedRef =
|
|
130225
|
-
const [boxEl, setBoxEl] =
|
|
130226
|
-
const attachBox =
|
|
130227
|
-
|
|
130491
|
+
const commandedCamera = React16.useMemo(() => decodeCamera(boundCameraRaw), [boundCameraRaw]);
|
|
130492
|
+
const [box, setBox] = React16.useState({ w: 400, h: h2 });
|
|
130493
|
+
const [tileStatus, setTileStatus] = React16.useState({});
|
|
130494
|
+
const [userCam, setUserCam] = React16.useState(null);
|
|
130495
|
+
const dragRef = React16.useRef(null);
|
|
130496
|
+
const dragMovedRef = React16.useRef(false);
|
|
130497
|
+
const regionReportedRef = React16.useRef(false);
|
|
130498
|
+
const [boxEl, setBoxEl] = React16.useState(null);
|
|
130499
|
+
const attachBox = React16.useCallback((el2) => setBoxEl(el2), []);
|
|
130500
|
+
React16.useEffect(() => {
|
|
130228
130501
|
const el2 = boxEl;
|
|
130229
130502
|
if (!el2) return;
|
|
130230
130503
|
const measure2 = () => {
|
|
@@ -130247,12 +130520,12 @@ var init_renderNode = __esm({
|
|
|
130247
130520
|
const explicitSchematic = schematic && props.routeMode?.toLowerCase() === "schematic";
|
|
130248
130521
|
const usesTileArm = !explicitSchematic && (otherTileReason || hasStaticMarkers) && (follow || !schematic);
|
|
130249
130522
|
const pinsOnly = hasStaticMarkers && !otherTileReason;
|
|
130250
|
-
const [userFix, setUserFix] =
|
|
130251
|
-
const [followBroken, setFollowBroken] =
|
|
130252
|
-
|
|
130523
|
+
const [userFix, setUserFix] = React16.useState(null);
|
|
130524
|
+
const [followBroken, setFollowBroken] = React16.useState(false);
|
|
130525
|
+
React16.useEffect(() => {
|
|
130253
130526
|
if (follow) setFollowBroken(false);
|
|
130254
130527
|
}, [follow]);
|
|
130255
|
-
|
|
130528
|
+
React16.useEffect(() => {
|
|
130256
130529
|
if (!observeUserLocation || !usesTileArm) return;
|
|
130257
130530
|
const geo = typeof navigator !== "undefined" ? navigator.geolocation : void 0;
|
|
130258
130531
|
if (!geo || typeof geo.watchPosition !== "function") return;
|
|
@@ -130279,7 +130552,7 @@ var init_renderNode = __esm({
|
|
|
130279
130552
|
const z5 = userCam?.z ?? fitted;
|
|
130280
130553
|
const cLat = followActive ? userFix.lat : userCam?.lat ?? baseLat;
|
|
130281
130554
|
const cLng = followActive ? userFix.lng : userCam?.lng ?? baseLng;
|
|
130282
|
-
|
|
130555
|
+
React16.useEffect(() => {
|
|
130283
130556
|
const resolved2 = resolveCamera(commandedCamera, cLat, cLng, z5);
|
|
130284
130557
|
if (!resolved2) return;
|
|
130285
130558
|
setFollowBroken(true);
|
|
@@ -130361,7 +130634,7 @@ var init_renderNode = __esm({
|
|
|
130361
130634
|
const endDrag = () => {
|
|
130362
130635
|
dragRef.current = null;
|
|
130363
130636
|
};
|
|
130364
|
-
|
|
130637
|
+
React16.useEffect(() => {
|
|
130365
130638
|
if (!boxEl || !usesTileArm || !interactive) return;
|
|
130366
130639
|
const zoomOnWheel = (event) => {
|
|
130367
130640
|
event.preventDefault();
|
|
@@ -130371,7 +130644,7 @@ var init_renderNode = __esm({
|
|
|
130371
130644
|
boxEl.addEventListener("wheel", zoomOnWheel, { passive: false });
|
|
130372
130645
|
return () => boxEl.removeEventListener("wheel", zoomOnWheel);
|
|
130373
130646
|
}, [boxEl, usesTileArm, interactive, z5, cLat, cLng]);
|
|
130374
|
-
|
|
130647
|
+
React16.useEffect(() => {
|
|
130375
130648
|
const action = props.onRegionChange;
|
|
130376
130649
|
const fire = ctx.onAction;
|
|
130377
130650
|
if (!usesTileArm || !action || !fire) return;
|
|
@@ -130514,34 +130787,34 @@ var init_renderNode = __esm({
|
|
|
130514
130787
|
const effectiveIndex = Number.isInteger(parsedIndex) ? parsedIndex : props.currentIndex;
|
|
130515
130788
|
const pages2 = items.filter((p2) => isNodeLike(p2) || p2?.type);
|
|
130516
130789
|
const count2 = pages2.length;
|
|
130517
|
-
const [index, setIndex] =
|
|
130518
|
-
const indexRef =
|
|
130790
|
+
const [index, setIndex] = React16.useState(typeof effectiveIndex === "number" ? effectiveIndex : 0);
|
|
130791
|
+
const indexRef = React16.useRef(index);
|
|
130519
130792
|
const { settled, scrolling } = useSettledPage(index);
|
|
130520
|
-
const [, heightsChanged] =
|
|
130793
|
+
const [, heightsChanged] = React16.useReducer((n2) => n2 + 1, 0);
|
|
130521
130794
|
const pageKey = pages2.map((p2, i2) => p2?.id ?? `#${i2}`).join("\0");
|
|
130522
|
-
const pageHeights =
|
|
130523
|
-
const trackRef =
|
|
130524
|
-
const [hovered, setHovered] =
|
|
130525
|
-
const [focused, setFocused] =
|
|
130795
|
+
const pageHeights = React16.useMemo(() => ({ map: /* @__PURE__ */ new Map(), changed: heightsChanged }), [pageKey]);
|
|
130796
|
+
const trackRef = React16.useRef(null);
|
|
130797
|
+
const [hovered, setHovered] = React16.useState(false);
|
|
130798
|
+
const [focused, setFocused] = React16.useState(false);
|
|
130526
130799
|
const paused = hovered || focused;
|
|
130527
130800
|
const interval = typeof props.autoplayIntervalMs === "number" && props.autoplayIntervalMs > 0 ? props.autoplayIntervalMs : 0;
|
|
130528
130801
|
const autoplay = interval > 0 && count2 > 1 && !ctx.reduceMotion();
|
|
130529
130802
|
const onChange = props.onChange;
|
|
130530
|
-
const onChangeRef =
|
|
130803
|
+
const onChangeRef = React16.useRef(onChange);
|
|
130531
130804
|
onChangeRef.current = onChange;
|
|
130532
|
-
const autoScrollRef =
|
|
130533
|
-
const endAutoScroll =
|
|
130805
|
+
const autoScrollRef = React16.useRef(null);
|
|
130806
|
+
const endAutoScroll = React16.useCallback(() => {
|
|
130534
130807
|
if (autoScrollRef.current) clearTimeout(autoScrollRef.current.timer);
|
|
130535
130808
|
autoScrollRef.current = null;
|
|
130536
130809
|
}, []);
|
|
130537
130810
|
const requestedIndex = Math.max(0, Math.min(count2 - 1, typeof effectiveIndex === "number" ? effectiveIndex : 0));
|
|
130538
|
-
|
|
130811
|
+
React16.useEffect(() => {
|
|
130539
130812
|
endAutoScroll();
|
|
130540
130813
|
indexRef.current = requestedIndex;
|
|
130541
130814
|
setIndex(requestedIndex);
|
|
130542
130815
|
if (trackRef.current) trackRef.current.scrollLeft = requestedIndex * trackRef.current.clientWidth * (trackRef.current.ownerDocument.defaultView?.getComputedStyle(trackRef.current).direction === "rtl" ? -1 : 1);
|
|
130543
130816
|
}, [requestedIndex, count2, endAutoScroll]);
|
|
130544
|
-
|
|
130817
|
+
React16.useEffect(() => {
|
|
130545
130818
|
const el2 = trackRef.current;
|
|
130546
130819
|
el2?.addEventListener("scrollend", endAutoScroll);
|
|
130547
130820
|
return () => {
|
|
@@ -130549,14 +130822,14 @@ var init_renderNode = __esm({
|
|
|
130549
130822
|
endAutoScroll();
|
|
130550
130823
|
};
|
|
130551
130824
|
}, [endAutoScroll]);
|
|
130552
|
-
const pageTo =
|
|
130825
|
+
const pageTo = React16.useCallback((page) => {
|
|
130553
130826
|
if (page === indexRef.current) return;
|
|
130554
130827
|
indexRef.current = page;
|
|
130555
130828
|
setIndex(page);
|
|
130556
130829
|
const action = onChangeRef.current;
|
|
130557
130830
|
if (action && ctx.onAction) ctx.onAction({ ...action, args: { ...action.args ?? {}, index: page } });
|
|
130558
130831
|
}, [ctx]);
|
|
130559
|
-
|
|
130832
|
+
React16.useEffect(() => {
|
|
130560
130833
|
if (!autoplay || paused) return;
|
|
130561
130834
|
const id = setInterval(() => {
|
|
130562
130835
|
const next = (indexRef.current + 1) % count2;
|
|
@@ -130622,7 +130895,7 @@ var init_renderNode = __esm({
|
|
|
130622
130895
|
});
|
|
130623
130896
|
BannerNode = withExtras("BannerNode", ({ props, ctx, wrap }) => {
|
|
130624
130897
|
const C2 = ctx.color;
|
|
130625
|
-
const [dismissed, setDismissed] =
|
|
130898
|
+
const [dismissed, setDismissed] = React16.useState(false);
|
|
130626
130899
|
if (dismissed) return null;
|
|
130627
130900
|
const accent = sevColor(ctx, props.severity ?? "info");
|
|
130628
130901
|
return /* @__PURE__ */ jsxs9("div", { style: { display: "flex", gap: 11, width: "100%", boxSizing: "border-box", borderRadius: ctx.radius("md", 10), padding: 13, background: `color-mix(in srgb, ${accent} 12%, ${C2("surfacePrimary", "#fff")})`, border: `1px solid color-mix(in srgb, ${accent} 32%, transparent)`, ...wrap }, children: [
|
|
@@ -130655,16 +130928,16 @@ var init_renderNode = __esm({
|
|
|
130655
130928
|
const rawImageUrl = props.imageUrl != null && isBinding(props.imageUrl) ? boundImageUrl : props.imageUrl;
|
|
130656
130929
|
const heroSrc = typeof rawImageUrl === "string" && rawImageUrl !== "" ? rawImageUrl : typeof props.imageAsset === "string" && isWebAssetPath(props.imageAsset) ? props.imageAsset : void 0;
|
|
130657
130930
|
const resolvedHero = heroSrc ? resolveAssetUrl(heroSrc, ctx.assetBaseUrl, ctx.assetPin) : void 0;
|
|
130658
|
-
const [failedHero, setFailedHero] =
|
|
130931
|
+
const [failedHero, setFailedHero] = React16.useState(null);
|
|
130659
130932
|
const heroUrl = resolvedHero && resolvedHero !== failedHero ? resolvedHero : void 0;
|
|
130660
130933
|
const expanded = Math.max(0, typeof props.expandedHeight === "number" && Number.isFinite(props.expandedHeight) ? props.expandedHeight : 280);
|
|
130661
130934
|
const imageUrl = useImageSource(heroUrl ?? null, { width: "100%", height: expanded, mode: "fill" }).url ?? void 0;
|
|
130662
130935
|
const collapsed = Math.max(0, Math.min(expanded, typeof props.collapsedHeight === "number" && props.collapsedHeight > 0 ? props.collapsedHeight : 64));
|
|
130663
130936
|
const parallax = typeof props.parallaxFactor === "number" && Number.isFinite(props.parallaxFactor) ? Math.max(0, Math.min(1, props.parallaxFactor)) : 0.5;
|
|
130664
130937
|
const span = Math.max(1, expanded - collapsed);
|
|
130665
|
-
const rootRef =
|
|
130666
|
-
const [offset, setOffset] =
|
|
130667
|
-
|
|
130938
|
+
const rootRef = React16.useRef(null);
|
|
130939
|
+
const [offset, setOffset] = React16.useState(0);
|
|
130940
|
+
React16.useEffect(() => {
|
|
130668
130941
|
const el2 = rootRef.current;
|
|
130669
130942
|
const win = el2?.ownerDocument?.defaultView;
|
|
130670
130943
|
if (!el2 || !win) return;
|
|
@@ -130766,46 +131039,55 @@ var init_renderNode = __esm({
|
|
|
130766
131039
|
const boundEnd = useResolvedScalar(props.selectedEndDatePath, ctx);
|
|
130767
131040
|
const seedStart = (props.selectedStartDatePath != null ? typeof boundStart === "string" ? boundStart : "" : typeof props.selectedStartDate === "string" ? props.selectedStartDate : "") || "";
|
|
130768
131041
|
const seedEnd = (props.selectedEndDatePath != null ? typeof boundEnd === "string" ? boundEnd : "" : typeof props.selectedEndDate === "string" ? props.selectedEndDate : "") || "";
|
|
130769
|
-
const [range, setRange] =
|
|
130770
|
-
const lastRangeSeed =
|
|
130771
|
-
|
|
131042
|
+
const [range, setRange] = React16.useState({ start: seedStart, end: seedEnd });
|
|
131043
|
+
const lastRangeSeed = React16.useRef(`${seedStart}|${seedEnd}`);
|
|
131044
|
+
React16.useEffect(() => {
|
|
130772
131045
|
const key3 = `${seedStart}|${seedEnd}`;
|
|
130773
131046
|
if (lastRangeSeed.current === key3) return;
|
|
130774
131047
|
lastRangeSeed.current = key3;
|
|
130775
131048
|
setRange({ start: seedStart, end: seedEnd });
|
|
130776
131049
|
}, [seedStart, seedEnd]);
|
|
130777
|
-
const seed2 =
|
|
131050
|
+
const seed2 = React16.useMemo(
|
|
130778
131051
|
() => monthSeed(drivenYear ?? props.year, drivenMonth ?? props.month, selectedDate),
|
|
130779
131052
|
[drivenYear, drivenMonth, props.year, props.month, selectedDate]
|
|
130780
131053
|
);
|
|
130781
|
-
const [view, setView] =
|
|
131054
|
+
const [view, setView] = React16.useState(seed2);
|
|
130782
131055
|
const seedKey = `${seed2.year}-${seed2.month}`;
|
|
130783
|
-
const lastSeed =
|
|
130784
|
-
|
|
131056
|
+
const lastSeed = React16.useRef(seedKey);
|
|
131057
|
+
const lastSeedSelection = React16.useRef(selectedDate);
|
|
131058
|
+
React16.useEffect(() => {
|
|
131059
|
+
const bySelection = lastSeedSelection.current !== selectedDate;
|
|
131060
|
+
lastSeedSelection.current = selectedDate;
|
|
130785
131061
|
if (lastSeed.current === seedKey) return;
|
|
130786
131062
|
lastSeed.current = seedKey;
|
|
130787
131063
|
setView(seed2);
|
|
131064
|
+
if (bySelection && !isWeek && (view.year !== seed2.year || view.month !== seed2.month)) {
|
|
131065
|
+
dispatchCalendarAction(ctx, props.onVisibleRangeChange, visibleRange(monthMatrix(seed2.year, seed2.month, firstWeekday)));
|
|
131066
|
+
}
|
|
130788
131067
|
}, [seedKey, seed2]);
|
|
130789
131068
|
const year = view.year;
|
|
130790
131069
|
const month = view.month;
|
|
130791
131070
|
const boundMode = useResolvedScalar(props.displayModePath, ctx);
|
|
130792
131071
|
const drivenMode = props.displayModePath != null && (boundMode === "week" || boundMode === "month") ? boundMode : void 0;
|
|
130793
131072
|
const modeSeed = drivenMode ?? (props.displayMode === "week" ? "week" : "month");
|
|
130794
|
-
const [mode, setMode] =
|
|
130795
|
-
const lastModeSeed =
|
|
130796
|
-
|
|
131073
|
+
const [mode, setMode] = React16.useState(modeSeed);
|
|
131074
|
+
const lastModeSeed = React16.useRef(modeSeed);
|
|
131075
|
+
React16.useEffect(() => {
|
|
130797
131076
|
if (lastModeSeed.current === modeSeed) return;
|
|
130798
131077
|
lastModeSeed.current = modeSeed;
|
|
130799
131078
|
setMode(modeSeed);
|
|
130800
131079
|
}, [modeSeed]);
|
|
130801
131080
|
const isWeek = mode === "week";
|
|
130802
131081
|
const weekSeed = calWeekStart(selectedDate ?? localDayKey(/* @__PURE__ */ new Date()), firstWeekday);
|
|
130803
|
-
const [weekStart, setWeekStart] =
|
|
130804
|
-
const lastWeekSeed =
|
|
130805
|
-
|
|
131082
|
+
const [weekStart, setWeekStart] = React16.useState(weekSeed);
|
|
131083
|
+
const lastWeekSeed = React16.useRef(weekSeed);
|
|
131084
|
+
React16.useEffect(() => {
|
|
130806
131085
|
if (lastWeekSeed.current === weekSeed) return;
|
|
130807
131086
|
lastWeekSeed.current = weekSeed;
|
|
130808
131087
|
setWeekStart(weekSeed);
|
|
131088
|
+
if (isWeek && selectedDate != null && weekStart !== weekSeed) {
|
|
131089
|
+
dispatchCalendarAction(ctx, props.onVisibleRangeChange, { startDate: weekSeed, endDate: calAddDays(weekSeed, 6) });
|
|
131090
|
+
}
|
|
130809
131091
|
}, [weekSeed]);
|
|
130810
131092
|
const decByDate = /* @__PURE__ */ new Map();
|
|
130811
131093
|
for (const d2 of decorations) if (d2 && typeof d2.date === "string") decByDate.set(d2.date, d2);
|
|
@@ -130815,7 +131097,7 @@ var init_renderNode = __esm({
|
|
|
130815
131097
|
return { date, day: parseLocalDate(date)?.getDate() ?? 0, inMonth: true, isToday: date === todayKey };
|
|
130816
131098
|
})] : monthMatrix(year, month, firstWeekday);
|
|
130817
131099
|
const heads = weekdayLabels(firstWeekday);
|
|
130818
|
-
const gridRef =
|
|
131100
|
+
const gridRef = React16.useRef(null);
|
|
130819
131101
|
const titleMonth = isWeek ? calWeekTitleMonth(weekStart) : { year, month };
|
|
130820
131102
|
const monthLabel = new Date(titleMonth.year, titleMonth.month - 1, 1).toLocaleDateString(void 0, { month: "long", year: "numeric" });
|
|
130821
131103
|
const expandable = props.expandable === true;
|
|
@@ -130990,7 +131272,7 @@ var init_renderNode = __esm({
|
|
|
130990
131272
|
const events = Array.isArray(rawEvents) ? rawEvents : [];
|
|
130991
131273
|
const boundAnchor = useResolvedScalar(props.anchorDatePath, ctx);
|
|
130992
131274
|
const anchorRaw = props.anchorDatePath != null ? boundAnchor : props.anchorDate;
|
|
130993
|
-
const [pagedAnchor, setPagedAnchor] =
|
|
131275
|
+
const [pagedAnchor, setPagedAnchor] = React16.useState(null);
|
|
130994
131276
|
const localAnchor = pagedAnchor && Object.is(pagedAnchor.raw, anchorRaw) && pagedAnchor.path === props.anchorDatePath && pagedAnchor.mode === props.mode && pagedAnchor.provider === ctx.provider ? pagedAnchor.date : null;
|
|
130995
131277
|
if (pagedAnchor && !localAnchor) setPagedAnchor(null);
|
|
130996
131278
|
const anchor = localAnchor ?? (typeof anchorRaw === "string" ? parseLocalDate(anchorRaw) : null) ?? /* @__PURE__ */ new Date();
|
|
@@ -131230,7 +131512,7 @@ var init_renderNode = __esm({
|
|
|
131230
131512
|
const boundEvents = useResolvedScalar(props.eventsPath, ctx);
|
|
131231
131513
|
const rawEvents = props.eventsPath != null ? boundEvents : props.events;
|
|
131232
131514
|
const events = Array.isArray(rawEvents) ? rawEvents : [];
|
|
131233
|
-
const groups =
|
|
131515
|
+
const groups = React16.useMemo(() => {
|
|
131234
131516
|
const buckets = /* @__PURE__ */ new Map();
|
|
131235
131517
|
for (const ev of events) {
|
|
131236
131518
|
if (!ev) continue;
|
|
@@ -131250,19 +131532,48 @@ var init_renderNode = __esm({
|
|
|
131250
131532
|
const onSelect = (ev) => dispatchCalendarAction(ctx, ev?.onTap ?? props.onSelectEvent, { eventId: ev?.id });
|
|
131251
131533
|
const boundScrollTo = useResolvedScalar(props.scrollToDatePath, ctx);
|
|
131252
131534
|
const scrollTarget = props.scrollToDatePath != null ? typeof boundScrollTo === "string" ? boundScrollTo : void 0 : typeof props.scrollToDate === "string" ? props.scrollToDate : void 0;
|
|
131253
|
-
const
|
|
131254
|
-
const
|
|
131255
|
-
const
|
|
131535
|
+
const targetDay = anchorRowId(scrollTarget) ?? void 0;
|
|
131536
|
+
const containerRef = React16.useRef(null);
|
|
131537
|
+
const [visibleDays, setVisibleDays] = React16.useState(CAL_AGENDA_INITIAL_DAYS);
|
|
131538
|
+
const targetIndex = targetDay ? groups.findIndex((g2) => g2.key === targetDay) : -1;
|
|
131256
131539
|
const windowEnd = Math.max(visibleDays, targetIndex >= 0 ? targetIndex + 1 : 0);
|
|
131257
131540
|
const shown2 = groups.length > windowEnd ? groups.slice(0, windowEnd) : groups;
|
|
131258
131541
|
const hasMore = groups.length > shown2.length;
|
|
131259
|
-
|
|
131260
|
-
|
|
131261
|
-
|
|
131262
|
-
containerRef
|
|
131542
|
+
const onVisibleDate = props.onVisibleDateChange ?? props.on_visible_date_change;
|
|
131543
|
+
const reportedDate = React16.useRef(null);
|
|
131544
|
+
const jumped = useTopAnchorReport(
|
|
131545
|
+
containerRef,
|
|
131546
|
+
onVisibleDate ? () => Array.from(containerRef.current?.children ?? [], (el2) => ({ id: el2.getAttribute("data-daygroup") ?? "", el: el2 })).filter((a2) => a2.id) : null,
|
|
131547
|
+
(date) => {
|
|
131548
|
+
reportedDate.current = date;
|
|
131549
|
+
dispatchCalendarAction(ctx, onVisibleDate, { date });
|
|
131550
|
+
},
|
|
131551
|
+
groups
|
|
131552
|
+
);
|
|
131553
|
+
const landedOn = React16.useRef(null);
|
|
131554
|
+
React16.useEffect(() => {
|
|
131555
|
+
if (!scrollTarget || !targetDay) {
|
|
131556
|
+
landedOn.current = null;
|
|
131557
|
+
return;
|
|
131558
|
+
}
|
|
131559
|
+
if (scrollTarget === landedOn.current) return;
|
|
131560
|
+
if (!scrollTarget.includes("|") && targetDay === reportedDate.current) {
|
|
131561
|
+
landedOn.current = scrollTarget;
|
|
131562
|
+
return;
|
|
131563
|
+
}
|
|
131564
|
+
reportedDate.current = null;
|
|
131565
|
+
const day = containerRef.current?.querySelector(`[data-daygroup="${targetDay}"]`);
|
|
131566
|
+
if (!day) return;
|
|
131567
|
+
const block = groups[0]?.key === targetDay ? "nearest" : "start";
|
|
131568
|
+
const inset = coveredTopInset(day);
|
|
131569
|
+
if (inset > 0) day.style.scrollMarginTop = `${inset}px`;
|
|
131570
|
+
else day.style.removeProperty("scroll-margin-top");
|
|
131571
|
+
jumped(0);
|
|
131572
|
+
day.scrollIntoView({ block });
|
|
131573
|
+
if (block === "nearest" || reachesVisibleTop(day)) landedOn.current = scrollTarget;
|
|
131263
131574
|
}, [scrollTarget, windowEnd]);
|
|
131264
|
-
const sentinelRef =
|
|
131265
|
-
|
|
131575
|
+
const sentinelRef = React16.useRef(null);
|
|
131576
|
+
React16.useEffect(() => {
|
|
131266
131577
|
if (!hasMore) return;
|
|
131267
131578
|
const el2 = sentinelRef.current;
|
|
131268
131579
|
if (!el2 || typeof IntersectionObserver === "undefined") return;
|
|
@@ -131278,6 +131589,7 @@ var init_renderNode = __esm({
|
|
|
131278
131589
|
return /* @__PURE__ */ jsx11("div", { style: { width: "100%", padding: "28px 16px", boxSizing: "border-box", textAlign: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(14), color: C2("textSecondary", "#888"), ...wrap }, children: emptyLabel || "No events" });
|
|
131279
131590
|
}
|
|
131280
131591
|
const sticky = props.stickyHeaders === true;
|
|
131592
|
+
const dayHeaderFont = ctx.font("caption");
|
|
131281
131593
|
const todayKey = localDayKey(/* @__PURE__ */ new Date());
|
|
131282
131594
|
const tomorrowKey = localDayKey(new Date((/* @__PURE__ */ new Date()).getFullYear(), (/* @__PURE__ */ new Date()).getMonth(), (/* @__PURE__ */ new Date()).getDate() + 1));
|
|
131283
131595
|
const dayHeaderLabel = (key3) => {
|
|
@@ -131288,7 +131600,7 @@ var init_renderNode = __esm({
|
|
|
131288
131600
|
};
|
|
131289
131601
|
return /* @__PURE__ */ jsxs9("div", { ref: containerRef, "data-agenda-days": shown2.length, style: { width: "100%", boxSizing: "border-box", ...wrap }, children: [
|
|
131290
131602
|
shown2.map((g2) => /* @__PURE__ */ jsxs9("div", { "data-daygroup": g2.key, children: [
|
|
131291
|
-
/* @__PURE__ */ jsx11("div", { style: { position: sticky ? "sticky" : "static", top: 0, zIndex: 1, background: C2("
|
|
131603
|
+
/* @__PURE__ */ jsx11("div", { "data-dayheader": "", style: { position: sticky ? "sticky" : "static", top: 0, zIndex: 1, background: C2("surfaceSecondary", "#f5f7fa"), fontFamily: fontStack(dayHeaderFont.family, ctx.idiom), fontSize: dayHeaderFont.remSize, fontWeight: dayHeaderFont.weight, lineHeight: dayHeaderFont.line, letterSpacing: dayHeaderFont.letterSpacing, color: C2("textSecondary", "#888"), padding: "6px 16px", textAlign: "start" }, children: dayHeaderLabel(g2.key) }),
|
|
131292
131604
|
g2.items.map((ev, i2) => {
|
|
131293
131605
|
const start = parseLocalDate(ev.start);
|
|
131294
131606
|
const timeStr = ev.allDay === true ? "All day" : start ? localTimeLabel(start) : "";
|
|
@@ -131379,14 +131691,14 @@ var init_renderNode = __esm({
|
|
|
131379
131691
|
PRESENTED_SCOPE = '[aria-modal="true"], [role="dialog"], [role="alertdialog"], [role="menu"]';
|
|
131380
131692
|
focusRoots = /* @__PURE__ */ new WeakMap();
|
|
131381
131693
|
A11yHintDescription = ({ hint, idBase, children, ...forwarded }) => {
|
|
131382
|
-
const descId = `${idBase ?? "hm"}__hint${
|
|
131694
|
+
const descId = `${idBase ?? "hm"}__hint${React16.useId()}`;
|
|
131383
131695
|
const own6 = children.props;
|
|
131384
131696
|
const next = { ...forwarded };
|
|
131385
131697
|
if (forwarded.style) next.style = { ...own6.style ?? {}, ...forwarded.style };
|
|
131386
131698
|
const ids = [own6["aria-describedby"], forwarded["aria-describedby"], descId].flatMap((v2) => v2 ? String(v2).split(/\s+/) : []).filter(Boolean);
|
|
131387
131699
|
next["aria-describedby"] = Array.from(new Set(ids)).join(" ");
|
|
131388
131700
|
return /* @__PURE__ */ jsxs9(Fragment4, { children: [
|
|
131389
|
-
|
|
131701
|
+
React16.cloneElement(children, next),
|
|
131390
131702
|
/* @__PURE__ */ jsx11("span", { id: descId, hidden: true, "data-hm-a11y-hint": "", children: hint })
|
|
131391
131703
|
] });
|
|
131392
131704
|
};
|
|
@@ -131406,15 +131718,41 @@ var init_renderNode = __esm({
|
|
|
131406
131718
|
return /* @__PURE__ */ jsx11("div", { className: "hm-bound-rail-cell", style: { flex: fill ? "0 0 100%" : "0 0 auto", ...fill ? { minWidth: 0, maxWidth: frame.maxWidth } : horizontalList ? { display: "contents" } : {} }, children: content });
|
|
131407
131719
|
};
|
|
131408
131720
|
renderRailRow = (template, itemCtx) => railRowFrame(template, renderNode(template, itemCtx), itemCtx);
|
|
131721
|
+
RowAnchors = ({ ctx, itemsPath, jumpPath, onTopItem, children }) => {
|
|
131722
|
+
const rootRef = React16.useRef(null);
|
|
131723
|
+
const jumpValue = useResolvedScalar(jumpPath, ctx);
|
|
131724
|
+
const jump = typeof jumpValue === "string" ? jumpValue : "";
|
|
131725
|
+
const target = anchorRowId(jump) ?? void 0;
|
|
131726
|
+
const rows = useBoundValue(ctx, itemsPath.startsWith("$item.") ? "" : itemsPath);
|
|
131727
|
+
const anchors = () => {
|
|
131728
|
+
const root = rootRef.current;
|
|
131729
|
+
if (!root) return [];
|
|
131730
|
+
return Array.from(root.querySelectorAll("[data-himalaya-row-id]")).filter((el2) => el2.closest("[data-himalaya-row-anchors]") === root).map((el2) => ({ id: el2.getAttribute("data-himalaya-row-id") ?? "", el: el2 }));
|
|
131731
|
+
};
|
|
131732
|
+
const jumped = useTopAnchorReport(rootRef, onTopItem ? anchors : null, (id) => dispatchCalendarAction(ctx, onTopItem, { id }), rows);
|
|
131733
|
+
const landedOn = React16.useRef("");
|
|
131734
|
+
React16.useEffect(() => {
|
|
131735
|
+
if (!target) {
|
|
131736
|
+
landedOn.current = "";
|
|
131737
|
+
return;
|
|
131738
|
+
}
|
|
131739
|
+
if (jump === landedOn.current) return;
|
|
131740
|
+
const row2 = anchors().find((a2) => a2.id === target);
|
|
131741
|
+
if (!row2) return;
|
|
131742
|
+
landedOn.current = jump;
|
|
131743
|
+
jumped(scrollAnchorToTop(row2.el, ctx.reduceMotion()));
|
|
131744
|
+
}, [jump, rows]);
|
|
131745
|
+
return /* @__PURE__ */ jsx11("div", { ref: rootRef, "data-himalaya-row-anchors": "", style: { display: "contents" }, children: /* @__PURE__ */ jsx11(RevealRowContext.Provider, { value: target, children }) });
|
|
131746
|
+
};
|
|
131409
131747
|
reportedUnknownComponents = /* @__PURE__ */ new Set();
|
|
131410
131748
|
UnknownComponentNode = ({ pkg, type, props, ctx, wrap, ...extras }) => {
|
|
131411
131749
|
const hasTelemetry = !!ctx.emitTelemetry;
|
|
131412
|
-
|
|
131750
|
+
React16.useEffect(() => {
|
|
131413
131751
|
reportUnknownComponent(ctx, pkg, type);
|
|
131414
131752
|
}, [ctx.appId, ctx.screenId, hasTelemetry, pkg, type]);
|
|
131415
131753
|
const { style: extraStyle, children: extraChildren, ...attrs } = extras;
|
|
131416
131754
|
const nodeProps = (entries) => entries.filter(([, v2]) => isNodeLike(v2) || Array.isArray(v2) && v2.some(isNodeLike));
|
|
131417
|
-
const renderProps = (entries) => entries.map(([k2, v2]) => /* @__PURE__ */ jsx11(
|
|
131755
|
+
const renderProps = (entries) => entries.map(([k2, v2]) => /* @__PURE__ */ jsx11(React16.Fragment, { children: Array.isArray(v2) ? kids2(v2.filter(isNodeLike), ctx) : renderNode(v2, ctx) }, k2));
|
|
131418
131756
|
const childKeys = nodeProps(Object.entries(props ?? {}));
|
|
131419
131757
|
if (!unknownComponentShowsDeveloperLabel(ctx)) {
|
|
131420
131758
|
const contentKeys = childKeys.filter(([k2]) => k2 === "child" || k2 === "children");
|
|
@@ -131437,11 +131775,11 @@ var init_renderNode = __esm({
|
|
|
131437
131775
|
ScrollIntoViewNode = ({ node, ctx, path: path2 }) => {
|
|
131438
131776
|
const token = useResolvedScalar(path2, ctx);
|
|
131439
131777
|
const source = isBinding(path2) ? path2 : "";
|
|
131440
|
-
const seen =
|
|
131778
|
+
const seen = React16.useRef({ source, provider: ctx.provider, token });
|
|
131441
131779
|
if (seen.current.source !== source || seen.current.provider !== ctx.provider) seen.current = { source, provider: ctx.provider, token };
|
|
131442
|
-
const root =
|
|
131780
|
+
const root = React16.useRef(null);
|
|
131443
131781
|
const reduced = ctx.reduceMotion();
|
|
131444
|
-
|
|
131782
|
+
React16.useEffect(() => {
|
|
131445
131783
|
if (token === seen.current.token) return;
|
|
131446
131784
|
seen.current.token = token;
|
|
131447
131785
|
if (token == null || token === "" || token === 0 || token === "0") return;
|
|
@@ -131462,7 +131800,7 @@ var init_renderNode = __esm({
|
|
|
131462
131800
|
});
|
|
131463
131801
|
|
|
131464
131802
|
// ../../core/web-renderer/src/renderToHtml.tsx
|
|
131465
|
-
import
|
|
131803
|
+
import React17 from "react";
|
|
131466
131804
|
import { renderToStaticMarkup } from "react-dom/server";
|
|
131467
131805
|
function renderDescriptorToHtml(payload, tokens2, scheme = "light", provider = null, width, chrome, opts) {
|
|
131468
131806
|
const rtl = opts?.isRTL === true;
|
|
@@ -131482,7 +131820,7 @@ function renderDescriptorToHtml(payload, tokens2, scheme = "light", provider = n
|
|
|
131482
131820
|
const withRenderStyles = (markup) => {
|
|
131483
131821
|
if (!markup) return markup;
|
|
131484
131822
|
if (!glassPreview) return FOCUS_STYLE_MARKUP + markup;
|
|
131485
|
-
const scoped = renderToStaticMarkup(
|
|
131823
|
+
const scoped = renderToStaticMarkup(React17.createElement(
|
|
131486
131824
|
"div",
|
|
131487
131825
|
{
|
|
131488
131826
|
className: "himi-ios-glass-preview",
|
|
@@ -131499,18 +131837,18 @@ function renderDescriptorToHtml(payload, tokens2, scheme = "light", provider = n
|
|
|
131499
131837
|
const dir = rtl ? { dir: "rtl" } : {};
|
|
131500
131838
|
if (header || footer) {
|
|
131501
131839
|
return withRenderStyles(renderToStaticMarkup(
|
|
131502
|
-
|
|
131840
|
+
React17.createElement(
|
|
131503
131841
|
"div",
|
|
131504
131842
|
// F-22 — same footer pin as ScreenHost: a full-height flex column + margin-top:auto
|
|
131505
131843
|
// keeps the footer at the bottom edge even when the payload is short.
|
|
131506
131844
|
{ "data-testid": "screen-host", ...dir, ...footer ? { style: { display: "flex", flexDirection: "column", minHeight: "100%", flexGrow: 1 } } : {} },
|
|
131507
|
-
header ?
|
|
131845
|
+
header ? React17.createElement(
|
|
131508
131846
|
"div",
|
|
131509
131847
|
{ "data-testid": "sticky-header", style: { position: "sticky", top: 0, zIndex: 10 } },
|
|
131510
131848
|
renderNode(header, ctx)
|
|
131511
131849
|
) : null,
|
|
131512
131850
|
renderNode(payload, ctx),
|
|
131513
|
-
footer ?
|
|
131851
|
+
footer ? React17.createElement(
|
|
131514
131852
|
"div",
|
|
131515
131853
|
{ "data-testid": "sticky-footer", style: { position: "sticky", bottom: 0, zIndex: 10, marginTop: "auto" } },
|
|
131516
131854
|
renderNode(footer, ctx)
|
|
@@ -131520,11 +131858,11 @@ function renderDescriptorToHtml(payload, tokens2, scheme = "light", provider = n
|
|
|
131520
131858
|
}
|
|
131521
131859
|
if (rtl) {
|
|
131522
131860
|
return withRenderStyles(renderToStaticMarkup(
|
|
131523
|
-
|
|
131861
|
+
React17.createElement("div", dir, renderNode(payload, ctx))
|
|
131524
131862
|
));
|
|
131525
131863
|
}
|
|
131526
131864
|
return withRenderStyles(renderToStaticMarkup(
|
|
131527
|
-
|
|
131865
|
+
React17.createElement(React17.Fragment, null, renderNode(payload, ctx))
|
|
131528
131866
|
));
|
|
131529
131867
|
}
|
|
131530
131868
|
var init_renderToHtml = __esm({
|
|
@@ -131583,6 +131921,7 @@ var init_AppRegistry = __esm({
|
|
|
131583
131921
|
// ../../core/web-renderer/src/index.ts
|
|
131584
131922
|
var src_exports2 = {};
|
|
131585
131923
|
__export(src_exports2, {
|
|
131924
|
+
AvatarNode: () => AvatarNode,
|
|
131586
131925
|
Bound: () => Bound,
|
|
131587
131926
|
BoundList: () => BoundList,
|
|
131588
131927
|
BoundListWindowContext: () => BoundListWindowContext,
|
|
@@ -137326,8 +137665,8 @@ function sha256hex(b2) {
|
|
|
137326
137665
|
function stableStringify(value2) {
|
|
137327
137666
|
if (value2 === null || typeof value2 !== "object") return JSON.stringify(value2);
|
|
137328
137667
|
if (Array.isArray(value2)) return "[" + value2.map(stableStringify).join(",") + "]";
|
|
137329
|
-
const
|
|
137330
|
-
return "{" + Object.keys(
|
|
137668
|
+
const object13 = value2;
|
|
137669
|
+
return "{" + Object.keys(object13).sort().map((key3) => JSON.stringify(key3) + ":" + stableStringify(object13[key3])).join(",") + "}";
|
|
137331
137670
|
}
|
|
137332
137671
|
function manifestContent(m2) {
|
|
137333
137672
|
const {
|
|
@@ -151362,22 +151701,22 @@ function resolveTagName2(name, isAttribute2, options, matcher, xmlVersion) {
|
|
|
151362
151701
|
if (qName(name, { xmlVersion })) return name;
|
|
151363
151702
|
return options.sanitizeName(name, { isAttribute: isAttribute2, matcher: matcher.readOnly() });
|
|
151364
151703
|
}
|
|
151365
|
-
function processTextOrObjNode(
|
|
151366
|
-
const attrValues = this.extractAttributes(
|
|
151704
|
+
function processTextOrObjNode(object13, key3, level, matcher, xmlVersion) {
|
|
151705
|
+
const attrValues = this.extractAttributes(object13);
|
|
151367
151706
|
matcher.push(key3, attrValues);
|
|
151368
151707
|
const isStopNode = this.checkStopNode(matcher);
|
|
151369
151708
|
if (isStopNode) {
|
|
151370
|
-
const rawContent = this.buildRawContent(
|
|
151371
|
-
const attrStr = this.buildAttributesForStopNode(
|
|
151709
|
+
const rawContent = this.buildRawContent(object13);
|
|
151710
|
+
const attrStr = this.buildAttributesForStopNode(object13);
|
|
151372
151711
|
matcher.pop();
|
|
151373
151712
|
return this.buildObjectNode(rawContent, key3, attrStr, level);
|
|
151374
151713
|
}
|
|
151375
|
-
const result = this.j2x(
|
|
151714
|
+
const result = this.j2x(object13, level + 1, matcher, xmlVersion);
|
|
151376
151715
|
matcher.pop();
|
|
151377
151716
|
if (key3[0] === "?") {
|
|
151378
151717
|
return this.buildTextValNode("", key3, result.attrStr, level, matcher);
|
|
151379
|
-
} else if (
|
|
151380
|
-
return this.buildTextValNode(
|
|
151718
|
+
} else if (object13[this.options.textNodeName] !== void 0 && Object.keys(object13).length === 1) {
|
|
151719
|
+
return this.buildTextValNode(object13[this.options.textNodeName], key3, result.attrStr, level, matcher);
|
|
151381
151720
|
} else {
|
|
151382
151721
|
return this.buildObjectNode(result.val, key3, result.attrStr, level);
|
|
151383
151722
|
}
|
|
@@ -162771,6 +163110,7 @@ function navConfigPathErrors(config) {
|
|
|
162771
163110
|
errors.push(`sidebar.header.${key3}: sidebar header bindings are not rendered yet (#4116) \u2014 bind drawer.header, which the sidebar shows`);
|
|
162772
163111
|
}
|
|
162773
163112
|
}
|
|
163113
|
+
check("topBarLogo.imageUrlPath", obj9(config.topBarLogo)?.imageUrlPath);
|
|
162774
163114
|
const firstOf = (v2, skip = false) => list2(v2).find(([it2]) => !skip || it2.role !== "section" && it2.role !== "note");
|
|
162775
163115
|
const tabs = firstOf(obj9(config.tabBar)?.items);
|
|
162776
163116
|
const kind = typeof config.navKind === "string" ? config.navKind : "";
|
|
@@ -173332,7 +173672,25 @@ var init_design_rules = __esm({
|
|
|
173332
173672
|
function nativeWidgetObligations(sectionDefinitionId) {
|
|
173333
173673
|
return sectionDefinitionId && Object.hasOwn(NATIVE_WIDGET_DEFAULTS, sectionDefinitionId) && NATIVE_WIDGET_DEFAULTS[sectionDefinitionId] || ["Native defaults are unverified for this section type; inventory its effective source behavior on device"];
|
|
173334
173674
|
}
|
|
173335
|
-
|
|
173675
|
+
function nativeWidgetSettingObligations(sectionDefinitionId, settings) {
|
|
173676
|
+
if (!sectionDefinitionId || !BLOG_LIST_SECTIONS.has(sectionDefinitionId)) return [];
|
|
173677
|
+
const root = object7(settings);
|
|
173678
|
+
const out2 = [];
|
|
173679
|
+
const display = object7(root.displayOptions);
|
|
173680
|
+
const shown2 = BLOG_ROW_OPTIONS.filter(([key3]) => display[key3] === true).map(([, label3]) => label3);
|
|
173681
|
+
if (shown2.length) out2.push(`Post rows show exactly the authored display options (${shown2.join(", ")}); a generated row that drops one is a gap`);
|
|
173682
|
+
const content = object7(root.contentSettings);
|
|
173683
|
+
const category = typeof content.categoryId === "string" && content.categoryId.trim() ? `category ${content.categoryId.trim()}` : "all categories";
|
|
173684
|
+
const scope2 = `${category}, ${content.featuredOnly === true ? "featured posts only" : "all posts"}`;
|
|
173685
|
+
const limit = content.postsPerCategory;
|
|
173686
|
+
if (limit === "unlimited") out2.push(`Unlimited post list (${scope2}): follow the page cursor until the last post; no fixed cap such as 20`);
|
|
173687
|
+
else if (typeof limit === "string" ? /^\d+$/.test(limit) : Number.isSafeInteger(limit)) {
|
|
173688
|
+
out2.push(`Limited post list of ${limit} (${scope2}): show ${limit} posts, then See All Posts opening the full list in the same scope`);
|
|
173689
|
+
}
|
|
173690
|
+
if (typeof root.postsLayout === "string" && root.postsLayout) out2.push(`Post list layout "${root.postsLayout}": thumbnail side and row density match the source on device`);
|
|
173691
|
+
return out2;
|
|
173692
|
+
}
|
|
173693
|
+
var bookings, groupFeed, programs, contact, members, blogList, NATIVE_WIDGET_DEFAULTS, BLOG_LIST_SECTIONS, BLOG_ROW_OPTIONS, object7;
|
|
173336
173694
|
var init_native_defaults = __esm({
|
|
173337
173695
|
"src/one-app/native-defaults.ts"() {
|
|
173338
173696
|
init_define_HHP_CATALOG();
|
|
@@ -173357,6 +173715,7 @@ var init_native_defaults = __esm({
|
|
|
173357
173715
|
"Member total/search, alphabetical sections, Follow and last-active under the same privacy/access rules",
|
|
173358
173716
|
"Badge chips distinguished from actual viewed-member program participation/progress; never infer progress from badge titles"
|
|
173359
173717
|
];
|
|
173718
|
+
blogList = ["See All Posts for a limited list, with source scope and display options"];
|
|
173360
173719
|
NATIVE_WIDGET_DEFAULTS = {
|
|
173361
173720
|
bookings_services_list_section: bookings,
|
|
173362
173721
|
single_group_feed_section: groupFeed,
|
|
@@ -173365,11 +173724,23 @@ var init_native_defaults = __esm({
|
|
|
173365
173724
|
platform_general_contact_section_bp: contact,
|
|
173366
173725
|
achievements_list_section: [...programs, "Default list limit 2 and See All when more results exist; respect authored limit/infinite settings"],
|
|
173367
173726
|
achievements_carousel_section: [...programs, "Default carousel limit 5 and page dots; respect authored selection/limit"],
|
|
173368
|
-
newBlog_postlist_vertical_section:
|
|
173727
|
+
newBlog_postlist_vertical_section: blogList,
|
|
173728
|
+
newBlog_compact_post_list_vertical_section: blogList,
|
|
173369
173729
|
events_list_section: ["Date badge", "Share event", "RSVP or ticket action appropriate to the event and visitor state"],
|
|
173370
173730
|
platform_general_members_section: members,
|
|
173371
173731
|
platform_general_members_section_bp: members
|
|
173372
173732
|
};
|
|
173733
|
+
BLOG_LIST_SECTIONS = /* @__PURE__ */ new Set(["newBlog_postlist_vertical_section", "newBlog_compact_post_list_vertical_section"]);
|
|
173734
|
+
BLOG_ROW_OPTIONS = [
|
|
173735
|
+
["author", "author avatar, name and admin badge"],
|
|
173736
|
+
["comments", "comment count"],
|
|
173737
|
+
["likes", "like count"],
|
|
173738
|
+
["times_viewed", "view count"],
|
|
173739
|
+
["post_date", "post date"],
|
|
173740
|
+
["reading_time", "reading time"],
|
|
173741
|
+
["cover_image", "cover image"]
|
|
173742
|
+
];
|
|
173743
|
+
object7 = (value2) => value2 && typeof value2 === "object" && !Array.isArray(value2) ? value2 : {};
|
|
173373
173744
|
}
|
|
173374
173745
|
});
|
|
173375
173746
|
|
|
@@ -173424,7 +173795,8 @@ function deriveRequirements(evidenceDir) {
|
|
|
173424
173795
|
};
|
|
173425
173796
|
const placement = (entry) => {
|
|
173426
173797
|
add("placement", entry.context, `Section ${entry.sectionDefinitionId ?? entry.sectionId}`, void 0, `${entry.sectionId}:${entry.sectionDefinitionId ?? "unknown"}`);
|
|
173427
|
-
|
|
173798
|
+
const settings = obj4(obj4(obj4(graph.sections)[entry.sectionId]).settings);
|
|
173799
|
+
for (const behavior of [...nativeWidgetObligations(entry.sectionDefinitionId), ...nativeWidgetSettingObligations(entry.sectionDefinitionId, settings)]) {
|
|
173428
173800
|
add(
|
|
173429
173801
|
"native-widget",
|
|
173430
173802
|
entry.context,
|
|
@@ -173966,7 +174338,7 @@ function enrichedControls(raw, views) {
|
|
|
173966
174338
|
badges.set(screen.screenId, badgeButtons);
|
|
173967
174339
|
const addButtons = (buttons, side2, platform) => {
|
|
173968
174340
|
for (const [index, button] of buttons.entries()) {
|
|
173969
|
-
const definition =
|
|
174341
|
+
const definition = object8(button.definition);
|
|
173970
174342
|
const id = `${button.id ?? ""} ${definition?.iconId ?? ""} ${definition?.accessibilityLabel ?? ""}`.toLowerCase();
|
|
173971
174343
|
let recognized = false;
|
|
173972
174344
|
const matched = /* @__PURE__ */ new Set();
|
|
@@ -174006,11 +174378,11 @@ function enrichedControls(raw, views) {
|
|
|
174006
174378
|
}
|
|
174007
174379
|
return { controls: result, badges };
|
|
174008
174380
|
}
|
|
174009
|
-
function
|
|
174381
|
+
function object8(value2) {
|
|
174010
174382
|
return value2 !== null && typeof value2 === "object" && !Array.isArray(value2) ? value2 : void 0;
|
|
174011
174383
|
}
|
|
174012
174384
|
function readJson7(path2) {
|
|
174013
|
-
return
|
|
174385
|
+
return object8(JSON.parse(readFileSync97(path2, "utf8"))) ?? {};
|
|
174014
174386
|
}
|
|
174015
174387
|
function parseArgs(args) {
|
|
174016
174388
|
let evidenceDir;
|
|
@@ -174038,8 +174410,8 @@ function parseArgs(args) {
|
|
|
174038
174410
|
return { evidenceDir: resolve69(evidenceDir), contentDir: resolve69(contentDir2), json: json8 };
|
|
174039
174411
|
}
|
|
174040
174412
|
function authoredControls(raw) {
|
|
174041
|
-
const screens =
|
|
174042
|
-
const headers2 =
|
|
174413
|
+
const screens = object8(raw.screens);
|
|
174414
|
+
const headers2 = object8(raw.headers) ?? {};
|
|
174043
174415
|
if (!screens || !Object.keys(screens).length) {
|
|
174044
174416
|
return { controls: /* @__PURE__ */ new Set(), byScreen: /* @__PURE__ */ new Map(), inviteDisabled: /* @__PURE__ */ new Set(), screens: 0, error: "raw-structure.json is missing authored screens." };
|
|
174045
174417
|
}
|
|
@@ -174048,16 +174420,16 @@ function authoredControls(raw) {
|
|
|
174048
174420
|
const inviteDisabled = /* @__PURE__ */ new Set();
|
|
174049
174421
|
let count2 = 0;
|
|
174050
174422
|
for (const [screenId, rawScreen] of Object.entries(screens)) {
|
|
174051
|
-
const screen =
|
|
174423
|
+
const screen = object8(rawScreen);
|
|
174052
174424
|
const headerId = typeof screen?.headerId === "string" ? screen.headerId : void 0;
|
|
174053
174425
|
const screenControls = /* @__PURE__ */ new Set();
|
|
174054
174426
|
byScreen.set(screenId, screenControls);
|
|
174055
174427
|
if (!headerId) continue;
|
|
174056
174428
|
count2++;
|
|
174057
|
-
const header =
|
|
174429
|
+
const header = object8(headers2[headerId]);
|
|
174058
174430
|
if (!header) return { controls, byScreen, inviteDisabled, screens: count2, error: `Authored header ${headerId} is missing for screen ${screenId}.` };
|
|
174059
|
-
const settings =
|
|
174060
|
-
const topBarSettings =
|
|
174431
|
+
const settings = object8(header?.settings) ?? header;
|
|
174432
|
+
const topBarSettings = object8(settings?.topBarSettings);
|
|
174061
174433
|
const choice = (modern, legacy) => {
|
|
174062
174434
|
const current = topBarSettings?.[modern];
|
|
174063
174435
|
if (current !== void 0) return typeof current === "boolean" ? current : void 0;
|
|
@@ -174193,8 +174565,8 @@ function itemTokens(topBar, source) {
|
|
|
174193
174565
|
const out2 = /* @__PURE__ */ new Set();
|
|
174194
174566
|
if (!list2 || !ts11.isArrayLiteralExpression(list2)) return out2;
|
|
174195
174567
|
for (const item of list2.elements) {
|
|
174196
|
-
const
|
|
174197
|
-
if (
|
|
174568
|
+
const object13 = ts11.isExpression(item) ? resolveObject(item, source) : void 0;
|
|
174569
|
+
if (object13) for (const token of actionTokens(object13)) out2.add(token);
|
|
174198
174570
|
}
|
|
174199
174571
|
return out2;
|
|
174200
174572
|
}
|
|
@@ -174331,13 +174703,13 @@ function validate3(evidenceDir, contentDir2) {
|
|
|
174331
174703
|
const manifest2 = readJson7(join93(evidenceDir, "manifest.json"));
|
|
174332
174704
|
if (manifest2.workflow !== "one-app-to-himi-app") throw new Error("manifest.json is not for the one-app-to-himi-app workflow.");
|
|
174333
174705
|
if (manifest2.stage !== "collected") throw new Error('manifest.json must have stage "collected".');
|
|
174334
|
-
const unavailable = (Array.isArray(manifest2.warnings) ? manifest2.warnings : []).map(
|
|
174706
|
+
const unavailable = (Array.isArray(manifest2.warnings) ? manifest2.warnings : []).map(object8).filter((warning) => warning?.code === "runtime_context_unavailable" && (warning.platform === "ios" || warning.platform === "android"));
|
|
174335
174707
|
if (unavailable.length) {
|
|
174336
174708
|
throw new Error(`Platform top-bar behavior is unverified: ${unavailable.map((warning) => warning.platform).join(", ")} runtime context unavailable.`);
|
|
174337
174709
|
}
|
|
174338
174710
|
const rawPath = join93(evidenceDir, "raw-structure.json");
|
|
174339
174711
|
const rawBytes = readFileSync97(rawPath);
|
|
174340
|
-
const expectedHash =
|
|
174712
|
+
const expectedHash = object8(manifest2.sha256)?.["raw-structure.json"];
|
|
174341
174713
|
if (typeof expectedHash !== "string" || !/^[a-f0-9]{64}$/i.test(expectedHash)) {
|
|
174342
174714
|
throw new Error("manifest.json is missing a valid raw-structure.json hash.");
|
|
174343
174715
|
}
|
|
@@ -174350,7 +174722,7 @@ function validate3(evidenceDir, contentDir2) {
|
|
|
174350
174722
|
const views = {};
|
|
174351
174723
|
for (const platform of ["ios", "android"]) {
|
|
174352
174724
|
const name = `enriched-${platform}.json`;
|
|
174353
|
-
const hash3 =
|
|
174725
|
+
const hash3 = object8(manifest2.sha256)?.[name];
|
|
174354
174726
|
if (hash3 === void 0) continue;
|
|
174355
174727
|
if (typeof hash3 !== "string" || !/^[a-f0-9]{64}$/i.test(hash3)) throw new Error(`Invalid ${name} hash.`);
|
|
174356
174728
|
const bytes2 = readFileSync97(join93(evidenceDir, name));
|
|
@@ -174405,15 +174777,15 @@ function validate3(evidenceDir, contentDir2) {
|
|
|
174405
174777
|
try {
|
|
174406
174778
|
const coverage = readJson7(coveragePath);
|
|
174407
174779
|
for (const row2 of Array.isArray(coverage.requirements) ? coverage.requirements : []) {
|
|
174408
|
-
const entry =
|
|
174780
|
+
const entry = object8(row2) ?? {};
|
|
174409
174781
|
const badge = typeof entry.id === "string" ? badgeDefinitions.get(entry.id) : void 0;
|
|
174410
|
-
const destination =
|
|
174782
|
+
const destination = object8(entry.target);
|
|
174411
174783
|
if (entry.kind === "top-bar" && badge && entry.source === badge.source && entry.platform === badge.platform && typeof destination?.screenId === "string" && destination.screenId.trim() && typeof destination.controlId === "string" && destination.controlId.trim()) {
|
|
174412
174784
|
badgeTargets.set(badge.requirementId, { screenId: destination.screenId, controlId: destination.controlId });
|
|
174413
174785
|
}
|
|
174414
174786
|
if (entry.kind !== "route" || typeof entry.source !== "string" || !/^\/screens\/[^/]+$/.test(entry.source)) continue;
|
|
174415
174787
|
const screenId = entry.source.slice(9).replaceAll("~1", "/").replaceAll("~0", "~");
|
|
174416
|
-
const targetScreen =
|
|
174788
|
+
const targetScreen = object8(entry.target)?.screenId;
|
|
174417
174789
|
if (typeof targetScreen === "string" && targetScreen) mappings.set(screenId, targetScreen);
|
|
174418
174790
|
}
|
|
174419
174791
|
} catch (error) {
|
|
@@ -178075,43 +178447,43 @@ var init_preview_assets_generated = __esm({
|
|
|
178075
178447
|
init_define_HHP_CATALOG();
|
|
178076
178448
|
init_preview_assets_format();
|
|
178077
178449
|
PREVIEW_ASSET_MANIFEST = [
|
|
178078
|
-
{ key: "assets/DashboardHost-
|
|
178079
|
-
{ key: "assets/DevDrawer-
|
|
178080
|
-
{ key: "assets/IdiomCompare-
|
|
178081
|
-
{ key: "assets/LightboxViewer-
|
|
178082
|
-
{ key: "assets/OfflineReadingBar-
|
|
178083
|
-
{ key: "assets/PhonePreviewControl-
|
|
178084
|
-
{ key: "assets/SchemeCompare-
|
|
178085
|
-
{ key: "assets/WixFrogTelemetrySink-
|
|
178450
|
+
{ key: "assets/DashboardHost-DDXBPEja.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2971, sha256: "9920fca6ec69d5455abc8ffd1717da77dfebbae1170f720ef79ad7c396d83629" },
|
|
178451
|
+
{ key: "assets/DevDrawer-Lpltq1C0.js", contentType: "application/javascript; charset=utf-8", offset: 2979, length: 16783, sha256: "753a16fe4f62280fcf59cd144cc24ee14e896c78214db18a8ab512e75e751cd4" },
|
|
178452
|
+
{ key: "assets/IdiomCompare-C74IV66h.js", contentType: "application/javascript; charset=utf-8", offset: 19762, length: 1926, sha256: "ea2ad8295d50409a571979868c2c9b84f7c52011a74156b20bd41fcf0a81fee9" },
|
|
178453
|
+
{ key: "assets/LightboxViewer-D4K2U_pm.js", contentType: "application/javascript; charset=utf-8", offset: 21688, length: 8171, sha256: "cff395131acaff392f5e30fe6b49a9c4adc619413812e665608bf534e3530d3e" },
|
|
178454
|
+
{ key: "assets/OfflineReadingBar-CGUKk3FF.js", contentType: "application/javascript; charset=utf-8", offset: 29859, length: 1707, sha256: "d8679ca44a0f9086d76e5533ec62fef5ef044ca7e602606c519968f8e967d447" },
|
|
178455
|
+
{ key: "assets/PhonePreviewControl-Z0VAMda9.js", contentType: "application/javascript; charset=utf-8", offset: 31566, length: 37768, sha256: "5639397dc543c926e64e619ae4548a776cda2b772e0730f239d33cd780a1cce5" },
|
|
178456
|
+
{ key: "assets/SchemeCompare-B0Q-6Thb.js", contentType: "application/javascript; charset=utf-8", offset: 69334, length: 1858, sha256: "f9474ffcbb7e660abe3e1ff69b7b6dda5b004245036234c7dc565c2d9c278cdb" },
|
|
178457
|
+
{ key: "assets/WixFrogTelemetrySink-ClyMPgmZ.js", contentType: "application/javascript; charset=utf-8", offset: 71192, length: 3165, sha256: "098df16e28be30309673b77bc8e65fb449720183db6bee0a6cfc076c23ca139f" },
|
|
178086
178458
|
{ key: "assets/calendar-ics-BvfIYWjG.js", contentType: "application/javascript; charset=utf-8", offset: 74357, length: 2192, sha256: "1636167041e9829ceccd3544297b86b8475c38bd2f759c4dbc17c813dc6e9254" },
|
|
178087
178459
|
{ key: "assets/glassPreviewBrowser-DONaOehd.js", contentType: "application/javascript; charset=utf-8", offset: 76549, length: 6578, sha256: "4402c4cddd2a564e7466cdf1e12a0e0277c0400b288e1e5eda1d23e797599d31" },
|
|
178088
178460
|
{ key: "assets/image-preparation-Cj4gldm6.js", contentType: "application/javascript; charset=utf-8", offset: 83127, length: 2704, sha256: "32944ea587c2f3b84389b66b50a850437560238f1c8d33b6275973ee04eee865" },
|
|
178089
|
-
{ key: "assets/index-
|
|
178090
|
-
{ key: "assets/jsx-runtime-CY_jTiqj.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
178091
|
-
{ key: "assets/pdf-
|
|
178092
|
-
{ key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
178093
|
-
{ key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset:
|
|
178094
|
-
{ key: "assets/pdfDocument-
|
|
178095
|
-
{ key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
178096
|
-
{ key: "assets/webviewBridgeHost-
|
|
178097
|
-
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset:
|
|
178098
|
-
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset:
|
|
178099
|
-
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset:
|
|
178100
|
-
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
178101
|
-
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset:
|
|
178102
|
-
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset:
|
|
178103
|
-
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
178104
|
-
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset:
|
|
178105
|
-
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
178106
|
-
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset:
|
|
178107
|
-
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset:
|
|
178108
|
-
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
178109
|
-
{ key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
178110
|
-
{ key: "index.html", contentType: "text/html; charset=utf-8", offset:
|
|
178111
|
-
{ key: "ios-glass-preview.css", contentType: "text/css; charset=utf-8", offset:
|
|
178112
|
-
{ key: "kit-tab-bar.css", contentType: "text/css; charset=utf-8", offset:
|
|
178113
|
-
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset:
|
|
178114
|
-
{ key: "t5-worker-frame.html", contentType: "text/html; charset=utf-8", offset:
|
|
178461
|
+
{ key: "assets/index-v_viiDKZ.js", contentType: "application/javascript; charset=utf-8", offset: 85831, length: 1408611, sha256: "aec3e0087f021ddc8b3d81d2387f0eed2ee29cbadbd2177dcb483a50da881dd5" },
|
|
178462
|
+
{ key: "assets/jsx-runtime-CY_jTiqj.js", contentType: "application/javascript; charset=utf-8", offset: 1494442, length: 7624, sha256: "29dfba5b56f79a0b84d6b04d84d87617454baeba03c225f682ab2ab7ae2d5016" },
|
|
178463
|
+
{ key: "assets/pdf-C-90KZUB.js", contentType: "application/javascript; charset=utf-8", offset: 1502066, length: 488199, sha256: "3e704e73c325d63e7a4c68866730c8584bf96dddea4d1c3daee4e090dd82b400" },
|
|
178464
|
+
{ key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 1990265, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
|
|
178465
|
+
{ key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 1990338, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
|
|
178466
|
+
{ key: "assets/pdfDocument-DVbRjsrX.js", contentType: "application/javascript; charset=utf-8", offset: 3307372, length: 3453, sha256: "1cf5e857989a841b4343620c73501ca32f5d4f5a82e1ff48a11d07e094b082b9" },
|
|
178467
|
+
{ key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset: 3310825, length: 2266, sha256: "1d21ad008921942217c9eac0c35b1713773b9d89c71e3ab4412781f7bb88f463" },
|
|
178468
|
+
{ key: "assets/webviewBridgeHost-Cv8q-9a5.js", contentType: "application/javascript; charset=utf-8", offset: 3313091, length: 9888, sha256: "68221913c3148fc4358460ae30d3d8075961a51931f6d472a493d2b2debe00f9" },
|
|
178469
|
+
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3322979, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
|
|
178470
|
+
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3327589, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
|
|
178471
|
+
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3816173, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
|
|
178472
|
+
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3907097, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
|
|
178473
|
+
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 3998081, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
|
|
178474
|
+
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 4089061, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
|
|
178475
|
+
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 4179933, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
|
|
178476
|
+
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4270913, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
|
|
178477
|
+
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4379549, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
|
|
178478
|
+
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4488633, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
|
|
178479
|
+
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4597681, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
|
|
178480
|
+
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4705381, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
|
|
178481
|
+
{ key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4793489, length: 6818, sha256: "835250c3d8004f27c2b67f9b471984351ba6df07b916d97e33b43c691200a18c" },
|
|
178482
|
+
{ key: "index.html", contentType: "text/html; charset=utf-8", offset: 4800307, length: 5037, sha256: "be7e88298c08895f9e2f3f87d690edf37af127b420eadcbce186eb08963b6506" },
|
|
178483
|
+
{ key: "ios-glass-preview.css", contentType: "text/css; charset=utf-8", offset: 4805344, length: 10699, sha256: "f187c5a783ec41f90c0e49471ddc3ad5d3bb9c9c40feddad92e0ed9ef9b480f1" },
|
|
178484
|
+
{ key: "kit-tab-bar.css", contentType: "text/css; charset=utf-8", offset: 4816043, length: 1171, sha256: "9e2c3a0faaf05d5471badf167a4d3bdf1c4e6dd65c432eea6d254158bfd99585" },
|
|
178485
|
+
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4817214, length: 21696, sha256: "fb8575993c8072adda0e61f45f80aca6a1ebb965c24707bc1265150544a4af26" },
|
|
178486
|
+
{ key: "t5-worker-frame.html", contentType: "text/html; charset=utf-8", offset: 4838910, length: 21713, sha256: "7d647969cbb8f94275bcaabb41e6a72e70bc1f1608b26bba1ba783b06d0beb4f" }
|
|
178115
178487
|
];
|
|
178116
178488
|
}
|
|
178117
178489
|
});
|
|
@@ -182262,21 +182634,21 @@ function fixedPriceRoute(item, currency) {
|
|
|
182262
182634
|
return typeof amount === "string" && /^\d+(?:\.\d+)?$/.test(amount) && Number.isFinite(Number(amount)) && Number(amount) > 0 && /^[A-Z]{3}$/.test(currency) && item.currency === currency ? "appleIap" : "decide";
|
|
182263
182635
|
}
|
|
182264
182636
|
function bookingAttendanceOf(raw) {
|
|
182265
|
-
const s2 =
|
|
182266
|
-
const payment =
|
|
182267
|
-
const fixed =
|
|
182268
|
-
const price =
|
|
182269
|
-
const options =
|
|
182270
|
-
const policy =
|
|
182637
|
+
const s2 = object9(raw);
|
|
182638
|
+
const payment = object9(s2.payment);
|
|
182639
|
+
const fixed = object9(payment.fixed);
|
|
182640
|
+
const price = object9(fixed.price);
|
|
182641
|
+
const options = object9(payment.options);
|
|
182642
|
+
const policy = object9(object9(s2.bookingPolicy).participantsPolicy);
|
|
182271
182643
|
return {
|
|
182272
182644
|
kind: "bookingsService",
|
|
182273
182645
|
type: text10(s2.type),
|
|
182274
182646
|
capacity: numeric(s2.defaultCapacity),
|
|
182275
182647
|
maxParticipantsPerBooking: policy.enabled === true ? numeric(policy.maxParticipantsPerBooking) : void 0,
|
|
182276
182648
|
hidden: boolean3(s2.hidden),
|
|
182277
|
-
conferencing: boolean3(
|
|
182649
|
+
conferencing: boolean3(object9(s2.conferencing).enabled),
|
|
182278
182650
|
locations: Array.isArray(s2.locations) ? s2.locations.map(locationType) : void 0,
|
|
182279
|
-
onlineBooking: boolean3(
|
|
182651
|
+
onlineBooking: boolean3(object9(s2.onlineBooking).enabled),
|
|
182280
182652
|
onlinePayment: boolean3(options.online),
|
|
182281
182653
|
deposit: options.deposit === true || fixed.deposit !== void 0,
|
|
182282
182654
|
priceType: text10(payment.rateType),
|
|
@@ -182285,9 +182657,9 @@ function bookingAttendanceOf(raw) {
|
|
|
182285
182657
|
};
|
|
182286
182658
|
}
|
|
182287
182659
|
function locationType(raw) {
|
|
182288
|
-
const location =
|
|
182660
|
+
const location = object9(raw);
|
|
182289
182661
|
const type = text10(location.type) ?? "UNKNOWN";
|
|
182290
|
-
const addresses = [
|
|
182662
|
+
const addresses = [object9(location.custom).address, location.calculatedAddress].map(object9);
|
|
182291
182663
|
return type === "CUSTOM" && addresses.every(describesNoPlace) ? ADDRESSLESS_CUSTOM : type;
|
|
182292
182664
|
}
|
|
182293
182665
|
function describesNoPlace(address) {
|
|
@@ -182300,16 +182672,16 @@ function describesNoPlace(address) {
|
|
|
182300
182672
|
});
|
|
182301
182673
|
}
|
|
182302
182674
|
function ticketAttendanceOf(event, definition) {
|
|
182303
|
-
const e2 =
|
|
182304
|
-
const t2 =
|
|
182305
|
-
const pricing =
|
|
182306
|
-
const price =
|
|
182307
|
-
const registration =
|
|
182675
|
+
const e2 = object9(event);
|
|
182676
|
+
const t2 = object9(definition);
|
|
182677
|
+
const pricing = object9(t2.pricingMethod);
|
|
182678
|
+
const price = object9(pricing.fixedPrice);
|
|
182679
|
+
const registration = object9(e2.registration);
|
|
182308
182680
|
const type = text10(registration.type) ?? text10(registration.initialType) ?? text10(e2.eventType);
|
|
182309
182681
|
const status = text10(e2.status) ?? text10(e2.eventStatus);
|
|
182310
182682
|
return {
|
|
182311
182683
|
kind: "eventsTicket",
|
|
182312
|
-
location: text10(
|
|
182684
|
+
location: text10(object9(e2.location).type),
|
|
182313
182685
|
registration: type === "TICKETS" || type === "RSVP_AND_TICKETS" ? "TICKETING" : type,
|
|
182314
182686
|
eventStatus: status === "SCHEDULED" ? "UPCOMING" : status,
|
|
182315
182687
|
saleStatus: text10(t2.saleStatus),
|
|
@@ -182319,7 +182691,7 @@ function ticketAttendanceOf(event, definition) {
|
|
|
182319
182691
|
currency: text10(price.currency)
|
|
182320
182692
|
};
|
|
182321
182693
|
}
|
|
182322
|
-
function
|
|
182694
|
+
function object9(value2) {
|
|
182323
182695
|
return value2 !== null && typeof value2 === "object" && !Array.isArray(value2) ? value2 : {};
|
|
182324
182696
|
}
|
|
182325
182697
|
var ADDRESSLESS_CUSTOM, PHYSICAL_LOCATIONS, ONLINE_LABEL, text10, numeric, boolean3, zeroPrice;
|
|
@@ -193428,41 +193800,41 @@ function normalizeWebsiteLinks(nodes) {
|
|
|
193428
193800
|
};
|
|
193429
193801
|
for (const node of nodes) {
|
|
193430
193802
|
for (const path2 of linkFields[node.type ?? ""] ?? []) {
|
|
193431
|
-
const parent =
|
|
193803
|
+
const parent = object10(path2.slice(0, -1).reduce((value2, key4) => object10(value2)[key4], node));
|
|
193432
193804
|
const key3 = path2[path2.length - 1];
|
|
193433
193805
|
const holder = { url: parent[key3] };
|
|
193434
193806
|
normalize5(holder);
|
|
193435
193807
|
if (typeof holder.url === "string") parent[key3] = holder.url;
|
|
193436
193808
|
}
|
|
193437
193809
|
if (Array.isArray(node.textData?.decorations)) for (const decoration of node.textData.decorations) {
|
|
193438
|
-
if (
|
|
193810
|
+
if (object10(decoration).type === "LINK") normalize5(object10(object10(decoration).linkData).link);
|
|
193439
193811
|
}
|
|
193440
193812
|
if (Array.isArray(node.nodes)) changed += normalizeWebsiteLinks(node.nodes);
|
|
193441
193813
|
}
|
|
193442
193814
|
return changed;
|
|
193443
193815
|
}
|
|
193444
193816
|
function draftDocument(value2) {
|
|
193445
|
-
const draft =
|
|
193817
|
+
const draft = object10(value2);
|
|
193446
193818
|
if (!Array.isArray(draft.blocks) || draft.blocks.length > 5e3) return invalid();
|
|
193447
193819
|
if (draft.entityMap !== void 0 && (!draft.entityMap || typeof draft.entityMap !== "object" || Array.isArray(draft.entityMap))) return invalid();
|
|
193448
|
-
const entities =
|
|
193820
|
+
const entities = object10(draft.entityMap);
|
|
193449
193821
|
const nodes = [];
|
|
193450
193822
|
for (const raw of draft.blocks) {
|
|
193451
|
-
const block =
|
|
193823
|
+
const block = object10(raw);
|
|
193452
193824
|
if (typeof block.text !== "string") return invalid();
|
|
193453
193825
|
if (block.depth !== void 0 && block.depth !== 0) return unsupported();
|
|
193454
193826
|
const text13 = block.text;
|
|
193455
193827
|
const styles = block.inlineStyleRanges ?? [];
|
|
193456
193828
|
const ranges = block.entityRanges ?? [];
|
|
193457
193829
|
if (!Array.isArray(styles) || !Array.isArray(ranges) || styles.length + ranges.length > 500) return invalid();
|
|
193458
|
-
const spans = [...styles.map((v2) => ({ ...
|
|
193830
|
+
const spans = [...styles.map((v2) => ({ ...object10(v2), kind: "style" })), ...ranges.map((v2) => ({ ...object10(v2), kind: "entity" }))];
|
|
193459
193831
|
for (const span of spans) {
|
|
193460
193832
|
if (!Number.isInteger(span.offset) || !Number.isInteger(span.length) || Number(span.offset) < 0 || Number(span.length) < 0 || Number(span.offset) + Number(span.length) > text13.length) return invalid();
|
|
193461
193833
|
}
|
|
193462
193834
|
if (block.type === "atomic") {
|
|
193463
193835
|
if (ranges.length !== 1) return unsupported();
|
|
193464
|
-
const entity =
|
|
193465
|
-
const data =
|
|
193836
|
+
const entity = object10(entities[String(object10(ranges[0]).key)]);
|
|
193837
|
+
const data = object10(entity.data);
|
|
193466
193838
|
if (entity.type !== "IMAGE" && entity.type !== "wix-draft-plugin-image") return unsupported();
|
|
193467
193839
|
const url = data.src ?? data.url;
|
|
193468
193840
|
if (typeof url !== "string" || !url) return invalid();
|
|
@@ -193479,9 +193851,9 @@ function draftDocument(value2) {
|
|
|
193479
193851
|
if (!["BOLD", "ITALIC", "UNDERLINE", "STRIKETHROUGH"].includes(String(span.style))) return unsupported();
|
|
193480
193852
|
decorations.push({ type: String(span.style) });
|
|
193481
193853
|
} else {
|
|
193482
|
-
const entity =
|
|
193483
|
-
if (entity.type !== "LINK" || typeof
|
|
193484
|
-
decorations.push({ type: "LINK", linkData: { link: { url:
|
|
193854
|
+
const entity = object10(entities[String(span.key)]);
|
|
193855
|
+
if (entity.type !== "LINK" || typeof object10(entity.data).url !== "string") return unsupported();
|
|
193856
|
+
decorations.push({ type: "LINK", linkData: { link: { url: object10(entity.data).url } } });
|
|
193485
193857
|
}
|
|
193486
193858
|
}
|
|
193487
193859
|
runs.push({ type: "TEXT", textData: { text: text13.slice(start, end), decorations } });
|
|
@@ -193501,7 +193873,7 @@ function draftDocument(value2) {
|
|
|
193501
193873
|
return { nodes };
|
|
193502
193874
|
}
|
|
193503
193875
|
function decodeOneAppPage(response, expectedPageId) {
|
|
193504
|
-
const dto =
|
|
193876
|
+
const dto = object10(response), content = object10(dto.content), body = object10(content.body);
|
|
193505
193877
|
if (!isOneAppPageId(expectedPageId) || dto.pageId !== expectedPageId || typeof body.content !== "string" || content.title !== void 0 && typeof content.title !== "string") return invalid();
|
|
193506
193878
|
const raw = body.content;
|
|
193507
193879
|
if (richContentOverLimits(raw, null)) return invalid();
|
|
@@ -193518,13 +193890,13 @@ function decodeOneAppPage(response, expectedPageId) {
|
|
|
193518
193890
|
if (richContentOverLimits(raw, parsed)) return invalid();
|
|
193519
193891
|
if (contentType === "DRAFTJS") document2 = draftDocument(parsed);
|
|
193520
193892
|
else {
|
|
193521
|
-
if (!Array.isArray(
|
|
193893
|
+
if (!Array.isArray(object10(parsed).nodes)) return invalid();
|
|
193522
193894
|
document2 = parsed;
|
|
193523
193895
|
}
|
|
193524
193896
|
} else return unsupported();
|
|
193525
193897
|
const validNodes = (nodes) => nodes.every((value2) => {
|
|
193526
|
-
const n2 =
|
|
193527
|
-
return typeof n2.type === "string" && n2.type.length > 0 && (n2.type !== "TEXT" || typeof
|
|
193898
|
+
const n2 = object10(value2);
|
|
193899
|
+
return typeof n2.type === "string" && n2.type.length > 0 && (n2.type !== "TEXT" || typeof object10(n2.textData).text === "string") && (n2.nodes === void 0 || Array.isArray(n2.nodes) && validNodes(n2.nodes));
|
|
193528
193900
|
});
|
|
193529
193901
|
if (!validNodes(document2.nodes)) return invalid();
|
|
193530
193902
|
const normalizedWebsiteLinks = normalizeWebsiteLinks(document2.nodes);
|
|
@@ -193550,7 +193922,7 @@ function oneAppPageSection(page, options) {
|
|
|
193550
193922
|
documentJson: page.documentJson
|
|
193551
193923
|
} } };
|
|
193552
193924
|
}
|
|
193553
|
-
var failure,
|
|
193925
|
+
var failure, object10, invalid, unsupported, isOneAppPageId;
|
|
193554
193926
|
var init_one_app_page = __esm({
|
|
193555
193927
|
"../../stdlib/flows/screens/src/one-app-page.ts"() {
|
|
193556
193928
|
init_define_HHP_CATALOG();
|
|
@@ -193558,7 +193930,7 @@ var init_one_app_page = __esm({
|
|
|
193558
193930
|
failure = (code, message2) => {
|
|
193559
193931
|
throw Object.assign(new Error(message2), { name: "OneAppPageContentError", code });
|
|
193560
193932
|
};
|
|
193561
|
-
|
|
193933
|
+
object10 = (v2) => v2 && typeof v2 === "object" && !Array.isArray(v2) ? v2 : {};
|
|
193562
193934
|
invalid = () => failure("invalid", "The referenced page returned malformed content.");
|
|
193563
193935
|
unsupported = () => failure("unsupported", "The referenced page uses an unsupported content format.");
|
|
193564
193936
|
isOneAppPageId = (value2) => typeof value2 === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value2);
|
|
@@ -193568,16 +193940,16 @@ var init_one_app_page = __esm({
|
|
|
193568
193940
|
// src/one-app/pages.ts
|
|
193569
193941
|
import { createHash as createHash53 } from "node:crypto";
|
|
193570
193942
|
function oneAppPagePlacements(raw) {
|
|
193571
|
-
const sections =
|
|
193943
|
+
const sections = object11(raw.sections);
|
|
193572
193944
|
const placements = [];
|
|
193573
193945
|
const read = (elements, base, layoutItemId) => {
|
|
193574
193946
|
if (!Array.isArray(elements)) return;
|
|
193575
193947
|
elements.forEach((value2, arrayIndex) => {
|
|
193576
|
-
const ref =
|
|
193948
|
+
const ref = object11(value2);
|
|
193577
193949
|
if (ref.elementType !== "SECTION" || typeof ref.elementId !== "string") return;
|
|
193578
|
-
const section3 =
|
|
193950
|
+
const section3 = object11(sections[ref.elementId]);
|
|
193579
193951
|
if ((section3.sectionDefinitionId ?? section3.section_definition_id) !== "pages_section") return;
|
|
193580
|
-
const selected =
|
|
193952
|
+
const selected = object11(object11(section3.settings).value).pageId;
|
|
193581
193953
|
placements.push({
|
|
193582
193954
|
sectionId: ref.elementId,
|
|
193583
193955
|
...layoutItemId ? { layoutItemId } : {},
|
|
@@ -193588,8 +193960,8 @@ function oneAppPagePlacements(raw) {
|
|
|
193588
193960
|
});
|
|
193589
193961
|
});
|
|
193590
193962
|
};
|
|
193591
|
-
for (const [id, layout] of Object.entries(
|
|
193592
|
-
read(
|
|
193963
|
+
for (const [id, layout] of Object.entries(object11(raw.layoutItems))) read(object11(layout).elements, `/layoutItems/${pointer(id)}/elements`, id);
|
|
193964
|
+
read(object11(raw.businessProfile).elements, "/businessProfile/elements");
|
|
193593
193965
|
return placements;
|
|
193594
193966
|
}
|
|
193595
193967
|
async function collectOneAppPages(raw, source, read) {
|
|
@@ -193620,13 +193992,13 @@ async function collectOneAppPages(raw, source, read) {
|
|
|
193620
193992
|
}
|
|
193621
193993
|
return { version: 1, source, placements, documents: [...documents.values()] };
|
|
193622
193994
|
}
|
|
193623
|
-
var
|
|
193995
|
+
var object11, pointer, hash2, ONE_APP_PAGES_BASE;
|
|
193624
193996
|
var init_pages = __esm({
|
|
193625
193997
|
"src/one-app/pages.ts"() {
|
|
193626
193998
|
init_define_HHP_CATALOG();
|
|
193627
193999
|
init_one_app_page();
|
|
193628
194000
|
init_errors2();
|
|
193629
|
-
|
|
194001
|
+
object11 = (v2) => v2 && typeof v2 === "object" && !Array.isArray(v2) ? v2 : {};
|
|
193630
194002
|
pointer = (s2) => s2.replaceAll("~", "~0").replaceAll("/", "~1");
|
|
193631
194003
|
hash2 = (s2) => createHash53("sha256").update(s2).digest("hex");
|
|
193632
194004
|
ONE_APP_PAGES_BASE = "https://apps.wix.com/social-content/api/v1/pages/";
|
|
@@ -193926,20 +194298,28 @@ async function collectOneApp(input, deps = {}) {
|
|
|
193926
194298
|
const projected = businessProjection(await readBusiness(businessUrl, resolved2), input.metaSiteId);
|
|
193927
194299
|
let businessContext = redact(projected.context);
|
|
193928
194300
|
const contextWarnings = [];
|
|
193929
|
-
|
|
193930
|
-
if (!isObject2(section3)) return
|
|
194301
|
+
const definitions2 = Object.values(rawStructure.sections).flatMap((section3) => {
|
|
194302
|
+
if (!isObject2(section3)) return [];
|
|
193931
194303
|
const definition = section3.sectionDefinitionId ?? section3.section_definition_id;
|
|
193932
|
-
return typeof definition === "string"
|
|
193933
|
-
})
|
|
194304
|
+
return typeof definition === "string" ? [definition] : [];
|
|
194305
|
+
});
|
|
194306
|
+
const wantsContact = definitions2.some((id) => CONTACT_SECTIONS.has(id));
|
|
194307
|
+
const wantsLoyalty = definitions2.some((id) => LOYALTY_SECTIONS.has(id));
|
|
194308
|
+
if (wantsContact || wantsLoyalty) {
|
|
193934
194309
|
const requiredVisitor = internalBusinessRead ? await visitorAuthorization("enrichment_session") : void 0;
|
|
193935
194310
|
try {
|
|
193936
|
-
const
|
|
193937
|
-
|
|
193938
|
-
|
|
193939
|
-
|
|
193940
|
-
|
|
193941
|
-
|
|
193942
|
-
), input.metaSiteId));
|
|
194311
|
+
const authorization2 = requiredVisitor ?? await visitorAuthorization("business_contact_session");
|
|
194312
|
+
const properties = await request(PUBLIC_CONTACT, "business_contact", void 0, { authorization: authorization2, siteScoped: false });
|
|
194313
|
+
if (!isObject2(properties) || typeof properties.metaSiteId !== "string" || !isObject2(properties.properties)) throw invalidResponse("business_contact");
|
|
194314
|
+
if (properties.metaSiteId.toLowerCase() !== input.metaSiteId.toLowerCase()) {
|
|
194315
|
+
throw new OneAppError("source_site_mismatch", "The returned properties do not match the requested site.", { stage: "business_contact" });
|
|
194316
|
+
}
|
|
194317
|
+
if (wantsContact) businessContext.contact = redact(contactProjection(properties, input.metaSiteId));
|
|
194318
|
+
if (wantsLoyalty) {
|
|
194319
|
+
const currency = properties.properties.paymentCurrency;
|
|
194320
|
+
if (typeof currency === "string" && /^[A-Z]{3}$/.test(currency)) businessContext.paymentCurrency = currency;
|
|
194321
|
+
else contextWarnings.push({ code: "loyalty_currency_unavailable", message: "Payment currency is unverified. Keep currency-based Loyalty earning details unresolved." });
|
|
194322
|
+
}
|
|
193943
194323
|
} catch (error) {
|
|
193944
194324
|
if (!(error instanceof OneAppError) || ![
|
|
193945
194325
|
"source_not_found",
|
|
@@ -193947,11 +194327,16 @@ async function collectOneApp(input, deps = {}) {
|
|
|
193947
194327
|
"source_timeout",
|
|
193948
194328
|
"source_response_too_large"
|
|
193949
194329
|
].includes(error.code)) throw error;
|
|
193950
|
-
contextWarnings.push({
|
|
194330
|
+
if (wantsContact) contextWarnings.push({
|
|
193951
194331
|
code: "business_contact_unavailable",
|
|
193952
194332
|
failureCode: error.code,
|
|
193953
194333
|
message: "Public business contact is unavailable. Keep contact sections unresolved until their data can be verified."
|
|
193954
194334
|
});
|
|
194335
|
+
if (wantsLoyalty) contextWarnings.push({
|
|
194336
|
+
code: "loyalty_currency_unavailable",
|
|
194337
|
+
failureCode: error.code,
|
|
194338
|
+
message: "Payment currency is unavailable. Keep currency-based Loyalty earning details unresolved."
|
|
194339
|
+
});
|
|
193955
194340
|
}
|
|
193956
194341
|
}
|
|
193957
194342
|
if (Object.values(buildSourceGraph(rawStructure).sections).some((section3) => {
|
|
@@ -194071,7 +194456,7 @@ async function collectOneApp(input, deps = {}) {
|
|
|
194071
194456
|
]
|
|
194072
194457
|
};
|
|
194073
194458
|
}
|
|
194074
|
-
var MIDDLEWARE, BUSINESS, TOKEN_INFO, IS_PERMITTED, INTERNAL_PERMISSION, VISITOR_SESSION, PUBLIC_CONTACT, PUBLIC_MEMBERS, MEMBER_WIDGETS, CONTACT_SECTIONS, MAX_RESPONSE_BYTES, TIMEOUT_MS3, UUID, LIFECYCLE_FIELDS;
|
|
194459
|
+
var MIDDLEWARE, BUSINESS, TOKEN_INFO, IS_PERMITTED, INTERNAL_PERMISSION, VISITOR_SESSION, PUBLIC_CONTACT, PUBLIC_MEMBERS, MEMBER_WIDGETS, LOYALTY_SECTIONS, CONTACT_SECTIONS, MAX_RESPONSE_BYTES, TIMEOUT_MS3, UUID, LIFECYCLE_FIELDS;
|
|
194075
194460
|
var init_collect = __esm({
|
|
194076
194461
|
"src/one-app/collect.ts"() {
|
|
194077
194462
|
init_define_HHP_CATALOG();
|
|
@@ -194089,6 +194474,7 @@ var init_collect = __esm({
|
|
|
194089
194474
|
PUBLIC_CONTACT = "https://apps.wix.com/api/v1/mobile-platform-facade/business/site-properties";
|
|
194090
194475
|
PUBLIC_MEMBERS = "https://apps.wix.com/_api/members-one-app/api/members?filter=members";
|
|
194091
194476
|
MEMBER_WIDGETS = /* @__PURE__ */ new Set(["platform_general_members_section", "platform_general_members_section_bp"]);
|
|
194477
|
+
LOYALTY_SECTIONS = /* @__PURE__ */ new Set(["loyalty_offering_section", "loyalty_status_section"]);
|
|
194092
194478
|
CONTACT_SECTIONS = /* @__PURE__ */ new Set(["platform_general_contact_section", "platform_general_contact_section_bp"]);
|
|
194093
194479
|
MAX_RESPONSE_BYTES = 8e6;
|
|
194094
194480
|
TIMEOUT_MS3 = 3e4;
|
|
@@ -194223,27 +194609,27 @@ var init_payment_review = __esm({
|
|
|
194223
194609
|
|
|
194224
194610
|
// src/one-app/navigation.ts
|
|
194225
194611
|
function sourceNavigationKind(raw) {
|
|
194226
|
-
const navigation =
|
|
194227
|
-
if (
|
|
194612
|
+
const navigation = object12(raw.navigation);
|
|
194613
|
+
if (object12(navigation.settings).drawerMode === true) return "side-menu";
|
|
194228
194614
|
const entries = array4(navigation.bottomTabs);
|
|
194229
194615
|
if (entries.length > 1) return "bottom-tabs";
|
|
194230
|
-
const screens =
|
|
194231
|
-
const screenId = string6(
|
|
194232
|
-
const screen = screenId && Object.hasOwn(screens, screenId) ?
|
|
194233
|
-
return
|
|
194616
|
+
const screens = object12(raw.screens);
|
|
194617
|
+
const screenId = string6(object12(entries[0]).screenId);
|
|
194618
|
+
const screen = screenId && Object.hasOwn(screens, screenId) ? object12(screens[screenId]) : {};
|
|
194619
|
+
return object12(screen.layout).type === "TOP_TABS" ? "top-tabs" : "single";
|
|
194234
194620
|
}
|
|
194235
194621
|
function planNavigation(raw, policy = "bottom-tabs") {
|
|
194236
|
-
const navigation =
|
|
194622
|
+
const navigation = object12(raw.navigation);
|
|
194237
194623
|
const entries = array4(navigation.bottomTabs);
|
|
194238
|
-
const screens =
|
|
194239
|
-
const layouts =
|
|
194624
|
+
const screens = object12(raw.screens);
|
|
194625
|
+
const layouts = object12(raw.layoutItems);
|
|
194240
194626
|
const kind = sourceNavigationKind(raw);
|
|
194241
194627
|
const warnings = [];
|
|
194242
|
-
const firstEntry =
|
|
194628
|
+
const firstEntry = object12(entries[0]);
|
|
194243
194629
|
const rootScreenId = string6(firstEntry.screenId) ?? null;
|
|
194244
|
-
const rootScreen = rootScreenId && Object.hasOwn(screens, rootScreenId) ?
|
|
194245
|
-
const rootLayout =
|
|
194246
|
-
const settings =
|
|
194630
|
+
const rootScreen = rootScreenId && Object.hasOwn(screens, rootScreenId) ? object12(screens[rootScreenId]) : {};
|
|
194631
|
+
const rootLayout = object12(rootScreen.layout);
|
|
194632
|
+
const settings = object12(navigation.settings);
|
|
194247
194633
|
const appInstance = string6(raw.appInstance) ?? null;
|
|
194248
194634
|
const source = {
|
|
194249
194635
|
kind,
|
|
@@ -194255,8 +194641,8 @@ function planNavigation(raw, policy = "bottom-tabs") {
|
|
|
194255
194641
|
const next = "Build navigation from this plan with himi docs one-app-to-himi-app. Report every warning; the plan does not replace the source graph.";
|
|
194256
194642
|
if (kind === "bottom-tabs") {
|
|
194257
194643
|
entries.forEach((value2, index) => {
|
|
194258
|
-
const id = string6(
|
|
194259
|
-
if (id && Object.hasOwn(screens, id) &&
|
|
194644
|
+
const id = string6(object12(value2).screenId);
|
|
194645
|
+
if (id && Object.hasOwn(screens, id) && object12(object12(screens[id]).layout).type === "TOP_TABS") {
|
|
194260
194646
|
warnings.push({ code: "nested_top_tabs", pointer: `/screens/${part3(id)}/layout/type`, reference: `/navigation/bottomTabs/${index}` });
|
|
194261
194647
|
}
|
|
194262
194648
|
});
|
|
@@ -194267,14 +194653,14 @@ function planNavigation(raw, policy = "bottom-tabs") {
|
|
|
194267
194653
|
const tabs = [];
|
|
194268
194654
|
const hiddenPages = [];
|
|
194269
194655
|
array4(rootLayout.items).forEach((value2, index) => {
|
|
194270
|
-
const layoutItemId = string6(
|
|
194656
|
+
const layoutItemId = string6(object12(value2).layoutItemId);
|
|
194271
194657
|
const itemPointer = `${pointer3}/${index}`;
|
|
194272
194658
|
if (!layoutItemId || !Object.hasOwn(layouts, layoutItemId)) {
|
|
194273
194659
|
warnings.push({ code: "missing_reference", pointer: itemPointer, ...layoutItemId ? { reference: layoutItemId } : {} });
|
|
194274
194660
|
return;
|
|
194275
194661
|
}
|
|
194276
|
-
const layout =
|
|
194277
|
-
if (
|
|
194662
|
+
const layout = object12(layouts[layoutItemId]);
|
|
194663
|
+
if (object12(layout.settings).hideFromNavigation === true) {
|
|
194278
194664
|
hiddenPages.push({ layoutItemId, pointer: itemPointer });
|
|
194279
194665
|
return;
|
|
194280
194666
|
}
|
|
@@ -194319,11 +194705,11 @@ function planNavigation(raw, policy = "bottom-tabs") {
|
|
|
194319
194705
|
next
|
|
194320
194706
|
};
|
|
194321
194707
|
}
|
|
194322
|
-
var
|
|
194708
|
+
var object12, array4, string6, part3, TOP_TABS_POLICIES, MAX_BAR_TABS;
|
|
194323
194709
|
var init_navigation = __esm({
|
|
194324
194710
|
"src/one-app/navigation.ts"() {
|
|
194325
194711
|
init_define_HHP_CATALOG();
|
|
194326
|
-
|
|
194712
|
+
object12 = (value2) => value2 !== null && typeof value2 === "object" && !Array.isArray(value2) ? value2 : {};
|
|
194327
194713
|
array4 = (value2) => Array.isArray(value2) ? value2 : [];
|
|
194328
194714
|
string6 = (value2) => typeof value2 === "string" && value2 ? value2 : void 0;
|
|
194329
194715
|
part3 = (value2) => value2.replaceAll("~", "~0").replaceAll("/", "~1");
|
|
@@ -194941,7 +195327,7 @@ var init_spaces_host_manifest = __esm({
|
|
|
194941
195327
|
"../../apps/himi-spaces-lite/spaces-host-manifest.ts"() {
|
|
194942
195328
|
init_define_HHP_CATALOG();
|
|
194943
195329
|
SPACES_HOST_MANIFEST = {
|
|
194944
|
-
"version": "1.
|
|
195330
|
+
"version": "1.8.0",
|
|
194945
195331
|
"capabilities": [
|
|
194946
195332
|
"animation",
|
|
194947
195333
|
"app_info",
|
|
@@ -197008,7 +197394,8 @@ function mergeCustomerOwned(committed, overlay) {
|
|
|
197008
197394
|
"galleries",
|
|
197009
197395
|
"site",
|
|
197010
197396
|
"goals",
|
|
197011
|
-
"businessContact"
|
|
197397
|
+
"businessContact",
|
|
197398
|
+
"loyalty"
|
|
197012
197399
|
];
|
|
197013
197400
|
const customer = {};
|
|
197014
197401
|
for (const key3 of CUSTOMER_OWNED) {
|
|
@@ -197031,10 +197418,13 @@ function mergeCustomerOwned(committed, overlay) {
|
|
|
197031
197418
|
if (typeof value2 === "string" && value2.trim() === "") delete overlayIdentity[key3];
|
|
197032
197419
|
}
|
|
197033
197420
|
if (customer.identity !== void 0) customer.identity = overlayIdentity;
|
|
197034
|
-
const { goals: _shellGoals, businessContact: previousContact, ...shell } = committed;
|
|
197421
|
+
const { goals: _shellGoals, businessContact: previousContact, loyalty: previousLoyalty, ...shell } = committed;
|
|
197035
197422
|
if (customer.businessContact === void 0 && sameKnownSite(committed, overlay)) {
|
|
197036
197423
|
customer.businessContact = previousContact;
|
|
197037
197424
|
}
|
|
197425
|
+
if (customer.loyalty === void 0 && sameKnownSite(committed, overlay)) {
|
|
197426
|
+
customer.loyalty = previousLoyalty;
|
|
197427
|
+
}
|
|
197038
197428
|
return deepMerge4(shell, customer);
|
|
197039
197429
|
}
|
|
197040
197430
|
function carryOverGoals(previousOverlayJson, overlay) {
|
|
@@ -197064,17 +197454,21 @@ function buildMergedContract(options) {
|
|
|
197064
197454
|
}
|
|
197065
197455
|
const committed = JSON.parse(readFileSync133(committedPath, "utf8"));
|
|
197066
197456
|
const previousPath = join127(appDir3, LOCAL_CONTRACT_REL);
|
|
197067
|
-
let
|
|
197068
|
-
if (overlay.businessContact === void 0 && existsSync114(previousPath)) {
|
|
197457
|
+
let evidenceOverlay = overlay;
|
|
197458
|
+
if ((overlay.businessContact === void 0 || overlay.loyalty === void 0) && existsSync114(previousPath)) {
|
|
197069
197459
|
try {
|
|
197070
197460
|
const previous = JSON.parse(readFileSync133(previousPath, "utf8"));
|
|
197071
197461
|
if (previous && typeof previous === "object" && !Array.isArray(previous) && sameKnownSite(previous, overlay)) {
|
|
197072
|
-
|
|
197462
|
+
evidenceOverlay = {
|
|
197463
|
+
...overlay,
|
|
197464
|
+
...overlay.businessContact === void 0 ? { businessContact: previous.businessContact } : {},
|
|
197465
|
+
...overlay.loyalty === void 0 ? { loyalty: previous.loyalty } : {}
|
|
197466
|
+
};
|
|
197073
197467
|
}
|
|
197074
197468
|
} catch {
|
|
197075
197469
|
}
|
|
197076
197470
|
}
|
|
197077
|
-
const merged = mergeCustomerOwned(committed,
|
|
197471
|
+
const merged = mergeCustomerOwned(committed, evidenceOverlay);
|
|
197078
197472
|
const overlayFontFamily = (overlay.branding ?? {}).fontFamily;
|
|
197079
197473
|
const branding = merged.branding ?? {};
|
|
197080
197474
|
const staged = [];
|
|
@@ -197269,6 +197663,8 @@ async function applyOverlays(input) {
|
|
|
197269
197663
|
const merged = deepMerge4(cur, overlay);
|
|
197270
197664
|
if (overlay.businessContact !== void 0) merged.businessContact = overlay.businessContact;
|
|
197271
197665
|
else if (!sameKnownSite(cur, overlay)) delete merged.businessContact;
|
|
197666
|
+
if (overlay.loyalty !== void 0) merged.loyalty = overlay.loyalty;
|
|
197667
|
+
else if (!sameKnownSite(cur, overlay)) delete merged.loyalty;
|
|
197272
197668
|
packageFaq = merged.faq;
|
|
197273
197669
|
packageGalleries = merged.galleries;
|
|
197274
197670
|
syncViewNames(cur.site, merged.site);
|