@nanisoft/prism-ui 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD-PARTY-NOTICES.md +22 -7
- package/dist/.tsbuildinfo +1 -1
- package/dist/blocks/about-01/about.d.ts +296 -0
- package/dist/blocks/about-01/about.d.ts.map +1 -0
- package/dist/blocks/about-01/about.js +103 -0
- package/dist/blocks/about-01/index.d.ts +3 -0
- package/dist/blocks/about-01/index.d.ts.map +1 -0
- package/dist/blocks/about-01/index.js +1 -0
- package/dist/blocks/accept-invite-01/accept-invite.d.ts +324 -0
- package/dist/blocks/accept-invite-01/accept-invite.d.ts.map +1 -0
- package/dist/blocks/accept-invite-01/accept-invite.js +230 -0
- package/dist/blocks/accept-invite-01/index.d.ts +3 -0
- package/dist/blocks/accept-invite-01/index.d.ts.map +1 -0
- package/dist/blocks/accept-invite-01/index.js +1 -0
- package/dist/blocks/account-01/account-01.d.ts +393 -0
- package/dist/blocks/account-01/account-01.d.ts.map +1 -0
- package/dist/blocks/account-01/account-01.js +215 -0
- package/dist/blocks/account-01/index.d.ts +3 -0
- package/dist/blocks/account-01/index.d.ts.map +1 -0
- package/dist/blocks/account-01/index.js +1 -0
- package/dist/blocks/activity-feed-01/activity-feed-01.d.ts +271 -0
- package/dist/blocks/activity-feed-01/activity-feed-01.d.ts.map +1 -0
- package/dist/blocks/activity-feed-01/activity-feed-01.js +185 -0
- package/dist/blocks/activity-feed-01/index.d.ts +3 -0
- package/dist/blocks/activity-feed-01/index.d.ts.map +1 -0
- package/dist/blocks/activity-feed-01/index.js +1 -0
- package/dist/blocks/address-book-01/address-book-01.d.ts +312 -0
- package/dist/blocks/address-book-01/address-book-01.d.ts.map +1 -0
- package/dist/blocks/address-book-01/address-book-01.js +233 -0
- package/dist/blocks/address-book-01/index.d.ts +3 -0
- package/dist/blocks/address-book-01/index.d.ts.map +1 -0
- package/dist/blocks/address-book-01/index.js +1 -0
- package/dist/blocks/audit-log-01/audit-log-01.d.ts +333 -0
- package/dist/blocks/audit-log-01/audit-log-01.d.ts.map +1 -0
- package/dist/blocks/audit-log-01/audit-log-01.js +211 -0
- package/dist/blocks/audit-log-01/index.d.ts +3 -0
- package/dist/blocks/audit-log-01/index.d.ts.map +1 -0
- package/dist/blocks/audit-log-01/index.js +1 -0
- package/dist/blocks/auth-form-01/auth-form.d.ts +40 -1
- package/dist/blocks/auth-form-01/auth-form.d.ts.map +1 -1
- package/dist/blocks/auth-form-01/auth-form.js +26 -3
- package/dist/blocks/awards-01/awards.d.ts +156 -0
- package/dist/blocks/awards-01/awards.d.ts.map +1 -0
- package/dist/blocks/awards-01/awards.js +102 -0
- package/dist/blocks/awards-01/index.d.ts +3 -0
- package/dist/blocks/awards-01/index.d.ts.map +1 -0
- package/dist/blocks/awards-01/index.js +1 -0
- package/dist/blocks/backdrop-01/backdrop.d.ts +268 -0
- package/dist/blocks/backdrop-01/backdrop.d.ts.map +1 -0
- package/dist/blocks/backdrop-01/backdrop.js +170 -0
- package/dist/blocks/backdrop-01/index.d.ts +3 -0
- package/dist/blocks/backdrop-01/index.d.ts.map +1 -0
- package/dist/blocks/backdrop-01/index.js +1 -0
- package/dist/blocks/bento-01/bento-01.d.ts +136 -0
- package/dist/blocks/bento-01/bento-01.d.ts.map +1 -0
- package/dist/blocks/bento-01/bento-01.js +97 -0
- package/dist/blocks/bento-01/index.d.ts +3 -0
- package/dist/blocks/bento-01/index.d.ts.map +1 -0
- package/dist/blocks/bento-01/index.js +1 -0
- package/dist/blocks/billing-source-01/billing-source-01.d.ts +379 -0
- package/dist/blocks/billing-source-01/billing-source-01.d.ts.map +1 -0
- package/dist/blocks/billing-source-01/billing-source-01.js +222 -0
- package/dist/blocks/billing-source-01/index.d.ts +3 -0
- package/dist/blocks/billing-source-01/index.d.ts.map +1 -0
- package/dist/blocks/billing-source-01/index.js +1 -0
- package/dist/blocks/bundle-01/bundle.d.ts +387 -0
- package/dist/blocks/bundle-01/bundle.d.ts.map +1 -0
- package/dist/blocks/bundle-01/bundle.js +153 -0
- package/dist/blocks/bundle-01/index.d.ts +3 -0
- package/dist/blocks/bundle-01/index.d.ts.map +1 -0
- package/dist/blocks/bundle-01/index.js +1 -0
- package/dist/blocks/calendar-01/calendar.d.ts +251 -0
- package/dist/blocks/calendar-01/calendar.d.ts.map +1 -0
- package/dist/blocks/calendar-01/calendar.js +191 -0
- package/dist/blocks/calendar-01/index.d.ts +3 -0
- package/dist/blocks/calendar-01/index.d.ts.map +1 -0
- package/dist/blocks/calendar-01/index.js +1 -0
- package/dist/blocks/capacity-01/capacity.d.ts +363 -0
- package/dist/blocks/capacity-01/capacity.d.ts.map +1 -0
- package/dist/blocks/capacity-01/capacity.js +208 -0
- package/dist/blocks/capacity-01/index.d.ts +3 -0
- package/dist/blocks/capacity-01/index.d.ts.map +1 -0
- package/dist/blocks/capacity-01/index.js +1 -0
- package/dist/blocks/careers-01/careers.d.ts +186 -0
- package/dist/blocks/careers-01/careers.d.ts.map +1 -0
- package/dist/blocks/careers-01/careers.js +83 -0
- package/dist/blocks/careers-01/index.d.ts +3 -0
- package/dist/blocks/careers-01/index.d.ts.map +1 -0
- package/dist/blocks/careers-01/index.js +1 -0
- package/dist/blocks/case-studies-01/case-studies.d.ts +192 -0
- package/dist/blocks/case-studies-01/case-studies.d.ts.map +1 -0
- package/dist/blocks/case-studies-01/case-studies.js +97 -0
- package/dist/blocks/case-studies-01/index.d.ts +3 -0
- package/dist/blocks/case-studies-01/index.d.ts.map +1 -0
- package/dist/blocks/case-studies-01/index.js +1 -0
- package/dist/blocks/case-study-01/case-study.d.ts +214 -0
- package/dist/blocks/case-study-01/case-study.d.ts.map +1 -0
- package/dist/blocks/case-study-01/case-study.js +79 -0
- package/dist/blocks/case-study-01/index.d.ts +3 -0
- package/dist/blocks/case-study-01/index.d.ts.map +1 -0
- package/dist/blocks/case-study-01/index.js +1 -0
- package/dist/blocks/changelog-01/changelog.d.ts +200 -0
- package/dist/blocks/changelog-01/changelog.d.ts.map +1 -0
- package/dist/blocks/changelog-01/changelog.js +155 -0
- package/dist/blocks/changelog-01/index.d.ts +3 -0
- package/dist/blocks/changelog-01/index.d.ts.map +1 -0
- package/dist/blocks/changelog-01/index.js +1 -0
- package/dist/blocks/chart-card-01/chart-card-01.d.ts +149 -0
- package/dist/blocks/chart-card-01/chart-card-01.d.ts.map +1 -0
- package/dist/blocks/chart-card-01/chart-card-01.js +81 -0
- package/dist/blocks/chart-card-01/index.d.ts +3 -0
- package/dist/blocks/chart-card-01/index.d.ts.map +1 -0
- package/dist/blocks/chart-card-01/index.js +1 -0
- package/dist/blocks/chart-group-01/chart-group-01.d.ts +138 -0
- package/dist/blocks/chart-group-01/chart-group-01.d.ts.map +1 -0
- package/dist/blocks/chart-group-01/chart-group-01.js +74 -0
- package/dist/blocks/chart-group-01/index.d.ts +3 -0
- package/dist/blocks/chart-group-01/index.d.ts.map +1 -0
- package/dist/blocks/chart-group-01/index.js +1 -0
- package/dist/blocks/code-sample-01/code-sample.d.ts +193 -0
- package/dist/blocks/code-sample-01/code-sample.d.ts.map +1 -0
- package/dist/blocks/code-sample-01/code-sample.js +104 -0
- package/dist/blocks/code-sample-01/index.d.ts +3 -0
- package/dist/blocks/code-sample-01/index.d.ts.map +1 -0
- package/dist/blocks/code-sample-01/index.js +1 -0
- package/dist/blocks/community-01/community.d.ts +183 -0
- package/dist/blocks/community-01/community.d.ts.map +1 -0
- package/dist/blocks/community-01/community.js +102 -0
- package/dist/blocks/community-01/index.d.ts +3 -0
- package/dist/blocks/community-01/index.d.ts.map +1 -0
- package/dist/blocks/community-01/index.js +1 -0
- package/dist/blocks/compare-01/compare.d.ts +184 -0
- package/dist/blocks/compare-01/compare.d.ts.map +1 -0
- package/dist/blocks/compare-01/compare.js +106 -0
- package/dist/blocks/compare-01/index.d.ts +3 -0
- package/dist/blocks/compare-01/index.d.ts.map +1 -0
- package/dist/blocks/compare-01/index.js +1 -0
- package/dist/blocks/compliance-01/compliance.d.ts +249 -0
- package/dist/blocks/compliance-01/compliance.d.ts.map +1 -0
- package/dist/blocks/compliance-01/compliance.js +130 -0
- package/dist/blocks/compliance-01/index.d.ts +3 -0
- package/dist/blocks/compliance-01/index.d.ts.map +1 -0
- package/dist/blocks/compliance-01/index.js +1 -0
- package/dist/blocks/consent-01/consent.d.ts +211 -0
- package/dist/blocks/consent-01/consent.d.ts.map +1 -0
- package/dist/blocks/consent-01/consent.js +101 -0
- package/dist/blocks/consent-01/index.d.ts +3 -0
- package/dist/blocks/consent-01/index.d.ts.map +1 -0
- package/dist/blocks/consent-01/index.js +1 -0
- package/dist/blocks/contact-01/contact.d.ts +319 -0
- package/dist/blocks/contact-01/contact.d.ts.map +1 -0
- package/dist/blocks/contact-01/contact.js +211 -0
- package/dist/blocks/contact-01/index.d.ts +3 -0
- package/dist/blocks/contact-01/index.d.ts.map +1 -0
- package/dist/blocks/contact-01/index.js +1 -0
- package/dist/blocks/content-grid-01/content-grid.d.ts +262 -0
- package/dist/blocks/content-grid-01/content-grid.d.ts.map +1 -0
- package/dist/blocks/content-grid-01/content-grid.js +155 -0
- package/dist/blocks/content-grid-01/index.d.ts +3 -0
- package/dist/blocks/content-grid-01/index.d.ts.map +1 -0
- package/dist/blocks/content-grid-01/index.js +1 -0
- package/dist/blocks/cta-01/cta.d.ts +7 -1
- package/dist/blocks/cta-01/cta.d.ts.map +1 -1
- package/dist/blocks/cta-01/cta.js +11 -2
- package/dist/blocks/dashboard-01/dashboard-01.d.ts +247 -0
- package/dist/blocks/dashboard-01/dashboard-01.d.ts.map +1 -0
- package/dist/blocks/dashboard-01/dashboard-01.js +141 -0
- package/dist/blocks/dashboard-01/index.d.ts +3 -0
- package/dist/blocks/dashboard-01/index.d.ts.map +1 -0
- package/dist/blocks/dashboard-01/index.js +1 -0
- package/dist/blocks/data-table-01/data-table.d.ts +12 -1
- package/dist/blocks/data-table-01/data-table.d.ts.map +1 -1
- package/dist/blocks/data-table-01/data-table.js +8 -5
- package/dist/blocks/delivery-01/delivery.d.ts +343 -0
- package/dist/blocks/delivery-01/delivery.d.ts.map +1 -0
- package/dist/blocks/delivery-01/delivery.js +212 -0
- package/dist/blocks/delivery-01/index.d.ts +3 -0
- package/dist/blocks/delivery-01/index.d.ts.map +1 -0
- package/dist/blocks/delivery-01/index.js +1 -0
- package/dist/blocks/directory-01/directory-01.d.ts +316 -0
- package/dist/blocks/directory-01/directory-01.d.ts.map +1 -0
- package/dist/blocks/directory-01/directory-01.js +252 -0
- package/dist/blocks/directory-01/index.d.ts +3 -0
- package/dist/blocks/directory-01/index.d.ts.map +1 -0
- package/dist/blocks/directory-01/index.js +1 -0
- package/dist/blocks/download-01/download.d.ts +261 -0
- package/dist/blocks/download-01/download.d.ts.map +1 -0
- package/dist/blocks/download-01/download.js +115 -0
- package/dist/blocks/download-01/index.d.ts +3 -0
- package/dist/blocks/download-01/index.d.ts.map +1 -0
- package/dist/blocks/download-01/index.js +1 -0
- package/dist/blocks/faq-01/faq.d.ts +128 -0
- package/dist/blocks/faq-01/faq.d.ts.map +1 -0
- package/dist/blocks/faq-01/faq.js +53 -0
- package/dist/blocks/faq-01/index.d.ts +3 -0
- package/dist/blocks/faq-01/index.d.ts.map +1 -0
- package/dist/blocks/faq-01/index.js +1 -0
- package/dist/blocks/feature-rows-01/feature-rows-01.d.ts +158 -0
- package/dist/blocks/feature-rows-01/feature-rows-01.d.ts.map +1 -0
- package/dist/blocks/feature-rows-01/feature-rows-01.js +81 -0
- package/dist/blocks/feature-rows-01/index.d.ts +3 -0
- package/dist/blocks/feature-rows-01/index.d.ts.map +1 -0
- package/dist/blocks/feature-rows-01/index.js +1 -0
- package/dist/blocks/feedback-01/feedback.d.ts +235 -0
- package/dist/blocks/feedback-01/feedback.d.ts.map +1 -0
- package/dist/blocks/feedback-01/feedback.js +113 -0
- package/dist/blocks/feedback-01/index.d.ts +3 -0
- package/dist/blocks/feedback-01/index.d.ts.map +1 -0
- package/dist/blocks/feedback-01/index.js +1 -0
- package/dist/blocks/field-map-01/field-map.d.ts +247 -0
- package/dist/blocks/field-map-01/field-map.d.ts.map +1 -0
- package/dist/blocks/field-map-01/field-map.js +183 -0
- package/dist/blocks/field-map-01/index.d.ts +3 -0
- package/dist/blocks/field-map-01/index.d.ts.map +1 -0
- package/dist/blocks/field-map-01/index.js +1 -0
- package/dist/blocks/forgot-password-01/forgot-password.d.ts +288 -0
- package/dist/blocks/forgot-password-01/forgot-password.d.ts.map +1 -0
- package/dist/blocks/forgot-password-01/forgot-password.js +190 -0
- package/dist/blocks/forgot-password-01/index.d.ts +3 -0
- package/dist/blocks/forgot-password-01/index.d.ts.map +1 -0
- package/dist/blocks/forgot-password-01/index.js +1 -0
- package/dist/blocks/gallery-01/gallery.d.ts +208 -0
- package/dist/blocks/gallery-01/gallery.d.ts.map +1 -0
- package/dist/blocks/gallery-01/gallery.js +174 -0
- package/dist/blocks/gallery-01/index.d.ts +3 -0
- package/dist/blocks/gallery-01/index.d.ts.map +1 -0
- package/dist/blocks/gallery-01/index.js +1 -0
- package/dist/blocks/gantt-01/gantt.d.ts +290 -0
- package/dist/blocks/gantt-01/gantt.d.ts.map +1 -0
- package/dist/blocks/gantt-01/gantt.js +224 -0
- package/dist/blocks/gantt-01/index.d.ts +3 -0
- package/dist/blocks/gantt-01/index.d.ts.map +1 -0
- package/dist/blocks/gantt-01/index.js +1 -0
- package/dist/blocks/handoff-01/handoff-01.d.ts +326 -0
- package/dist/blocks/handoff-01/handoff-01.d.ts.map +1 -0
- package/dist/blocks/handoff-01/handoff-01.js +180 -0
- package/dist/blocks/handoff-01/index.d.ts +3 -0
- package/dist/blocks/handoff-01/index.d.ts.map +1 -0
- package/dist/blocks/handoff-01/index.js +1 -0
- package/dist/blocks/help-01/help.d.ts +254 -0
- package/dist/blocks/help-01/help.d.ts.map +1 -0
- package/dist/blocks/help-01/help.js +188 -0
- package/dist/blocks/help-01/index.d.ts +3 -0
- package/dist/blocks/help-01/index.d.ts.map +1 -0
- package/dist/blocks/help-01/index.js +1 -0
- package/dist/blocks/hero-01/hero.d.ts +105 -34
- package/dist/blocks/hero-01/hero.d.ts.map +1 -1
- package/dist/blocks/hero-01/hero.js +23 -15
- package/dist/blocks/hero-01/index.d.ts +1 -1
- package/dist/blocks/hero-01/index.d.ts.map +1 -1
- package/dist/blocks/hero-02/hero-02.d.ts +244 -0
- package/dist/blocks/hero-02/hero-02.d.ts.map +1 -0
- package/dist/blocks/hero-02/hero-02.js +87 -0
- package/dist/blocks/hero-02/index.d.ts +3 -0
- package/dist/blocks/hero-02/index.d.ts.map +1 -0
- package/dist/blocks/hero-02/index.js +1 -0
- package/dist/blocks/hero-03/hero-03.d.ts +247 -0
- package/dist/blocks/hero-03/hero-03.d.ts.map +1 -0
- package/dist/blocks/hero-03/hero-03.js +93 -0
- package/dist/blocks/hero-03/index.d.ts +3 -0
- package/dist/blocks/hero-03/index.d.ts.map +1 -0
- package/dist/blocks/hero-03/index.js +1 -0
- package/dist/blocks/history-01/history-01.d.ts +414 -0
- package/dist/blocks/history-01/history-01.d.ts.map +1 -0
- package/dist/blocks/history-01/history-01.js +285 -0
- package/dist/blocks/history-01/index.d.ts +3 -0
- package/dist/blocks/history-01/index.d.ts.map +1 -0
- package/dist/blocks/history-01/index.js +1 -0
- package/dist/blocks/inbox-01/inbox.d.ts +349 -0
- package/dist/blocks/inbox-01/inbox.d.ts.map +1 -0
- package/dist/blocks/inbox-01/inbox.js +244 -0
- package/dist/blocks/inbox-01/index.d.ts +3 -0
- package/dist/blocks/inbox-01/index.d.ts.map +1 -0
- package/dist/blocks/inbox-01/index.js +1 -0
- package/dist/blocks/index.d.ts +203 -0
- package/dist/blocks/index.d.ts.map +1 -1
- package/dist/blocks/index.js +118 -0
- package/dist/blocks/industries-01/index.d.ts +3 -0
- package/dist/blocks/industries-01/index.d.ts.map +1 -0
- package/dist/blocks/industries-01/index.js +1 -0
- package/dist/blocks/industries-01/industries.d.ts +164 -0
- package/dist/blocks/industries-01/industries.d.ts.map +1 -0
- package/dist/blocks/industries-01/industries.js +96 -0
- package/dist/blocks/intake-01/index.d.ts +3 -0
- package/dist/blocks/intake-01/index.d.ts.map +1 -0
- package/dist/blocks/intake-01/index.js +1 -0
- package/dist/blocks/intake-01/intake-01.d.ts +305 -0
- package/dist/blocks/intake-01/intake-01.d.ts.map +1 -0
- package/dist/blocks/intake-01/intake-01.js +178 -0
- package/dist/blocks/integration-01/index.d.ts +3 -0
- package/dist/blocks/integration-01/index.d.ts.map +1 -0
- package/dist/blocks/integration-01/index.js +1 -0
- package/dist/blocks/integration-01/integration.d.ts +226 -0
- package/dist/blocks/integration-01/integration.d.ts.map +1 -0
- package/dist/blocks/integration-01/integration.js +170 -0
- package/dist/blocks/invite-user-01/index.d.ts +3 -0
- package/dist/blocks/invite-user-01/index.d.ts.map +1 -0
- package/dist/blocks/invite-user-01/index.js +1 -0
- package/dist/blocks/invite-user-01/invite-user.d.ts +317 -0
- package/dist/blocks/invite-user-01/invite-user.d.ts.map +1 -0
- package/dist/blocks/invite-user-01/invite-user.js +228 -0
- package/dist/blocks/issue-detail-01/index.d.ts +3 -0
- package/dist/blocks/issue-detail-01/index.d.ts.map +1 -0
- package/dist/blocks/issue-detail-01/index.js +1 -0
- package/dist/blocks/issue-detail-01/issue-detail.d.ts +355 -0
- package/dist/blocks/issue-detail-01/issue-detail.d.ts.map +1 -0
- package/dist/blocks/issue-detail-01/issue-detail.js +187 -0
- package/dist/blocks/issue-list-01/index.d.ts +3 -0
- package/dist/blocks/issue-list-01/index.d.ts.map +1 -0
- package/dist/blocks/issue-list-01/index.js +1 -0
- package/dist/blocks/issue-list-01/issue-list.d.ts +298 -0
- package/dist/blocks/issue-list-01/issue-list.d.ts.map +1 -0
- package/dist/blocks/issue-list-01/issue-list.js +284 -0
- package/dist/blocks/kanban-01/index.d.ts +3 -0
- package/dist/blocks/kanban-01/index.d.ts.map +1 -0
- package/dist/blocks/kanban-01/index.js +1 -0
- package/dist/blocks/kanban-01/kanban.d.ts +278 -0
- package/dist/blocks/kanban-01/kanban.d.ts.map +1 -0
- package/dist/blocks/kanban-01/kanban.js +144 -0
- package/dist/blocks/leaderboard-01/index.d.ts +3 -0
- package/dist/blocks/leaderboard-01/index.d.ts.map +1 -0
- package/dist/blocks/leaderboard-01/index.js +1 -0
- package/dist/blocks/leaderboard-01/leaderboard.d.ts +250 -0
- package/dist/blocks/leaderboard-01/leaderboard.d.ts.map +1 -0
- package/dist/blocks/leaderboard-01/leaderboard.js +121 -0
- package/dist/blocks/login-01/index.d.ts +3 -0
- package/dist/blocks/login-01/index.d.ts.map +1 -0
- package/dist/blocks/login-01/index.js +1 -0
- package/dist/blocks/login-01/login-01.d.ts +356 -0
- package/dist/blocks/login-01/login-01.d.ts.map +1 -0
- package/dist/blocks/login-01/login-01.js +249 -0
- package/dist/blocks/logo-cloud-01/index.d.ts +3 -0
- package/dist/blocks/logo-cloud-01/index.d.ts.map +1 -0
- package/dist/blocks/logo-cloud-01/index.js +1 -0
- package/dist/blocks/logo-cloud-01/logo-cloud.d.ts +181 -0
- package/dist/blocks/logo-cloud-01/logo-cloud.d.ts.map +1 -0
- package/dist/blocks/logo-cloud-01/logo-cloud.js +118 -0
- package/dist/blocks/magic-link-01/index.d.ts +3 -0
- package/dist/blocks/magic-link-01/index.d.ts.map +1 -0
- package/dist/blocks/magic-link-01/index.js +1 -0
- package/dist/blocks/magic-link-01/magic-link-01.d.ts +367 -0
- package/dist/blocks/magic-link-01/magic-link-01.d.ts.map +1 -0
- package/dist/blocks/magic-link-01/magic-link-01.js +233 -0
- package/dist/blocks/member-list-01/index.d.ts +3 -0
- package/dist/blocks/member-list-01/index.d.ts.map +1 -0
- package/dist/blocks/member-list-01/index.js +1 -0
- package/dist/blocks/member-list-01/member-list.d.ts +192 -0
- package/dist/blocks/member-list-01/member-list.d.ts.map +1 -0
- package/dist/blocks/member-list-01/member-list.js +142 -0
- package/dist/blocks/milestone-timeline-01/index.d.ts +3 -0
- package/dist/blocks/milestone-timeline-01/index.d.ts.map +1 -0
- package/dist/blocks/milestone-timeline-01/index.js +1 -0
- package/dist/blocks/milestone-timeline-01/milestone-timeline.d.ts +217 -0
- package/dist/blocks/milestone-timeline-01/milestone-timeline.d.ts.map +1 -0
- package/dist/blocks/milestone-timeline-01/milestone-timeline.js +173 -0
- package/dist/blocks/newsletter-01/index.d.ts +3 -0
- package/dist/blocks/newsletter-01/index.d.ts.map +1 -0
- package/dist/blocks/newsletter-01/index.js +1 -0
- package/dist/blocks/newsletter-01/newsletter.d.ts +216 -0
- package/dist/blocks/newsletter-01/newsletter.d.ts.map +1 -0
- package/dist/blocks/newsletter-01/newsletter.js +102 -0
- package/dist/blocks/notification-center-01/index.d.ts +3 -0
- package/dist/blocks/notification-center-01/index.d.ts.map +1 -0
- package/dist/blocks/notification-center-01/index.js +1 -0
- package/dist/blocks/notification-center-01/notification-center-01.d.ts +341 -0
- package/dist/blocks/notification-center-01/notification-center-01.d.ts.map +1 -0
- package/dist/blocks/notification-center-01/notification-center-01.js +203 -0
- package/dist/blocks/offer-01/index.d.ts +3 -0
- package/dist/blocks/offer-01/index.d.ts.map +1 -0
- package/dist/blocks/offer-01/index.js +1 -0
- package/dist/blocks/offer-01/offer.d.ts +139 -0
- package/dist/blocks/offer-01/offer.d.ts.map +1 -0
- package/dist/blocks/offer-01/offer.js +81 -0
- package/dist/blocks/offering-01/index.d.ts +3 -0
- package/dist/blocks/offering-01/index.d.ts.map +1 -0
- package/dist/blocks/offering-01/index.js +1 -0
- package/dist/blocks/offering-01/offering.d.ts +245 -0
- package/dist/blocks/offering-01/offering.d.ts.map +1 -0
- package/dist/blocks/offering-01/offering.js +144 -0
- package/dist/blocks/offering-categories-01/index.d.ts +3 -0
- package/dist/blocks/offering-categories-01/index.d.ts.map +1 -0
- package/dist/blocks/offering-categories-01/index.js +1 -0
- package/dist/blocks/offering-categories-01/offering-categories.d.ts +248 -0
- package/dist/blocks/offering-categories-01/offering-categories.d.ts.map +1 -0
- package/dist/blocks/offering-categories-01/offering-categories.js +153 -0
- package/dist/blocks/offering-list-01/index.d.ts +3 -0
- package/dist/blocks/offering-list-01/index.d.ts.map +1 -0
- package/dist/blocks/offering-list-01/index.js +1 -0
- package/dist/blocks/offering-list-01/offering-list.d.ts +362 -0
- package/dist/blocks/offering-list-01/offering-list.d.ts.map +1 -0
- package/dist/blocks/offering-list-01/offering-list.js +366 -0
- package/dist/blocks/onboarding-01/index.d.ts +3 -0
- package/dist/blocks/onboarding-01/index.d.ts.map +1 -0
- package/dist/blocks/onboarding-01/index.js +1 -0
- package/dist/blocks/onboarding-01/onboarding.d.ts +199 -0
- package/dist/blocks/onboarding-01/onboarding.d.ts.map +1 -0
- package/dist/blocks/onboarding-01/onboarding.js +182 -0
- package/dist/blocks/ops-checklist-01/index.d.ts +3 -0
- package/dist/blocks/ops-checklist-01/index.d.ts.map +1 -0
- package/dist/blocks/ops-checklist-01/index.js +1 -0
- package/dist/blocks/ops-checklist-01/ops-checklist-01.d.ts +308 -0
- package/dist/blocks/ops-checklist-01/ops-checklist-01.d.ts.map +1 -0
- package/dist/blocks/ops-checklist-01/ops-checklist-01.js +165 -0
- package/dist/blocks/page-header-01/index.d.ts +1 -1
- package/dist/blocks/page-header-01/index.d.ts.map +1 -1
- package/dist/blocks/page-header-01/page-header.d.ts +124 -11
- package/dist/blocks/page-header-01/page-header.d.ts.map +1 -1
- package/dist/blocks/page-header-01/page-header.js +25 -9
- package/dist/blocks/passkey-01/index.d.ts +3 -0
- package/dist/blocks/passkey-01/index.d.ts.map +1 -0
- package/dist/blocks/passkey-01/index.js +1 -0
- package/dist/blocks/passkey-01/passkey-01.d.ts +334 -0
- package/dist/blocks/passkey-01/passkey-01.d.ts.map +1 -0
- package/dist/blocks/passkey-01/passkey-01.js +192 -0
- package/dist/blocks/permission-matrix-01/index.d.ts +3 -0
- package/dist/blocks/permission-matrix-01/index.d.ts.map +1 -0
- package/dist/blocks/permission-matrix-01/index.js +1 -0
- package/dist/blocks/permission-matrix-01/permission-matrix.d.ts +282 -0
- package/dist/blocks/permission-matrix-01/permission-matrix.d.ts.map +1 -0
- package/dist/blocks/permission-matrix-01/permission-matrix.js +173 -0
- package/dist/blocks/pricing-01/index.d.ts +1 -0
- package/dist/blocks/pricing-01/index.d.ts.map +1 -1
- package/dist/blocks/pricing-01/pricing.d.ts +118 -1
- package/dist/blocks/pricing-01/pricing.d.ts.map +1 -1
- package/dist/blocks/pricing-01/pricing.js +9 -2
- package/dist/blocks/pricing-compare-01/index.d.ts +3 -0
- package/dist/blocks/pricing-compare-01/index.d.ts.map +1 -0
- package/dist/blocks/pricing-compare-01/index.js +1 -0
- package/dist/blocks/pricing-compare-01/pricing-compare.d.ts +277 -0
- package/dist/blocks/pricing-compare-01/pricing-compare.d.ts.map +1 -0
- package/dist/blocks/pricing-compare-01/pricing-compare.js +126 -0
- package/dist/blocks/project-01/index.d.ts +3 -0
- package/dist/blocks/project-01/index.d.ts.map +1 -0
- package/dist/blocks/project-01/index.js +1 -0
- package/dist/blocks/project-01/project.d.ts +323 -0
- package/dist/blocks/project-01/project.d.ts.map +1 -0
- package/dist/blocks/project-01/project.js +247 -0
- package/dist/blocks/project-dashboard-01/index.d.ts +3 -0
- package/dist/blocks/project-dashboard-01/index.d.ts.map +1 -0
- package/dist/blocks/project-dashboard-01/index.js +1 -0
- package/dist/blocks/project-dashboard-01/project-dashboard.d.ts +200 -0
- package/dist/blocks/project-dashboard-01/project-dashboard.d.ts.map +1 -0
- package/dist/blocks/project-dashboard-01/project-dashboard.js +124 -0
- package/dist/blocks/project-list-01/index.d.ts +3 -0
- package/dist/blocks/project-list-01/index.d.ts.map +1 -0
- package/dist/blocks/project-list-01/index.js +1 -0
- package/dist/blocks/project-list-01/project-list.d.ts +301 -0
- package/dist/blocks/project-list-01/project-list.d.ts.map +1 -0
- package/dist/blocks/project-list-01/project-list.js +305 -0
- package/dist/blocks/provisioning-01/index.d.ts +3 -0
- package/dist/blocks/provisioning-01/index.d.ts.map +1 -0
- package/dist/blocks/provisioning-01/index.js +1 -0
- package/dist/blocks/provisioning-01/provisioning.d.ts +357 -0
- package/dist/blocks/provisioning-01/provisioning.d.ts.map +1 -0
- package/dist/blocks/provisioning-01/provisioning.js +230 -0
- package/dist/blocks/quick-view-01/index.d.ts +3 -0
- package/dist/blocks/quick-view-01/index.d.ts.map +1 -0
- package/dist/blocks/quick-view-01/index.js +1 -0
- package/dist/blocks/quick-view-01/quick-view.d.ts +215 -0
- package/dist/blocks/quick-view-01/quick-view.d.ts.map +1 -0
- package/dist/blocks/quick-view-01/quick-view.js +136 -0
- package/dist/blocks/rate-card-01/index.d.ts +3 -0
- package/dist/blocks/rate-card-01/index.d.ts.map +1 -0
- package/dist/blocks/rate-card-01/index.js +1 -0
- package/dist/blocks/rate-card-01/rate-card.d.ts +184 -0
- package/dist/blocks/rate-card-01/rate-card.d.ts.map +1 -0
- package/dist/blocks/rate-card-01/rate-card.js +79 -0
- package/dist/blocks/reset-password-01/index.d.ts +3 -0
- package/dist/blocks/reset-password-01/index.d.ts.map +1 -0
- package/dist/blocks/reset-password-01/index.js +1 -0
- package/dist/blocks/reset-password-01/reset-password.d.ts +276 -0
- package/dist/blocks/reset-password-01/reset-password.d.ts.map +1 -0
- package/dist/blocks/reset-password-01/reset-password.js +175 -0
- package/dist/blocks/resource-list-01/index.d.ts +3 -0
- package/dist/blocks/resource-list-01/index.d.ts.map +1 -0
- package/dist/blocks/resource-list-01/index.js +1 -0
- package/dist/blocks/resource-list-01/resource-list.d.ts +237 -0
- package/dist/blocks/resource-list-01/resource-list.d.ts.map +1 -0
- package/dist/blocks/resource-list-01/resource-list.js +154 -0
- package/dist/blocks/retention-01/index.d.ts +3 -0
- package/dist/blocks/retention-01/index.d.ts.map +1 -0
- package/dist/blocks/retention-01/index.js +1 -0
- package/dist/blocks/retention-01/retention.d.ts +255 -0
- package/dist/blocks/retention-01/retention.d.ts.map +1 -0
- package/dist/blocks/retention-01/retention.js +145 -0
- package/dist/blocks/run-console-01/run-console.d.ts +14 -1
- package/dist/blocks/run-console-01/run-console.d.ts.map +1 -1
- package/dist/blocks/run-console-01/run-console.js +3 -2
- package/dist/blocks/services-01/index.d.ts +3 -0
- package/dist/blocks/services-01/index.d.ts.map +1 -0
- package/dist/blocks/services-01/index.js +1 -0
- package/dist/blocks/services-01/services.d.ts +159 -0
- package/dist/blocks/services-01/services.d.ts.map +1 -0
- package/dist/blocks/services-01/services.js +81 -0
- package/dist/blocks/settings-integrations-01/index.d.ts +3 -0
- package/dist/blocks/settings-integrations-01/index.d.ts.map +1 -0
- package/dist/blocks/settings-integrations-01/index.js +1 -0
- package/dist/blocks/settings-integrations-01/settings-integrations.d.ts +246 -0
- package/dist/blocks/settings-integrations-01/settings-integrations.d.ts.map +1 -0
- package/dist/blocks/settings-integrations-01/settings-integrations.js +213 -0
- package/dist/blocks/settings-members-01/index.d.ts +3 -0
- package/dist/blocks/settings-members-01/index.d.ts.map +1 -0
- package/dist/blocks/settings-members-01/index.js +1 -0
- package/dist/blocks/settings-members-01/settings-members.d.ts +396 -0
- package/dist/blocks/settings-members-01/settings-members.d.ts.map +1 -0
- package/dist/blocks/settings-members-01/settings-members.js +255 -0
- package/dist/blocks/settings-notifications-01/index.d.ts +3 -0
- package/dist/blocks/settings-notifications-01/index.d.ts.map +1 -0
- package/dist/blocks/settings-notifications-01/index.js +1 -0
- package/dist/blocks/settings-notifications-01/settings-notifications.d.ts +270 -0
- package/dist/blocks/settings-notifications-01/settings-notifications.d.ts.map +1 -0
- package/dist/blocks/settings-notifications-01/settings-notifications.js +202 -0
- package/dist/blocks/settings-security-01/index.d.ts +3 -0
- package/dist/blocks/settings-security-01/index.d.ts.map +1 -0
- package/dist/blocks/settings-security-01/index.js +1 -0
- package/dist/blocks/settings-security-01/settings-security.d.ts +439 -0
- package/dist/blocks/settings-security-01/settings-security.d.ts.map +1 -0
- package/dist/blocks/settings-security-01/settings-security.js +244 -0
- package/dist/blocks/shortlist-01/index.d.ts +3 -0
- package/dist/blocks/shortlist-01/index.d.ts.map +1 -0
- package/dist/blocks/shortlist-01/index.js +1 -0
- package/dist/blocks/shortlist-01/shortlist-01.d.ts +337 -0
- package/dist/blocks/shortlist-01/shortlist-01.d.ts.map +1 -0
- package/dist/blocks/shortlist-01/shortlist-01.js +191 -0
- package/dist/blocks/showcase-01/index.d.ts +3 -0
- package/dist/blocks/showcase-01/index.d.ts.map +1 -0
- package/dist/blocks/showcase-01/index.js +1 -0
- package/dist/blocks/showcase-01/showcase-01.d.ts +238 -0
- package/dist/blocks/showcase-01/showcase-01.d.ts.map +1 -0
- package/dist/blocks/showcase-01/showcase-01.js +84 -0
- package/dist/blocks/signup-01/index.d.ts +3 -0
- package/dist/blocks/signup-01/index.d.ts.map +1 -0
- package/dist/blocks/signup-01/index.js +1 -0
- package/dist/blocks/signup-01/signup-01.d.ts +405 -0
- package/dist/blocks/signup-01/signup-01.d.ts.map +1 -0
- package/dist/blocks/signup-01/signup-01.js +209 -0
- package/dist/blocks/site-footer/site-footer.d.ts +18 -1
- package/dist/blocks/site-footer/site-footer.d.ts.map +1 -1
- package/dist/blocks/site-footer/site-footer.js +8 -2
- package/dist/blocks/site-header/site-header.js +1 -1
- package/dist/blocks/site-navbar/site-navbar.d.ts +37 -3
- package/dist/blocks/site-navbar/site-navbar.d.ts.map +1 -1
- package/dist/blocks/site-navbar/site-navbar.js +33 -4
- package/dist/blocks/spec-table-01/index.d.ts +3 -0
- package/dist/blocks/spec-table-01/index.d.ts.map +1 -0
- package/dist/blocks/spec-table-01/index.js +1 -0
- package/dist/blocks/spec-table-01/spec-table.d.ts +293 -0
- package/dist/blocks/spec-table-01/spec-table.d.ts.map +1 -0
- package/dist/blocks/spec-table-01/spec-table.js +217 -0
- package/dist/blocks/story-01/index.d.ts +3 -0
- package/dist/blocks/story-01/index.d.ts.map +1 -0
- package/dist/blocks/story-01/index.js +1 -0
- package/dist/blocks/story-01/story.d.ts +153 -0
- package/dist/blocks/story-01/story.d.ts.map +1 -0
- package/dist/blocks/story-01/story.js +103 -0
- package/dist/blocks/summary-01/index.d.ts +3 -0
- package/dist/blocks/summary-01/index.d.ts.map +1 -0
- package/dist/blocks/summary-01/index.js +1 -0
- package/dist/blocks/summary-01/summary.d.ts +300 -0
- package/dist/blocks/summary-01/summary.d.ts.map +1 -0
- package/dist/blocks/summary-01/summary.js +174 -0
- package/dist/blocks/team-01/index.d.ts +3 -0
- package/dist/blocks/team-01/index.d.ts.map +1 -0
- package/dist/blocks/team-01/index.js +1 -0
- package/dist/blocks/team-01/team.d.ts +176 -0
- package/dist/blocks/team-01/team.d.ts.map +1 -0
- package/dist/blocks/team-01/team.js +117 -0
- package/dist/blocks/testimonial-01/index.d.ts +3 -0
- package/dist/blocks/testimonial-01/index.d.ts.map +1 -0
- package/dist/blocks/testimonial-01/index.js +1 -0
- package/dist/blocks/testimonial-01/testimonial.d.ts +173 -0
- package/dist/blocks/testimonial-01/testimonial.d.ts.map +1 -0
- package/dist/blocks/testimonial-01/testimonial.js +87 -0
- package/dist/blocks/todo-01/index.d.ts +3 -0
- package/dist/blocks/todo-01/index.d.ts.map +1 -0
- package/dist/blocks/todo-01/index.js +1 -0
- package/dist/blocks/todo-01/todo.d.ts +286 -0
- package/dist/blocks/todo-01/todo.d.ts.map +1 -0
- package/dist/blocks/todo-01/todo.js +149 -0
- package/dist/blocks/trend-01/index.d.ts +3 -0
- package/dist/blocks/trend-01/index.d.ts.map +1 -0
- package/dist/blocks/trend-01/index.js +1 -0
- package/dist/blocks/trend-01/trend.d.ts +184 -0
- package/dist/blocks/trend-01/trend.d.ts.map +1 -0
- package/dist/blocks/trend-01/trend.js +99 -0
- package/dist/blocks/trust-strip-01/index.d.ts +3 -0
- package/dist/blocks/trust-strip-01/index.d.ts.map +1 -0
- package/dist/blocks/trust-strip-01/index.js +1 -0
- package/dist/blocks/trust-strip-01/trust-strip-01.d.ts +139 -0
- package/dist/blocks/trust-strip-01/trust-strip-01.d.ts.map +1 -0
- package/dist/blocks/trust-strip-01/trust-strip-01.js +58 -0
- package/dist/blocks/two-factor-01/index.d.ts +3 -0
- package/dist/blocks/two-factor-01/index.d.ts.map +1 -0
- package/dist/blocks/two-factor-01/index.js +1 -0
- package/dist/blocks/two-factor-01/two-factor-01.d.ts +440 -0
- package/dist/blocks/two-factor-01/two-factor-01.d.ts.map +1 -0
- package/dist/blocks/two-factor-01/two-factor-01.js +273 -0
- package/dist/blocks/user-profile-01/index.d.ts +3 -0
- package/dist/blocks/user-profile-01/index.d.ts.map +1 -0
- package/dist/blocks/user-profile-01/index.js +1 -0
- package/dist/blocks/user-profile-01/user-profile-01.d.ts +258 -0
- package/dist/blocks/user-profile-01/user-profile-01.d.ts.map +1 -0
- package/dist/blocks/user-profile-01/user-profile-01.js +158 -0
- package/dist/blocks/verify-email-01/index.d.ts +3 -0
- package/dist/blocks/verify-email-01/index.d.ts.map +1 -0
- package/dist/blocks/verify-email-01/index.js +1 -0
- package/dist/blocks/verify-email-01/verify-email.d.ts +262 -0
- package/dist/blocks/verify-email-01/verify-email.d.ts.map +1 -0
- package/dist/blocks/verify-email-01/verify-email.js +190 -0
- package/dist/blocks/waitlist-01/index.d.ts +3 -0
- package/dist/blocks/waitlist-01/index.d.ts.map +1 -0
- package/dist/blocks/waitlist-01/index.js +1 -0
- package/dist/blocks/waitlist-01/waitlist.d.ts +254 -0
- package/dist/blocks/waitlist-01/waitlist.d.ts.map +1 -0
- package/dist/blocks/waitlist-01/waitlist.js +75 -0
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +1641 -1
- package/dist/components/index.d.ts +114 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +134 -0
- package/dist/components/ui/accordion.d.ts.map +1 -1
- package/dist/components/ui/accordion.js +9 -2
- package/dist/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/components/ui/alert-dialog.js +22 -4
- package/dist/components/ui/announcement.d.ts +169 -0
- package/dist/components/ui/announcement.d.ts.map +1 -0
- package/dist/components/ui/announcement.js +123 -0
- package/dist/components/ui/avatar-group.d.ts +176 -0
- package/dist/components/ui/avatar-group.d.ts.map +1 -0
- package/dist/components/ui/avatar-group.js +135 -0
- package/dist/components/ui/billing-source.d.ts +293 -0
- package/dist/components/ui/billing-source.d.ts.map +1 -0
- package/dist/components/ui/billing-source.js +136 -0
- package/dist/components/ui/button.d.ts +16 -1
- package/dist/components/ui/button.d.ts.map +1 -1
- package/dist/components/ui/button.js +17 -2
- package/dist/components/ui/calendar.d.ts +9 -0
- package/dist/components/ui/calendar.d.ts.map +1 -1
- package/dist/components/ui/calendar.js +30 -2
- package/dist/components/ui/carousel.d.ts +7 -0
- package/dist/components/ui/carousel.d.ts.map +1 -1
- package/dist/components/ui/carousel.js +58 -1
- package/dist/components/ui/chart.d.ts +334 -0
- package/dist/components/ui/chart.d.ts.map +1 -0
- package/dist/components/ui/chart.js +369 -0
- package/dist/components/ui/checkbox.d.ts +10 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -1
- package/dist/components/ui/checkbox.js +19 -1
- package/dist/components/ui/checklist.d.ts +262 -0
- package/dist/components/ui/checklist.d.ts.map +1 -0
- package/dist/components/ui/checklist.js +135 -0
- package/dist/components/ui/choice-card.d.ts +273 -0
- package/dist/components/ui/choice-card.d.ts.map +1 -0
- package/dist/components/ui/choice-card.js +138 -0
- package/dist/components/ui/code-block.d.ts +182 -0
- package/dist/components/ui/code-block.d.ts.map +1 -0
- package/dist/components/ui/code-block.js +108 -0
- package/dist/components/ui/cohort-grid.d.ts +210 -0
- package/dist/components/ui/cohort-grid.d.ts.map +1 -0
- package/dist/components/ui/cohort-grid.js +202 -0
- package/dist/components/ui/collapsible.d.ts +11 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -1
- package/dist/components/ui/collapsible.js +13 -2
- package/dist/components/ui/combobox.d.ts +4 -1
- package/dist/components/ui/combobox.d.ts.map +1 -1
- package/dist/components/ui/combobox.js +20 -4
- package/dist/components/ui/command-palette.d.ts +11 -0
- package/dist/components/ui/command-palette.d.ts.map +1 -1
- package/dist/components/ui/command-palette.js +49 -3
- package/dist/components/ui/contribution-graph.d.ts +156 -0
- package/dist/components/ui/contribution-graph.d.ts.map +1 -0
- package/dist/components/ui/contribution-graph.js +170 -0
- package/dist/components/ui/creatable-combobox.d.ts +153 -0
- package/dist/components/ui/creatable-combobox.d.ts.map +1 -0
- package/dist/components/ui/creatable-combobox.js +285 -0
- package/dist/components/ui/data-toolbar.d.ts +133 -0
- package/dist/components/ui/data-toolbar.d.ts.map +1 -0
- package/dist/components/ui/data-toolbar.js +67 -0
- package/dist/components/ui/date-picker.d.ts.map +1 -1
- package/dist/components/ui/date-picker.js +9 -1
- package/dist/components/ui/dialog.d.ts +31 -2
- package/dist/components/ui/dialog.d.ts.map +1 -1
- package/dist/components/ui/dialog.js +40 -6
- package/dist/components/ui/drawer.d.ts +270 -0
- package/dist/components/ui/drawer.d.ts.map +1 -0
- package/dist/components/ui/drawer.js +241 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/components/ui/dropdown-menu.js +6 -1
- package/dist/components/ui/dropzone.d.ts +147 -0
- package/dist/components/ui/dropzone.d.ts.map +1 -0
- package/dist/components/ui/dropzone.js +141 -0
- package/dist/components/ui/emoji-picker.d.ts +328 -0
- package/dist/components/ui/emoji-picker.d.ts.map +1 -0
- package/dist/components/ui/emoji-picker.js +278 -0
- package/dist/components/ui/file-upload.d.ts +152 -0
- package/dist/components/ui/file-upload.d.ts.map +1 -0
- package/dist/components/ui/file-upload.js +101 -0
- package/dist/components/ui/filter-panel.d.ts +164 -0
- package/dist/components/ui/filter-panel.d.ts.map +1 -0
- package/dist/components/ui/filter-panel.js +91 -0
- package/dist/components/ui/form-dialog.d.ts +257 -0
- package/dist/components/ui/form-dialog.d.ts.map +1 -0
- package/dist/components/ui/form-dialog.js +176 -0
- package/dist/components/ui/form-wizard.d.ts +251 -0
- package/dist/components/ui/form-wizard.d.ts.map +1 -0
- package/dist/components/ui/form-wizard.js +151 -0
- package/dist/components/ui/image-list-field.d.ts +232 -0
- package/dist/components/ui/image-list-field.d.ts.map +1 -0
- package/dist/components/ui/image-list-field.js +168 -0
- package/dist/components/ui/image-zoom.d.ts +164 -0
- package/dist/components/ui/image-zoom.d.ts.map +1 -0
- package/dist/components/ui/image-zoom.js +169 -0
- package/dist/components/ui/intensity-grid.d.ts +270 -0
- package/dist/components/ui/intensity-grid.d.ts.map +1 -0
- package/dist/components/ui/intensity-grid.js +211 -0
- package/dist/components/ui/lifecycle-button.d.ts +276 -0
- package/dist/components/ui/lifecycle-button.d.ts.map +1 -0
- package/dist/components/ui/lifecycle-button.js +144 -0
- package/dist/components/ui/lightbox.d.ts +165 -0
- package/dist/components/ui/lightbox.d.ts.map +1 -0
- package/dist/components/ui/lightbox.js +130 -0
- package/dist/components/ui/list-panel.d.ts +288 -0
- package/dist/components/ui/list-panel.d.ts.map +1 -0
- package/dist/components/ui/list-panel.js +139 -0
- package/dist/components/ui/mega-menu.d.ts +244 -0
- package/dist/components/ui/mega-menu.d.ts.map +1 -0
- package/dist/components/ui/mega-menu.js +97 -0
- package/dist/components/ui/menubar.d.ts +9 -0
- package/dist/components/ui/menubar.d.ts.map +1 -1
- package/dist/components/ui/menubar.js +10 -1
- package/dist/components/ui/metric.d.ts +123 -0
- package/dist/components/ui/metric.d.ts.map +1 -0
- package/dist/components/ui/metric.js +68 -0
- package/dist/components/ui/mini-calendar.d.ts +143 -0
- package/dist/components/ui/mini-calendar.d.ts.map +1 -0
- package/dist/components/ui/mini-calendar.js +261 -0
- package/dist/components/ui/mode-toggle.d.ts +102 -0
- package/dist/components/ui/mode-toggle.d.ts.map +1 -0
- package/dist/components/ui/mode-toggle.js +83 -0
- package/dist/components/ui/money-field.d.ts +200 -0
- package/dist/components/ui/money-field.d.ts.map +1 -0
- package/dist/components/ui/money-field.js +215 -0
- package/dist/components/ui/multi-combobox.d.ts +181 -0
- package/dist/components/ui/multi-combobox.d.ts.map +1 -0
- package/dist/components/ui/multi-combobox.js +297 -0
- package/dist/components/ui/native-select.d.ts.map +1 -1
- package/dist/components/ui/native-select.js +8 -1
- package/dist/components/ui/navigation-menu.d.ts +7 -0
- package/dist/components/ui/navigation-menu.d.ts.map +1 -1
- package/dist/components/ui/navigation-menu.js +8 -1
- package/dist/components/ui/nested-tabs.d.ts +188 -0
- package/dist/components/ui/nested-tabs.d.ts.map +1 -0
- package/dist/components/ui/nested-tabs.js +75 -0
- package/dist/components/ui/number-field.d.ts +40 -7
- package/dist/components/ui/number-field.d.ts.map +1 -1
- package/dist/components/ui/number-field.js +37 -7
- package/dist/components/ui/overflow-actions.d.ts +169 -0
- package/dist/components/ui/overflow-actions.d.ts.map +1 -0
- package/dist/components/ui/overflow-actions.js +266 -0
- package/dist/components/ui/pack-swatch.d.ts +177 -0
- package/dist/components/ui/pack-swatch.d.ts.map +1 -0
- package/dist/components/ui/pack-swatch.js +117 -0
- package/dist/components/ui/pack-switcher.d.ts +221 -0
- package/dist/components/ui/pack-switcher.d.ts.map +1 -0
- package/dist/components/ui/pack-switcher.js +94 -0
- package/dist/components/ui/pagination.d.ts +22 -0
- package/dist/components/ui/pagination.d.ts.map +1 -1
- package/dist/components/ui/pagination.js +23 -1
- package/dist/components/ui/password-field.d.ts +122 -0
- package/dist/components/ui/password-field.d.ts.map +1 -0
- package/dist/components/ui/password-field.js +69 -0
- package/dist/components/ui/pill.d.ts +172 -0
- package/dist/components/ui/pill.d.ts.map +1 -0
- package/dist/components/ui/pill.js +102 -0
- package/dist/components/ui/platform-modifier-key.d.ts +129 -0
- package/dist/components/ui/platform-modifier-key.d.ts.map +1 -0
- package/dist/components/ui/platform-modifier-key.js +125 -0
- package/dist/components/ui/popover.d.ts.map +1 -1
- package/dist/components/ui/popover.js +8 -1
- package/dist/components/ui/price.d.ts +144 -0
- package/dist/components/ui/price.d.ts.map +1 -0
- package/dist/components/ui/price.js +107 -0
- package/dist/components/ui/progress.d.ts +55 -1
- package/dist/components/ui/progress.d.ts.map +1 -1
- package/dist/components/ui/progress.js +110 -2
- package/dist/components/ui/prompt-composer.d.ts +302 -0
- package/dist/components/ui/prompt-composer.d.ts.map +1 -0
- package/dist/components/ui/prompt-composer.js +145 -0
- package/dist/components/ui/proportion-list.d.ts +188 -0
- package/dist/components/ui/proportion-list.d.ts.map +1 -0
- package/dist/components/ui/proportion-list.js +134 -0
- package/dist/components/ui/prose.d.ts +23 -0
- package/dist/components/ui/prose.d.ts.map +1 -1
- package/dist/components/ui/prose.js +30 -1
- package/dist/components/ui/radio-group.d.ts +7 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -1
- package/dist/components/ui/radio-group.js +8 -1
- package/dist/components/ui/range-field.d.ts +158 -0
- package/dist/components/ui/range-field.d.ts.map +1 -0
- package/dist/components/ui/range-field.js +208 -0
- package/dist/components/ui/relative-time.d.ts +116 -0
- package/dist/components/ui/relative-time.d.ts.map +1 -0
- package/dist/components/ui/relative-time.js +67 -0
- package/dist/components/ui/reorderable-list.d.ts +262 -0
- package/dist/components/ui/reorderable-list.d.ts.map +1 -0
- package/dist/components/ui/reorderable-list.js +325 -0
- package/dist/components/ui/repeatable-rows.d.ts +241 -0
- package/dist/components/ui/repeatable-rows.d.ts.map +1 -0
- package/dist/components/ui/repeatable-rows.js +221 -0
- package/dist/components/ui/repo-stars.d.ts +165 -0
- package/dist/components/ui/repo-stars.d.ts.map +1 -0
- package/dist/components/ui/repo-stars.js +92 -0
- package/dist/components/ui/resizable.d.ts +24 -0
- package/dist/components/ui/resizable.d.ts.map +1 -1
- package/dist/components/ui/resizable.js +96 -4
- package/dist/components/ui/search-dialog.d.ts +40 -5
- package/dist/components/ui/search-dialog.d.ts.map +1 -1
- package/dist/components/ui/search-dialog.js +94 -16
- package/dist/components/ui/search-field.d.ts +159 -0
- package/dist/components/ui/search-field.d.ts.map +1 -0
- package/dist/components/ui/search-field.js +98 -0
- package/dist/components/ui/section.d.ts +108 -1
- package/dist/components/ui/section.d.ts.map +1 -1
- package/dist/components/ui/section.js +109 -3
- package/dist/components/ui/select.d.ts.map +1 -1
- package/dist/components/ui/select.js +9 -1
- package/dist/components/ui/selection-toolbar.d.ts +166 -0
- package/dist/components/ui/selection-toolbar.d.ts.map +1 -0
- package/dist/components/ui/selection-toolbar.js +139 -0
- package/dist/components/ui/sidebar.d.ts +29 -0
- package/dist/components/ui/sidebar.d.ts.map +1 -1
- package/dist/components/ui/sidebar.js +35 -2
- package/dist/components/ui/signal-field.d.ts.map +1 -1
- package/dist/components/ui/signal-field.js +1 -1
- package/dist/components/ui/slider.d.ts +7 -0
- package/dist/components/ui/slider.d.ts.map +1 -1
- package/dist/components/ui/slider.js +32 -1
- package/dist/components/ui/sparkline.d.ts +117 -0
- package/dist/components/ui/sparkline.d.ts.map +1 -0
- package/dist/components/ui/sparkline.js +113 -0
- package/dist/components/ui/spinner.d.ts.map +1 -1
- package/dist/components/ui/spinner.js +13 -0
- package/dist/components/ui/split-button.d.ts +207 -0
- package/dist/components/ui/split-button.d.ts.map +1 -0
- package/dist/components/ui/split-button.js +75 -0
- package/dist/components/ui/stateful-table.d.ts +345 -0
- package/dist/components/ui/stateful-table.d.ts.map +1 -0
- package/dist/components/ui/stateful-table.js +169 -0
- package/dist/components/ui/status.d.ts +99 -0
- package/dist/components/ui/status.d.ts.map +1 -0
- package/dist/components/ui/status.js +63 -0
- package/dist/components/ui/stepper.d.ts +155 -0
- package/dist/components/ui/stepper.d.ts.map +1 -0
- package/dist/components/ui/stepper.js +83 -0
- package/dist/components/ui/steps.d.ts +141 -0
- package/dist/components/ui/steps.d.ts.map +1 -0
- package/dist/components/ui/steps.js +128 -0
- package/dist/components/ui/switch.d.ts +8 -0
- package/dist/components/ui/switch.d.ts.map +1 -1
- package/dist/components/ui/switch.js +12 -1
- package/dist/components/ui/tabs.d.ts +21 -2
- package/dist/components/ui/tabs.d.ts.map +1 -1
- package/dist/components/ui/tabs.js +23 -4
- package/dist/components/ui/tag-group.d.ts +154 -0
- package/dist/components/ui/tag-group.d.ts.map +1 -0
- package/dist/components/ui/tag-group.js +111 -0
- package/dist/components/ui/task-progress.d.ts +149 -0
- package/dist/components/ui/task-progress.d.ts.map +1 -0
- package/dist/components/ui/task-progress.js +110 -0
- package/dist/components/ui/text-format-toolbar.d.ts +211 -0
- package/dist/components/ui/text-format-toolbar.d.ts.map +1 -0
- package/dist/components/ui/text-format-toolbar.js +186 -0
- package/dist/components/ui/timeline.d.ts.map +1 -1
- package/dist/components/ui/timeline.js +10 -1
- package/dist/components/ui/toast.d.ts +32 -10
- package/dist/components/ui/toast.d.ts.map +1 -1
- package/dist/components/ui/toast.js +150 -47
- package/dist/components/ui/toggle-group.d.ts +14 -5
- package/dist/components/ui/toggle-group.d.ts.map +1 -1
- package/dist/components/ui/toggle-group.js +15 -1
- package/dist/components/ui/toggle.d.ts.map +1 -1
- package/dist/components/ui/toggle.js +9 -1
- package/dist/components/ui/tree.d.ts +8 -0
- package/dist/components/ui/tree.d.ts.map +1 -1
- package/dist/components/ui/tree.js +92 -13
- package/dist/components/ui/video-player.d.ts +236 -0
- package/dist/components/ui/video-player.d.ts.map +1 -0
- package/dist/components/ui/video-player.js +72 -0
- package/dist/fonts/inter-latin-400-italic.woff2 +0 -0
- package/dist/index.d.ts +112 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +72 -0
- package/dist/lib/utils.d.ts +29 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +35 -0
- package/dist/live/index.d.ts +10 -3
- package/dist/live/index.d.ts.map +1 -1
- package/dist/live/index.js +12 -3
- package/dist/live/run-stream-01/run-stream.js +4 -4
- package/dist/live/tool-ledger-01/index.d.ts +3 -0
- package/dist/live/tool-ledger-01/index.d.ts.map +1 -0
- package/dist/live/tool-ledger-01/index.js +1 -0
- package/dist/live/tool-ledger-01/tool-ledger.d.ts +348 -0
- package/dist/live/tool-ledger-01/tool-ledger.d.ts.map +1 -0
- package/dist/live/tool-ledger-01/tool-ledger.js +245 -0
- package/dist/pages/about-page/index.d.ts +306 -0
- package/dist/pages/about-page/index.d.ts.map +1 -0
- package/dist/pages/about-page/index.js +161 -0
- package/dist/pages/careers-page/index.d.ts +288 -0
- package/dist/pages/careers-page/index.d.ts.map +1 -0
- package/dist/pages/careers-page/index.js +182 -0
- package/dist/pages/changelog-page/index.d.ts +255 -0
- package/dist/pages/changelog-page/index.d.ts.map +1 -0
- package/dist/pages/changelog-page/index.js +86 -0
- package/dist/pages/contact-page/index.d.ts +261 -0
- package/dist/pages/contact-page/index.d.ts.map +1 -0
- package/dist/pages/contact-page/index.js +136 -0
- package/dist/pages/docs-shell/docs-shell.d.ts +8 -0
- package/dist/pages/docs-shell/docs-shell.d.ts.map +1 -1
- package/dist/pages/docs-shell/docs-shell.js +24 -7
- package/dist/pages/error-page/index.d.ts +188 -0
- package/dist/pages/error-page/index.d.ts.map +1 -0
- package/dist/pages/error-page/index.js +98 -0
- package/dist/pages/index.d.ts +10 -0
- package/dist/pages/index.d.ts.map +1 -1
- package/dist/pages/index.js +14 -0
- package/dist/pages/legal-page/index.d.ts +194 -0
- package/dist/pages/legal-page/index.d.ts.map +1 -0
- package/dist/pages/legal-page/index.js +99 -0
- package/dist/pages/onboarding-page/index.d.ts +199 -0
- package/dist/pages/onboarding-page/index.d.ts.map +1 -0
- package/dist/pages/onboarding-page/index.js +71 -0
- package/dist/pages/pricing-page/index.d.ts +286 -0
- package/dist/pages/pricing-page/index.d.ts.map +1 -0
- package/dist/pages/pricing-page/index.js +139 -0
- package/dist/pages/search-page/index.d.ts +305 -0
- package/dist/pages/search-page/index.d.ts.map +1 -0
- package/dist/pages/search-page/index.js +142 -0
- package/dist/pages/status-page/index.d.ts +366 -0
- package/dist/pages/status-page/index.d.ts.map +1 -0
- package/dist/pages/status-page/index.js +136 -0
- package/dist/styles.css +1003 -55
- package/package.json +9 -3
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../../lib/utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* How many lines the gutter counts, and the text the body draws.
|
|
5
|
+
*
|
|
6
|
+
* One `split` and two consumers, which is the whole point: the numbers and the
|
|
7
|
+
* code are derived from the same string in the same pass, so a gutter cannot
|
|
8
|
+
* claim a line the body does not have. The trailing empty line a file's final
|
|
9
|
+
* newline produces is dropped from the count only. The body still draws the
|
|
10
|
+
* `code` verbatim, because a `<pre>` that has lost its final newline is a
|
|
11
|
+
* snippet that no longer copies correctly, and a count that is one too high is a
|
|
12
|
+
* cosmetic defect by comparison.
|
|
13
|
+
*/
|
|
14
|
+
function linesOf(code) {
|
|
15
|
+
const lines = code.split('\n');
|
|
16
|
+
return code.endsWith('\n') ? Math.max(1, lines.length - 1) : lines.length;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A snippet of source: a mono surface with a header for the words that say what
|
|
20
|
+
* it is.
|
|
21
|
+
*
|
|
22
|
+
* **Prism ships a code surface and no syntax highlighter, and that is the
|
|
23
|
+
* decision worth defending.** A highlighter is not a presentation detail, it is
|
|
24
|
+
* a dependency that arrives with its own answer to the question "what does this
|
|
25
|
+
* token mean", and it is a second source of truth for exactly the kind of thing
|
|
26
|
+
* this system is built to have one of. Prism's law is that a value is authored
|
|
27
|
+
* once and reaches a consumer through the tokens; a highlighter decides on its
|
|
28
|
+
* own that `const` is a keyword and that a string is a string, and it decides
|
|
29
|
+
* that in a vocabulary of its own, published as a theme file, styled with class
|
|
30
|
+
* names that have to be reconciled against six packs and two modes. The
|
|
31
|
+
* reconciliation is where a highlighter stops being a convenience. The moment
|
|
32
|
+
* one is in the product, the token source and the highlight theme are two files
|
|
33
|
+
* that have to be kept in step, and a pack that moves a step leaves the second
|
|
34
|
+
* one behind, and the result is a code surface in the wrong hue that every
|
|
35
|
+
* colour gate in this repository reports as correct.
|
|
36
|
+
*
|
|
37
|
+
* So nothing here is highlighted, and the cost of that is real and worth naming:
|
|
38
|
+
* a long snippet is a wall of one colour, a reader scanning for a name has no
|
|
39
|
+
* colour to catch it, and Prism gives them the table of contents instead, which
|
|
40
|
+
* is the line numbers and the filename. A caller who has decided they want
|
|
41
|
+
* highlighting composes it themselves, and the two places to do it are named on
|
|
42
|
+
* the props: `actions` takes a control the caller built, and the whole item is a
|
|
43
|
+
* plain figure with a `code` string, so anything a caller wraps around it is
|
|
44
|
+
* theirs. What Prism will not do is hold the highlighting itself, because the
|
|
45
|
+
* day it does there are two answers to what a token means in every product that
|
|
46
|
+
* installs it.
|
|
47
|
+
*
|
|
48
|
+
* **The figure is named by `label`, and the naming is required whenever the
|
|
49
|
+
* caller brings a control.** See the union on `CodeBlockProps`: a copy button
|
|
50
|
+
* beside an unnamed figure is a button that acts on nothing a reader can
|
|
51
|
+
* identify. When the caller brings no control the name is optional, because a
|
|
52
|
+
* snippet inside a sentence is identified by the sentence.
|
|
53
|
+
*
|
|
54
|
+
* **The line numbers are a gutter, not part of the text.** They sit outside the
|
|
55
|
+
* `<pre>`, hidden from assistive technology, and the code inside the `<pre>` is
|
|
56
|
+
* the caller's `code` and nothing else. That is what keeps a copy clean: a copy
|
|
57
|
+
* that carries `1 2 3` down its left edge is a snippet pasted into a file
|
|
58
|
+
* that does not compile, and the alternative, numbers inside the `<pre>`, is
|
|
59
|
+
* exactly that. The cost of the gutter is alignment, because two parallel
|
|
60
|
+
* renderings of the same lines line up only while the lines do not wrap, which
|
|
61
|
+
* is why the body is `whitespace-pre` and scrolls horizontally. A snippet that
|
|
62
|
+
* soft-wrapped would put the numbers a line out of step after the first long
|
|
63
|
+
* line, and horizontal scroll is the honest answer: source is read by the line
|
|
64
|
+
* and not reflowed to the viewport.
|
|
65
|
+
*
|
|
66
|
+
* **It spreads no other prop.** `Kbd` and `Separator` spread a native element's
|
|
67
|
+
* props because there is no other route to them. A `<pre>` is a different case,
|
|
68
|
+
* and the reason is specific: a code surface is the one place in a component
|
|
69
|
+
* library where a caller might reasonably reach for `dangerouslySetInnerHTML`,
|
|
70
|
+
* because highlighting is usually done that way and this file has just argued
|
|
71
|
+
* against highlighting. A spread would hand them the attribute that bypasses
|
|
72
|
+
* every claim on the page in one prop, so the surface is `code`, `language`,
|
|
73
|
+
* `filename`, `lineNumbers`, `actions`, `label` and `className`, and nothing
|
|
74
|
+
* else.
|
|
75
|
+
*
|
|
76
|
+
* **The header is a header, and it is not always there.** It is drawn when
|
|
77
|
+
* there is something to put in it: a filename, a language, or a control. A
|
|
78
|
+
* snippet with no filename, no language and no control is a tinted box of
|
|
79
|
+
* monospace, and an empty strip above it would be a bar of ink saying nothing.
|
|
80
|
+
*/
|
|
81
|
+
function CodeBlock({ code, language, filename, lineNumbers = false, actions, label, className, }) {
|
|
82
|
+
const named = filename !== undefined || language !== undefined || actions !== undefined;
|
|
83
|
+
const count = linesOf(code);
|
|
84
|
+
return (_jsxs("figure", { "data-slot": "code-block", "data-named": named, "data-line-numbers": lineNumbers, "aria-label": label, className: cn('bg-muted border-border flex w-full flex-col overflow-hidden rounded-md border', className), children: [named ? (_jsxs("div", { "data-slot": "code-block-header", className: "border-border text-muted-foreground flex items-center justify-between gap-3 border-b px-3 py-1.5 text-xs", children: [_jsxs("span", { "data-slot": "code-block-name", className: "flex min-w-0 items-center gap-2 font-mono", children: [filename === undefined ? null : (_jsx("span", { "data-slot": "code-block-filename", className: "text-foreground truncate", children: filename })), language === undefined ? null : (_jsx("span", { "data-slot": "code-block-language", children: language }))] }), actions === undefined ? null : (_jsx("span", { "data-slot": "code-block-actions", className: "flex shrink-0 items-center gap-2", children: actions }))] })) : null, _jsx("div", { "data-slot": "code-block-body", className: "overflow-x-auto", children: _jsxs("div", { className: "flex min-w-max", children: [lineNumbers ? (_jsx("div", { "data-slot": "code-block-numbers", "aria-hidden": "true", className: "text-muted-foreground border-border w-9 shrink-0 border-r pr-2 text-right font-mono text-xs leading-relaxed tabular-nums select-none", children: Array.from({ length: count }, (_, index) => (_jsx("span", { "data-slot": "code-block-number", className: "block", children: index + 1 }, index))) })) : null, _jsx("pre", { "data-slot": "code-block-pre", className: "text-foreground min-w-0 flex-1 px-3 py-2 font-mono text-sm leading-relaxed whitespace-pre", children: _jsx("code", { "data-slot": "code-block-code", children: code }) })] }) })] }));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* An inline run of source: a symbol, a command, a filename, a prop.
|
|
88
|
+
*
|
|
89
|
+
* The inline form of the same idea `CodeBlock` states at length, and the reason
|
|
90
|
+
* it is its own export rather than a size of the block is that the two answer
|
|
91
|
+
* different questions. A `CodeBlock` is something a reader may copy, so it is a
|
|
92
|
+
* figure with a name, a header and a gutter. A `Code` is a word inside a
|
|
93
|
+
* sentence, and the whole treatment is that it is visibly not prose: the mono
|
|
94
|
+
* face is the signal, and the muted surface is what stops a long symbol from
|
|
95
|
+
* reading as a run of emphasised text.
|
|
96
|
+
*
|
|
97
|
+
* Use it for a symbol the reader types (`--strict`), a component or a function
|
|
98
|
+
* name (`ChartFrame`), a file (`dialog.tsx`), a prop (`tone`) or a command. Do
|
|
99
|
+
* not use it for a value that is a number with a unit, for a key the reader
|
|
100
|
+
* presses, which is `Kbd`, or for anything the reader is meant to remember as
|
|
101
|
+
* prose. It renders a native `<code>`, so a screen reader identifies it as
|
|
102
|
+
* source rather than as text to read through, and it spreads a `<code>`'s own
|
|
103
|
+
* props because that is the only route to a title, a `lang` or an `id` on one.
|
|
104
|
+
*/
|
|
105
|
+
function Code({ className, ...props }) {
|
|
106
|
+
return (_jsx("code", { "data-slot": "code", className: cn('bg-muted text-foreground rounded-sm px-1 py-0.5 font-mono text-sm', className), ...props }));
|
|
107
|
+
}
|
|
108
|
+
export { CodeBlock, Code };
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import type { ComponentProps, ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* One column of the matrix, which is an offset from a row's own start.
|
|
4
|
+
*
|
|
5
|
+
* The key is a handle for the markup and the label is what a reader reads, and the
|
|
6
|
+
* split is the same one `IntensityGrid` uses for both of its axes. The words are
|
|
7
|
+
* the caller's because an offset is written in the product's own terms: "Week 1",
|
|
8
|
+
* "Month 3", "Day 30", "the first renewal", and a Component that composed one of
|
|
9
|
+
* those would be a Component shipping an English calendar into every consumer's
|
|
10
|
+
* product.
|
|
11
|
+
*/
|
|
12
|
+
export type CohortGridColumn = {
|
|
13
|
+
/** A stable handle for this offset, read by no one. */
|
|
14
|
+
key: string;
|
|
15
|
+
/** The offset's own name, printed as the column header. */
|
|
16
|
+
label: ReactNode;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* One cohort, and the share still present at each offset.
|
|
20
|
+
*
|
|
21
|
+
* **A `null` is an offset the cohort has not reached, and it is not a zero.** This
|
|
22
|
+
* is the whole data model of a retention matrix: the youngest cohort has one
|
|
23
|
+
* reading and the oldest has twelve, so the matrix is ragged and its top corner is
|
|
24
|
+
* empty by arithmetic rather than by measurement. A zero means every member of the
|
|
25
|
+
* cohort had gone by that offset; a `null` means the cohort had not got there. They
|
|
26
|
+
* draw differently here, a zero prints `0%` and a `null` prints nothing, and they
|
|
27
|
+
* sound different because one of them is read and the other is blank.
|
|
28
|
+
*
|
|
29
|
+
* Every row must have exactly as many entries as there are columns, a `null` for
|
|
30
|
+
* each offset the cohort has not reached. That is stricter than it needs to be and
|
|
31
|
+
* the strictness is the point: a short row and a row of nulls draw the same, and
|
|
32
|
+
* only the second one says what it means.
|
|
33
|
+
*/
|
|
34
|
+
export type CohortGridRow = {
|
|
35
|
+
/**
|
|
36
|
+
* A stable handle for this cohort, read by no one.
|
|
37
|
+
*
|
|
38
|
+
* A string is required rather than made optional because it is the only identity
|
|
39
|
+
* a row has once its label is a node, and it is what lets a caller reorder rows
|
|
40
|
+
* without the matrix changing anything else.
|
|
41
|
+
*/
|
|
42
|
+
key: string;
|
|
43
|
+
/** The cohort's own name, printed as its row header. */
|
|
44
|
+
label: ReactNode;
|
|
45
|
+
/** The share still present at each offset, in the order the columns are given. */
|
|
46
|
+
shares: readonly (number | null)[];
|
|
47
|
+
};
|
|
48
|
+
/** The props the CohortGrid accepts. */
|
|
49
|
+
export interface CohortGridProps extends Omit<ComponentProps<'figure'>, 'children'> {
|
|
50
|
+
/**
|
|
51
|
+
* The cohorts, in the order they are read.
|
|
52
|
+
*
|
|
53
|
+
* The order is the caller's and nothing here sorts: the ordinary order is newest
|
|
54
|
+
* first, because the youngest cohort is the one being watched, and a Component
|
|
55
|
+
* that ordered by key size or by value would put the reader's question somewhere
|
|
56
|
+
* else.
|
|
57
|
+
*/
|
|
58
|
+
rows: readonly CohortGridRow[];
|
|
59
|
+
/** The offsets, in the order they are read. */
|
|
60
|
+
columns: readonly CohortGridColumn[];
|
|
61
|
+
/**
|
|
62
|
+
* The name of the matrix, printed as the table's caption.
|
|
63
|
+
*
|
|
64
|
+
* Required rather than defaulted, for the two reasons `ChartFrame` states and the
|
|
65
|
+
* rest of the package repeats: two retention tables on one page are two tables a
|
|
66
|
+
* reader cannot tell apart, and a table with no name is neither announced nor
|
|
67
|
+
* linkable.
|
|
68
|
+
*
|
|
69
|
+
* **It is the caption and not an `aria-label` on the figure**, which is the one
|
|
70
|
+
* place this package's figures differ. `Chart` puts its name on the figure and
|
|
71
|
+
* keeps its table visually hidden, so the name has to be spoken from the figure.
|
|
72
|
+
* Here the table is the figure and the caption is visible, and a name said on the
|
|
73
|
+
* figure and again by the caption is a name a reader hears twice on the way into
|
|
74
|
+
* the same data.
|
|
75
|
+
*/
|
|
76
|
+
label: string;
|
|
77
|
+
/**
|
|
78
|
+
* The name of the column holding the cohort names, drawn in the corner.
|
|
79
|
+
*
|
|
80
|
+
* Optional, and a retention table that has one nearly always does: the corner is
|
|
81
|
+
* the only cell that names the row headers, and leaving it empty is honest because
|
|
82
|
+
* every row head already names itself. Omitted, the corner is an empty cell rather
|
|
83
|
+
* than a word Prism chose, which is the whole reason it is not required.
|
|
84
|
+
*/
|
|
85
|
+
rowHeading?: ReactNode;
|
|
86
|
+
/**
|
|
87
|
+
* The lower end of the scale the shading is drawn against. @defaultValue 0
|
|
88
|
+
*
|
|
89
|
+
* Zero because a share of a cohort is measured from nothing: the cohort at its
|
|
90
|
+
* first offset is the whole of itself. A caller whose measure starts above zero
|
|
91
|
+
* passes it, and the cost is that a cell at the floor and a cell with nothing in
|
|
92
|
+
* it draw the same way, which is what a floor means.
|
|
93
|
+
*/
|
|
94
|
+
min?: number;
|
|
95
|
+
/**
|
|
96
|
+
* The upper end of the scale the shading is drawn against. @defaultValue 100
|
|
97
|
+
*
|
|
98
|
+
* A hundred because that is the whole cohort, and a scale that tops out below it
|
|
99
|
+
* exaggerates every difference in the grid. Pass a lower number when the useful
|
|
100
|
+
* range is narrow, and treat it as a claim the reader has been told rather than
|
|
101
|
+
* one they have inferred: see the note on the helper above.
|
|
102
|
+
*/
|
|
103
|
+
max?: number;
|
|
104
|
+
/**
|
|
105
|
+
* How many decimal places each cell is printed to. @defaultValue 0
|
|
106
|
+
*
|
|
107
|
+
* Whole numbers, because a retention grid is a shape rather than a set of
|
|
108
|
+
* measurements, and a column of one-decimal percentages on a mobile screen is
|
|
109
|
+
* wider than the numbers are worth. Pass `1` when the underlying counts are small
|
|
110
|
+
* enough that a point of a percent is a real difference.
|
|
111
|
+
*/
|
|
112
|
+
precision?: number;
|
|
113
|
+
/**
|
|
114
|
+
* The sentence under the table, which is where the measure belongs.
|
|
115
|
+
*
|
|
116
|
+
* The caller's words, and required in practice though optional in the type,
|
|
117
|
+
* because the cells print bare numbers: this is the sentence that says what the
|
|
118
|
+
* numbers are a share of. "Of the accounts that were active in the month they
|
|
119
|
+
* signed up" is a claim about a product this Component knows nothing about, so it
|
|
120
|
+
* is the caller's to write, and a grid with no sentence under it says only what
|
|
121
|
+
* its numbers say.
|
|
122
|
+
*/
|
|
123
|
+
caption?: ReactNode;
|
|
124
|
+
/** Layout only, exactly as on every Component. */
|
|
125
|
+
className?: string;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* A retention matrix, read as a table of printed percentages under one scale.
|
|
129
|
+
*
|
|
130
|
+
* **It is a table, and that is the Component rather than an implementation
|
|
131
|
+
* detail.** A retention grid is the one data display whose job is to be read one
|
|
132
|
+
* cell at a time: a reader asks "what share of the March cohort was still sending
|
|
133
|
+
* readings at month three", and the answer is a cell. `Table` is that answer, with
|
|
134
|
+
* row and column headers, a caption and per-cell navigation, all of which the
|
|
135
|
+
* percentages need and a drawing of divs would throw away. So this Component
|
|
136
|
+
* composes `Table` rather than replacing it, and what it adds is the four things a
|
|
137
|
+
* generic table has no opinion about: the shape of the data, the scale the shading
|
|
138
|
+
* is drawn against, the difference between an offset not reached and a share of
|
|
139
|
+
* nothing, and the order in which a cell is printed and shaded.
|
|
140
|
+
*
|
|
141
|
+
* **How it differs from `Table`, precisely.** `Table` holds no domain, no scale and
|
|
142
|
+
* no claim: it gives a caller seven parts and gets out of the way, which is exactly
|
|
143
|
+
* what a caller with arbitrary columns wants and exactly what a retention grid does
|
|
144
|
+
* not, because a retention grid knows that its columns are ordinal offsets from
|
|
145
|
+
* each row's own start and that its cells are shares. So the difference is not the
|
|
146
|
+
* markup, it is the four refusals. There is no way to add a column beside the
|
|
147
|
+
* matrix, because an extra column is not an offset. There is no way to shade a cell
|
|
148
|
+
* by hand, because the shade is the value and a hand-set shade would be a second
|
|
149
|
+
* claim about it. There is no way to pass rows of unequal length, because a short
|
|
150
|
+
* row is a row of nulls that says nothing about which offsets were measured. And
|
|
151
|
+
* there is no way to print anything but a number, because the cell's whole content
|
|
152
|
+
* is the share. A caller who needs any of those is building a table, and `Table` is
|
|
153
|
+
* the Component for it.
|
|
154
|
+
*
|
|
155
|
+
* **There is no horizontal scale, and the columns are ordinal rather than
|
|
156
|
+
* continuous.** Each column is an offset, and the offsets are the same *number* on
|
|
157
|
+
* every row while the *periods* they stand for are not: the March cohort's month
|
|
158
|
+
* three and the September cohort's month three are two different months in the
|
|
159
|
+
* calendar. So there is no axis, no tick spacing and no interpolation, and nothing
|
|
160
|
+
* may be read as "the cell halfway between these two". A measure that varies along
|
|
161
|
+
* a continuous domain is `Chart`; a measure along an ordinal offset is this. That is
|
|
162
|
+
* also why a retention grid cannot be a heat map of categories in the
|
|
163
|
+
* `IntensityGrid` sense even though both shade cells: the columns there are names
|
|
164
|
+
* with no order at all, and here they are ordered offsets that every row reads
|
|
165
|
+
* differently.
|
|
166
|
+
*
|
|
167
|
+
* **Print, then shade, and the order is the design.** Every cell carries its share
|
|
168
|
+
* as a number in the caller's own unit, and the shade is laid over the cell behind
|
|
169
|
+
* it. Neither channel is optional and neither is the fallback: a reader who cannot
|
|
170
|
+
* rank five steps of one hue reads every number in the grid, and a reader who cannot
|
|
171
|
+
* see the pale end of the scale still has the numbers, which is the arrangement
|
|
172
|
+
* `IntensityGrid` refuses on purpose for the opposite reason. The consequence is
|
|
173
|
+
* that shading must never be the only carrier of the number, and this Component
|
|
174
|
+
* makes that structural rather than advisory by printing unconditionally and by
|
|
175
|
+
* refusing a cell it cannot put a number in. It is also why the cells are the
|
|
176
|
+
* figure's own visible content rather than a table generated from a drawing: there
|
|
177
|
+
* is no drawing to generate a table beside.
|
|
178
|
+
*
|
|
179
|
+
* **The scale is absolute by default, and `max` is a claim the caller owns.** See
|
|
180
|
+
* the note on the helper: quartiles of `min` to `max`, defaulting to zero and a
|
|
181
|
+
* hundred, so two months of the same product are comparable. The cost is that a
|
|
182
|
+
* product whose cohorts all collapse below a quarter loses the contrast, and the
|
|
183
|
+
* answer is a narrower `max` which exaggerates on purpose. A retention grid that
|
|
184
|
+
* silently rescaled itself to flatter the rows in front of it would be the exact
|
|
185
|
+
* failure `Chart` names for a pre-normalised caller, and a table of retention
|
|
186
|
+
* percentages is the last place to ship one.
|
|
187
|
+
*
|
|
188
|
+
* **Nothing here moves, and the reason is the same as everywhere else in this
|
|
189
|
+
* family.** A hover state on a cell would have to change the cell's surface, and the
|
|
190
|
+
* surface is what the number is printed on, so a hover would change the reading
|
|
191
|
+
* while the pointer rested on it. A row wash would do the same to every cell in the
|
|
192
|
+
* row at once. So the grid is static by construction, which is also the cheapest
|
|
193
|
+
* reading of a motion law that permits only state feedback on a token duration.
|
|
194
|
+
*
|
|
195
|
+
* **Two inputs throw, and a drawn lie is worse than a refusal.** A row whose
|
|
196
|
+
* `shares` are not one per column is a ragged row that would draw as if the missing
|
|
197
|
+
* offsets had been measured and found empty, which is the one thing this data model
|
|
198
|
+
* exists to prevent. A share outside `min` to `max` is a measurement that cannot be
|
|
199
|
+
* placed on the scale, and the alternative was to clamp it, which is what `Chart`
|
|
200
|
+
* does for a value past the end of its axis and what this Component deliberately
|
|
201
|
+
* does not: a clamped retention cell is a cell that says its share is the ceiling
|
|
202
|
+
* when it is not, in a table whose whole claim is that every number in it was
|
|
203
|
+
* measured.
|
|
204
|
+
*
|
|
205
|
+
* **It is a server Component.** There is no state, no effect and no handler, every
|
|
206
|
+
* cell is arithmetic over props, and a dashboard of cohorts costs no client code.
|
|
207
|
+
*/
|
|
208
|
+
declare function CohortGrid({ className, rows, columns, label, rowHeading, min, max, precision, caption, ...props }: CohortGridProps): import("react").JSX.Element;
|
|
209
|
+
export { CohortGrid };
|
|
210
|
+
//# sourceMappingURL=cohort-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cohort-grid.d.ts","sourceRoot":"","sources":["../../../src/components/ui/cohort-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AActD;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAA;IACX,2DAA2D;IAC3D,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;;OAMG;IACH,GAAG,EAAE,MAAM,CAAA;IACX,wDAAwD;IACxD,KAAK,EAAE,SAAS,CAAA;IAChB,kFAAkF;IAClF,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;CACnC,CAAA;AAmFD,wCAAwC;AACxC,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACjF;;;;;;;OAOG;IACH,IAAI,EAAE,SAAS,aAAa,EAAE,CAAA;IAC9B,+CAA+C;IAC/C,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAA;IACpC;;;;;;;;;;;;;;OAcG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AACH,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,IAAI,EACJ,OAAO,EACP,KAAK,EACL,UAAU,EACV,GAAO,EACP,GAAS,EACT,SAAa,EACb,OAAO,EACP,GAAG,KAAK,EACT,EAAE,eAAe,+BAyGjB;AAED,OAAO,EAAE,UAAU,EAAE,CAAA"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow, } from './table.js';
|
|
3
|
+
import { cn } from '../../lib/utils.js';
|
|
4
|
+
/**
|
|
5
|
+
* The fill each step is drawn in, from the contract's roles and no other.
|
|
6
|
+
*
|
|
7
|
+
* The five entries `IntensityGrid` and `ContributionGraph` both draw from, spelled
|
|
8
|
+
* here because each of those modules keeps its own map to itself, and the honest
|
|
9
|
+
* cost is the one they state between them: a change to the intensity scale is now
|
|
10
|
+
* three edits rather than one. What keeps the three in step is the type, which is
|
|
11
|
+
* imported from `IntensityGrid` rather than redeclared, so a sixth step is a type
|
|
12
|
+
* error at all three maps at once instead of a cell that silently falls through to
|
|
13
|
+
* no ink in whichever file nobody remembered.
|
|
14
|
+
*
|
|
15
|
+
* Step zero is the `muted` surface rather than a pale primary, so a cohort that has
|
|
16
|
+
* nothing left is visibly a different thing from a cohort with a little left. The
|
|
17
|
+
* other four are the same `primary` role at four alpha steps, which is one token at
|
|
18
|
+
* four strengths: five authored colours would be a second set of colour tokens for a
|
|
19
|
+
* scale the alpha modifier already expresses, and they would not move with a scoped
|
|
20
|
+
* pack boundary.
|
|
21
|
+
*/
|
|
22
|
+
const LEVEL_FILL = {
|
|
23
|
+
0: 'bg-muted',
|
|
24
|
+
1: 'bg-primary/25',
|
|
25
|
+
2: 'bg-primary/50',
|
|
26
|
+
3: 'bg-primary/75',
|
|
27
|
+
4: 'bg-primary',
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* The ink a cell's number is printed in, from the same step.
|
|
31
|
+
*
|
|
32
|
+
* The inverse on the top step only, and it is `primary-foreground` on `primary`
|
|
33
|
+
* because that is the contract's own pairing for a filled control and the contrast
|
|
34
|
+
* gate already measures it at 4.5:1 in every pack and both modes. The other four
|
|
35
|
+
* keep `foreground`, which clears the page and the muted surface under a quarter
|
|
36
|
+
* and a half of a primary. Inverting anything earlier would have meant light ink on
|
|
37
|
+
* a light shade, which is a legibility failure dressed as a consistency.
|
|
38
|
+
*/
|
|
39
|
+
const LEVEL_INK = {
|
|
40
|
+
0: 'text-foreground',
|
|
41
|
+
1: 'text-foreground',
|
|
42
|
+
2: 'text-foreground',
|
|
43
|
+
3: 'text-foreground',
|
|
44
|
+
4: 'text-primary-foreground',
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Where a share sits on the caller's scale, as a step.
|
|
48
|
+
*
|
|
49
|
+
* **Quartiles of the caller's scale, and not of the data.** The scale runs from
|
|
50
|
+
* `min` to `max` and defaults to zero and a hundred, because a share of a cohort is
|
|
51
|
+
* an absolute quantity and two months of the same product must be comparable. A
|
|
52
|
+
* grid that fitted its scale to the rows in front of it would make a cohort whose
|
|
53
|
+
* members all left draw as dark as a cohort that kept everyone, which is the quietest
|
|
54
|
+
* and worst way a retention table can be wrong.
|
|
55
|
+
*
|
|
56
|
+
* The cost is the same argument in reverse and it is real: once a product's cohorts
|
|
57
|
+
* are all below a quarter, the grid goes uniformly pale and the reader gets no
|
|
58
|
+
* contrast in it. The answer is `min`, which raises the floor of the scale on
|
|
59
|
+
* purpose and is documented as a claim the caller has to own, because a scale that
|
|
60
|
+
* starts at twenty and a table that does not are two truths about the same grid.
|
|
61
|
+
*
|
|
62
|
+
* **`max` cannot do that job here, and the reason is the first column.** A
|
|
63
|
+
* retention row's own starting column is a hundred percent by definition, so a
|
|
64
|
+
* scale that stops below a hundred is a scale the data cannot be drawn against,
|
|
65
|
+
* and this Component throws rather than clamp because a clamped cell is a cell
|
|
66
|
+
* claiming its share is the ceiling. Narrowing the scale therefore means raising
|
|
67
|
+
* `min`, and it means the last column of an old cohort and the second column of a
|
|
68
|
+
* new one are the two cells a reader compares. That is a real limit on the knob
|
|
69
|
+
* rather than a default that happened to land well, and a caller who wants the
|
|
70
|
+
* saturation the low `max` was reaching for has to leave the first column out of
|
|
71
|
+
* `columns` and say in the caption what the offsets now begin at.
|
|
72
|
+
*/
|
|
73
|
+
function levelOf(share, min, max) {
|
|
74
|
+
const span = max - min;
|
|
75
|
+
const position = span <= 0 ? 1 : (share - min) / span;
|
|
76
|
+
if (position <= 0)
|
|
77
|
+
return 0;
|
|
78
|
+
if (position <= 0.25)
|
|
79
|
+
return 1;
|
|
80
|
+
if (position <= 0.5)
|
|
81
|
+
return 2;
|
|
82
|
+
if (position <= 0.75)
|
|
83
|
+
return 3;
|
|
84
|
+
return 4;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* A retention matrix, read as a table of printed percentages under one scale.
|
|
88
|
+
*
|
|
89
|
+
* **It is a table, and that is the Component rather than an implementation
|
|
90
|
+
* detail.** A retention grid is the one data display whose job is to be read one
|
|
91
|
+
* cell at a time: a reader asks "what share of the March cohort was still sending
|
|
92
|
+
* readings at month three", and the answer is a cell. `Table` is that answer, with
|
|
93
|
+
* row and column headers, a caption and per-cell navigation, all of which the
|
|
94
|
+
* percentages need and a drawing of divs would throw away. So this Component
|
|
95
|
+
* composes `Table` rather than replacing it, and what it adds is the four things a
|
|
96
|
+
* generic table has no opinion about: the shape of the data, the scale the shading
|
|
97
|
+
* is drawn against, the difference between an offset not reached and a share of
|
|
98
|
+
* nothing, and the order in which a cell is printed and shaded.
|
|
99
|
+
*
|
|
100
|
+
* **How it differs from `Table`, precisely.** `Table` holds no domain, no scale and
|
|
101
|
+
* no claim: it gives a caller seven parts and gets out of the way, which is exactly
|
|
102
|
+
* what a caller with arbitrary columns wants and exactly what a retention grid does
|
|
103
|
+
* not, because a retention grid knows that its columns are ordinal offsets from
|
|
104
|
+
* each row's own start and that its cells are shares. So the difference is not the
|
|
105
|
+
* markup, it is the four refusals. There is no way to add a column beside the
|
|
106
|
+
* matrix, because an extra column is not an offset. There is no way to shade a cell
|
|
107
|
+
* by hand, because the shade is the value and a hand-set shade would be a second
|
|
108
|
+
* claim about it. There is no way to pass rows of unequal length, because a short
|
|
109
|
+
* row is a row of nulls that says nothing about which offsets were measured. And
|
|
110
|
+
* there is no way to print anything but a number, because the cell's whole content
|
|
111
|
+
* is the share. A caller who needs any of those is building a table, and `Table` is
|
|
112
|
+
* the Component for it.
|
|
113
|
+
*
|
|
114
|
+
* **There is no horizontal scale, and the columns are ordinal rather than
|
|
115
|
+
* continuous.** Each column is an offset, and the offsets are the same *number* on
|
|
116
|
+
* every row while the *periods* they stand for are not: the March cohort's month
|
|
117
|
+
* three and the September cohort's month three are two different months in the
|
|
118
|
+
* calendar. So there is no axis, no tick spacing and no interpolation, and nothing
|
|
119
|
+
* may be read as "the cell halfway between these two". A measure that varies along
|
|
120
|
+
* a continuous domain is `Chart`; a measure along an ordinal offset is this. That is
|
|
121
|
+
* also why a retention grid cannot be a heat map of categories in the
|
|
122
|
+
* `IntensityGrid` sense even though both shade cells: the columns there are names
|
|
123
|
+
* with no order at all, and here they are ordered offsets that every row reads
|
|
124
|
+
* differently.
|
|
125
|
+
*
|
|
126
|
+
* **Print, then shade, and the order is the design.** Every cell carries its share
|
|
127
|
+
* as a number in the caller's own unit, and the shade is laid over the cell behind
|
|
128
|
+
* it. Neither channel is optional and neither is the fallback: a reader who cannot
|
|
129
|
+
* rank five steps of one hue reads every number in the grid, and a reader who cannot
|
|
130
|
+
* see the pale end of the scale still has the numbers, which is the arrangement
|
|
131
|
+
* `IntensityGrid` refuses on purpose for the opposite reason. The consequence is
|
|
132
|
+
* that shading must never be the only carrier of the number, and this Component
|
|
133
|
+
* makes that structural rather than advisory by printing unconditionally and by
|
|
134
|
+
* refusing a cell it cannot put a number in. It is also why the cells are the
|
|
135
|
+
* figure's own visible content rather than a table generated from a drawing: there
|
|
136
|
+
* is no drawing to generate a table beside.
|
|
137
|
+
*
|
|
138
|
+
* **The scale is absolute by default, and `max` is a claim the caller owns.** See
|
|
139
|
+
* the note on the helper: quartiles of `min` to `max`, defaulting to zero and a
|
|
140
|
+
* hundred, so two months of the same product are comparable. The cost is that a
|
|
141
|
+
* product whose cohorts all collapse below a quarter loses the contrast, and the
|
|
142
|
+
* answer is a narrower `max` which exaggerates on purpose. A retention grid that
|
|
143
|
+
* silently rescaled itself to flatter the rows in front of it would be the exact
|
|
144
|
+
* failure `Chart` names for a pre-normalised caller, and a table of retention
|
|
145
|
+
* percentages is the last place to ship one.
|
|
146
|
+
*
|
|
147
|
+
* **Nothing here moves, and the reason is the same as everywhere else in this
|
|
148
|
+
* family.** A hover state on a cell would have to change the cell's surface, and the
|
|
149
|
+
* surface is what the number is printed on, so a hover would change the reading
|
|
150
|
+
* while the pointer rested on it. A row wash would do the same to every cell in the
|
|
151
|
+
* row at once. So the grid is static by construction, which is also the cheapest
|
|
152
|
+
* reading of a motion law that permits only state feedback on a token duration.
|
|
153
|
+
*
|
|
154
|
+
* **Two inputs throw, and a drawn lie is worse than a refusal.** A row whose
|
|
155
|
+
* `shares` are not one per column is a ragged row that would draw as if the missing
|
|
156
|
+
* offsets had been measured and found empty, which is the one thing this data model
|
|
157
|
+
* exists to prevent. A share outside `min` to `max` is a measurement that cannot be
|
|
158
|
+
* placed on the scale, and the alternative was to clamp it, which is what `Chart`
|
|
159
|
+
* does for a value past the end of its axis and what this Component deliberately
|
|
160
|
+
* does not: a clamped retention cell is a cell that says its share is the ceiling
|
|
161
|
+
* when it is not, in a table whose whole claim is that every number in it was
|
|
162
|
+
* measured.
|
|
163
|
+
*
|
|
164
|
+
* **It is a server Component.** There is no state, no effect and no handler, every
|
|
165
|
+
* cell is arithmetic over props, and a dashboard of cohorts costs no client code.
|
|
166
|
+
*/
|
|
167
|
+
function CohortGrid({ className, rows, columns, label, rowHeading, min = 0, max = 100, precision = 0, caption, ...props }) {
|
|
168
|
+
// A nonsense `precision` is floored at zero rather than reaching `toFixed`, which
|
|
169
|
+
// throws on a negative count, because a rounding instruction is a reading
|
|
170
|
+
// instruction rather than a measurement and a typo in one should not take a page
|
|
171
|
+
// down. The cost is that `precision={-1}` reads as `0`, which is the whole number
|
|
172
|
+
// it was asking for anyway.
|
|
173
|
+
const places = Math.min(20, Math.max(0, Math.floor(precision)));
|
|
174
|
+
for (const row of rows) {
|
|
175
|
+
if (row.shares.length !== columns.length) {
|
|
176
|
+
throw new Error(`CohortGrid: the cohort '${row.key}' has ${String(row.shares.length)} share(s) for ` +
|
|
177
|
+
`${String(columns.length)} column(s). Every row must have one entry per offset, and an offset ` +
|
|
178
|
+
'the cohort has not reached is a null rather than a missing entry: a short row draws as a row ' +
|
|
179
|
+
'of empties, which claims the cohort had nothing at those offsets instead of claiming it had ' +
|
|
180
|
+
'not got there.');
|
|
181
|
+
}
|
|
182
|
+
for (const share of row.shares) {
|
|
183
|
+
if (share === null)
|
|
184
|
+
continue;
|
|
185
|
+
if (!Number.isFinite(share) || share < min || share > max) {
|
|
186
|
+
throw new Error(`CohortGrid: the cohort '${row.key}' carries the share ${String(share)}, which is not between ` +
|
|
187
|
+
`the scale's own ends of ${String(min)} and ${String(max)}. A retention cell that cannot be ` +
|
|
188
|
+
'placed on the scale it is drawn against has been measured against a different one, so this ' +
|
|
189
|
+
'stops rather than clamping it to the ceiling and printing a number the data does not hold.');
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return (_jsxs("figure", { "data-slot": "cohort-grid", className: cn('flex w-full flex-col gap-3', className), ...props, children: [_jsxs(Table, { children: [_jsx(TableCaption, { children: label }), _jsx(TableHeader, { children: _jsxs(TableRow, { children: [rowHeading === undefined ? (_jsx(TableHead, { className: "w-32" })) : (_jsx(TableHead, { className: "w-32", children: rowHeading })), columns.map((column) => (_jsx(TableHead, { scope: "col", className: "text-center tabular-nums", children: column.label }, column.key)))] }) }), _jsx(TableBody, { children: rows.map((row) => (_jsxs(TableRow, { "data-cohort": row.key, children: [_jsx(TableHead, { scope: "row", className: "font-medium whitespace-nowrap", children: row.label }), columns.map((column, at) => {
|
|
194
|
+
const share = row.shares[at];
|
|
195
|
+
if (share === null) {
|
|
196
|
+
return (_jsx(TableCell, { "data-offset": column.key, "data-state": "not-reached", className: "text-center tabular-nums" }, column.key));
|
|
197
|
+
}
|
|
198
|
+
const level = levelOf(share, min, max);
|
|
199
|
+
return (_jsxs(TableCell, { "data-offset": column.key, "data-level": level, className: cn('text-center tabular-nums', LEVEL_FILL[level], LEVEL_INK[level]), children: [share.toFixed(places), "%"] }, column.key));
|
|
200
|
+
})] }, row.key))) })] }), caption === undefined ? null : (_jsx("p", { "data-slot": "cohort-grid-caption", className: "text-muted-foreground text-sm", children: caption }))] }));
|
|
201
|
+
}
|
|
202
|
+
export { CohortGrid };
|
|
@@ -91,6 +91,17 @@ declare function CollapsibleTrigger({ className, children, ...props }: Collapsib
|
|
|
91
91
|
* The height transition is state feedback rather than decoration: the panel is
|
|
92
92
|
* opening or closing and the reader can watch it happen, which is the one motion
|
|
93
93
|
* this system allows on a surface like this.
|
|
94
|
+
*
|
|
95
|
+
* **`duration-slow` and not `duration-base`, and the reason is the motion scale
|
|
96
|
+
* rather than a preference.** `DESIGN.md` assigns `slow` to "transform or layout
|
|
97
|
+
* state such as a disclosure", and this is the disclosure: a height animation is the
|
|
98
|
+
* case the sentence is written about. The chevron in the trigger carries the same
|
|
99
|
+
* step for the same reason, because a 160ms icon against a 280ms panel is two events
|
|
100
|
+
* where the reader is watching one, and a reader who opens this cannot tell whether
|
|
101
|
+
* the icon or the panel was late.
|
|
102
|
+
*
|
|
103
|
+
* The reduced-motion rule does not shorten it, it removes it, so a reader who asked
|
|
104
|
+
* for no motion gets the panel at its resting height with nothing to wait for.
|
|
94
105
|
*/
|
|
95
106
|
declare function CollapsibleContent({ className, ...props }: CollapsibleContentProps): import("react").JSX.Element;
|
|
96
107
|
export { Collapsible, CollapsibleTrigger, CollapsibleContent };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../../src/components/ui/collapsible.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAI3C;;;;;GAKG;AACH,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC/E,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;OAQG;IACH,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,wDAAwD;AACxD,MAAM,WAAW,uBAAwB,SAAQ,cAAc,CAAC,QAAQ,CAAC;CAAG;AAE5E;;;;;GAKG;AACH,MAAM,WAAW,uBAAwB,SAAQ,cAAc,CAAC,KAAK,CAAC;IACpE;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAQ7D;AAED;;;;;;GAMG;AACH,iBAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,uBAAuB,+BAiBrF;AAED
|
|
1
|
+
{"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../../src/components/ui/collapsible.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAI3C;;;;;GAKG;AACH,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC/E,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;OAQG;IACH,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,wDAAwD;AACxD,MAAM,WAAW,uBAAwB,SAAQ,cAAc,CAAC,QAAQ,CAAC;CAAG;AAE5E;;;;;GAKG;AACH,MAAM,WAAW,uBAAwB,SAAQ,cAAc,CAAC,KAAK,CAAC;IACpE;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAQ7D;AAED;;;;;;GAMG;AACH,iBAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,uBAAuB,+BAiBrF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,iBAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,uBAAuB,+BAc3E;AAED,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAA"}
|
|
@@ -39,7 +39,7 @@ function Collapsible({ className, ...props }) {
|
|
|
39
39
|
* with the keyboard after closing the section without their hands.
|
|
40
40
|
*/
|
|
41
41
|
function CollapsibleTrigger({ className, children, ...props }) {
|
|
42
|
-
return (_jsxs(CollapsiblePrimitive.Trigger, { "data-slot": "collapsible-trigger", className: cn('text-foreground group flex w-full items-center justify-between gap-3 rounded-md py-3 text-left text-sm font-medium outline-none', 'transition-[color,background-color,box-shadow] duration-fast ease-out', 'hover:bg-accent/60 hover:text-accent-foreground focus-visible:ring-ring focus-visible:ring-[3px]', 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50', className), ...props, children: [children, _jsx(ChevronRightIcon, { className: "text-muted-foreground pointer-events-none size-4 shrink-0 transition-transform duration-
|
|
42
|
+
return (_jsxs(CollapsiblePrimitive.Trigger, { "data-slot": "collapsible-trigger", className: cn('text-foreground group flex w-full items-center justify-between gap-3 rounded-md py-3 text-left text-sm font-medium outline-none', 'transition-[color,background-color,box-shadow] duration-fast ease-out', 'hover:bg-accent/60 hover:text-accent-foreground focus-visible:ring-ring focus-visible:ring-[3px]', 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50', className), ...props, children: [children, _jsx(ChevronRightIcon, { className: "text-muted-foreground pointer-events-none size-4 shrink-0 transition-transform duration-slow ease-out group-data-[panel-open]:rotate-90" })] }));
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
45
|
* The region the trigger shows and hides.
|
|
@@ -47,8 +47,19 @@ function CollapsibleTrigger({ className, children, ...props }) {
|
|
|
47
47
|
* The height transition is state feedback rather than decoration: the panel is
|
|
48
48
|
* opening or closing and the reader can watch it happen, which is the one motion
|
|
49
49
|
* this system allows on a surface like this.
|
|
50
|
+
*
|
|
51
|
+
* **`duration-slow` and not `duration-base`, and the reason is the motion scale
|
|
52
|
+
* rather than a preference.** `DESIGN.md` assigns `slow` to "transform or layout
|
|
53
|
+
* state such as a disclosure", and this is the disclosure: a height animation is the
|
|
54
|
+
* case the sentence is written about. The chevron in the trigger carries the same
|
|
55
|
+
* step for the same reason, because a 160ms icon against a 280ms panel is two events
|
|
56
|
+
* where the reader is watching one, and a reader who opens this cannot tell whether
|
|
57
|
+
* the icon or the panel was late.
|
|
58
|
+
*
|
|
59
|
+
* The reduced-motion rule does not shorten it, it removes it, so a reader who asked
|
|
60
|
+
* for no motion gets the panel at its resting height with nothing to wait for.
|
|
50
61
|
*/
|
|
51
62
|
function CollapsibleContent({ className, ...props }) {
|
|
52
|
-
return (_jsx(CollapsiblePrimitive.Panel, { "data-slot": "collapsible-content", className: cn('h-(--collapsible-panel-height) overflow-hidden text-sm', 'transition-[height] duration-
|
|
63
|
+
return (_jsx(CollapsiblePrimitive.Panel, { "data-slot": "collapsible-content", className: cn('h-(--collapsible-panel-height) overflow-hidden text-sm', 'transition-[height] duration-slow ease-out', 'data-[starting-style]:h-0 data-[ending-style]:h-0', '[&[hidden]:not([hidden="until-found"])]:hidden', className), ...props }));
|
|
53
64
|
}
|
|
54
65
|
export { Collapsible, CollapsibleTrigger, CollapsibleContent };
|
|
@@ -113,7 +113,10 @@ export interface ComboboxProps {
|
|
|
113
113
|
* open and explains that the query found nothing, because a combobox that closed
|
|
114
114
|
* itself on a non-match tells the reader their keystroke broke the control. The
|
|
115
115
|
* explanation is a prop, since the sentence is the caller's and the query is put
|
|
116
|
-
* into it.
|
|
116
|
+
* into it. The message is a sibling of the listbox and not inside it, because a
|
|
117
|
+
* listbox owns `option` and `group` and nothing else, and the field's
|
|
118
|
+
* `aria-controls` points at the popup rather than at the listbox, because there is
|
|
119
|
+
* no listbox in that state and `aria-controls` is required on an expanded combobox.
|
|
117
120
|
*
|
|
118
121
|
* **The field keeps the caret for the whole interaction.** The arrows move a
|
|
119
122
|
* highlight through the list and leave focus where it is, so a reader can keep
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/components/ui/combobox.tsx"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAA;IACb,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAA;IACb,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAA;IACb,mBAAmB;IACnB,KAAK,EAAE,SAAS,YAAY,EAAE,CAAA;IAC9B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,gFAAgF;IAChF,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC9C;;;;;;OAMG;IACH,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5D,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,+DAA+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gEAAgE;IAChE,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,uDAAuD;IACvD,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAKD
|
|
1
|
+
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/components/ui/combobox.tsx"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAA;IACb,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAA;IACb,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAA;IACb,mBAAmB;IACnB,KAAK,EAAE,SAAS,YAAY,EAAE,CAAA;IAC9B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,gFAAgF;IAChF,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC9C;;;;;;OAMG;IACH,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5D,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,+DAA+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gEAAgE;IAChE,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,uDAAuD;IACvD,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,iBAAS,QAAQ,CAAC,EAChB,KAAK,EACL,KAAK,EACL,KAAK,EACL,YAAmB,EACnB,aAAa,EACb,KAAK,EACL,WAAW,EACX,IAAI,EACJ,WAAmB,EACnB,YAAY,EACZ,QAAgB,EAChB,QAAgB,EAChB,IAAI,EACJ,IAAI,EACJ,EAAE,EACF,kBAAkB,EAAE,WAAW,EAC/B,SAAS,GACV,EAAE,aAAa,+BA6Uf;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|