@nanisoft/prism-ui 0.13.0 → 0.15.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/THIRD-PARTY-NOTICES.md +22 -7
- package/dist/.tsbuildinfo +1 -1
- package/dist/blocks/about-01/about.d.ts +296 -0
- package/dist/blocks/about-01/about.d.ts.map +1 -0
- package/dist/blocks/about-01/about.js +103 -0
- package/dist/blocks/about-01/index.d.ts +3 -0
- package/dist/blocks/about-01/index.d.ts.map +1 -0
- package/dist/blocks/about-01/index.js +1 -0
- package/dist/blocks/accept-invite-01/accept-invite.d.ts +324 -0
- package/dist/blocks/accept-invite-01/accept-invite.d.ts.map +1 -0
- package/dist/blocks/accept-invite-01/accept-invite.js +230 -0
- package/dist/blocks/accept-invite-01/index.d.ts +3 -0
- package/dist/blocks/accept-invite-01/index.d.ts.map +1 -0
- package/dist/blocks/accept-invite-01/index.js +1 -0
- package/dist/blocks/account-01/account-01.d.ts +393 -0
- package/dist/blocks/account-01/account-01.d.ts.map +1 -0
- package/dist/blocks/account-01/account-01.js +215 -0
- package/dist/blocks/account-01/index.d.ts +3 -0
- package/dist/blocks/account-01/index.d.ts.map +1 -0
- package/dist/blocks/account-01/index.js +1 -0
- package/dist/blocks/activity-feed-01/activity-feed-01.d.ts +271 -0
- package/dist/blocks/activity-feed-01/activity-feed-01.d.ts.map +1 -0
- package/dist/blocks/activity-feed-01/activity-feed-01.js +185 -0
- package/dist/blocks/activity-feed-01/index.d.ts +3 -0
- package/dist/blocks/activity-feed-01/index.d.ts.map +1 -0
- package/dist/blocks/activity-feed-01/index.js +1 -0
- package/dist/blocks/address-book-01/address-book-01.d.ts +312 -0
- package/dist/blocks/address-book-01/address-book-01.d.ts.map +1 -0
- package/dist/blocks/address-book-01/address-book-01.js +233 -0
- package/dist/blocks/address-book-01/index.d.ts +3 -0
- package/dist/blocks/address-book-01/index.d.ts.map +1 -0
- package/dist/blocks/address-book-01/index.js +1 -0
- package/dist/blocks/audit-log-01/audit-log-01.d.ts +333 -0
- package/dist/blocks/audit-log-01/audit-log-01.d.ts.map +1 -0
- package/dist/blocks/audit-log-01/audit-log-01.js +211 -0
- package/dist/blocks/audit-log-01/index.d.ts +3 -0
- package/dist/blocks/audit-log-01/index.d.ts.map +1 -0
- package/dist/blocks/audit-log-01/index.js +1 -0
- package/dist/blocks/auth-form-01/auth-form.d.ts +40 -1
- package/dist/blocks/auth-form-01/auth-form.d.ts.map +1 -1
- package/dist/blocks/auth-form-01/auth-form.js +26 -3
- package/dist/blocks/awards-01/awards.d.ts +156 -0
- package/dist/blocks/awards-01/awards.d.ts.map +1 -0
- package/dist/blocks/awards-01/awards.js +102 -0
- package/dist/blocks/awards-01/index.d.ts +3 -0
- package/dist/blocks/awards-01/index.d.ts.map +1 -0
- package/dist/blocks/awards-01/index.js +1 -0
- package/dist/blocks/backdrop-01/backdrop.d.ts +268 -0
- package/dist/blocks/backdrop-01/backdrop.d.ts.map +1 -0
- package/dist/blocks/backdrop-01/backdrop.js +170 -0
- package/dist/blocks/backdrop-01/index.d.ts +3 -0
- package/dist/blocks/backdrop-01/index.d.ts.map +1 -0
- package/dist/blocks/backdrop-01/index.js +1 -0
- package/dist/blocks/bento-01/bento-01.d.ts +136 -0
- package/dist/blocks/bento-01/bento-01.d.ts.map +1 -0
- package/dist/blocks/bento-01/bento-01.js +97 -0
- package/dist/blocks/bento-01/index.d.ts +3 -0
- package/dist/blocks/bento-01/index.d.ts.map +1 -0
- package/dist/blocks/bento-01/index.js +1 -0
- package/dist/blocks/billing-source-01/billing-source-01.d.ts +379 -0
- package/dist/blocks/billing-source-01/billing-source-01.d.ts.map +1 -0
- package/dist/blocks/billing-source-01/billing-source-01.js +222 -0
- package/dist/blocks/billing-source-01/index.d.ts +3 -0
- package/dist/blocks/billing-source-01/index.d.ts.map +1 -0
- package/dist/blocks/billing-source-01/index.js +1 -0
- package/dist/blocks/bundle-01/bundle.d.ts +387 -0
- package/dist/blocks/bundle-01/bundle.d.ts.map +1 -0
- package/dist/blocks/bundle-01/bundle.js +153 -0
- package/dist/blocks/bundle-01/index.d.ts +3 -0
- package/dist/blocks/bundle-01/index.d.ts.map +1 -0
- package/dist/blocks/bundle-01/index.js +1 -0
- package/dist/blocks/calendar-01/calendar.d.ts +251 -0
- package/dist/blocks/calendar-01/calendar.d.ts.map +1 -0
- package/dist/blocks/calendar-01/calendar.js +191 -0
- package/dist/blocks/calendar-01/index.d.ts +3 -0
- package/dist/blocks/calendar-01/index.d.ts.map +1 -0
- package/dist/blocks/calendar-01/index.js +1 -0
- package/dist/blocks/capacity-01/capacity.d.ts +363 -0
- package/dist/blocks/capacity-01/capacity.d.ts.map +1 -0
- package/dist/blocks/capacity-01/capacity.js +208 -0
- package/dist/blocks/capacity-01/index.d.ts +3 -0
- package/dist/blocks/capacity-01/index.d.ts.map +1 -0
- package/dist/blocks/capacity-01/index.js +1 -0
- package/dist/blocks/careers-01/careers.d.ts +186 -0
- package/dist/blocks/careers-01/careers.d.ts.map +1 -0
- package/dist/blocks/careers-01/careers.js +83 -0
- package/dist/blocks/careers-01/index.d.ts +3 -0
- package/dist/blocks/careers-01/index.d.ts.map +1 -0
- package/dist/blocks/careers-01/index.js +1 -0
- package/dist/blocks/case-studies-01/case-studies.d.ts +192 -0
- package/dist/blocks/case-studies-01/case-studies.d.ts.map +1 -0
- package/dist/blocks/case-studies-01/case-studies.js +97 -0
- package/dist/blocks/case-studies-01/index.d.ts +3 -0
- package/dist/blocks/case-studies-01/index.d.ts.map +1 -0
- package/dist/blocks/case-studies-01/index.js +1 -0
- package/dist/blocks/case-study-01/case-study.d.ts +214 -0
- package/dist/blocks/case-study-01/case-study.d.ts.map +1 -0
- package/dist/blocks/case-study-01/case-study.js +79 -0
- package/dist/blocks/case-study-01/index.d.ts +3 -0
- package/dist/blocks/case-study-01/index.d.ts.map +1 -0
- package/dist/blocks/case-study-01/index.js +1 -0
- package/dist/blocks/changelog-01/changelog.d.ts +200 -0
- package/dist/blocks/changelog-01/changelog.d.ts.map +1 -0
- package/dist/blocks/changelog-01/changelog.js +155 -0
- package/dist/blocks/changelog-01/index.d.ts +3 -0
- package/dist/blocks/changelog-01/index.d.ts.map +1 -0
- package/dist/blocks/changelog-01/index.js +1 -0
- package/dist/blocks/chart-card-01/chart-card-01.d.ts +149 -0
- package/dist/blocks/chart-card-01/chart-card-01.d.ts.map +1 -0
- package/dist/blocks/chart-card-01/chart-card-01.js +81 -0
- package/dist/blocks/chart-card-01/index.d.ts +3 -0
- package/dist/blocks/chart-card-01/index.d.ts.map +1 -0
- package/dist/blocks/chart-card-01/index.js +1 -0
- package/dist/blocks/chart-group-01/chart-group-01.d.ts +138 -0
- package/dist/blocks/chart-group-01/chart-group-01.d.ts.map +1 -0
- package/dist/blocks/chart-group-01/chart-group-01.js +74 -0
- package/dist/blocks/chart-group-01/index.d.ts +3 -0
- package/dist/blocks/chart-group-01/index.d.ts.map +1 -0
- package/dist/blocks/chart-group-01/index.js +1 -0
- package/dist/blocks/code-sample-01/code-sample.d.ts +193 -0
- package/dist/blocks/code-sample-01/code-sample.d.ts.map +1 -0
- package/dist/blocks/code-sample-01/code-sample.js +104 -0
- package/dist/blocks/code-sample-01/index.d.ts +3 -0
- package/dist/blocks/code-sample-01/index.d.ts.map +1 -0
- package/dist/blocks/code-sample-01/index.js +1 -0
- package/dist/blocks/community-01/community.d.ts +183 -0
- package/dist/blocks/community-01/community.d.ts.map +1 -0
- package/dist/blocks/community-01/community.js +102 -0
- package/dist/blocks/community-01/index.d.ts +3 -0
- package/dist/blocks/community-01/index.d.ts.map +1 -0
- package/dist/blocks/community-01/index.js +1 -0
- package/dist/blocks/compare-01/compare.d.ts +184 -0
- package/dist/blocks/compare-01/compare.d.ts.map +1 -0
- package/dist/blocks/compare-01/compare.js +106 -0
- package/dist/blocks/compare-01/index.d.ts +3 -0
- package/dist/blocks/compare-01/index.d.ts.map +1 -0
- package/dist/blocks/compare-01/index.js +1 -0
- package/dist/blocks/compliance-01/compliance.d.ts +249 -0
- package/dist/blocks/compliance-01/compliance.d.ts.map +1 -0
- package/dist/blocks/compliance-01/compliance.js +130 -0
- package/dist/blocks/compliance-01/index.d.ts +3 -0
- package/dist/blocks/compliance-01/index.d.ts.map +1 -0
- package/dist/blocks/compliance-01/index.js +1 -0
- package/dist/blocks/consent-01/consent.d.ts +211 -0
- package/dist/blocks/consent-01/consent.d.ts.map +1 -0
- package/dist/blocks/consent-01/consent.js +101 -0
- package/dist/blocks/consent-01/index.d.ts +3 -0
- package/dist/blocks/consent-01/index.d.ts.map +1 -0
- package/dist/blocks/consent-01/index.js +1 -0
- package/dist/blocks/contact-01/contact.d.ts +319 -0
- package/dist/blocks/contact-01/contact.d.ts.map +1 -0
- package/dist/blocks/contact-01/contact.js +211 -0
- package/dist/blocks/contact-01/index.d.ts +3 -0
- package/dist/blocks/contact-01/index.d.ts.map +1 -0
- package/dist/blocks/contact-01/index.js +1 -0
- package/dist/blocks/content-grid-01/content-grid.d.ts +262 -0
- package/dist/blocks/content-grid-01/content-grid.d.ts.map +1 -0
- package/dist/blocks/content-grid-01/content-grid.js +155 -0
- package/dist/blocks/content-grid-01/index.d.ts +3 -0
- package/dist/blocks/content-grid-01/index.d.ts.map +1 -0
- package/dist/blocks/content-grid-01/index.js +1 -0
- package/dist/blocks/cta-01/cta.d.ts +7 -1
- package/dist/blocks/cta-01/cta.d.ts.map +1 -1
- package/dist/blocks/cta-01/cta.js +11 -2
- package/dist/blocks/dashboard-01/dashboard-01.d.ts +247 -0
- package/dist/blocks/dashboard-01/dashboard-01.d.ts.map +1 -0
- package/dist/blocks/dashboard-01/dashboard-01.js +141 -0
- package/dist/blocks/dashboard-01/index.d.ts +3 -0
- package/dist/blocks/dashboard-01/index.d.ts.map +1 -0
- package/dist/blocks/dashboard-01/index.js +1 -0
- package/dist/blocks/data-table-01/data-table.d.ts +12 -1
- package/dist/blocks/data-table-01/data-table.d.ts.map +1 -1
- package/dist/blocks/data-table-01/data-table.js +8 -5
- package/dist/blocks/delivery-01/delivery.d.ts +343 -0
- package/dist/blocks/delivery-01/delivery.d.ts.map +1 -0
- package/dist/blocks/delivery-01/delivery.js +212 -0
- package/dist/blocks/delivery-01/index.d.ts +3 -0
- package/dist/blocks/delivery-01/index.d.ts.map +1 -0
- package/dist/blocks/delivery-01/index.js +1 -0
- package/dist/blocks/directory-01/directory-01.d.ts +316 -0
- package/dist/blocks/directory-01/directory-01.d.ts.map +1 -0
- package/dist/blocks/directory-01/directory-01.js +252 -0
- package/dist/blocks/directory-01/index.d.ts +3 -0
- package/dist/blocks/directory-01/index.d.ts.map +1 -0
- package/dist/blocks/directory-01/index.js +1 -0
- package/dist/blocks/download-01/download.d.ts +261 -0
- package/dist/blocks/download-01/download.d.ts.map +1 -0
- package/dist/blocks/download-01/download.js +115 -0
- package/dist/blocks/download-01/index.d.ts +3 -0
- package/dist/blocks/download-01/index.d.ts.map +1 -0
- package/dist/blocks/download-01/index.js +1 -0
- package/dist/blocks/faq-01/faq.d.ts +128 -0
- package/dist/blocks/faq-01/faq.d.ts.map +1 -0
- package/dist/blocks/faq-01/faq.js +53 -0
- package/dist/blocks/faq-01/index.d.ts +3 -0
- package/dist/blocks/faq-01/index.d.ts.map +1 -0
- package/dist/blocks/faq-01/index.js +1 -0
- package/dist/blocks/feature-rows-01/feature-rows-01.d.ts +158 -0
- package/dist/blocks/feature-rows-01/feature-rows-01.d.ts.map +1 -0
- package/dist/blocks/feature-rows-01/feature-rows-01.js +81 -0
- package/dist/blocks/feature-rows-01/index.d.ts +3 -0
- package/dist/blocks/feature-rows-01/index.d.ts.map +1 -0
- package/dist/blocks/feature-rows-01/index.js +1 -0
- package/dist/blocks/feedback-01/feedback.d.ts +235 -0
- package/dist/blocks/feedback-01/feedback.d.ts.map +1 -0
- package/dist/blocks/feedback-01/feedback.js +113 -0
- package/dist/blocks/feedback-01/index.d.ts +3 -0
- package/dist/blocks/feedback-01/index.d.ts.map +1 -0
- package/dist/blocks/feedback-01/index.js +1 -0
- package/dist/blocks/field-map-01/field-map.d.ts +247 -0
- package/dist/blocks/field-map-01/field-map.d.ts.map +1 -0
- package/dist/blocks/field-map-01/field-map.js +183 -0
- package/dist/blocks/field-map-01/index.d.ts +3 -0
- package/dist/blocks/field-map-01/index.d.ts.map +1 -0
- package/dist/blocks/field-map-01/index.js +1 -0
- package/dist/blocks/forgot-password-01/forgot-password.d.ts +288 -0
- package/dist/blocks/forgot-password-01/forgot-password.d.ts.map +1 -0
- package/dist/blocks/forgot-password-01/forgot-password.js +190 -0
- package/dist/blocks/forgot-password-01/index.d.ts +3 -0
- package/dist/blocks/forgot-password-01/index.d.ts.map +1 -0
- package/dist/blocks/forgot-password-01/index.js +1 -0
- package/dist/blocks/gallery-01/gallery.d.ts +208 -0
- package/dist/blocks/gallery-01/gallery.d.ts.map +1 -0
- package/dist/blocks/gallery-01/gallery.js +174 -0
- package/dist/blocks/gallery-01/index.d.ts +3 -0
- package/dist/blocks/gallery-01/index.d.ts.map +1 -0
- package/dist/blocks/gallery-01/index.js +1 -0
- package/dist/blocks/gantt-01/gantt.d.ts +290 -0
- package/dist/blocks/gantt-01/gantt.d.ts.map +1 -0
- package/dist/blocks/gantt-01/gantt.js +224 -0
- package/dist/blocks/gantt-01/index.d.ts +3 -0
- package/dist/blocks/gantt-01/index.d.ts.map +1 -0
- package/dist/blocks/gantt-01/index.js +1 -0
- package/dist/blocks/handoff-01/handoff-01.d.ts +326 -0
- package/dist/blocks/handoff-01/handoff-01.d.ts.map +1 -0
- package/dist/blocks/handoff-01/handoff-01.js +180 -0
- package/dist/blocks/handoff-01/index.d.ts +3 -0
- package/dist/blocks/handoff-01/index.d.ts.map +1 -0
- package/dist/blocks/handoff-01/index.js +1 -0
- package/dist/blocks/help-01/help.d.ts +254 -0
- package/dist/blocks/help-01/help.d.ts.map +1 -0
- package/dist/blocks/help-01/help.js +188 -0
- package/dist/blocks/help-01/index.d.ts +3 -0
- package/dist/blocks/help-01/index.d.ts.map +1 -0
- package/dist/blocks/help-01/index.js +1 -0
- package/dist/blocks/hero-01/hero.d.ts +105 -34
- package/dist/blocks/hero-01/hero.d.ts.map +1 -1
- package/dist/blocks/hero-01/hero.js +23 -15
- package/dist/blocks/hero-01/index.d.ts +1 -1
- package/dist/blocks/hero-01/index.d.ts.map +1 -1
- package/dist/blocks/hero-02/hero-02.d.ts +244 -0
- package/dist/blocks/hero-02/hero-02.d.ts.map +1 -0
- package/dist/blocks/hero-02/hero-02.js +87 -0
- package/dist/blocks/hero-02/index.d.ts +3 -0
- package/dist/blocks/hero-02/index.d.ts.map +1 -0
- package/dist/blocks/hero-02/index.js +1 -0
- package/dist/blocks/hero-03/hero-03.d.ts +247 -0
- package/dist/blocks/hero-03/hero-03.d.ts.map +1 -0
- package/dist/blocks/hero-03/hero-03.js +93 -0
- package/dist/blocks/hero-03/index.d.ts +3 -0
- package/dist/blocks/hero-03/index.d.ts.map +1 -0
- package/dist/blocks/hero-03/index.js +1 -0
- package/dist/blocks/history-01/history-01.d.ts +414 -0
- package/dist/blocks/history-01/history-01.d.ts.map +1 -0
- package/dist/blocks/history-01/history-01.js +285 -0
- package/dist/blocks/history-01/index.d.ts +3 -0
- package/dist/blocks/history-01/index.d.ts.map +1 -0
- package/dist/blocks/history-01/index.js +1 -0
- package/dist/blocks/inbox-01/inbox.d.ts +349 -0
- package/dist/blocks/inbox-01/inbox.d.ts.map +1 -0
- package/dist/blocks/inbox-01/inbox.js +244 -0
- package/dist/blocks/inbox-01/index.d.ts +3 -0
- package/dist/blocks/inbox-01/index.d.ts.map +1 -0
- package/dist/blocks/inbox-01/index.js +1 -0
- package/dist/blocks/index.d.ts +203 -0
- package/dist/blocks/index.d.ts.map +1 -1
- package/dist/blocks/index.js +118 -0
- package/dist/blocks/industries-01/index.d.ts +3 -0
- package/dist/blocks/industries-01/index.d.ts.map +1 -0
- package/dist/blocks/industries-01/index.js +1 -0
- package/dist/blocks/industries-01/industries.d.ts +164 -0
- package/dist/blocks/industries-01/industries.d.ts.map +1 -0
- package/dist/blocks/industries-01/industries.js +96 -0
- package/dist/blocks/intake-01/index.d.ts +3 -0
- package/dist/blocks/intake-01/index.d.ts.map +1 -0
- package/dist/blocks/intake-01/index.js +1 -0
- package/dist/blocks/intake-01/intake-01.d.ts +305 -0
- package/dist/blocks/intake-01/intake-01.d.ts.map +1 -0
- package/dist/blocks/intake-01/intake-01.js +178 -0
- package/dist/blocks/integration-01/index.d.ts +3 -0
- package/dist/blocks/integration-01/index.d.ts.map +1 -0
- package/dist/blocks/integration-01/index.js +1 -0
- package/dist/blocks/integration-01/integration.d.ts +226 -0
- package/dist/blocks/integration-01/integration.d.ts.map +1 -0
- package/dist/blocks/integration-01/integration.js +170 -0
- package/dist/blocks/invite-user-01/index.d.ts +3 -0
- package/dist/blocks/invite-user-01/index.d.ts.map +1 -0
- package/dist/blocks/invite-user-01/index.js +1 -0
- package/dist/blocks/invite-user-01/invite-user.d.ts +317 -0
- package/dist/blocks/invite-user-01/invite-user.d.ts.map +1 -0
- package/dist/blocks/invite-user-01/invite-user.js +228 -0
- package/dist/blocks/issue-detail-01/index.d.ts +3 -0
- package/dist/blocks/issue-detail-01/index.d.ts.map +1 -0
- package/dist/blocks/issue-detail-01/index.js +1 -0
- package/dist/blocks/issue-detail-01/issue-detail.d.ts +355 -0
- package/dist/blocks/issue-detail-01/issue-detail.d.ts.map +1 -0
- package/dist/blocks/issue-detail-01/issue-detail.js +187 -0
- package/dist/blocks/issue-list-01/index.d.ts +3 -0
- package/dist/blocks/issue-list-01/index.d.ts.map +1 -0
- package/dist/blocks/issue-list-01/index.js +1 -0
- package/dist/blocks/issue-list-01/issue-list.d.ts +298 -0
- package/dist/blocks/issue-list-01/issue-list.d.ts.map +1 -0
- package/dist/blocks/issue-list-01/issue-list.js +284 -0
- package/dist/blocks/kanban-01/index.d.ts +3 -0
- package/dist/blocks/kanban-01/index.d.ts.map +1 -0
- package/dist/blocks/kanban-01/index.js +1 -0
- package/dist/blocks/kanban-01/kanban.d.ts +278 -0
- package/dist/blocks/kanban-01/kanban.d.ts.map +1 -0
- package/dist/blocks/kanban-01/kanban.js +144 -0
- package/dist/blocks/leaderboard-01/index.d.ts +3 -0
- package/dist/blocks/leaderboard-01/index.d.ts.map +1 -0
- package/dist/blocks/leaderboard-01/index.js +1 -0
- package/dist/blocks/leaderboard-01/leaderboard.d.ts +250 -0
- package/dist/blocks/leaderboard-01/leaderboard.d.ts.map +1 -0
- package/dist/blocks/leaderboard-01/leaderboard.js +121 -0
- package/dist/blocks/login-01/index.d.ts +3 -0
- package/dist/blocks/login-01/index.d.ts.map +1 -0
- package/dist/blocks/login-01/index.js +1 -0
- package/dist/blocks/login-01/login-01.d.ts +356 -0
- package/dist/blocks/login-01/login-01.d.ts.map +1 -0
- package/dist/blocks/login-01/login-01.js +249 -0
- package/dist/blocks/logo-cloud-01/index.d.ts +3 -0
- package/dist/blocks/logo-cloud-01/index.d.ts.map +1 -0
- package/dist/blocks/logo-cloud-01/index.js +1 -0
- package/dist/blocks/logo-cloud-01/logo-cloud.d.ts +181 -0
- package/dist/blocks/logo-cloud-01/logo-cloud.d.ts.map +1 -0
- package/dist/blocks/logo-cloud-01/logo-cloud.js +118 -0
- package/dist/blocks/magic-link-01/index.d.ts +3 -0
- package/dist/blocks/magic-link-01/index.d.ts.map +1 -0
- package/dist/blocks/magic-link-01/index.js +1 -0
- package/dist/blocks/magic-link-01/magic-link-01.d.ts +367 -0
- package/dist/blocks/magic-link-01/magic-link-01.d.ts.map +1 -0
- package/dist/blocks/magic-link-01/magic-link-01.js +233 -0
- package/dist/blocks/member-list-01/index.d.ts +3 -0
- package/dist/blocks/member-list-01/index.d.ts.map +1 -0
- package/dist/blocks/member-list-01/index.js +1 -0
- package/dist/blocks/member-list-01/member-list.d.ts +192 -0
- package/dist/blocks/member-list-01/member-list.d.ts.map +1 -0
- package/dist/blocks/member-list-01/member-list.js +142 -0
- package/dist/blocks/milestone-timeline-01/index.d.ts +3 -0
- package/dist/blocks/milestone-timeline-01/index.d.ts.map +1 -0
- package/dist/blocks/milestone-timeline-01/index.js +1 -0
- package/dist/blocks/milestone-timeline-01/milestone-timeline.d.ts +217 -0
- package/dist/blocks/milestone-timeline-01/milestone-timeline.d.ts.map +1 -0
- package/dist/blocks/milestone-timeline-01/milestone-timeline.js +173 -0
- package/dist/blocks/newsletter-01/index.d.ts +3 -0
- package/dist/blocks/newsletter-01/index.d.ts.map +1 -0
- package/dist/blocks/newsletter-01/index.js +1 -0
- package/dist/blocks/newsletter-01/newsletter.d.ts +216 -0
- package/dist/blocks/newsletter-01/newsletter.d.ts.map +1 -0
- package/dist/blocks/newsletter-01/newsletter.js +102 -0
- package/dist/blocks/notification-center-01/index.d.ts +3 -0
- package/dist/blocks/notification-center-01/index.d.ts.map +1 -0
- package/dist/blocks/notification-center-01/index.js +1 -0
- package/dist/blocks/notification-center-01/notification-center-01.d.ts +341 -0
- package/dist/blocks/notification-center-01/notification-center-01.d.ts.map +1 -0
- package/dist/blocks/notification-center-01/notification-center-01.js +203 -0
- package/dist/blocks/offer-01/index.d.ts +3 -0
- package/dist/blocks/offer-01/index.d.ts.map +1 -0
- package/dist/blocks/offer-01/index.js +1 -0
- package/dist/blocks/offer-01/offer.d.ts +139 -0
- package/dist/blocks/offer-01/offer.d.ts.map +1 -0
- package/dist/blocks/offer-01/offer.js +81 -0
- package/dist/blocks/offering-01/index.d.ts +3 -0
- package/dist/blocks/offering-01/index.d.ts.map +1 -0
- package/dist/blocks/offering-01/index.js +1 -0
- package/dist/blocks/offering-01/offering.d.ts +245 -0
- package/dist/blocks/offering-01/offering.d.ts.map +1 -0
- package/dist/blocks/offering-01/offering.js +144 -0
- package/dist/blocks/offering-categories-01/index.d.ts +3 -0
- package/dist/blocks/offering-categories-01/index.d.ts.map +1 -0
- package/dist/blocks/offering-categories-01/index.js +1 -0
- package/dist/blocks/offering-categories-01/offering-categories.d.ts +248 -0
- package/dist/blocks/offering-categories-01/offering-categories.d.ts.map +1 -0
- package/dist/blocks/offering-categories-01/offering-categories.js +153 -0
- package/dist/blocks/offering-list-01/index.d.ts +3 -0
- package/dist/blocks/offering-list-01/index.d.ts.map +1 -0
- package/dist/blocks/offering-list-01/index.js +1 -0
- package/dist/blocks/offering-list-01/offering-list.d.ts +362 -0
- package/dist/blocks/offering-list-01/offering-list.d.ts.map +1 -0
- package/dist/blocks/offering-list-01/offering-list.js +366 -0
- package/dist/blocks/onboarding-01/index.d.ts +3 -0
- package/dist/blocks/onboarding-01/index.d.ts.map +1 -0
- package/dist/blocks/onboarding-01/index.js +1 -0
- package/dist/blocks/onboarding-01/onboarding.d.ts +199 -0
- package/dist/blocks/onboarding-01/onboarding.d.ts.map +1 -0
- package/dist/blocks/onboarding-01/onboarding.js +182 -0
- package/dist/blocks/ops-checklist-01/index.d.ts +3 -0
- package/dist/blocks/ops-checklist-01/index.d.ts.map +1 -0
- package/dist/blocks/ops-checklist-01/index.js +1 -0
- package/dist/blocks/ops-checklist-01/ops-checklist-01.d.ts +308 -0
- package/dist/blocks/ops-checklist-01/ops-checklist-01.d.ts.map +1 -0
- package/dist/blocks/ops-checklist-01/ops-checklist-01.js +165 -0
- package/dist/blocks/page-header-01/index.d.ts +1 -1
- package/dist/blocks/page-header-01/index.d.ts.map +1 -1
- package/dist/blocks/page-header-01/page-header.d.ts +124 -11
- package/dist/blocks/page-header-01/page-header.d.ts.map +1 -1
- package/dist/blocks/page-header-01/page-header.js +25 -9
- package/dist/blocks/passkey-01/index.d.ts +3 -0
- package/dist/blocks/passkey-01/index.d.ts.map +1 -0
- package/dist/blocks/passkey-01/index.js +1 -0
- package/dist/blocks/passkey-01/passkey-01.d.ts +334 -0
- package/dist/blocks/passkey-01/passkey-01.d.ts.map +1 -0
- package/dist/blocks/passkey-01/passkey-01.js +192 -0
- package/dist/blocks/permission-matrix-01/index.d.ts +3 -0
- package/dist/blocks/permission-matrix-01/index.d.ts.map +1 -0
- package/dist/blocks/permission-matrix-01/index.js +1 -0
- package/dist/blocks/permission-matrix-01/permission-matrix.d.ts +282 -0
- package/dist/blocks/permission-matrix-01/permission-matrix.d.ts.map +1 -0
- package/dist/blocks/permission-matrix-01/permission-matrix.js +173 -0
- package/dist/blocks/pricing-01/index.d.ts +1 -0
- package/dist/blocks/pricing-01/index.d.ts.map +1 -1
- package/dist/blocks/pricing-01/pricing.d.ts +118 -1
- package/dist/blocks/pricing-01/pricing.d.ts.map +1 -1
- package/dist/blocks/pricing-01/pricing.js +9 -2
- package/dist/blocks/pricing-compare-01/index.d.ts +3 -0
- package/dist/blocks/pricing-compare-01/index.d.ts.map +1 -0
- package/dist/blocks/pricing-compare-01/index.js +1 -0
- package/dist/blocks/pricing-compare-01/pricing-compare.d.ts +277 -0
- package/dist/blocks/pricing-compare-01/pricing-compare.d.ts.map +1 -0
- package/dist/blocks/pricing-compare-01/pricing-compare.js +126 -0
- package/dist/blocks/project-01/index.d.ts +3 -0
- package/dist/blocks/project-01/index.d.ts.map +1 -0
- package/dist/blocks/project-01/index.js +1 -0
- package/dist/blocks/project-01/project.d.ts +323 -0
- package/dist/blocks/project-01/project.d.ts.map +1 -0
- package/dist/blocks/project-01/project.js +247 -0
- package/dist/blocks/project-dashboard-01/index.d.ts +3 -0
- package/dist/blocks/project-dashboard-01/index.d.ts.map +1 -0
- package/dist/blocks/project-dashboard-01/index.js +1 -0
- package/dist/blocks/project-dashboard-01/project-dashboard.d.ts +200 -0
- package/dist/blocks/project-dashboard-01/project-dashboard.d.ts.map +1 -0
- package/dist/blocks/project-dashboard-01/project-dashboard.js +124 -0
- package/dist/blocks/project-list-01/index.d.ts +3 -0
- package/dist/blocks/project-list-01/index.d.ts.map +1 -0
- package/dist/blocks/project-list-01/index.js +1 -0
- package/dist/blocks/project-list-01/project-list.d.ts +301 -0
- package/dist/blocks/project-list-01/project-list.d.ts.map +1 -0
- package/dist/blocks/project-list-01/project-list.js +305 -0
- package/dist/blocks/provisioning-01/index.d.ts +3 -0
- package/dist/blocks/provisioning-01/index.d.ts.map +1 -0
- package/dist/blocks/provisioning-01/index.js +1 -0
- package/dist/blocks/provisioning-01/provisioning.d.ts +357 -0
- package/dist/blocks/provisioning-01/provisioning.d.ts.map +1 -0
- package/dist/blocks/provisioning-01/provisioning.js +230 -0
- package/dist/blocks/quick-view-01/index.d.ts +3 -0
- package/dist/blocks/quick-view-01/index.d.ts.map +1 -0
- package/dist/blocks/quick-view-01/index.js +1 -0
- package/dist/blocks/quick-view-01/quick-view.d.ts +215 -0
- package/dist/blocks/quick-view-01/quick-view.d.ts.map +1 -0
- package/dist/blocks/quick-view-01/quick-view.js +136 -0
- package/dist/blocks/rate-card-01/index.d.ts +3 -0
- package/dist/blocks/rate-card-01/index.d.ts.map +1 -0
- package/dist/blocks/rate-card-01/index.js +1 -0
- package/dist/blocks/rate-card-01/rate-card.d.ts +184 -0
- package/dist/blocks/rate-card-01/rate-card.d.ts.map +1 -0
- package/dist/blocks/rate-card-01/rate-card.js +79 -0
- package/dist/blocks/reset-password-01/index.d.ts +3 -0
- package/dist/blocks/reset-password-01/index.d.ts.map +1 -0
- package/dist/blocks/reset-password-01/index.js +1 -0
- package/dist/blocks/reset-password-01/reset-password.d.ts +276 -0
- package/dist/blocks/reset-password-01/reset-password.d.ts.map +1 -0
- package/dist/blocks/reset-password-01/reset-password.js +175 -0
- package/dist/blocks/resource-list-01/index.d.ts +3 -0
- package/dist/blocks/resource-list-01/index.d.ts.map +1 -0
- package/dist/blocks/resource-list-01/index.js +1 -0
- package/dist/blocks/resource-list-01/resource-list.d.ts +237 -0
- package/dist/blocks/resource-list-01/resource-list.d.ts.map +1 -0
- package/dist/blocks/resource-list-01/resource-list.js +154 -0
- package/dist/blocks/retention-01/index.d.ts +3 -0
- package/dist/blocks/retention-01/index.d.ts.map +1 -0
- package/dist/blocks/retention-01/index.js +1 -0
- package/dist/blocks/retention-01/retention.d.ts +255 -0
- package/dist/blocks/retention-01/retention.d.ts.map +1 -0
- package/dist/blocks/retention-01/retention.js +145 -0
- package/dist/blocks/run-console-01/run-console.d.ts +14 -1
- package/dist/blocks/run-console-01/run-console.d.ts.map +1 -1
- package/dist/blocks/run-console-01/run-console.js +3 -2
- package/dist/blocks/services-01/index.d.ts +3 -0
- package/dist/blocks/services-01/index.d.ts.map +1 -0
- package/dist/blocks/services-01/index.js +1 -0
- package/dist/blocks/services-01/services.d.ts +159 -0
- package/dist/blocks/services-01/services.d.ts.map +1 -0
- package/dist/blocks/services-01/services.js +81 -0
- package/dist/blocks/settings-integrations-01/index.d.ts +3 -0
- package/dist/blocks/settings-integrations-01/index.d.ts.map +1 -0
- package/dist/blocks/settings-integrations-01/index.js +1 -0
- package/dist/blocks/settings-integrations-01/settings-integrations.d.ts +246 -0
- package/dist/blocks/settings-integrations-01/settings-integrations.d.ts.map +1 -0
- package/dist/blocks/settings-integrations-01/settings-integrations.js +213 -0
- package/dist/blocks/settings-members-01/index.d.ts +3 -0
- package/dist/blocks/settings-members-01/index.d.ts.map +1 -0
- package/dist/blocks/settings-members-01/index.js +1 -0
- package/dist/blocks/settings-members-01/settings-members.d.ts +396 -0
- package/dist/blocks/settings-members-01/settings-members.d.ts.map +1 -0
- package/dist/blocks/settings-members-01/settings-members.js +255 -0
- package/dist/blocks/settings-notifications-01/index.d.ts +3 -0
- package/dist/blocks/settings-notifications-01/index.d.ts.map +1 -0
- package/dist/blocks/settings-notifications-01/index.js +1 -0
- package/dist/blocks/settings-notifications-01/settings-notifications.d.ts +270 -0
- package/dist/blocks/settings-notifications-01/settings-notifications.d.ts.map +1 -0
- package/dist/blocks/settings-notifications-01/settings-notifications.js +202 -0
- package/dist/blocks/settings-security-01/index.d.ts +3 -0
- package/dist/blocks/settings-security-01/index.d.ts.map +1 -0
- package/dist/blocks/settings-security-01/index.js +1 -0
- package/dist/blocks/settings-security-01/settings-security.d.ts +439 -0
- package/dist/blocks/settings-security-01/settings-security.d.ts.map +1 -0
- package/dist/blocks/settings-security-01/settings-security.js +244 -0
- package/dist/blocks/shortlist-01/index.d.ts +3 -0
- package/dist/blocks/shortlist-01/index.d.ts.map +1 -0
- package/dist/blocks/shortlist-01/index.js +1 -0
- package/dist/blocks/shortlist-01/shortlist-01.d.ts +337 -0
- package/dist/blocks/shortlist-01/shortlist-01.d.ts.map +1 -0
- package/dist/blocks/shortlist-01/shortlist-01.js +191 -0
- package/dist/blocks/showcase-01/index.d.ts +3 -0
- package/dist/blocks/showcase-01/index.d.ts.map +1 -0
- package/dist/blocks/showcase-01/index.js +1 -0
- package/dist/blocks/showcase-01/showcase-01.d.ts +238 -0
- package/dist/blocks/showcase-01/showcase-01.d.ts.map +1 -0
- package/dist/blocks/showcase-01/showcase-01.js +84 -0
- package/dist/blocks/signup-01/index.d.ts +3 -0
- package/dist/blocks/signup-01/index.d.ts.map +1 -0
- package/dist/blocks/signup-01/index.js +1 -0
- package/dist/blocks/signup-01/signup-01.d.ts +405 -0
- package/dist/blocks/signup-01/signup-01.d.ts.map +1 -0
- package/dist/blocks/signup-01/signup-01.js +209 -0
- package/dist/blocks/site-footer/site-footer.d.ts +18 -1
- package/dist/blocks/site-footer/site-footer.d.ts.map +1 -1
- package/dist/blocks/site-footer/site-footer.js +8 -2
- package/dist/blocks/site-header/site-header.js +1 -1
- package/dist/blocks/site-navbar/site-navbar.d.ts +37 -3
- package/dist/blocks/site-navbar/site-navbar.d.ts.map +1 -1
- package/dist/blocks/site-navbar/site-navbar.js +33 -4
- package/dist/blocks/spec-table-01/index.d.ts +3 -0
- package/dist/blocks/spec-table-01/index.d.ts.map +1 -0
- package/dist/blocks/spec-table-01/index.js +1 -0
- package/dist/blocks/spec-table-01/spec-table.d.ts +293 -0
- package/dist/blocks/spec-table-01/spec-table.d.ts.map +1 -0
- package/dist/blocks/spec-table-01/spec-table.js +217 -0
- package/dist/blocks/story-01/index.d.ts +3 -0
- package/dist/blocks/story-01/index.d.ts.map +1 -0
- package/dist/blocks/story-01/index.js +1 -0
- package/dist/blocks/story-01/story.d.ts +153 -0
- package/dist/blocks/story-01/story.d.ts.map +1 -0
- package/dist/blocks/story-01/story.js +103 -0
- package/dist/blocks/summary-01/index.d.ts +3 -0
- package/dist/blocks/summary-01/index.d.ts.map +1 -0
- package/dist/blocks/summary-01/index.js +1 -0
- package/dist/blocks/summary-01/summary.d.ts +300 -0
- package/dist/blocks/summary-01/summary.d.ts.map +1 -0
- package/dist/blocks/summary-01/summary.js +174 -0
- package/dist/blocks/team-01/index.d.ts +3 -0
- package/dist/blocks/team-01/index.d.ts.map +1 -0
- package/dist/blocks/team-01/index.js +1 -0
- package/dist/blocks/team-01/team.d.ts +176 -0
- package/dist/blocks/team-01/team.d.ts.map +1 -0
- package/dist/blocks/team-01/team.js +117 -0
- package/dist/blocks/testimonial-01/index.d.ts +3 -0
- package/dist/blocks/testimonial-01/index.d.ts.map +1 -0
- package/dist/blocks/testimonial-01/index.js +1 -0
- package/dist/blocks/testimonial-01/testimonial.d.ts +173 -0
- package/dist/blocks/testimonial-01/testimonial.d.ts.map +1 -0
- package/dist/blocks/testimonial-01/testimonial.js +87 -0
- package/dist/blocks/todo-01/index.d.ts +3 -0
- package/dist/blocks/todo-01/index.d.ts.map +1 -0
- package/dist/blocks/todo-01/index.js +1 -0
- package/dist/blocks/todo-01/todo.d.ts +286 -0
- package/dist/blocks/todo-01/todo.d.ts.map +1 -0
- package/dist/blocks/todo-01/todo.js +149 -0
- package/dist/blocks/trend-01/index.d.ts +3 -0
- package/dist/blocks/trend-01/index.d.ts.map +1 -0
- package/dist/blocks/trend-01/index.js +1 -0
- package/dist/blocks/trend-01/trend.d.ts +184 -0
- package/dist/blocks/trend-01/trend.d.ts.map +1 -0
- package/dist/blocks/trend-01/trend.js +99 -0
- package/dist/blocks/trust-strip-01/index.d.ts +3 -0
- package/dist/blocks/trust-strip-01/index.d.ts.map +1 -0
- package/dist/blocks/trust-strip-01/index.js +1 -0
- package/dist/blocks/trust-strip-01/trust-strip-01.d.ts +139 -0
- package/dist/blocks/trust-strip-01/trust-strip-01.d.ts.map +1 -0
- package/dist/blocks/trust-strip-01/trust-strip-01.js +58 -0
- package/dist/blocks/two-factor-01/index.d.ts +3 -0
- package/dist/blocks/two-factor-01/index.d.ts.map +1 -0
- package/dist/blocks/two-factor-01/index.js +1 -0
- package/dist/blocks/two-factor-01/two-factor-01.d.ts +440 -0
- package/dist/blocks/two-factor-01/two-factor-01.d.ts.map +1 -0
- package/dist/blocks/two-factor-01/two-factor-01.js +273 -0
- package/dist/blocks/user-profile-01/index.d.ts +3 -0
- package/dist/blocks/user-profile-01/index.d.ts.map +1 -0
- package/dist/blocks/user-profile-01/index.js +1 -0
- package/dist/blocks/user-profile-01/user-profile-01.d.ts +258 -0
- package/dist/blocks/user-profile-01/user-profile-01.d.ts.map +1 -0
- package/dist/blocks/user-profile-01/user-profile-01.js +158 -0
- package/dist/blocks/verify-email-01/index.d.ts +3 -0
- package/dist/blocks/verify-email-01/index.d.ts.map +1 -0
- package/dist/blocks/verify-email-01/index.js +1 -0
- package/dist/blocks/verify-email-01/verify-email.d.ts +262 -0
- package/dist/blocks/verify-email-01/verify-email.d.ts.map +1 -0
- package/dist/blocks/verify-email-01/verify-email.js +190 -0
- package/dist/blocks/waitlist-01/index.d.ts +3 -0
- package/dist/blocks/waitlist-01/index.d.ts.map +1 -0
- package/dist/blocks/waitlist-01/index.js +1 -0
- package/dist/blocks/waitlist-01/waitlist.d.ts +254 -0
- package/dist/blocks/waitlist-01/waitlist.d.ts.map +1 -0
- package/dist/blocks/waitlist-01/waitlist.js +75 -0
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +1641 -1
- package/dist/components/index.d.ts +114 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +134 -0
- package/dist/components/ui/accordion.d.ts.map +1 -1
- package/dist/components/ui/accordion.js +9 -2
- package/dist/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/components/ui/alert-dialog.js +22 -4
- package/dist/components/ui/announcement.d.ts +169 -0
- package/dist/components/ui/announcement.d.ts.map +1 -0
- package/dist/components/ui/announcement.js +123 -0
- package/dist/components/ui/avatar-group.d.ts +176 -0
- package/dist/components/ui/avatar-group.d.ts.map +1 -0
- package/dist/components/ui/avatar-group.js +135 -0
- package/dist/components/ui/billing-source.d.ts +293 -0
- package/dist/components/ui/billing-source.d.ts.map +1 -0
- package/dist/components/ui/billing-source.js +136 -0
- package/dist/components/ui/button.d.ts +16 -1
- package/dist/components/ui/button.d.ts.map +1 -1
- package/dist/components/ui/button.js +17 -2
- package/dist/components/ui/calendar.d.ts +9 -0
- package/dist/components/ui/calendar.d.ts.map +1 -1
- package/dist/components/ui/calendar.js +30 -2
- package/dist/components/ui/carousel.d.ts +7 -0
- package/dist/components/ui/carousel.d.ts.map +1 -1
- package/dist/components/ui/carousel.js +58 -1
- package/dist/components/ui/chart.d.ts +334 -0
- package/dist/components/ui/chart.d.ts.map +1 -0
- package/dist/components/ui/chart.js +369 -0
- package/dist/components/ui/checkbox.d.ts +10 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -1
- package/dist/components/ui/checkbox.js +19 -1
- package/dist/components/ui/checklist.d.ts +262 -0
- package/dist/components/ui/checklist.d.ts.map +1 -0
- package/dist/components/ui/checklist.js +135 -0
- package/dist/components/ui/choice-card.d.ts +273 -0
- package/dist/components/ui/choice-card.d.ts.map +1 -0
- package/dist/components/ui/choice-card.js +138 -0
- package/dist/components/ui/code-block.d.ts +182 -0
- package/dist/components/ui/code-block.d.ts.map +1 -0
- package/dist/components/ui/code-block.js +108 -0
- package/dist/components/ui/cohort-grid.d.ts +210 -0
- package/dist/components/ui/cohort-grid.d.ts.map +1 -0
- package/dist/components/ui/cohort-grid.js +202 -0
- package/dist/components/ui/collapsible.d.ts +11 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -1
- package/dist/components/ui/collapsible.js +13 -2
- package/dist/components/ui/combobox.d.ts +4 -1
- package/dist/components/ui/combobox.d.ts.map +1 -1
- package/dist/components/ui/combobox.js +20 -4
- package/dist/components/ui/command-palette.d.ts +11 -0
- package/dist/components/ui/command-palette.d.ts.map +1 -1
- package/dist/components/ui/command-palette.js +49 -3
- package/dist/components/ui/contribution-graph.d.ts +156 -0
- package/dist/components/ui/contribution-graph.d.ts.map +1 -0
- package/dist/components/ui/contribution-graph.js +170 -0
- package/dist/components/ui/creatable-combobox.d.ts +153 -0
- package/dist/components/ui/creatable-combobox.d.ts.map +1 -0
- package/dist/components/ui/creatable-combobox.js +285 -0
- package/dist/components/ui/data-toolbar.d.ts +133 -0
- package/dist/components/ui/data-toolbar.d.ts.map +1 -0
- package/dist/components/ui/data-toolbar.js +67 -0
- package/dist/components/ui/date-picker.d.ts.map +1 -1
- package/dist/components/ui/date-picker.js +9 -1
- package/dist/components/ui/dialog.d.ts +31 -2
- package/dist/components/ui/dialog.d.ts.map +1 -1
- package/dist/components/ui/dialog.js +40 -6
- package/dist/components/ui/drawer.d.ts +270 -0
- package/dist/components/ui/drawer.d.ts.map +1 -0
- package/dist/components/ui/drawer.js +241 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/components/ui/dropdown-menu.js +6 -1
- package/dist/components/ui/dropzone.d.ts +147 -0
- package/dist/components/ui/dropzone.d.ts.map +1 -0
- package/dist/components/ui/dropzone.js +141 -0
- package/dist/components/ui/emoji-picker.d.ts +328 -0
- package/dist/components/ui/emoji-picker.d.ts.map +1 -0
- package/dist/components/ui/emoji-picker.js +278 -0
- package/dist/components/ui/file-upload.d.ts +152 -0
- package/dist/components/ui/file-upload.d.ts.map +1 -0
- package/dist/components/ui/file-upload.js +101 -0
- package/dist/components/ui/filter-panel.d.ts +164 -0
- package/dist/components/ui/filter-panel.d.ts.map +1 -0
- package/dist/components/ui/filter-panel.js +91 -0
- package/dist/components/ui/form-dialog.d.ts +257 -0
- package/dist/components/ui/form-dialog.d.ts.map +1 -0
- package/dist/components/ui/form-dialog.js +176 -0
- package/dist/components/ui/form-wizard.d.ts +251 -0
- package/dist/components/ui/form-wizard.d.ts.map +1 -0
- package/dist/components/ui/form-wizard.js +151 -0
- package/dist/components/ui/image-list-field.d.ts +232 -0
- package/dist/components/ui/image-list-field.d.ts.map +1 -0
- package/dist/components/ui/image-list-field.js +168 -0
- package/dist/components/ui/image-zoom.d.ts +164 -0
- package/dist/components/ui/image-zoom.d.ts.map +1 -0
- package/dist/components/ui/image-zoom.js +169 -0
- package/dist/components/ui/intensity-grid.d.ts +270 -0
- package/dist/components/ui/intensity-grid.d.ts.map +1 -0
- package/dist/components/ui/intensity-grid.js +211 -0
- package/dist/components/ui/lifecycle-button.d.ts +276 -0
- package/dist/components/ui/lifecycle-button.d.ts.map +1 -0
- package/dist/components/ui/lifecycle-button.js +144 -0
- package/dist/components/ui/lightbox.d.ts +165 -0
- package/dist/components/ui/lightbox.d.ts.map +1 -0
- package/dist/components/ui/lightbox.js +130 -0
- package/dist/components/ui/list-panel.d.ts +288 -0
- package/dist/components/ui/list-panel.d.ts.map +1 -0
- package/dist/components/ui/list-panel.js +139 -0
- package/dist/components/ui/mega-menu.d.ts +244 -0
- package/dist/components/ui/mega-menu.d.ts.map +1 -0
- package/dist/components/ui/mega-menu.js +97 -0
- package/dist/components/ui/menubar.d.ts +9 -0
- package/dist/components/ui/menubar.d.ts.map +1 -1
- package/dist/components/ui/menubar.js +10 -1
- package/dist/components/ui/metric.d.ts +123 -0
- package/dist/components/ui/metric.d.ts.map +1 -0
- package/dist/components/ui/metric.js +68 -0
- package/dist/components/ui/mini-calendar.d.ts +143 -0
- package/dist/components/ui/mini-calendar.d.ts.map +1 -0
- package/dist/components/ui/mini-calendar.js +261 -0
- package/dist/components/ui/mode-toggle.d.ts +102 -0
- package/dist/components/ui/mode-toggle.d.ts.map +1 -0
- package/dist/components/ui/mode-toggle.js +83 -0
- package/dist/components/ui/money-field.d.ts +200 -0
- package/dist/components/ui/money-field.d.ts.map +1 -0
- package/dist/components/ui/money-field.js +215 -0
- package/dist/components/ui/multi-combobox.d.ts +181 -0
- package/dist/components/ui/multi-combobox.d.ts.map +1 -0
- package/dist/components/ui/multi-combobox.js +297 -0
- package/dist/components/ui/native-select.d.ts.map +1 -1
- package/dist/components/ui/native-select.js +8 -1
- package/dist/components/ui/navigation-menu.d.ts +7 -0
- package/dist/components/ui/navigation-menu.d.ts.map +1 -1
- package/dist/components/ui/navigation-menu.js +8 -1
- package/dist/components/ui/nested-tabs.d.ts +188 -0
- package/dist/components/ui/nested-tabs.d.ts.map +1 -0
- package/dist/components/ui/nested-tabs.js +75 -0
- package/dist/components/ui/number-field.d.ts +40 -7
- package/dist/components/ui/number-field.d.ts.map +1 -1
- package/dist/components/ui/number-field.js +37 -7
- package/dist/components/ui/overflow-actions.d.ts +169 -0
- package/dist/components/ui/overflow-actions.d.ts.map +1 -0
- package/dist/components/ui/overflow-actions.js +266 -0
- package/dist/components/ui/pack-swatch.d.ts +177 -0
- package/dist/components/ui/pack-swatch.d.ts.map +1 -0
- package/dist/components/ui/pack-swatch.js +117 -0
- package/dist/components/ui/pack-switcher.d.ts +221 -0
- package/dist/components/ui/pack-switcher.d.ts.map +1 -0
- package/dist/components/ui/pack-switcher.js +94 -0
- package/dist/components/ui/pagination.d.ts +22 -0
- package/dist/components/ui/pagination.d.ts.map +1 -1
- package/dist/components/ui/pagination.js +23 -1
- package/dist/components/ui/password-field.d.ts +122 -0
- package/dist/components/ui/password-field.d.ts.map +1 -0
- package/dist/components/ui/password-field.js +69 -0
- package/dist/components/ui/pill.d.ts +172 -0
- package/dist/components/ui/pill.d.ts.map +1 -0
- package/dist/components/ui/pill.js +102 -0
- package/dist/components/ui/platform-modifier-key.d.ts +129 -0
- package/dist/components/ui/platform-modifier-key.d.ts.map +1 -0
- package/dist/components/ui/platform-modifier-key.js +125 -0
- package/dist/components/ui/popover.d.ts.map +1 -1
- package/dist/components/ui/popover.js +8 -1
- package/dist/components/ui/price.d.ts +144 -0
- package/dist/components/ui/price.d.ts.map +1 -0
- package/dist/components/ui/price.js +107 -0
- package/dist/components/ui/progress.d.ts +55 -1
- package/dist/components/ui/progress.d.ts.map +1 -1
- package/dist/components/ui/progress.js +110 -2
- package/dist/components/ui/prompt-composer.d.ts +302 -0
- package/dist/components/ui/prompt-composer.d.ts.map +1 -0
- package/dist/components/ui/prompt-composer.js +145 -0
- package/dist/components/ui/proportion-list.d.ts +188 -0
- package/dist/components/ui/proportion-list.d.ts.map +1 -0
- package/dist/components/ui/proportion-list.js +134 -0
- package/dist/components/ui/prose.d.ts +23 -0
- package/dist/components/ui/prose.d.ts.map +1 -1
- package/dist/components/ui/prose.js +30 -1
- package/dist/components/ui/radio-group.d.ts +7 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -1
- package/dist/components/ui/radio-group.js +8 -1
- package/dist/components/ui/range-field.d.ts +158 -0
- package/dist/components/ui/range-field.d.ts.map +1 -0
- package/dist/components/ui/range-field.js +208 -0
- package/dist/components/ui/relative-time.d.ts +116 -0
- package/dist/components/ui/relative-time.d.ts.map +1 -0
- package/dist/components/ui/relative-time.js +67 -0
- package/dist/components/ui/reorderable-list.d.ts +262 -0
- package/dist/components/ui/reorderable-list.d.ts.map +1 -0
- package/dist/components/ui/reorderable-list.js +325 -0
- package/dist/components/ui/repeatable-rows.d.ts +241 -0
- package/dist/components/ui/repeatable-rows.d.ts.map +1 -0
- package/dist/components/ui/repeatable-rows.js +221 -0
- package/dist/components/ui/repo-stars.d.ts +165 -0
- package/dist/components/ui/repo-stars.d.ts.map +1 -0
- package/dist/components/ui/repo-stars.js +92 -0
- package/dist/components/ui/resizable.d.ts +24 -0
- package/dist/components/ui/resizable.d.ts.map +1 -1
- package/dist/components/ui/resizable.js +96 -4
- package/dist/components/ui/search-dialog.d.ts +40 -5
- package/dist/components/ui/search-dialog.d.ts.map +1 -1
- package/dist/components/ui/search-dialog.js +94 -16
- package/dist/components/ui/search-field.d.ts +159 -0
- package/dist/components/ui/search-field.d.ts.map +1 -0
- package/dist/components/ui/search-field.js +98 -0
- package/dist/components/ui/section.d.ts +108 -1
- package/dist/components/ui/section.d.ts.map +1 -1
- package/dist/components/ui/section.js +109 -3
- package/dist/components/ui/select.d.ts.map +1 -1
- package/dist/components/ui/select.js +9 -1
- package/dist/components/ui/selection-toolbar.d.ts +166 -0
- package/dist/components/ui/selection-toolbar.d.ts.map +1 -0
- package/dist/components/ui/selection-toolbar.js +139 -0
- package/dist/components/ui/sidebar.d.ts +29 -0
- package/dist/components/ui/sidebar.d.ts.map +1 -1
- package/dist/components/ui/sidebar.js +35 -2
- package/dist/components/ui/signal-field.d.ts.map +1 -1
- package/dist/components/ui/signal-field.js +1 -1
- package/dist/components/ui/slider.d.ts +7 -0
- package/dist/components/ui/slider.d.ts.map +1 -1
- package/dist/components/ui/slider.js +32 -1
- package/dist/components/ui/sparkline.d.ts +117 -0
- package/dist/components/ui/sparkline.d.ts.map +1 -0
- package/dist/components/ui/sparkline.js +113 -0
- package/dist/components/ui/spinner.d.ts.map +1 -1
- package/dist/components/ui/spinner.js +13 -0
- package/dist/components/ui/split-button.d.ts +207 -0
- package/dist/components/ui/split-button.d.ts.map +1 -0
- package/dist/components/ui/split-button.js +75 -0
- package/dist/components/ui/stateful-table.d.ts +345 -0
- package/dist/components/ui/stateful-table.d.ts.map +1 -0
- package/dist/components/ui/stateful-table.js +169 -0
- package/dist/components/ui/status.d.ts +99 -0
- package/dist/components/ui/status.d.ts.map +1 -0
- package/dist/components/ui/status.js +63 -0
- package/dist/components/ui/stepper.d.ts +155 -0
- package/dist/components/ui/stepper.d.ts.map +1 -0
- package/dist/components/ui/stepper.js +83 -0
- package/dist/components/ui/steps.d.ts +141 -0
- package/dist/components/ui/steps.d.ts.map +1 -0
- package/dist/components/ui/steps.js +128 -0
- package/dist/components/ui/switch.d.ts +8 -0
- package/dist/components/ui/switch.d.ts.map +1 -1
- package/dist/components/ui/switch.js +12 -1
- package/dist/components/ui/tabs.d.ts +21 -2
- package/dist/components/ui/tabs.d.ts.map +1 -1
- package/dist/components/ui/tabs.js +23 -4
- package/dist/components/ui/tag-group.d.ts +154 -0
- package/dist/components/ui/tag-group.d.ts.map +1 -0
- package/dist/components/ui/tag-group.js +111 -0
- package/dist/components/ui/task-progress.d.ts +149 -0
- package/dist/components/ui/task-progress.d.ts.map +1 -0
- package/dist/components/ui/task-progress.js +110 -0
- package/dist/components/ui/text-format-toolbar.d.ts +211 -0
- package/dist/components/ui/text-format-toolbar.d.ts.map +1 -0
- package/dist/components/ui/text-format-toolbar.js +186 -0
- package/dist/components/ui/timeline.d.ts.map +1 -1
- package/dist/components/ui/timeline.js +10 -1
- package/dist/components/ui/toast.d.ts +32 -10
- package/dist/components/ui/toast.d.ts.map +1 -1
- package/dist/components/ui/toast.js +150 -47
- package/dist/components/ui/toggle-group.d.ts +14 -5
- package/dist/components/ui/toggle-group.d.ts.map +1 -1
- package/dist/components/ui/toggle-group.js +15 -1
- package/dist/components/ui/toggle.d.ts.map +1 -1
- package/dist/components/ui/toggle.js +9 -1
- package/dist/components/ui/tree.d.ts +8 -0
- package/dist/components/ui/tree.d.ts.map +1 -1
- package/dist/components/ui/tree.js +92 -13
- package/dist/components/ui/video-player.d.ts +236 -0
- package/dist/components/ui/video-player.d.ts.map +1 -0
- package/dist/components/ui/video-player.js +72 -0
- package/dist/fonts/inter-latin-400-italic.woff2 +0 -0
- package/dist/index.d.ts +112 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +72 -0
- package/dist/lib/utils.d.ts +29 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +35 -0
- package/dist/live/index.d.ts +10 -3
- package/dist/live/index.d.ts.map +1 -1
- package/dist/live/index.js +12 -3
- package/dist/live/run-stream-01/run-stream.js +4 -4
- package/dist/live/tool-ledger-01/index.d.ts +3 -0
- package/dist/live/tool-ledger-01/index.d.ts.map +1 -0
- package/dist/live/tool-ledger-01/index.js +1 -0
- package/dist/live/tool-ledger-01/tool-ledger.d.ts +348 -0
- package/dist/live/tool-ledger-01/tool-ledger.d.ts.map +1 -0
- package/dist/live/tool-ledger-01/tool-ledger.js +245 -0
- package/dist/pages/about-page/index.d.ts +306 -0
- package/dist/pages/about-page/index.d.ts.map +1 -0
- package/dist/pages/about-page/index.js +161 -0
- package/dist/pages/careers-page/index.d.ts +288 -0
- package/dist/pages/careers-page/index.d.ts.map +1 -0
- package/dist/pages/careers-page/index.js +182 -0
- package/dist/pages/changelog-page/index.d.ts +255 -0
- package/dist/pages/changelog-page/index.d.ts.map +1 -0
- package/dist/pages/changelog-page/index.js +86 -0
- package/dist/pages/contact-page/index.d.ts +261 -0
- package/dist/pages/contact-page/index.d.ts.map +1 -0
- package/dist/pages/contact-page/index.js +136 -0
- package/dist/pages/docs-shell/docs-shell.d.ts +8 -0
- package/dist/pages/docs-shell/docs-shell.d.ts.map +1 -1
- package/dist/pages/docs-shell/docs-shell.js +24 -7
- package/dist/pages/error-page/index.d.ts +188 -0
- package/dist/pages/error-page/index.d.ts.map +1 -0
- package/dist/pages/error-page/index.js +98 -0
- package/dist/pages/index.d.ts +10 -0
- package/dist/pages/index.d.ts.map +1 -1
- package/dist/pages/index.js +14 -0
- package/dist/pages/legal-page/index.d.ts +194 -0
- package/dist/pages/legal-page/index.d.ts.map +1 -0
- package/dist/pages/legal-page/index.js +99 -0
- package/dist/pages/onboarding-page/index.d.ts +199 -0
- package/dist/pages/onboarding-page/index.d.ts.map +1 -0
- package/dist/pages/onboarding-page/index.js +71 -0
- package/dist/pages/pricing-page/index.d.ts +286 -0
- package/dist/pages/pricing-page/index.d.ts.map +1 -0
- package/dist/pages/pricing-page/index.js +139 -0
- package/dist/pages/search-page/index.d.ts +305 -0
- package/dist/pages/search-page/index.d.ts.map +1 -0
- package/dist/pages/search-page/index.js +142 -0
- package/dist/pages/status-page/index.d.ts +366 -0
- package/dist/pages/status-page/index.d.ts.map +1 -0
- package/dist/pages/status-page/index.js +136 -0
- package/dist/styles.css +1003 -55
- package/package.json +9 -3
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ImagePlusIcon, XIcon } from 'lucide-react';
|
|
4
|
+
import { useEffect, useId, useRef } from 'react';
|
|
5
|
+
import { Button } from './button.js';
|
|
6
|
+
import { cn } from '../../lib/utils.js';
|
|
7
|
+
/**
|
|
8
|
+
* The remove control, drawn once and used by every row.
|
|
9
|
+
*
|
|
10
|
+
* The same treatment `FileUpload` gives its own remove control, for the same
|
|
11
|
+
* reason and with the same two decisions: the ink is the muted one because every
|
|
12
|
+
* row is the same surface and a control that changed colour with its row's state
|
|
13
|
+
* would be a second thing to read, and the target takes the 44px coarse-pointer
|
|
14
|
+
* floor so a list of photographs on a phone is a list of rows a thumb can hit.
|
|
15
|
+
* Duplicated as a constant rather than imported, because `FileUpload` does not
|
|
16
|
+
* export it and the alternative is for this Component to redraw the whole list
|
|
17
|
+
* to get at one class string.
|
|
18
|
+
*/
|
|
19
|
+
const REMOVE_CONTROL = 'text-muted-foreground hover:text-foreground inline-flex size-5 shrink-0 cursor-pointer items-center justify-center rounded-sm outline-none transition-colors duration-fast ease-out pointer-coarse:size-11 focus-visible:ring-ring focus-visible:ring-[3px]';
|
|
20
|
+
/**
|
|
21
|
+
* A row's own `data-slot`, read back through one root ref.
|
|
22
|
+
*
|
|
23
|
+
* The Component does not hold a ref per row. A ref array indexed by position has
|
|
24
|
+
* to be reconciled with the value on every commit, and the value is the caller's,
|
|
25
|
+
* so the reconciliation is a second source of truth about how many rows there
|
|
26
|
+
* are. One ref on the root and a query for the Component's own slots is the same
|
|
27
|
+
* answer with no bookkeeping, and the cost is stated rather than hidden: it reads
|
|
28
|
+
* markup rather than state, so it can only reach what this Component drew, which
|
|
29
|
+
* is exactly the set that has to move.
|
|
30
|
+
*/
|
|
31
|
+
const REMOVE_SLOT = '[data-slot="image-list-field-remove"]';
|
|
32
|
+
const ADD_SLOT = '[data-slot="image-list-field-add"]';
|
|
33
|
+
/**
|
|
34
|
+
* An ordered list of images with a cap, a per-item remove, and an add affordance
|
|
35
|
+
* that stops offering a seventh before the reader has chosen one.
|
|
36
|
+
*
|
|
37
|
+
* **It is not a `FileUpload`, and the difference is the cap.** `FileUpload` is the
|
|
38
|
+
* receipt half of an upload: it renders whatever array it is handed, with no
|
|
39
|
+
* ceiling and no way in, because a receipt names what was sent and a limit on
|
|
40
|
+
* what may be sent belongs to the control that sends. This is the other half. It
|
|
41
|
+
* has a ceiling, and the ceiling is a rule about the caller's product, so the
|
|
42
|
+
* Component that can enforce it is the one that owns the affordance. A caller who
|
|
43
|
+
* wants a capped list today writes a button, a length test and a disabled branch,
|
|
44
|
+
* and the branch is the interesting one, because a cap enforced anywhere else
|
|
45
|
+
* produces one of two lies: a value holding six images rendered as four, or six
|
|
46
|
+
* rows where the fifth and sixth are drawn in a way that says they are not
|
|
47
|
+
* welcome. Neither is a fact about the reader's field. The one thing that is a
|
|
48
|
+
* fact is the affordance, and this is the Component that draws it.
|
|
49
|
+
*
|
|
50
|
+
* **The cap is enforced at the affordance and nowhere else, and that placement is
|
|
51
|
+
* the design.** The moment the cap is reached, the add control is still there, in
|
|
52
|
+
* the tab order, and marked `aria-disabled`; it is not removed and it is not
|
|
53
|
+
* natively disabled, because a control that vanishes leaves a keyboard reader
|
|
54
|
+
* with a gap and no announcement, and a natively disabled one is gone from the tab
|
|
55
|
+
* order for the same reason. `Dropzone` states the whole argument and this
|
|
56
|
+
* Component inherits it. The reader learns the cap before they spend a pick, and
|
|
57
|
+
* the value is never silently truncated.
|
|
58
|
+
*
|
|
59
|
+
* **Removing a middle row moves focus, and that is the part no prop can express.**
|
|
60
|
+
* The naive `onRemove` hands the reader back to the document: the button they
|
|
61
|
+
* pressed is unmounted with the row, focus falls to `body`, and the next Tab
|
|
62
|
+
* starts from the top of the page, so a reader removing the third of six
|
|
63
|
+
* photographs is returned to the top of a form to find the two they still meant
|
|
64
|
+
* to change. The correct destination is a neighbour, and which neighbour is a
|
|
65
|
+
* fact about the index the caller does not know this Component holds: the row
|
|
66
|
+
* that moved up into the removed row's place, or the one above it when the
|
|
67
|
+
* removed row was last. Prism knows the index because it drew the row, so Prism
|
|
68
|
+
* moves the focus. When the last image goes, the focus lands on the add control,
|
|
69
|
+
* because that is the only operable thing left in the field and dropping a reader
|
|
70
|
+
* on nothing is the same defect one level up.
|
|
71
|
+
*
|
|
72
|
+
* **The row is a reference and the list is an `ol`, so position is in the
|
|
73
|
+
* accessibility tree.** The Component does not draw an ordinal and does not
|
|
74
|
+
* renumber anything by hand: an `ol` reports "3 of 6" for free, and the
|
|
75
|
+
* renumbering the reader needs after a removal is the list doing its job rather
|
|
76
|
+
* than a number this Component recomputed and could get wrong. The remove control
|
|
77
|
+
* is named by the caller's own sentence so the two do not have to agree.
|
|
78
|
+
*
|
|
79
|
+
* **It draws its own row and does not compose `FileUpload`, and the reason is the
|
|
80
|
+
* number of bytes.** `FileUpload`'s row is a name, a size in bytes, an optional
|
|
81
|
+
* transfer meter and an optional per-file error, and a field of references has
|
|
82
|
+
* none of those: a stored image has no size until the caller fetches it, and
|
|
83
|
+
* drawing a byte count for an image that has not been downloaded is a
|
|
84
|
+
* measurement of nothing. The two would also disagree about focus, because
|
|
85
|
+
* `FileUpload` owns its own remove control and there is no way to tell it where
|
|
86
|
+
* the reader's focus should land afterwards without reaching into its markup. The
|
|
87
|
+
* composition Prism does make is outward: `onAdd` is the seam where a `Dropzone`
|
|
88
|
+
* or a hidden `input` is composed, and `Button` draws the affordance rather than
|
|
89
|
+
* this Component re-deriving a control's metrics.
|
|
90
|
+
*
|
|
91
|
+
* **It is a client Component**, because the focus handoff and the cap's arrival
|
|
92
|
+
* both happen after the reader acts, and neither can be known at a server render.
|
|
93
|
+
* What that costs is the price of every client field: a form with images on it
|
|
94
|
+
* carries a hydration boundary, and a caller whose form is otherwise static pays
|
|
95
|
+
* for this one. The value is still the caller's, so a server Component may render
|
|
96
|
+
* the whole field once with the list already in place; what it may not do is offer
|
|
97
|
+
* a capped, removable list whose focus behaves, because that part is a client
|
|
98
|
+
* fact.
|
|
99
|
+
*
|
|
100
|
+
* **Two upstream spellings are this one job, and the catalogue holds one of
|
|
101
|
+
* them.** An image list and a gallery upload differ in whether the frame around
|
|
102
|
+
* the images is decorative, and in nothing else: both are an ordered list of
|
|
103
|
+
* image references, both cap, both remove. Publishing both would put two Items in
|
|
104
|
+
* the list whose only difference is a wrapper one of them drew, and a list
|
|
105
|
+
* nobody can search is what the naming law exists to prevent. A caller who wants
|
|
106
|
+
* a gallery frames the list themselves, which is layout and therefore already
|
|
107
|
+
* theirs.
|
|
108
|
+
*/
|
|
109
|
+
function ImageListField({ images, cap, addLabel, onAdd, onRemove, removeLabel, empty, capLabel, label, className, }) {
|
|
110
|
+
const generated = useId();
|
|
111
|
+
const labelId = `${generated}-label`;
|
|
112
|
+
const capId = `${generated}-cap`;
|
|
113
|
+
const rootRef = useRef(null);
|
|
114
|
+
// The index whose remove control should take focus after the caller's value
|
|
115
|
+
// settles, or `'add'` for the add control when the list empties. Armed before
|
|
116
|
+
// the callback runs and read after the next commit, because the row that is
|
|
117
|
+
// gone cannot be focused and the row that replaced it does not exist yet.
|
|
118
|
+
const pending = useRef(null);
|
|
119
|
+
const capped = images.length >= cap;
|
|
120
|
+
// The four absent values rather than a truthiness test, for the reason
|
|
121
|
+
// `LiveRegion` states: an empty string, a null from a state that has not
|
|
122
|
+
// resolved and a false from a condition are three routes to "nothing to say",
|
|
123
|
+
// and a list of three is a list the fourth route would miss. Zero is not on it
|
|
124
|
+
// because React renders `0`.
|
|
125
|
+
const showEmpty = images.length === 0 && empty !== '' && empty !== null && empty !== undefined && empty !== false;
|
|
126
|
+
useEffect(() => {
|
|
127
|
+
const target = pending.current;
|
|
128
|
+
if (target === null)
|
|
129
|
+
return;
|
|
130
|
+
pending.current = null;
|
|
131
|
+
const root = rootRef.current;
|
|
132
|
+
if (root === null)
|
|
133
|
+
return;
|
|
134
|
+
if (target === 'add') {
|
|
135
|
+
root.querySelector(ADD_SLOT)?.focus();
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const buttons = root.querySelectorAll(REMOVE_SLOT);
|
|
139
|
+
// The row that moved up into the removed row's place, or the one above it when
|
|
140
|
+
// the removed row was the last. `Math.min` against the new count is the whole
|
|
141
|
+
// rule, and the list being empty afterwards is the case that has no row left
|
|
142
|
+
// to land on.
|
|
143
|
+
const button = buttons.item(Math.min(target, buttons.length - 1));
|
|
144
|
+
if (button === null)
|
|
145
|
+
root.querySelector(ADD_SLOT)?.focus();
|
|
146
|
+
else
|
|
147
|
+
button.focus();
|
|
148
|
+
});
|
|
149
|
+
const removeAt = (index) => {
|
|
150
|
+
const image = images[index];
|
|
151
|
+
if (image === undefined)
|
|
152
|
+
return;
|
|
153
|
+
pending.current = index;
|
|
154
|
+
onRemove(image.id);
|
|
155
|
+
};
|
|
156
|
+
return (_jsxs("div", { ref: rootRef, "data-slot": "image-list-field", className: cn('flex w-full flex-col gap-2', className), children: [label === undefined ? null : (_jsx("span", { id: labelId, "data-slot": "image-list-field-label", className: "text-muted-foreground text-xs font-medium tracking-wide uppercase", children: label })), showEmpty ? (_jsx("p", { "data-slot": "image-list-field-empty", className: "text-muted-foreground text-sm", children: empty })) : (_jsx("ol", { "data-slot": "image-list-field-list", "aria-labelledby": label === undefined ? undefined : labelId, className: "flex w-full flex-col gap-2", children: images.map((image, index) => (_jsxs("li", { "data-slot": "image-list-field-item", className: "border-border bg-card flex items-center gap-3 rounded-md border px-3 py-2", children: [image.preview === undefined || image.preview === null || image.preview === false ? null : (
|
|
157
|
+
/*
|
|
158
|
+
* The caller's picture, clipped rather than sized. A preview that
|
|
159
|
+
* keeps its own aspect ratio changes the height of the row it sits
|
|
160
|
+
* in, and a list of rows whose heights depend on the pictures in
|
|
161
|
+
* them is a list a reader cannot scan. The caller's own `alt`
|
|
162
|
+
* stays reachable: the box is not `aria-hidden`, because an image
|
|
163
|
+
* carries information the row's name does not, and a caller whose
|
|
164
|
+
* preview really is decoration passes one that says so.
|
|
165
|
+
*/
|
|
166
|
+
_jsx("div", { "data-slot": "image-list-field-preview", className: "bg-muted flex size-12 shrink-0 items-center justify-center overflow-hidden rounded-md", children: image.preview })), _jsx("span", { "data-slot": "image-list-field-name", className: "min-w-0 flex-1 truncate text-sm font-medium", children: image.name }), _jsx("button", { type: "button", "data-slot": "image-list-field-remove", "aria-label": removeLabel(image.name), onClick: () => removeAt(index), className: REMOVE_CONTROL, children: _jsx(XIcon, { className: "size-4", "aria-hidden": "true" }) })] }, image.id))) })), _jsxs("div", { "data-slot": "image-list-field-actions", className: "flex items-center gap-2", children: [_jsx("span", { "data-slot": "image-list-field-add-control", className: cn('inline-flex', capped && 'opacity-50'), children: _jsxs(Button, { "data-slot": "image-list-field-add", type: "button", variant: "outline", size: "sm", "aria-disabled": capped || undefined, "aria-describedby": capped && capLabel !== undefined ? capId : undefined, onClick: capped ? () => undefined : onAdd, children: [_jsx(ImagePlusIcon, { "aria-hidden": "true" }), addLabel] }) }), capped && capLabel !== undefined ? (_jsx("span", { id: capId, "data-slot": "image-list-field-cap", className: "text-muted-foreground text-xs", children: capLabel })) : null] })] }));
|
|
167
|
+
}
|
|
168
|
+
export { ImageListField };
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { type ComponentProps, type ReactNode } from 'react';
|
|
2
|
+
/** The props the ImageZoom accepts. */
|
|
3
|
+
export interface ImageZoomProps extends Omit<ComponentProps<'div'>, 'children'> {
|
|
4
|
+
/** The image to magnify, at the resolution it should be magnified into. */
|
|
5
|
+
src: string;
|
|
6
|
+
/**
|
|
7
|
+
* The image's description, and required.
|
|
8
|
+
*
|
|
9
|
+
* Required for the reason it is required on `Lightbox`: an image with no
|
|
10
|
+
* description is a picture a reader can see more of and still not read, and
|
|
11
|
+
* this Component's whole purpose is that they see more of it. It is also the
|
|
12
|
+
* only thing that tells a screen reader what the thing they are magnifying is,
|
|
13
|
+
* because magnification changes no semantics at all: the element is still an
|
|
14
|
+
* `img` with this `alt` before, during and after.
|
|
15
|
+
*/
|
|
16
|
+
alt: string;
|
|
17
|
+
/**
|
|
18
|
+
* The accessible name of the group, and required.
|
|
19
|
+
*
|
|
20
|
+
* A page with two magnified images is a page where a reader cannot tell which
|
|
21
|
+
* set of controls they are in, and the controls are three buttons that all
|
|
22
|
+
* look alike. The name is the caller's word, and `role="group"` is the
|
|
23
|
+
* deliberate choice over a landmark: a group is announced where it is met and
|
|
24
|
+
* never appears in a landmark list, so a page with six figures does not put six
|
|
25
|
+
* new entries in a reader's list of regions to walk.
|
|
26
|
+
*/
|
|
27
|
+
label: string;
|
|
28
|
+
/**
|
|
29
|
+
* The words for the current magnification, and required.
|
|
30
|
+
*
|
|
31
|
+
* A function rather than a string, for the reason `Carousel`'s `position` is
|
|
32
|
+
* one: a magnification is a number and the sentence around it is different in
|
|
33
|
+
* every language, so the sentence is the caller's. It receives a percentage, not
|
|
34
|
+
* a multiplier, because a percentage is the form a reader reads and a
|
|
35
|
+
* multiplier is the form this Component stores.
|
|
36
|
+
*/
|
|
37
|
+
scale: (percent: number) => string;
|
|
38
|
+
/**
|
|
39
|
+
* The smallest magnification, as a multiple of the fitted size. @defaultValue 1
|
|
40
|
+
*
|
|
41
|
+
* A number and not a keyword, because the useful answers are a designer's: the
|
|
42
|
+
* fitted size, twice the fitted size, and a figure from the caller's own brief.
|
|
43
|
+
*/
|
|
44
|
+
minScale?: number;
|
|
45
|
+
/** The largest. @defaultValue 4 */
|
|
46
|
+
maxScale?: number;
|
|
47
|
+
/** How much one press moves it. @defaultValue 0.5 */
|
|
48
|
+
step?: number;
|
|
49
|
+
/**
|
|
50
|
+
* The accessible name of the control that magnifies, and required.
|
|
51
|
+
*
|
|
52
|
+
* Required rather than defaulted on the reasoning `Lightbox` states: a
|
|
53
|
+
* hardcoded accessible name is a sentence a consumer cannot localise, and the
|
|
54
|
+
* only fix is a fork of this package. The three names are the caller's because
|
|
55
|
+
* they are three sentences in the caller's own words, and because "Zoom" is
|
|
56
|
+
* not the word a German product says for it.
|
|
57
|
+
*/
|
|
58
|
+
zoomInLabel: string;
|
|
59
|
+
/** The accessible name of the control that reduces the magnification. */
|
|
60
|
+
zoomOutLabel: string;
|
|
61
|
+
/** The accessible name of the control that returns the image to its fitted size. */
|
|
62
|
+
resetLabel: string;
|
|
63
|
+
/**
|
|
64
|
+
* The caller's own controls, drawn after this Component's three.
|
|
65
|
+
*
|
|
66
|
+
* A slot and not a second set of props, because everything a reader might want
|
|
67
|
+
* beside a magnifier is the consumer's decision: a download, a "show the whole
|
|
68
|
+
* page" that hands off to `Lightbox`, a reset for the surrounding form. Prism
|
|
69
|
+
* draws the three controls it can get right, and this is where the rest go. The
|
|
70
|
+
* cost is that a caller who wants their own magnification controls cannot
|
|
71
|
+
* suppress these three, and the answer is that a magnifier whose only route to
|
|
72
|
+
* magnification is in someone else's markup is not a magnifier.
|
|
73
|
+
*/
|
|
74
|
+
controls?: ReactNode;
|
|
75
|
+
/**
|
|
76
|
+
* Called with the magnification after every press.
|
|
77
|
+
*
|
|
78
|
+
* A notification rather than a controlled prop, and the reason is the same as
|
|
79
|
+
* `Lightbox`'s reset: the magnification is a decision about this visit. A
|
|
80
|
+
* reader who magnified a diagram, went away and came back should find it as
|
|
81
|
+
* they left it, not as they found it, so it is held here and not lifted. What
|
|
82
|
+
* the caller usually wants the number for is layout, and a notification is
|
|
83
|
+
* enough for that.
|
|
84
|
+
*/
|
|
85
|
+
onScaleChange?: (scale: number) => void;
|
|
86
|
+
/** Layout only, exactly as on every Component. */
|
|
87
|
+
className?: string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* An image the reader magnifies where it already sits, with a frame that scrolls
|
|
91
|
+
* once it is larger than its box.
|
|
92
|
+
*
|
|
93
|
+
* **It is the `Lightbox` with the dialog taken out, and that subtraction is the
|
|
94
|
+
* whole Component.** A `Lightbox` opens a portal, traps focus, locks page scroll,
|
|
95
|
+
* swallows the Escape key and hands the reader a different place in the document
|
|
96
|
+
* to come back from. All five of those are the right price for an image the page
|
|
97
|
+
* has not shown the reader at all, where the enlargement is the only way to see
|
|
98
|
+
* it. They are the wrong price for an image the reader is already looking at:
|
|
99
|
+
* paying a focus trap to make a picture on the page bigger costs the reader their
|
|
100
|
+
* scroll position, their place in the document and their focus context, and a
|
|
101
|
+
* reader who has magnified an inline diagram and then closed the dialog lands
|
|
102
|
+
* somewhere they have to find again. So there is no portal, no overlay, no trap,
|
|
103
|
+
* no Escape key and no dismiss here. The page does not move and nothing is taken
|
|
104
|
+
* away from it. **Use a `Lightbox` when the enlargement is the only route to the
|
|
105
|
+
* image; use this when the image is already on the page and only its size is in
|
|
106
|
+
* the way.**
|
|
107
|
+
*
|
|
108
|
+
* **Prism draws the three controls and asks for their names, rather than taking
|
|
109
|
+
* the controls as a slot.** A slot would move the one guarantee that makes a
|
|
110
|
+
* magnifier usable to the caller: that the controls exist, that they are real
|
|
111
|
+
* buttons in the tab order, that they are disabled at the ends of the range, and
|
|
112
|
+
* that a reader whose control has just been disabled is moved to one that still
|
|
113
|
+
* works. That last one is not obvious and `Carousel` had to write a `useEffect`
|
|
114
|
+
* to get it right, because a disabled button leaves the tab order without giving
|
|
115
|
+
* up focus: a reader who presses zoom in at the ceiling is left focused on a
|
|
116
|
+
* control that can no longer answer Enter, Space or anything else, stranded
|
|
117
|
+
* inside the magnifier with no working control under their fingers. This
|
|
118
|
+
* Component does that move itself. The cost is that a caller who wants their own
|
|
119
|
+
* magnification controls cannot have them here, and the answer is that this is
|
|
120
|
+
* the wrong Component for a caller who wants that.
|
|
121
|
+
*
|
|
122
|
+
* **The scale transition is a transform with a token duration, and it is the only
|
|
123
|
+
* motion on the surface.** Magnifying a picture is spatial movement of a whole
|
|
124
|
+
* surface, so a reader who has asked for reduced motion gets the new size
|
|
125
|
+
* immediately and loses nothing but the travel between the two. Nothing here is
|
|
126
|
+
* guarded per call site any more: `packages/ui/src/styles.css` stops every
|
|
127
|
+
* transition under `prefers-reduced-motion` in one unlayered rule, and a
|
|
128
|
+
* `motion-safe:` beside an unguarded `transition-transform` was inert rather than
|
|
129
|
+
* cautious. The transition is on `transform` and on nothing else: an animated
|
|
130
|
+
* `width` or `height` is a layout animation on the main thread, which is the
|
|
131
|
+
* defect the compositor rule in the ambient layer exists to prevent, and a
|
|
132
|
+
* magnified diagram is large enough for that to be visible.
|
|
133
|
+
*
|
|
134
|
+
* **The scale reaches its final value before the pixels do, and that is the
|
|
135
|
+
* price of using a transform.** A transform does not change layout, so the
|
|
136
|
+
* frame's scroll extent is already at its full size on the first frame of the
|
|
137
|
+
* transition and the scrollbar arrives while the image is still travelling. The
|
|
138
|
+
* alternative is to animate the image's own size, which is a main-thread layout
|
|
139
|
+
* animation on the largest element on the page, and a scrollbar that moves a
|
|
140
|
+
* fraction early is a cheaper defect than a stuttering diagram.
|
|
141
|
+
*
|
|
142
|
+
* **Panning is a scroll, not a gesture.** Once the image is larger than its frame
|
|
143
|
+
* the frame scrolls, and the reader pans with the keys they already use: the
|
|
144
|
+
* arrow keys, the space bar, the Home and End keys, and a trackpad or a finger.
|
|
145
|
+
* There is no drag to pan, no pinch and no double tap, for the reason
|
|
146
|
+
* `Lightbox` gives: each of those is a bespoke pointer model a reader has to
|
|
147
|
+
* discover, and a scrollable frame is a thing every reader already knows. The
|
|
148
|
+
* frame is a block rather than a centred flex row, because a centred child
|
|
149
|
+
* larger than its scroll container has a left edge that cannot be scrolled back
|
|
150
|
+
* to in more than one browser, and a magnified image is routinely larger than
|
|
151
|
+
* its frame.
|
|
152
|
+
*
|
|
153
|
+
* **The scale is announced, politely, in the caller's words.** The sentence is in
|
|
154
|
+
* an `aria-live="polite"` region beside the controls, so a reader who has just
|
|
155
|
+
* pressed a button is told where they are without the announcement interrupting
|
|
156
|
+
* whatever they were reading. It is polite rather than assertive for the same
|
|
157
|
+
* reason `Carousel`'s position is: the reader caused the change by pressing a
|
|
158
|
+
* control and does not need to be interrupted by it.
|
|
159
|
+
*
|
|
160
|
+
* It is a client Component, because it holds a magnification and answers presses.
|
|
161
|
+
*/
|
|
162
|
+
declare function ImageZoom({ src, alt, label, scale, minScale, maxScale, step, zoomInLabel, zoomOutLabel, resetLabel, controls, onScaleChange, className, ...props }: ImageZoomProps): import("react").JSX.Element;
|
|
163
|
+
export { ImageZoom };
|
|
164
|
+
//# sourceMappingURL=image-zoom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-zoom.d.ts","sourceRoot":"","sources":["../../../src/components/ui/image-zoom.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA4C,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAgBrG,uCAAuC;AACvC,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC7E,2EAA2E;IAC3E,GAAG,EAAE,MAAM,CAAA;IACX;;;;;;;;;OASG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;;;;;;;;OASG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;;;;;;;OAQG;IACH,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;;;OAQG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAA;IACpB,oFAAoF;IACpF,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA6BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,iBAAS,SAAS,CAAC,EACjB,GAAG,EACH,GAAG,EACH,KAAK,EACL,KAAK,EACL,QAAc,EACd,QAAkB,EAClB,IAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,aAAa,EACb,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,+BAyJhB;AAED,OAAO,EAAE,SAAS,EAAE,CAAA"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ScanIcon, ZoomInIcon, ZoomOutIcon } from 'lucide-react';
|
|
4
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
5
|
+
import { cn } from '../../lib/utils.js';
|
|
6
|
+
/**
|
|
7
|
+
* The magnification the Component holds at its smallest, and the value it returns
|
|
8
|
+
* to, as a multiple of the image's fitted size.
|
|
9
|
+
*/
|
|
10
|
+
const FIT = 1;
|
|
11
|
+
/** The largest magnification offered when the caller names none. */
|
|
12
|
+
const CEILING = 4;
|
|
13
|
+
/** How much one press moves the magnification when the caller names no step. */
|
|
14
|
+
const STRIDE = 0.5;
|
|
15
|
+
/**
|
|
16
|
+
* The magnification every control in this Component draws.
|
|
17
|
+
*
|
|
18
|
+
* One string rather than three, for the reason `drawer.tsx` states: a control bar
|
|
19
|
+
* where the out control has its own metrics and the reset has another is a bar a
|
|
20
|
+
* reader moving by Tab finds unevenly spaced, and the difference is invisible in
|
|
21
|
+
* review.
|
|
22
|
+
*
|
|
23
|
+
* `pointer-coarse:size-11` is the coarse-pointer floor, as a step, because the bar
|
|
24
|
+
* is `flex flex-wrap items-center gap-2` and a bordered box at 44px is what a finger
|
|
25
|
+
* aims at. A band was rejected on condition 1: the controls sit eight pixels apart,
|
|
26
|
+
* and a 44px band centred on a 36px box overhangs its box by four on each side, which
|
|
27
|
+
* lands inside that gap rather than on a neighbour, so the band would buy eight
|
|
28
|
+
* pixels of reach for a target that is already only eight short and would leave the
|
|
29
|
+
* drawn box at 36. See DESIGN.md, The coarse-pointer floor.
|
|
30
|
+
*/
|
|
31
|
+
const CONTROL = 'text-muted-foreground hover:text-foreground border-input bg-background inline-flex size-9 items-center justify-center rounded-md border outline-none transition-colors duration-fast ease-out disabled:pointer-events-none disabled:opacity-50 focus-visible:ring-ring focus-visible:ring-[3px]' +
|
|
32
|
+
' pointer-coarse:size-11';
|
|
33
|
+
/** A magnification inside the caller's bounds, so no press can leave the range. */
|
|
34
|
+
function bound(value, low, high) {
|
|
35
|
+
if (!Number.isFinite(value))
|
|
36
|
+
return low;
|
|
37
|
+
if (high < low)
|
|
38
|
+
return low;
|
|
39
|
+
return Math.min(Math.max(value, low), high);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* An image the reader magnifies where it already sits, with a frame that scrolls
|
|
43
|
+
* once it is larger than its box.
|
|
44
|
+
*
|
|
45
|
+
* **It is the `Lightbox` with the dialog taken out, and that subtraction is the
|
|
46
|
+
* whole Component.** A `Lightbox` opens a portal, traps focus, locks page scroll,
|
|
47
|
+
* swallows the Escape key and hands the reader a different place in the document
|
|
48
|
+
* to come back from. All five of those are the right price for an image the page
|
|
49
|
+
* has not shown the reader at all, where the enlargement is the only way to see
|
|
50
|
+
* it. They are the wrong price for an image the reader is already looking at:
|
|
51
|
+
* paying a focus trap to make a picture on the page bigger costs the reader their
|
|
52
|
+
* scroll position, their place in the document and their focus context, and a
|
|
53
|
+
* reader who has magnified an inline diagram and then closed the dialog lands
|
|
54
|
+
* somewhere they have to find again. So there is no portal, no overlay, no trap,
|
|
55
|
+
* no Escape key and no dismiss here. The page does not move and nothing is taken
|
|
56
|
+
* away from it. **Use a `Lightbox` when the enlargement is the only route to the
|
|
57
|
+
* image; use this when the image is already on the page and only its size is in
|
|
58
|
+
* the way.**
|
|
59
|
+
*
|
|
60
|
+
* **Prism draws the three controls and asks for their names, rather than taking
|
|
61
|
+
* the controls as a slot.** A slot would move the one guarantee that makes a
|
|
62
|
+
* magnifier usable to the caller: that the controls exist, that they are real
|
|
63
|
+
* buttons in the tab order, that they are disabled at the ends of the range, and
|
|
64
|
+
* that a reader whose control has just been disabled is moved to one that still
|
|
65
|
+
* works. That last one is not obvious and `Carousel` had to write a `useEffect`
|
|
66
|
+
* to get it right, because a disabled button leaves the tab order without giving
|
|
67
|
+
* up focus: a reader who presses zoom in at the ceiling is left focused on a
|
|
68
|
+
* control that can no longer answer Enter, Space or anything else, stranded
|
|
69
|
+
* inside the magnifier with no working control under their fingers. This
|
|
70
|
+
* Component does that move itself. The cost is that a caller who wants their own
|
|
71
|
+
* magnification controls cannot have them here, and the answer is that this is
|
|
72
|
+
* the wrong Component for a caller who wants that.
|
|
73
|
+
*
|
|
74
|
+
* **The scale transition is a transform with a token duration, and it is the only
|
|
75
|
+
* motion on the surface.** Magnifying a picture is spatial movement of a whole
|
|
76
|
+
* surface, so a reader who has asked for reduced motion gets the new size
|
|
77
|
+
* immediately and loses nothing but the travel between the two. Nothing here is
|
|
78
|
+
* guarded per call site any more: `packages/ui/src/styles.css` stops every
|
|
79
|
+
* transition under `prefers-reduced-motion` in one unlayered rule, and a
|
|
80
|
+
* `motion-safe:` beside an unguarded `transition-transform` was inert rather than
|
|
81
|
+
* cautious. The transition is on `transform` and on nothing else: an animated
|
|
82
|
+
* `width` or `height` is a layout animation on the main thread, which is the
|
|
83
|
+
* defect the compositor rule in the ambient layer exists to prevent, and a
|
|
84
|
+
* magnified diagram is large enough for that to be visible.
|
|
85
|
+
*
|
|
86
|
+
* **The scale reaches its final value before the pixels do, and that is the
|
|
87
|
+
* price of using a transform.** A transform does not change layout, so the
|
|
88
|
+
* frame's scroll extent is already at its full size on the first frame of the
|
|
89
|
+
* transition and the scrollbar arrives while the image is still travelling. The
|
|
90
|
+
* alternative is to animate the image's own size, which is a main-thread layout
|
|
91
|
+
* animation on the largest element on the page, and a scrollbar that moves a
|
|
92
|
+
* fraction early is a cheaper defect than a stuttering diagram.
|
|
93
|
+
*
|
|
94
|
+
* **Panning is a scroll, not a gesture.** Once the image is larger than its frame
|
|
95
|
+
* the frame scrolls, and the reader pans with the keys they already use: the
|
|
96
|
+
* arrow keys, the space bar, the Home and End keys, and a trackpad or a finger.
|
|
97
|
+
* There is no drag to pan, no pinch and no double tap, for the reason
|
|
98
|
+
* `Lightbox` gives: each of those is a bespoke pointer model a reader has to
|
|
99
|
+
* discover, and a scrollable frame is a thing every reader already knows. The
|
|
100
|
+
* frame is a block rather than a centred flex row, because a centred child
|
|
101
|
+
* larger than its scroll container has a left edge that cannot be scrolled back
|
|
102
|
+
* to in more than one browser, and a magnified image is routinely larger than
|
|
103
|
+
* its frame.
|
|
104
|
+
*
|
|
105
|
+
* **The scale is announced, politely, in the caller's words.** The sentence is in
|
|
106
|
+
* an `aria-live="polite"` region beside the controls, so a reader who has just
|
|
107
|
+
* pressed a button is told where they are without the announcement interrupting
|
|
108
|
+
* whatever they were reading. It is polite rather than assertive for the same
|
|
109
|
+
* reason `Carousel`'s position is: the reader caused the change by pressing a
|
|
110
|
+
* control and does not need to be interrupted by it.
|
|
111
|
+
*
|
|
112
|
+
* It is a client Component, because it holds a magnification and answers presses.
|
|
113
|
+
*/
|
|
114
|
+
function ImageZoom({ src, alt, label, scale, minScale = FIT, maxScale = CEILING, step = STRIDE, zoomInLabel, zoomOutLabel, resetLabel, controls, onScaleChange, className, ...props }) {
|
|
115
|
+
const [at, setAt] = useState(FIT);
|
|
116
|
+
/*
|
|
117
|
+
* The caller's range, made into a range that can hold. A magnification that is
|
|
118
|
+
* not a positive number is a division that has not happened yet, and a ceiling
|
|
119
|
+
* that is not above the floor is two numbers that cannot both be true. In
|
|
120
|
+
* either case the fitted size and the default ceiling are drawn instead rather
|
|
121
|
+
* than a range that magnifies the wrong way or refuses to move, and the value
|
|
122
|
+
* actually in force is reported on the frame as `data-scale`, so a substituted
|
|
123
|
+
* bound is legible in the markup rather than only in the screenshot. That is
|
|
124
|
+
* `AspectRatio`'s rule about a value that cannot be drawn, applied to a range.
|
|
125
|
+
*/
|
|
126
|
+
const low = Number.isFinite(minScale) && minScale > 0 ? minScale : FIT;
|
|
127
|
+
const high = Number.isFinite(maxScale) && maxScale > low ? maxScale : Math.max(CEILING, low);
|
|
128
|
+
const stride = Number.isFinite(step) && step !== 0 ? Math.abs(step) : STRIDE;
|
|
129
|
+
const zoomIn = useRef(null);
|
|
130
|
+
const zoomOut = useRef(null);
|
|
131
|
+
const set = useCallback((next) => {
|
|
132
|
+
const value = bound(next, low, high);
|
|
133
|
+
setAt(value);
|
|
134
|
+
onScaleChange?.(value);
|
|
135
|
+
}, [high, low, onScaleChange]);
|
|
136
|
+
const magnified = at > FIT;
|
|
137
|
+
const atFloor = at <= low;
|
|
138
|
+
const atCeiling = at >= high;
|
|
139
|
+
/*
|
|
140
|
+
* A control that has just been disabled must not keep the reader's focus. A
|
|
141
|
+
* disabled button is out of the tab order and does not give up focus, so a
|
|
142
|
+
* reader who magnifies to the ceiling is left focused on a control that can no
|
|
143
|
+
* longer answer anything. Focus is handed to the sibling that is still live,
|
|
144
|
+
* which is what a browser does when focus lands on something that has become
|
|
145
|
+
* inert, and only when the stranded control is one of this Component's two.
|
|
146
|
+
*/
|
|
147
|
+
useEffect(() => {
|
|
148
|
+
const active = document.activeElement;
|
|
149
|
+
if (!(active instanceof HTMLButtonElement))
|
|
150
|
+
return;
|
|
151
|
+
if (active !== zoomIn.current && active !== zoomOut.current)
|
|
152
|
+
return;
|
|
153
|
+
if (active.disabled !== true)
|
|
154
|
+
return;
|
|
155
|
+
const live = active === zoomIn.current ? zoomOut.current : zoomIn.current;
|
|
156
|
+
if (live === null || live.disabled)
|
|
157
|
+
return;
|
|
158
|
+
live.focus();
|
|
159
|
+
});
|
|
160
|
+
return (_jsxs("div", { "data-slot": "image-zoom", role: "group", "aria-label": label, className: cn('flex flex-col gap-2', className), ...props, children: [_jsx("div", { "data-slot": "image-zoom-frame", "data-scale": at, "data-zoomed": magnified || undefined, className: "overflow-auto overscroll-contain", children: _jsx("img", { "data-slot": "image-zoom-image", src: src, alt: alt,
|
|
161
|
+
// A transform is the one value on this element that is not a utility
|
|
162
|
+
// class, and the reason is that the magnification is a number the
|
|
163
|
+
// caller passed rather than one of a closed set Prism authored. A
|
|
164
|
+
// utility would be a closed list of factors, and a magnifier whose
|
|
165
|
+
// ceiling is whichever factor the caller happened to be closest to is a
|
|
166
|
+
// magnifier that rounds the reader's request.
|
|
167
|
+
style: { transform: `scale(${at})` }, className: "block h-auto w-full origin-top-left transition-transform duration-base ease-out" }) }), _jsxs("div", { "data-slot": "image-zoom-controls", className: "flex flex-wrap items-center gap-2", children: [_jsx("button", { type: "button", ref: zoomOut, "data-slot": "image-zoom-out", "aria-label": zoomOutLabel, disabled: atFloor, onClick: () => set(at - stride), className: CONTROL, children: _jsx(ZoomOutIcon, { className: "size-4", "aria-hidden": "true" }) }), magnified ? (_jsx("button", { type: "button", "data-slot": "image-zoom-reset", "aria-label": resetLabel, onClick: () => set(low), className: CONTROL, children: _jsx(ScanIcon, { className: "size-4", "aria-hidden": "true" }) })) : null, _jsx("button", { type: "button", ref: zoomIn, "data-slot": "image-zoom-in", "aria-label": zoomInLabel, disabled: atCeiling, onClick: () => set(at + stride), className: CONTROL, children: _jsx(ZoomInIcon, { className: "size-4", "aria-hidden": "true" }) }), _jsx("p", { "data-slot": "image-zoom-scale", "aria-live": "polite", className: "text-muted-foreground text-sm tabular-nums", children: scale(Math.round(at * 100)) }), controls] })] }));
|
|
168
|
+
}
|
|
169
|
+
export { ImageZoom };
|