@nanisoft/prism-ui 0.13.0 → 0.16.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 +22 -1
- package/dist/blocks/data-table-01/data-table.d.ts.map +1 -1
- package/dist/blocks/data-table-01/data-table.js +9 -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 +131 -11
- package/dist/blocks/page-header-01/page-header.d.ts.map +1 -1
- package/dist/blocks/page-header-01/page-header.js +33 -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 +4 -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 +34 -1
- package/dist/blocks/site-footer/site-footer.d.ts.map +1 -1
- package/dist/blocks/site-footer/site-footer.js +24 -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/stack-grid-01/stack-grid.d.ts +13 -0
- package/dist/blocks/stack-grid-01/stack-grid.d.ts.map +1 -1
- package/dist/blocks/stack-grid-01/stack-grid.js +14 -1
- 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/diagram.d.ts +38 -7
- package/dist/components/ui/diagram.d.ts.map +1 -1
- package/dist/components/ui/diagram.js +134 -52
- 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/fact-list.d.ts +17 -0
- package/dist/components/ui/fact-list.d.ts.map +1 -1
- package/dist/components/ui/fact-list.js +18 -1
- 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 +34 -0
- package/dist/components/ui/prose.d.ts.map +1 -1
- package/dist/components/ui/prose.js +41 -1
- package/dist/components/ui/pulse-graph.d.ts +36 -4
- package/dist/components/ui/pulse-graph.d.ts.map +1 -1
- package/dist/components/ui/pulse-graph.js +174 -60
- 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 +110 -1
- package/dist/components/ui/section.d.ts.map +1 -1
- package/dist/components/ui/section.js +111 -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/figure.d.ts +149 -0
- package/dist/lib/figure.d.ts.map +1 -0
- package/dist/lib/figure.js +242 -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.d.ts.map +1 -1
- package/dist/live/run-stream-01/run-stream.js +6 -5
- 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/blog-post-page/index.d.ts +36 -15
- package/dist/pages/blog-post-page/index.d.ts.map +1 -1
- package/dist/pages/blog-post-page/index.js +35 -10
- 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 +126 -16
- package/dist/pages/docs-shell/docs-shell.d.ts.map +1 -1
- package/dist/pages/docs-shell/docs-shell.js +229 -28
- 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 +102 -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/not-found-page/index.d.ts.map +1 -1
- package/dist/pages/not-found-page/index.js +4 -3
- 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 +1105 -62
- package/package.json +9 -3
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { ScrollArea } from './scroll-area.js';
|
|
5
|
+
import { SearchField } from './search-field.js';
|
|
6
|
+
import { cn } from '../../lib/utils.js';
|
|
7
|
+
/**
|
|
8
|
+
* The three cell steps, and the column count that goes with each one.
|
|
9
|
+
*
|
|
10
|
+
* The columns and the cell are one fact in one table rather than two, because
|
|
11
|
+
* the keyboard model reads the column count and the layout reads the class, and
|
|
12
|
+
* two tables would be two numbers that could disagree. A reader who presses the
|
|
13
|
+
* down arrow and lands two rows further down has been told the grid is wider
|
|
14
|
+
* than it is, and nothing about a Component can make that recoverable except
|
|
15
|
+
* keeping one number.
|
|
16
|
+
*
|
|
17
|
+
* `min-h` and not `size` on the cell: the columns are fractions of the caller's
|
|
18
|
+
* container, so a fixed square would overflow a narrow picker and leave a gap in
|
|
19
|
+
* a wide one. The floor is what carries the step, and it is raised to 44 pixels
|
|
20
|
+
* on a coarse pointer because an emoji cell is a target a finger has to hit.
|
|
21
|
+
*/
|
|
22
|
+
const EMOJI_SIZE = {
|
|
23
|
+
sm: { columns: 10, grid: 'grid-cols-10', cell: 'min-h-8', glyph: 'text-base' },
|
|
24
|
+
md: { columns: 8, grid: 'grid-cols-8', cell: 'min-h-10', glyph: 'text-xl' },
|
|
25
|
+
lg: { columns: 7, grid: 'grid-cols-7', cell: 'min-h-12', glyph: 'text-2xl' },
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* The words a query is matched against, folded to lower case once per change.
|
|
29
|
+
*
|
|
30
|
+
* The name and the keywords are one haystack rather than two fields, so a query
|
|
31
|
+
* word matches a keyword and a keyword matches a name with no rule to learn: the
|
|
32
|
+
* reader types words and the words are found. Folding happens here rather than
|
|
33
|
+
* at each comparison so a filter over a bounded set is one pass, not one fold
|
|
34
|
+
* per term per entry.
|
|
35
|
+
*/
|
|
36
|
+
function haystack(item) {
|
|
37
|
+
return `${item.name} ${item.keywords?.join(' ') ?? ''}`.toLowerCase();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A grid of emoji the reader chooses one of, with a search field and a rail of
|
|
41
|
+
* categories.
|
|
42
|
+
*
|
|
43
|
+
* **The emoji set is a prop and this module ships no table, and the cost of that
|
|
44
|
+
* is a real one.** A data set is a licensed asset or a derived one, it changes
|
|
45
|
+
* every Unicode release, and what a product's rail contains is that product's
|
|
46
|
+
* claim about itself. Shipping a table here would be a second source of truth
|
|
47
|
+
* for the picker, and it would be wrong in a way no gate could see: a consumer
|
|
48
|
+
* who wanted 40 workflow glyphs would have to delete three thousand rows, and a
|
|
49
|
+
* consumer who wanted the full set would have to wait for this package to
|
|
50
|
+
* refresh. So the picker takes the rows, and what the consumer gets back is a
|
|
51
|
+
* control rather than a data set. The honest cost: a consumer who wants a picker
|
|
52
|
+
* in an afternoon has to source the set first.
|
|
53
|
+
*
|
|
54
|
+
* **The caller's duty is to pass a bounded set, and this Component will not
|
|
55
|
+
* virtualise for them.** Every entry is a real button in the document, which is
|
|
56
|
+
* what makes the roving tab stop a button, what makes the browser's own
|
|
57
|
+
* find-in-page reach a glyph, and what makes the accessibility tree tell the
|
|
58
|
+
* truth about how many entries there are. Virtualising would take all three away
|
|
59
|
+
* and would make this a different control wearing this name: the tab stop would
|
|
60
|
+
* be a placeholder, find-in-page would stop finding glyphs, and the entry count a
|
|
61
|
+
* screen reader reports would be a number the Component asserted rather than one
|
|
62
|
+
* it could see. It would also need the row height and the scroll offset, which
|
|
63
|
+
* are layout measurements, which is a measurement a server render cannot make
|
|
64
|
+
* and a caller who has already said how wide the picker is would have to
|
|
65
|
+
* override. So a set of three thousand emoji in an eight column grid is a slow
|
|
66
|
+
* grid, and the honest answer to that is a different surface, a search first
|
|
67
|
+
* field with a result list, rather than a virtualised one under this name. Pass
|
|
68
|
+
* what a reader would actually scroll through: a few hundred entries at most,
|
|
69
|
+
* which is several screens and not several minutes.
|
|
70
|
+
*
|
|
71
|
+
* **The grid is a radio group of buttons with a roving tab stop, and the two
|
|
72
|
+
* halves of that sentence are both deliberate.** The single selection is a real
|
|
73
|
+
* fact, and `role="radiogroup"` with `role="radio"` and `aria-checked` on each
|
|
74
|
+
* cell is the only description of it that is true, for the reason
|
|
75
|
+
* `ToggleGroup` argues in full: pressed buttons say each cell is independent,
|
|
76
|
+
* which is the claim one selection is denying. The roving tab stop is ours
|
|
77
|
+
* because the platform's version of it belongs to a native radio group, and
|
|
78
|
+
* these are buttons in a grid whose column count the caller chose. The cost of
|
|
79
|
+
* owning it is that it has to be maintained: a grid where every cell is a tab
|
|
80
|
+
* stop is a grid a keyboard reader has to Tab through three hundred times, and a
|
|
81
|
+
* grid where no cell is one cannot be entered at all.
|
|
82
|
+
*
|
|
83
|
+
* **The keyboard model, in full, because a reader cannot discover it.** The
|
|
84
|
+
* whole grid is one Tab stop and the stop sits on the chosen entry, or on the
|
|
85
|
+
* first cell when nothing is chosen. The arrow keys move focus and do not
|
|
86
|
+
* choose: left and right by one cell, up and down by one column, each clamped at
|
|
87
|
+
* the edge rather than wrapped, because a grid that wraps surprises a reader
|
|
88
|
+
* who is reading a row as a row. Home and End go to the first and the last
|
|
89
|
+
* visible cell. Arrow Down from the search field moves into the grid on the
|
|
90
|
+
* current stop, which is what makes the field and the grid one control to a
|
|
91
|
+
* reader rather than two stops to learn. Enter and Space choose, because the
|
|
92
|
+
* cells are buttons. Escape empties the query and calls `onDismiss` when one was
|
|
93
|
+
* passed.
|
|
94
|
+
*
|
|
95
|
+
* **The rail is a row of ordinary tab stops and is not a composite widget.**
|
|
96
|
+
* `role="tablist"` is the role that describes it, and a tablist is a
|
|
97
|
+
* required-name role, so using it would need a seventh string prop for a control
|
|
98
|
+
* whose members are already named by the category names. The rail instead draws
|
|
99
|
+
* plain buttons with `aria-current` on the one showing, which says "this is the
|
|
100
|
+
* current item in this set" without claiming the grid is a tab panel. The cost is
|
|
101
|
+
* that a reader Tabs through each category rather than arrowing them, and with a
|
|
102
|
+
* handful of categories that is the better trade; a picker with forty categories
|
|
103
|
+
* is a picker with the wrong rail.
|
|
104
|
+
*
|
|
105
|
+
* **The rail is drawn only while the query is empty, and that is a decision
|
|
106
|
+
* rather than an omission.** A search that filtered only the showing category
|
|
107
|
+
* would mean a reader who has landed on Reactions and typed "cat" is told there
|
|
108
|
+
* is no cat, which is a false statement about the product's own set. So a query
|
|
109
|
+
* searches every category at once, the grid flattens them in the order the
|
|
110
|
+
* categories were passed, and the rail is not drawn while it does, because a
|
|
111
|
+
* category button that does nothing is a control that lies. The cost is a layout
|
|
112
|
+
* change when the reader types the first character, and the alternative, keeping
|
|
113
|
+
* the rail, is a worse failure than a shift.
|
|
114
|
+
*
|
|
115
|
+
* **The arrow step follows the declared column count and not the measured one,
|
|
116
|
+
* and the gap is named rather than hidden.** A grid that renders fewer columns
|
|
117
|
+
* than `size` says, because the caller put it in a narrow container, moves down
|
|
118
|
+
* by a row the reader cannot see. Prism could measure the rendered column count
|
|
119
|
+
* and it does not, for the reason it does not virtualise: a measurement is a
|
|
120
|
+
* layout read, it is not available in a server render, and it would put the
|
|
121
|
+
* keyboard model at the mercy of whatever the caller did to the width. Passing a
|
|
122
|
+
* smaller `size` is the fix and it is one prop.
|
|
123
|
+
*
|
|
124
|
+
* **Motion is state feedback on two tokens and there is no keyframe.** The cell
|
|
125
|
+
* and the rail change ink with `duration-fast ease-out`, which is the same
|
|
126
|
+
* feedback the rest of the package gives, and the press scales by a token-free
|
|
127
|
+
* factor on `transition-[color,background-color,scale]`. Neither carries a
|
|
128
|
+
* `motion-safe:`: `packages/ui/src/styles.css` ends with one unlayered
|
|
129
|
+
* `prefers-reduced-motion` rule that stops every transition in the package, so a
|
|
130
|
+
* reader who has asked for less motion gets the colour change at full strength
|
|
131
|
+
* and the press with no movement at all, and the two decisions live in one place
|
|
132
|
+
* rather than one per cell. Nothing here waits for a script, a scroll position or
|
|
133
|
+
* a timer, so the picker is complete and legible at first paint whatever the
|
|
134
|
+
* reader's settings are.
|
|
135
|
+
*
|
|
136
|
+
* **It is a client Component, and the directive is unconditional.** The picker
|
|
137
|
+
* holds the query, the showing category, the roving stop and the announcement,
|
|
138
|
+
* and all four are the control rather than a decoration of it. The cost is named
|
|
139
|
+
* rather than hidden: a consumer who renders a read-only list of the set they
|
|
140
|
+
* already hold ships a client runtime for it, and the honest answer for that case
|
|
141
|
+
* is their own list, because a picker with no search and no selection is a grid
|
|
142
|
+
* of glyphs and the grid is three lines of their own markup.
|
|
143
|
+
*/
|
|
144
|
+
function EmojiPicker({ groups, value, onValueChange, searchLabel, searchPlaceholder, clearLabel, emptyLabel, selectLabel, onDismiss, size = 'md', className, }) {
|
|
145
|
+
const gridRef = useRef(null);
|
|
146
|
+
const [query, setQuery] = useState('');
|
|
147
|
+
const [category, setCategory] = useState(null);
|
|
148
|
+
const [stop, setStop] = useState(null);
|
|
149
|
+
const [announced, setAnnounced] = useState('');
|
|
150
|
+
const drawn = EMOJI_SIZE[size];
|
|
151
|
+
// Every entry with its search words folded once, so a filter over the set is a
|
|
152
|
+
// comparison per term rather than a fold per term per entry. The id is the
|
|
153
|
+
// consumer's own key, so the flat list is also where the chosen entry is found.
|
|
154
|
+
const flat = useMemo(() => groups.flatMap((group) => group.items.map((item) => ({ item, hay: haystack(item) }))), [groups]);
|
|
155
|
+
// The showing category, falling back to the first when the state names one the
|
|
156
|
+
// consumer has since removed, so a picker survives its data changing under it
|
|
157
|
+
// rather than drawing an empty grid beside a rail whose buttons do nothing.
|
|
158
|
+
const shown = groups.find((group) => group.id === category) ?? groups[0];
|
|
159
|
+
const searching = query.trim() !== '';
|
|
160
|
+
const visible = useMemo(() => {
|
|
161
|
+
if (!searching)
|
|
162
|
+
return shown?.items ?? [];
|
|
163
|
+
// Every term has to match somewhere, so a two word query narrows rather than
|
|
164
|
+
// widens. That is the rule a reader expects from a search field and it is
|
|
165
|
+
// the one a consumer cannot change without losing the set.
|
|
166
|
+
const terms = query.trim().toLowerCase().split(/\s+/).filter(Boolean);
|
|
167
|
+
return flat
|
|
168
|
+
.filter((entry) => terms.every((term) => entry.hay.includes(term)))
|
|
169
|
+
.map((entry) => entry.item);
|
|
170
|
+
}, [flat, query, shown]);
|
|
171
|
+
const chosen = flat.find((entry) => entry.item.id === value)?.item;
|
|
172
|
+
// The stop is a derivation with a piece of state over it, and the derivation
|
|
173
|
+
// is what makes it self healing: a stop naming an entry the current query has
|
|
174
|
+
// filtered out falls back to the chosen entry and then to the first cell, so
|
|
175
|
+
// the grid always has exactly one Tab stop and never has none.
|
|
176
|
+
const current = visible.find((item) => item.id === stop) ??
|
|
177
|
+
visible.find((item) => item.id === chosen?.id) ??
|
|
178
|
+
visible[0];
|
|
179
|
+
const currentAt = current === undefined ? -1 : visible.indexOf(current);
|
|
180
|
+
// The grid is named by the category while the reader browses and by the search
|
|
181
|
+
// field's own label while a query is present, because those are the two sets
|
|
182
|
+
// on screen and each has a name the consumer already wrote. The scroll region
|
|
183
|
+
// takes the same one for the reason `ListPanel` gives: the region and the grid
|
|
184
|
+
// hold the same entries, and a reader who tabs into one and hears a different
|
|
185
|
+
// name from the other has been told two things about the same content.
|
|
186
|
+
//
|
|
187
|
+
// `aria-label` rather than a generated id pointing at the field's own label
|
|
188
|
+
// element, and the reason is a duplicate rather than a convenience: an
|
|
189
|
+
// `sr-only` copy of a label that is already on screen is a second copy of the
|
|
190
|
+
// same words in the accessibility tree, and a reader walking the page hears it
|
|
191
|
+
// twice. The name is a string here because the words are the same words the
|
|
192
|
+
// field shows, so there is nothing for a node to carry.
|
|
193
|
+
const regionName = searching || shown === undefined ? searchLabel : shown.name;
|
|
194
|
+
const cells = () => [
|
|
195
|
+
...(gridRef.current?.querySelectorAll('[data-slot="emoji-picker-cell"]') ??
|
|
196
|
+
[]),
|
|
197
|
+
];
|
|
198
|
+
const move = (to) => {
|
|
199
|
+
const all = cells();
|
|
200
|
+
if (all.length === 0)
|
|
201
|
+
return;
|
|
202
|
+
const target = all[Math.min(Math.max(to, 0), all.length - 1)];
|
|
203
|
+
if (target === undefined)
|
|
204
|
+
return;
|
|
205
|
+
// Focus is what records the stop, through the cell's own onFocus, so there
|
|
206
|
+
// is one place that writes it and the arrow handler cannot move the stop to
|
|
207
|
+
// a cell the reader did not reach.
|
|
208
|
+
target.focus();
|
|
209
|
+
};
|
|
210
|
+
const onKeyDown = (event) => {
|
|
211
|
+
if (event.key === 'Escape') {
|
|
212
|
+
setQuery('');
|
|
213
|
+
onDismiss?.();
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const target = event.target;
|
|
217
|
+
if (target instanceof HTMLInputElement) {
|
|
218
|
+
// The one key a single line text field has no use for, and the one a
|
|
219
|
+
// reader expects to move from a search field into the results. Without it
|
|
220
|
+
// the field and the grid are two stops and the reader has to guess that
|
|
221
|
+
// Tab crosses between them.
|
|
222
|
+
if (event.key === 'ArrowDown' && currentAt !== -1) {
|
|
223
|
+
event.preventDefault();
|
|
224
|
+
move(currentAt);
|
|
225
|
+
}
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
if (!(target instanceof HTMLButtonElement))
|
|
229
|
+
return;
|
|
230
|
+
if (target.dataset.slot !== 'emoji-picker-cell')
|
|
231
|
+
return;
|
|
232
|
+
const from = cells().indexOf(target);
|
|
233
|
+
if (from === -1)
|
|
234
|
+
return;
|
|
235
|
+
const steps = {
|
|
236
|
+
ArrowLeft: -1,
|
|
237
|
+
ArrowRight: 1,
|
|
238
|
+
ArrowUp: -drawn.columns,
|
|
239
|
+
ArrowDown: drawn.columns,
|
|
240
|
+
};
|
|
241
|
+
const step = steps[event.key];
|
|
242
|
+
if (step !== undefined) {
|
|
243
|
+
event.preventDefault();
|
|
244
|
+
move(from + step);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
if (event.key === 'Home' || event.key === 'End') {
|
|
248
|
+
event.preventDefault();
|
|
249
|
+
move(event.key === 'Home' ? 0 : cells().length - 1);
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
return (_jsxs("div", { "data-slot": "emoji-picker", onKeyDown: onKeyDown, className: cn('flex w-full items-start gap-3', className), children: [searching || groups.length === 0 ? null : (_jsx("div", { "data-slot": "emoji-picker-rail", className: "flex shrink-0 flex-col gap-0.5", children: groups.map((group) => {
|
|
253
|
+
const currentCategory = group.id === shown?.id;
|
|
254
|
+
return (_jsx("button", { type: "button", "data-slot": "emoji-picker-rail-item", "data-category": group.id, "aria-current": currentCategory ? true : undefined, onClick: () => {
|
|
255
|
+
setCategory(group.id);
|
|
256
|
+
setStop(null);
|
|
257
|
+
}, className: cn('rounded-md px-2 py-1 text-left text-sm whitespace-nowrap outline-none', 'transition-colors duration-fast ease-out', 'focus-visible:ring-ring focus-visible:ring-[3px]', 'pointer-coarse:min-h-11', currentCategory
|
|
258
|
+
? 'bg-accent text-accent-foreground font-medium'
|
|
259
|
+
: 'text-muted-foreground hover:text-foreground'), children: group.name }, group.id));
|
|
260
|
+
}) })), _jsxs("div", { "data-slot": "emoji-picker-panel", className: "flex min-w-0 flex-1 flex-col gap-2", children: [_jsx(SearchField, { value: query, onValueChange: setQuery, label: searchLabel, placeholder: searchPlaceholder, clearLabel: clearLabel }), _jsx(ScrollArea, { label: regionName, orientation: "vertical", className: "min-h-0 flex-1", children: visible.length === 0 ? (_jsx("p", { "data-slot": "emoji-picker-empty", className: "text-muted-foreground p-3 text-sm", children: emptyLabel })) : (_jsx("div", { ref: gridRef, "data-slot": "emoji-picker-grid", role: "radiogroup", "aria-label": regionName, className: cn('grid gap-1 p-0.5', drawn.grid), children: visible.map((item) => {
|
|
261
|
+
const checked = item.id === value;
|
|
262
|
+
return (_jsx("button", { type: "button", "data-slot": "emoji-picker-cell", "data-item": item.id, role: "radio", "aria-checked": checked,
|
|
263
|
+
// The roving tab stop. Exactly one cell is in the tab order,
|
|
264
|
+
// and `current` is a derivation that always resolves to one,
|
|
265
|
+
// so the grid can always be entered and never entered twice.
|
|
266
|
+
tabIndex: item.id === current?.id ? 0 : -1, onFocus: () => setStop(item.id), onClick: () => {
|
|
267
|
+
onValueChange(item.id);
|
|
268
|
+
setAnnounced(selectLabel(item));
|
|
269
|
+
}, className: cn('text-muted-foreground hover:bg-accent hover:text-accent-foreground flex aspect-square w-full min-w-0 items-center justify-center rounded-md outline-none',
|
|
270
|
+
// The scale is the one spatial change in this Component, and
|
|
271
|
+
// it is guarded so a reader who asked for less movement gets
|
|
272
|
+
// the ink change at full strength and no movement. The colour
|
|
273
|
+
// changes are feedback and are not guarded, which is the
|
|
274
|
+
// position DESIGN.md takes on reduced motion.
|
|
275
|
+
'transition-[color,background-color,scale] duration-fast ease-out', 'active:scale-95', 'focus-visible:ring-ring focus-visible:ring-[3px]', drawn.cell, 'pointer-coarse:min-h-11', checked && 'bg-accent text-accent-foreground'), children: _jsx("span", { "data-slot": "emoji-picker-glyph", "aria-hidden": "true", className: cn('leading-none select-none', drawn.glyph), children: item.glyph }) }, item.id));
|
|
276
|
+
}) })) }), _jsx("p", { "data-slot": "emoji-picker-announcement", "aria-live": "polite", className: "sr-only", children: announced })] })] }));
|
|
277
|
+
}
|
|
278
|
+
export { EmojiPicker };
|
|
@@ -75,6 +75,23 @@ export type FactListProps = ComponentProps<'dl'> & {
|
|
|
75
75
|
* wraps and a value that does not are both common and centring one of them reads
|
|
76
76
|
* as an error.
|
|
77
77
|
*
|
|
78
|
+
* **The value is set flush left, and the reason is the values rather than the
|
|
79
|
+
* rows.** A right-aligned value is the right answer in a column of figures, where
|
|
80
|
+
* the digits are the same width and the comparison a reader makes is between the
|
|
81
|
+
* ends of them. This Component has no numeric mode, no `tabular-nums` and no
|
|
82
|
+
* monospaced arm, so nothing here is a figure and nothing lines up on its last
|
|
83
|
+
* digit: what lines up is the first letter of each answer, and right alignment
|
|
84
|
+
* moves that edge to a different place on every row. A value long enough to wrap
|
|
85
|
+
* is the case that shows it, because the second line starts wherever the first
|
|
86
|
+
* one ended and the column reads as a mistake rather than as a decision. `text-
|
|
87
|
+
* balance` stays, because it is the same reason it was there: a two-line answer
|
|
88
|
+
* should break where it breaks well, not where the measure runs out.
|
|
89
|
+
*
|
|
90
|
+
* A fact whose value *is* a figure is not the case this loses. A caller that wants
|
|
91
|
+
* a right-aligned figure column composes it: the value is a `ReactNode`, so a
|
|
92
|
+
* caller can pass the span it wants, and Prism holds no opinion about a value it
|
|
93
|
+
* did not lay out.
|
|
94
|
+
*
|
|
78
95
|
* The hairline between rows is `border-border`, so a list of facts reads as a
|
|
79
96
|
* table without becoming one: no header row, because a fact has no column
|
|
80
97
|
* header, and no `Table` semantics, because these are terms and their answers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fact-list.d.ts","sourceRoot":"","sources":["../../../src/components/ui/fact-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItD;;;;;;;GAOG;AACH,MAAM,MAAM,IAAI,GAAG;IACjB;;;;OAIG;IACH,KAAK,EAAE,SAAS,CAAA;IAChB,6DAA6D;IAC7D,KAAK,EAAE,SAAS,CAAA;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG;IACjD;;;;OAIG;IACH,KAAK,EAAE,SAAS,IAAI,EAAE,CAAA;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"fact-list.d.ts","sourceRoot":"","sources":["../../../src/components/ui/fact-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItD;;;;;;;GAOG;AACH,MAAM,MAAM,IAAI,GAAG;IACjB;;;;OAIG;IACH,KAAK,EAAE,SAAS,CAAA;IAChB,6DAA6D;IAC7D,KAAK,EAAE,SAAS,CAAA;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG;IACjD;;;;OAIG;IACH,KAAK,EAAE,SAAS,IAAI,EAAE,CAAA;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,iBAAS,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,sCAuCrE;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -20,6 +20,23 @@ import { cn } from '../../lib/utils.js';
|
|
|
20
20
|
* wraps and a value that does not are both common and centring one of them reads
|
|
21
21
|
* as an error.
|
|
22
22
|
*
|
|
23
|
+
* **The value is set flush left, and the reason is the values rather than the
|
|
24
|
+
* rows.** A right-aligned value is the right answer in a column of figures, where
|
|
25
|
+
* the digits are the same width and the comparison a reader makes is between the
|
|
26
|
+
* ends of them. This Component has no numeric mode, no `tabular-nums` and no
|
|
27
|
+
* monospaced arm, so nothing here is a figure and nothing lines up on its last
|
|
28
|
+
* digit: what lines up is the first letter of each answer, and right alignment
|
|
29
|
+
* moves that edge to a different place on every row. A value long enough to wrap
|
|
30
|
+
* is the case that shows it, because the second line starts wherever the first
|
|
31
|
+
* one ended and the column reads as a mistake rather than as a decision. `text-
|
|
32
|
+
* balance` stays, because it is the same reason it was there: a two-line answer
|
|
33
|
+
* should break where it breaks well, not where the measure runs out.
|
|
34
|
+
*
|
|
35
|
+
* A fact whose value *is* a figure is not the case this loses. A caller that wants
|
|
36
|
+
* a right-aligned figure column composes it: the value is a `ReactNode`, so a
|
|
37
|
+
* caller can pass the span it wants, and Prism holds no opinion about a value it
|
|
38
|
+
* did not lay out.
|
|
39
|
+
*
|
|
23
40
|
* The hairline between rows is `border-border`, so a list of facts reads as a
|
|
24
41
|
* table without becoming one: no header row, because a fact has no column
|
|
25
42
|
* header, and no `Table` semantics, because these are terms and their answers
|
|
@@ -33,6 +50,6 @@ import { cn } from '../../lib/utils.js';
|
|
|
33
50
|
function FactList({ facts, label, className, ...props }) {
|
|
34
51
|
if (facts.length === 0)
|
|
35
52
|
return null;
|
|
36
|
-
return (_jsxs("dl", { "data-slot": "fact-list", className: cn('flex w-full flex-col text-sm', className), ...props, children: [label ? (_jsx("dt", { className: "text-muted-foreground mb-2 text-xs font-medium tracking-wide uppercase", children: label })) : null, facts.map((fact, index) => (_jsxs("div", { "data-slot": "fact-list-row", className: "border-border flex items-start justify-between gap-6 border-b py-2 last:border-b-0", children: [_jsx("dt", { className: "text-muted-foreground shrink-0 font-medium", children: fact.label }), _jsx("dd", { className: "text-
|
|
53
|
+
return (_jsxs("dl", { "data-slot": "fact-list", className: cn('flex w-full flex-col text-sm', className), ...props, children: [label ? (_jsx("dt", { className: "text-muted-foreground mb-2 text-xs font-medium tracking-wide uppercase", children: label })) : null, facts.map((fact, index) => (_jsxs("div", { "data-slot": "fact-list-row", className: "border-border flex items-start justify-between gap-6 border-b py-2 last:border-b-0", children: [_jsx("dt", { className: "text-muted-foreground shrink-0 font-medium", children: fact.label }), _jsx("dd", { className: "text-left text-balance", children: fact.href ? (_jsx("a", { href: fact.href, rel: fact.newTab ? 'noopener noreferrer' : undefined, target: fact.newTab ? '_blank' : undefined, className: "underline underline-offset-4 hover:underline", children: fact.value })) : (fact.value) })] }, index)))] }));
|
|
37
54
|
}
|
|
38
55
|
export { FactList };
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/** One file the reader has chosen, and everything the list knows about it. */
|
|
3
|
+
export type FileUploadFile = {
|
|
4
|
+
/**
|
|
5
|
+
* The caller's own identity for the file, and what the remove control reports.
|
|
6
|
+
*
|
|
7
|
+
* Required, and required as a string rather than as the name: a reader who adds
|
|
8
|
+
* the same file twice has two rows with the same name, and a remove control
|
|
9
|
+
* named by the file would announce two identical buttons.
|
|
10
|
+
*/
|
|
11
|
+
id: string;
|
|
12
|
+
/** The file's name as the platform reported it. A word, so it is not truncated. */
|
|
13
|
+
name: string;
|
|
14
|
+
/**
|
|
15
|
+
* The file's size, in bytes.
|
|
16
|
+
*
|
|
17
|
+
* A number and not a formatted string, and the difference is the whole
|
|
18
|
+
* interface. A caller that hands over "1.2 MB" has done the division, picked a
|
|
19
|
+
* unit, decided the rounding and written a separator, and has to do all four
|
|
20
|
+
* again in every locale the product ships in, and again in every language. The
|
|
21
|
+
* number is a fact about the file and the sentence is Prism's to write.
|
|
22
|
+
*/
|
|
23
|
+
size: number;
|
|
24
|
+
/**
|
|
25
|
+
* How far this file has got, out of a hundred.
|
|
26
|
+
*
|
|
27
|
+
* Omit it and the row shows no meter, which is right for a file that has
|
|
28
|
+
* finished and for a file that was never going to be uploaded. A value of zero
|
|
29
|
+
* is drawn as an empty meter rather than as nothing, because a transfer that
|
|
30
|
+
* has not started and a transfer that does not exist are different facts.
|
|
31
|
+
*/
|
|
32
|
+
progress?: number;
|
|
33
|
+
/**
|
|
34
|
+
* What went wrong with this file, drawn under it in the destructive token and
|
|
35
|
+
* announced as it appears.
|
|
36
|
+
*
|
|
37
|
+
* A node, and a sentence about the caller's own limits: "Larger than 10 MB",
|
|
38
|
+
* "That file type is not accepted here". Prism does not decide what may be
|
|
39
|
+
* uploaded and does not write the sentence when it goes wrong.
|
|
40
|
+
*/
|
|
41
|
+
error?: ReactNode;
|
|
42
|
+
};
|
|
43
|
+
/** The props the File upload accepts. */
|
|
44
|
+
export interface FileUploadProps {
|
|
45
|
+
/**
|
|
46
|
+
* The files, in the order they were chosen.
|
|
47
|
+
*
|
|
48
|
+
* Required, and order is the caller's because it is a claim about importance.
|
|
49
|
+
* A reader who chose three files expects to see three rows in the order they
|
|
50
|
+
* arrived, not sorted by size.
|
|
51
|
+
*/
|
|
52
|
+
files: FileUploadFile[];
|
|
53
|
+
/**
|
|
54
|
+
* Called with a file's `id` when the reader removes it.
|
|
55
|
+
*
|
|
56
|
+
* Omit it and the list is read-only, which is a legitimate state: a receipt
|
|
57
|
+
* names the files that were sent, and offering to take one off a receipt is a
|
|
58
|
+
* promise the caller cannot keep. A caller whose files are still uploading
|
|
59
|
+
* should omit it too, because this Component cannot see the transfer and will
|
|
60
|
+
* not try to stop one.
|
|
61
|
+
*/
|
|
62
|
+
onRemove?: (id: string) => void;
|
|
63
|
+
/**
|
|
64
|
+
* The accessible name of one row's remove control, given that row's file name.
|
|
65
|
+
*
|
|
66
|
+
* Required whenever `onRemove` is given, and a function because the name has to
|
|
67
|
+
* name the file and the file's name is the caller's string, not this package's
|
|
68
|
+
* sentence. The Component throws without it rather than drawing a button it
|
|
69
|
+
* cannot name, because a nameless button is announced as "button" and the
|
|
70
|
+
* reader is left to work out which of the rows it belongs to.
|
|
71
|
+
*/
|
|
72
|
+
removeLabel?: (name: string) => string;
|
|
73
|
+
/**
|
|
74
|
+
* The list's own name, drawn above it and used as its accessible name.
|
|
75
|
+
*
|
|
76
|
+
* A node and not a string, so the element a sighted reader reads is the one a
|
|
77
|
+
* screen reader names the list by. Without it the list is announced as an
|
|
78
|
+
* unlabelled list and the reader is told nothing about what the files are.
|
|
79
|
+
*/
|
|
80
|
+
label?: ReactNode;
|
|
81
|
+
/**
|
|
82
|
+
* What to draw when no file has been chosen.
|
|
83
|
+
*
|
|
84
|
+
* An empty list with no `empty` renders nothing at all, which is the choice
|
|
85
|
+
* `FactList` makes and the reason is the same: a bordered box with a heading
|
|
86
|
+
* above it and nothing in it reads as a rendering failure rather than as an
|
|
87
|
+
* absence. Never a placeholder row. A row with no file in it is a row a reader
|
|
88
|
+
* tries to remove, and a row whose progress meter is at zero is a transfer that
|
|
89
|
+
* is happening.
|
|
90
|
+
*/
|
|
91
|
+
empty?: ReactNode;
|
|
92
|
+
/**
|
|
93
|
+
* Renders a size in bytes as the sentence a reader sees.
|
|
94
|
+
*
|
|
95
|
+
* The default divides by 1024, steps up to kilobytes and then to megabytes,
|
|
96
|
+
* and asks `Intl` for the number and its unit in the runtime's own locale, so
|
|
97
|
+
* the grouping separators and the unit spelling are the reader's. A caller that
|
|
98
|
+
* needs a fixed locale, a different base or a fourth rung passes a function
|
|
99
|
+
* that closes over the locale it wants.
|
|
100
|
+
*/
|
|
101
|
+
formatSize?: (bytes: number) => string;
|
|
102
|
+
/** Layout only. */
|
|
103
|
+
className?: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The list of files a reader has chosen, one row each.
|
|
107
|
+
*
|
|
108
|
+
* **A size is a number of bytes and never a formatted string.** That is the
|
|
109
|
+
* decision the whole interface rests on. A caller that formats the size itself
|
|
110
|
+
* has to reimplement the division, the unit ladder, the rounding at each rung and
|
|
111
|
+
* the grouping separator, and has to do it again for every locale the product
|
|
112
|
+
* ships in, and again the first time somebody asks for gigabytes. Prism owns one
|
|
113
|
+
* ladder and asks `Intl` for the sentence, so a locale change is a locale change
|
|
114
|
+
* and not an audit. The cost is that a caller who genuinely wants a different
|
|
115
|
+
* ladder writes a function, which is the right place for that decision.
|
|
116
|
+
*
|
|
117
|
+
* **The meter is `Progress` and the failure is `FieldError`, and they were not
|
|
118
|
+
* chosen together.** A bar that reports a position is a bar: `Progress` already
|
|
119
|
+
* exposes the value, the minimum and the maximum through ARIA, already draws at
|
|
120
|
+
* the authored heights and already animates the fill on the base duration, and a
|
|
121
|
+
* second meter written here would be a second answer to how far along a task is.
|
|
122
|
+
* The failure is the opposite case and deliberately is not an `Alert`. An Alert
|
|
123
|
+
* is a callout with its own border, its own padding and its own role, and one
|
|
124
|
+
* inside a bordered row is a card inside a card: it changes the height of the row
|
|
125
|
+
* that failed, it moves the remove control, and it announces a page-level problem
|
|
126
|
+
* for a problem with one file. `FieldError` is one line of destructive text with
|
|
127
|
+
* `role="alert"`, which is what a per-file failure is. The trade is that a reader
|
|
128
|
+
* gets no recovery beside the error, and the remedy for that is on the Dropzone
|
|
129
|
+
* beside the field, where the caller's own limits are stated.
|
|
130
|
+
*
|
|
131
|
+
* **The name is a word and the size is a number, and they are laid out that way
|
|
132
|
+
* on purpose.** The name takes what it needs and the size keeps its own width at
|
|
133
|
+
* the far edge, so a column of files reads as a column of names with a column of
|
|
134
|
+
* weights rather than as a ragged paragraph. The name truncates in the middle
|
|
135
|
+
* rather than at the end because a file extension is the part a reader recognises
|
|
136
|
+
* last, and a name cut before its extension is a name that could be anything.
|
|
137
|
+
*
|
|
138
|
+
* **An empty list renders `empty` or nothing, and never a placeholder row.** A
|
|
139
|
+
* row with no file in it is a row a reader will try to remove, and a row whose
|
|
140
|
+
* meter sits at zero is a transfer that is under way. The absence is either the
|
|
141
|
+
* caller's own sentence or no rows at all, which is what `FactList` does and for
|
|
142
|
+
* the same reason.
|
|
143
|
+
*
|
|
144
|
+
* It carries no directive. It holds no state: which files exist, how far each has
|
|
145
|
+
* got and which one is being removed are the caller's, and the meter it draws is
|
|
146
|
+
* a client Component that takes a number. A caller rendering a receipt from a
|
|
147
|
+
* server component gets a static list of what was sent, which is the right
|
|
148
|
+
* rendering of a receipt.
|
|
149
|
+
*/
|
|
150
|
+
declare function FileUpload({ files, onRemove, removeLabel, label, empty, formatSize, className, }: FileUploadProps): import("react").JSX.Element | null;
|
|
151
|
+
export { FileUpload };
|
|
152
|
+
//# sourceMappingURL=file-upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-upload.d.ts","sourceRoot":"","sources":["../../../src/components/ui/file-upload.tsx"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAM7C,8EAA8E;AAC9E,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;;OAMG;IACH,EAAE,EAAE,MAAM,CAAA;IACV,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;;;OAQG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACtC;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACtC,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAyCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,iBAAS,UAAU,CAAC,EAClB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,KAAK,EACL,KAAK,EACL,UAA8B,EAC9B,SAAS,GACV,EAAE,eAAe,sCAoFjB;AAED,OAAO,EAAE,UAAU,EAAE,CAAA"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { XIcon } from 'lucide-react';
|
|
3
|
+
import { useId } from 'react';
|
|
4
|
+
import { FieldError } from './field.js';
|
|
5
|
+
import { Progress } from './progress.js';
|
|
6
|
+
import { cn } from '../../lib/utils.js';
|
|
7
|
+
const KILOBYTE = 1024;
|
|
8
|
+
const MEGABYTE = KILOBYTE * 1024;
|
|
9
|
+
/**
|
|
10
|
+
* The default size sentence, in the runtime's locale.
|
|
11
|
+
*
|
|
12
|
+
* `Intl` is asked for the unit rather than for the abbreviation, because a unit
|
|
13
|
+
* has a localized spelling and an abbreviation does not: "kB" in one language is
|
|
14
|
+
* "Ko" in another and "KB" in a third, and hard-coding any of them ships one
|
|
15
|
+
* locale's abbreviation into every consumer's file list. The byte rung is first
|
|
16
|
+
* so that a four hundred byte file reads as four hundred bytes rather than as
|
|
17
|
+
* 0.4 of something, which is a number that looks like a measurement and is not
|
|
18
|
+
* one.
|
|
19
|
+
*/
|
|
20
|
+
const defaultFormatSize = (bytes) => {
|
|
21
|
+
const format = (unit, divisor) => new Intl.NumberFormat(undefined, {
|
|
22
|
+
style: 'unit',
|
|
23
|
+
unit,
|
|
24
|
+
maximumFractionDigits: divisor === 1 ? 0 : 1,
|
|
25
|
+
}).format(bytes / divisor);
|
|
26
|
+
if (bytes < KILOBYTE)
|
|
27
|
+
return format('byte', 1);
|
|
28
|
+
if (bytes < MEGABYTE)
|
|
29
|
+
return format('kilobyte', KILOBYTE);
|
|
30
|
+
return format('megabyte', MEGABYTE);
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* The remove control, drawn once and used by every row.
|
|
34
|
+
*
|
|
35
|
+
* The ink is the muted one and it is not themed per row, because every row is
|
|
36
|
+
* the same surface and a control that changed colour with the file's state would
|
|
37
|
+
* be a second thing to read. The target takes the 44px floor on a coarse pointer
|
|
38
|
+
* and the row grows to hold it, so a list of files on a phone is a list of rows
|
|
39
|
+
* a thumb can hit.
|
|
40
|
+
*/
|
|
41
|
+
const REMOVE_CONTROL = 'text-muted-foreground hover:text-foreground inline-flex size-5 shrink-0 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]';
|
|
42
|
+
/**
|
|
43
|
+
* The list of files a reader has chosen, one row each.
|
|
44
|
+
*
|
|
45
|
+
* **A size is a number of bytes and never a formatted string.** That is the
|
|
46
|
+
* decision the whole interface rests on. A caller that formats the size itself
|
|
47
|
+
* has to reimplement the division, the unit ladder, the rounding at each rung and
|
|
48
|
+
* the grouping separator, and has to do it again for every locale the product
|
|
49
|
+
* ships in, and again the first time somebody asks for gigabytes. Prism owns one
|
|
50
|
+
* ladder and asks `Intl` for the sentence, so a locale change is a locale change
|
|
51
|
+
* and not an audit. The cost is that a caller who genuinely wants a different
|
|
52
|
+
* ladder writes a function, which is the right place for that decision.
|
|
53
|
+
*
|
|
54
|
+
* **The meter is `Progress` and the failure is `FieldError`, and they were not
|
|
55
|
+
* chosen together.** A bar that reports a position is a bar: `Progress` already
|
|
56
|
+
* exposes the value, the minimum and the maximum through ARIA, already draws at
|
|
57
|
+
* the authored heights and already animates the fill on the base duration, and a
|
|
58
|
+
* second meter written here would be a second answer to how far along a task is.
|
|
59
|
+
* The failure is the opposite case and deliberately is not an `Alert`. An Alert
|
|
60
|
+
* is a callout with its own border, its own padding and its own role, and one
|
|
61
|
+
* inside a bordered row is a card inside a card: it changes the height of the row
|
|
62
|
+
* that failed, it moves the remove control, and it announces a page-level problem
|
|
63
|
+
* for a problem with one file. `FieldError` is one line of destructive text with
|
|
64
|
+
* `role="alert"`, which is what a per-file failure is. The trade is that a reader
|
|
65
|
+
* gets no recovery beside the error, and the remedy for that is on the Dropzone
|
|
66
|
+
* beside the field, where the caller's own limits are stated.
|
|
67
|
+
*
|
|
68
|
+
* **The name is a word and the size is a number, and they are laid out that way
|
|
69
|
+
* on purpose.** The name takes what it needs and the size keeps its own width at
|
|
70
|
+
* the far edge, so a column of files reads as a column of names with a column of
|
|
71
|
+
* weights rather than as a ragged paragraph. The name truncates in the middle
|
|
72
|
+
* rather than at the end because a file extension is the part a reader recognises
|
|
73
|
+
* last, and a name cut before its extension is a name that could be anything.
|
|
74
|
+
*
|
|
75
|
+
* **An empty list renders `empty` or nothing, and never a placeholder row.** A
|
|
76
|
+
* row with no file in it is a row a reader will try to remove, and a row whose
|
|
77
|
+
* meter sits at zero is a transfer that is under way. The absence is either the
|
|
78
|
+
* caller's own sentence or no rows at all, which is what `FactList` does and for
|
|
79
|
+
* the same reason.
|
|
80
|
+
*
|
|
81
|
+
* It carries no directive. It holds no state: which files exist, how far each has
|
|
82
|
+
* got and which one is being removed are the caller's, and the meter it draws is
|
|
83
|
+
* a client Component that takes a number. A caller rendering a receipt from a
|
|
84
|
+
* server component gets a static list of what was sent, which is the right
|
|
85
|
+
* rendering of a receipt.
|
|
86
|
+
*/
|
|
87
|
+
function FileUpload({ files, onRemove, removeLabel, label, empty, formatSize = defaultFormatSize, className, }) {
|
|
88
|
+
const generated = useId();
|
|
89
|
+
const labelId = `${generated}-label`;
|
|
90
|
+
if (onRemove !== undefined && removeLabel === undefined) {
|
|
91
|
+
throw new Error('FileUpload: a removable list needs removeLabel, because the accessible name of a remove control has ' +
|
|
92
|
+
'to name the file it removes and this Component cannot write that sentence. Pass a function of ' +
|
|
93
|
+
'the file name, or drop onRemove for a list the reader cannot change.');
|
|
94
|
+
}
|
|
95
|
+
if (files.length === 0 && empty === undefined)
|
|
96
|
+
return null;
|
|
97
|
+
return (_jsxs("div", { "data-slot": "file-upload", className: cn('flex w-full flex-col gap-1', className), children: [label === undefined ? null : (_jsx("span", { id: labelId, "data-slot": "file-upload-label", className: "text-muted-foreground text-xs font-medium tracking-wide uppercase", children: label })), files.length === 0 ? (_jsx("p", { "data-slot": "file-upload-empty", className: "text-muted-foreground text-sm", children: empty })) : (_jsx("ul", { "data-slot": "file-upload-list", "aria-labelledby": label === undefined ? undefined : labelId, className: "flex w-full flex-col", children: files.map((file) => (_jsxs("li", { "data-slot": "file-upload-file", "data-incomplete": (file.error !== undefined ||
|
|
98
|
+
(file.progress !== undefined && file.progress < 100)) ||
|
|
99
|
+
undefined, className: "border-border flex items-start gap-3 border-b py-2 last:border-b-0", children: [_jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1.5", children: [_jsxs("div", { className: "flex items-baseline justify-between gap-3", children: [_jsx("span", { "data-slot": "file-upload-name", className: "min-w-0 truncate text-sm font-medium", children: file.name }), _jsx("span", { "data-slot": "file-upload-size", className: "text-muted-foreground shrink-0 text-xs tabular-nums", children: formatSize(file.size) })] }), file.progress === undefined ? null : (_jsx(Progress, { value: file.progress, max: 100 })), file.error === undefined ? null : _jsx(FieldError, { children: file.error })] }), onRemove === undefined ? null : (_jsx("button", { type: "button", "data-slot": "file-upload-remove", "aria-label": removeLabel?.(file.name), onClick: () => onRemove(file.id), className: REMOVE_CONTROL, children: _jsx(XIcon, { className: "size-4", "aria-hidden": "true" }) }))] }, file.id))) }))] }));
|
|
100
|
+
}
|
|
101
|
+
export { FileUpload };
|