@vamos-ui/react 0.0.0-stage → 0.3.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/LICENSE +21 -0
- package/README.md +27 -2
- package/dist/blocks/block-heading.d.ts +29 -0
- package/dist/blocks/block-heading.js +39 -0
- package/dist/blocks/block-image.d.ts +52 -0
- package/dist/blocks/block-image.js +48 -0
- package/dist/blocks/block-link.d.ts +30 -0
- package/dist/blocks/block-link.js +36 -0
- package/dist/blocks/create-blocks.d.ts +54 -0
- package/dist/blocks/create-blocks.js +52 -0
- package/dist/blocks/index.d.ts +55 -0
- package/dist/blocks/index.js +59 -0
- package/dist/blocks/json-ld.d.ts +18 -0
- package/dist/blocks/json-ld.js +44 -0
- package/dist/blocks/labels.d.ts +20 -0
- package/dist/blocks/labels.js +43 -0
- package/dist/blocks/rich-text.d.ts +36 -0
- package/dist/blocks/rich-text.js +106 -0
- package/dist/blocks/schema/define-block.d.ts +151 -0
- package/dist/blocks/schema/define-block.js +120 -0
- package/dist/blocks/schema/emphasis.d.ts +17 -0
- package/dist/blocks/schema/emphasis.js +69 -0
- package/dist/blocks/schema/fields.d.ts +497 -0
- package/dist/blocks/schema/fields.js +240 -0
- package/dist/blocks/schema/icons.d.ts +2 -0
- package/dist/blocks/schema/icons.js +26 -0
- package/dist/blocks/schema/index.d.ts +18 -0
- package/dist/blocks/schema/index.js +21 -0
- package/dist/blocks/schema/lint-types.d.ts +16 -0
- package/dist/blocks/schema/lint-types.js +2 -0
- package/dist/blocks/schema/lint.d.ts +32 -0
- package/dist/blocks/schema/lint.js +164 -0
- package/dist/blocks/schema/localize.d.ts +20 -0
- package/dist/blocks/schema/localize.js +29 -0
- package/dist/blocks/schema/localized.d.ts +25 -0
- package/dist/blocks/schema/localized.js +53 -0
- package/dist/blocks/schema/migrate.d.ts +24 -0
- package/dist/blocks/schema/migrate.js +75 -0
- package/dist/blocks/schema/nodes.d.ts +196 -0
- package/dist/blocks/schema/nodes.js +78 -0
- package/dist/blocks/schema/rich-doc-schema.d.ts +32 -0
- package/dist/blocks/schema/rich-doc-schema.js +66 -0
- package/dist/blocks/schema/rich-doc.d.ts +90 -0
- package/dist/blocks/schema/rich-doc.js +62 -0
- package/dist/blocks/schema/safety.d.ts +20 -0
- package/dist/blocks/schema/safety.js +49 -0
- package/dist/blocks/schema/types.d.ts +172 -0
- package/dist/blocks/schema/types.js +3 -0
- package/dist/blocks/schema/validate.d.ts +17 -0
- package/dist/blocks/schema/validate.js +32 -0
- package/dist/blocks/schema/walk.d.ts +22 -0
- package/dist/blocks/schema/walk.js +60 -0
- package/dist/blocks/section-header.d.ts +38 -0
- package/dist/blocks/section-header.js +22 -0
- package/dist/blocks/section.d.ts +59 -0
- package/dist/blocks/section.js +66 -0
- package/dist/blocks/site/_kit-1.d.ts +101 -0
- package/dist/blocks/site/_kit-1.js +137 -0
- package/dist/blocks/site/_site-icon-1.d.ts +6 -0
- package/dist/blocks/site/_site-icon-1.js +15 -0
- package/dist/blocks/site/announcement-bar.d.ts +42 -0
- package/dist/blocks/site/announcement-bar.js +38 -0
- package/dist/blocks/site/announcement-dismiss.d.ts +18 -0
- package/dist/blocks/site/announcement-dismiss.js +28 -0
- package/dist/blocks/site/article-layout.d.ts +65 -0
- package/dist/blocks/site/article-layout.js +88 -0
- package/dist/blocks/site/blog-list.d.ts +79 -0
- package/dist/blocks/site/blog-list.js +78 -0
- package/dist/blocks/site/comparison-table.d.ts +54 -0
- package/dist/blocks/site/comparison-table.js +38 -0
- package/dist/blocks/site/consent-banner.d.ts +52 -0
- package/dist/blocks/site/consent-banner.js +33 -0
- package/dist/blocks/site/contact-dock.d.ts +52 -0
- package/dist/blocks/site/contact-dock.js +55 -0
- package/dist/blocks/site/contact-form.d.ts +60 -0
- package/dist/blocks/site/contact-form.js +45 -0
- package/dist/blocks/site/cta-booking.d.ts +43 -0
- package/dist/blocks/site/cta-booking.js +69 -0
- package/dist/blocks/site/cta.d.ts +74 -0
- package/dist/blocks/site/cta.js +113 -0
- package/dist/blocks/site/embed-facade.d.ts +20 -0
- package/dist/blocks/site/embed-facade.js +21 -0
- package/dist/blocks/site/faq.d.ts +48 -0
- package/dist/blocks/site/faq.js +52 -0
- package/dist/blocks/site/feature-grid.d.ts +46 -0
- package/dist/blocks/site/feature-grid.js +50 -0
- package/dist/blocks/site/feature-tabs.d.ts +22 -0
- package/dist/blocks/site/feature-tabs.js +11 -0
- package/dist/blocks/site/footer.d.ts +68 -0
- package/dist/blocks/site/footer.js +61 -0
- package/dist/blocks/site/gallery-section.d.ts +42 -0
- package/dist/blocks/site/gallery-section.js +48 -0
- package/dist/blocks/site/hero-video.d.ts +15 -0
- package/dist/blocks/site/hero-video.js +31 -0
- package/dist/blocks/site/hero.d.ts +64 -0
- package/dist/blocks/site/hero.js +73 -0
- package/dist/blocks/site/logo-strip.d.ts +44 -0
- package/dist/blocks/site/logo-strip.js +27 -0
- package/dist/blocks/site/map-hours.d.ts +83 -0
- package/dist/blocks/site/map-hours.js +125 -0
- package/dist/blocks/site/media-text.d.ts +45 -0
- package/dist/blocks/site/media-text.js +56 -0
- package/dist/blocks/site/menu-list.d.ts +74 -0
- package/dist/blocks/site/menu-list.js +84 -0
- package/dist/blocks/site/navbar-submenu.d.ts +18 -0
- package/dist/blocks/site/navbar-submenu.js +51 -0
- package/dist/blocks/site/navbar.d.ts +67 -0
- package/dist/blocks/site/navbar.js +64 -0
- package/dist/blocks/site/not-found.d.ts +40 -0
- package/dist/blocks/site/not-found.js +38 -0
- package/dist/blocks/site/page-intro.d.ts +46 -0
- package/dist/blocks/site/page-intro.js +44 -0
- package/dist/blocks/site/pricing-table.d.ts +67 -0
- package/dist/blocks/site/pricing-table.js +83 -0
- package/dist/blocks/site/process.d.ts +36 -0
- package/dist/blocks/site/process.js +42 -0
- package/dist/blocks/site/registry-1.d.ts +720 -0
- package/dist/blocks/site/registry-1.js +783 -0
- package/dist/blocks/site/registry-2.d.ts +914 -0
- package/dist/blocks/site/registry-2.js +563 -0
- package/dist/blocks/site/rich-text-section.d.ts +34 -0
- package/dist/blocks/site/rich-text-section.js +32 -0
- package/dist/blocks/site/shared/brand-icons.d.ts +21 -0
- package/dist/blocks/site/shared/brand-icons.js +56 -0
- package/dist/blocks/site/shared/consent-gate.d.ts +41 -0
- package/dist/blocks/site/shared/consent-gate.js +43 -0
- package/dist/blocks/site/shared/consent-island.d.ts +38 -0
- package/dist/blocks/site/shared/consent-island.js +63 -0
- package/dist/blocks/site/shared/consent.d.ts +49 -0
- package/dist/blocks/site/shared/consent.js +130 -0
- package/dist/blocks/site/shared/contact-form-island.d.ts +41 -0
- package/dist/blocks/site/shared/contact-form-island.js +100 -0
- package/dist/blocks/site/shared/copy-link.d.ts +10 -0
- package/dist/blocks/site/shared/copy-link.js +25 -0
- package/dist/blocks/site/shared/dock-avoid.d.ts +15 -0
- package/dist/blocks/site/shared/dock-avoid.js +107 -0
- package/dist/blocks/site/shared/dock-hours.d.ts +13 -0
- package/dist/blocks/site/shared/dock-hours.js +25 -0
- package/dist/blocks/site/shared/gallery-lightbox.d.ts +12 -0
- package/dist/blocks/site/shared/gallery-lightbox.js +10 -0
- package/dist/blocks/site/shared/island-keys.d.ts +10 -0
- package/dist/blocks/site/shared/island-keys.js +44 -0
- package/dist/blocks/site/shared/kit-2.d.ts +55 -0
- package/dist/blocks/site/shared/kit-2.js +84 -0
- package/dist/blocks/site/shared/labels-2.d.ts +209 -0
- package/dist/blocks/site/shared/labels-2.js +427 -0
- package/dist/blocks/site/shared/open-now.d.ts +22 -0
- package/dist/blocks/site/shared/open-now.js +27 -0
- package/dist/blocks/site/shared/opening-hours.d.ts +117 -0
- package/dist/blocks/site/shared/opening-hours.js +245 -0
- package/dist/blocks/site/shared/site-accent.d.ts +48 -0
- package/dist/blocks/site/shared/site-accent.js +249 -0
- package/dist/blocks/site/shared/site-form.d.ts +79 -0
- package/dist/blocks/site/shared/site-form.js +111 -0
- package/dist/blocks/site/shared/site-routing.d.ts +54 -0
- package/dist/blocks/site/shared/site-routing.js +86 -0
- package/dist/blocks/site/shared/testimonials-carousel.d.ts +17 -0
- package/dist/blocks/site/shared/testimonials-carousel.js +64 -0
- package/dist/blocks/site/site-shell.d.ts +108 -0
- package/dist/blocks/site/site-shell.js +254 -0
- package/dist/blocks/site/stats-band.d.ts +42 -0
- package/dist/blocks/site/stats-band.js +45 -0
- package/dist/blocks/site/team.d.ts +44 -0
- package/dist/blocks/site/team.js +48 -0
- package/dist/blocks/site/testimonials.d.ts +68 -0
- package/dist/blocks/site/testimonials.js +66 -0
- package/dist/blocks/types.d.ts +63 -0
- package/dist/blocks/types.js +2 -0
- package/dist/business/approval-flow.d.ts +152 -0
- package/dist/business/approval-flow.js +221 -0
- package/dist/business/export-core.d.ts +55 -0
- package/dist/business/export-core.js +101 -0
- package/dist/business/export.d.ts +148 -0
- package/dist/business/export.js +264 -0
- package/dist/business/import-core.d.ts +104 -0
- package/dist/business/import-core.js +281 -0
- package/dist/business/import-wizard.d.ts +186 -0
- package/dist/business/import-wizard.js +401 -0
- package/dist/business/index.d.ts +12 -0
- package/dist/business/index.js +22 -0
- package/dist/business/line-items-core.d.ts +129 -0
- package/dist/business/line-items-core.js +183 -0
- package/dist/business/line-items.d.ts +119 -0
- package/dist/business/line-items.js +299 -0
- package/dist/business/multi-step-form.d.ts +131 -0
- package/dist/business/multi-step-form.js +337 -0
- package/dist/business/permission-core.d.ts +59 -0
- package/dist/business/permission-core.js +99 -0
- package/dist/business/permission-matrix.d.ts +158 -0
- package/dist/business/permission-matrix.js +341 -0
- package/dist/business/setup-checklist.d.ts +80 -0
- package/dist/business/setup-checklist.js +92 -0
- package/dist/business/signer-status.d.ts +53 -0
- package/dist/business/signer-status.js +76 -0
- package/dist/charts/area-chart.d.ts +35 -0
- package/dist/charts/area-chart.js +33 -0
- package/dist/charts/bar-chart.d.ts +27 -0
- package/dist/charts/bar-chart.js +46 -0
- package/dist/charts/bar-list.d.ts +47 -0
- package/dist/charts/bar-list.js +60 -0
- package/dist/charts/chart-shell.d.ts +173 -0
- package/dist/charts/chart-shell.js +205 -0
- package/dist/charts/chart.d.ts +73 -0
- package/dist/charts/chart.js +106 -0
- package/dist/charts/combo-chart.d.ts +29 -0
- package/dist/charts/combo-chart.js +47 -0
- package/dist/charts/donut-chart.d.ts +33 -0
- package/dist/charts/donut-chart.js +113 -0
- package/dist/charts/funnel.d.ts +51 -0
- package/dist/charts/funnel.js +69 -0
- package/dist/charts/gauge.d.ts +62 -0
- package/dist/charts/gauge.js +104 -0
- package/dist/charts/heatmap.d.ts +81 -0
- package/dist/charts/heatmap.js +338 -0
- package/dist/charts/index.d.ts +12 -0
- package/dist/charts/index.js +14 -0
- package/dist/charts/line-chart.d.ts +21 -0
- package/dist/charts/line-chart.js +36 -0
- package/dist/charts/test-utils.d.ts +2 -0
- package/dist/charts/test-utils.js +38 -0
- package/dist/charts/utils.d.ts +130 -0
- package/dist/charts/utils.js +262 -0
- package/dist/components/_qr-core.d.ts +26 -0
- package/dist/components/_qr-core.js +376 -0
- package/dist/components/accordion.d.ts +47 -0
- package/dist/components/accordion.js +70 -0
- package/dist/components/activity-timeline.d.ts +149 -0
- package/dist/components/activity-timeline.js +122 -0
- package/dist/components/address-field.d.ts +116 -0
- package/dist/components/address-field.js +219 -0
- package/dist/components/alert-dialog.d.ts +99 -0
- package/dist/components/alert-dialog.js +192 -0
- package/dist/components/alert.d.ts +42 -0
- package/dist/components/alert.js +82 -0
- package/dist/components/app-shell.d.ts +159 -0
- package/dist/components/app-shell.js +289 -0
- package/dist/components/attachment-list.d.ts +96 -0
- package/dist/components/attachment-list.js +196 -0
- package/dist/components/audit-log.d.ts +150 -0
- package/dist/components/audit-log.js +205 -0
- package/dist/components/avatar.d.ts +87 -0
- package/dist/components/avatar.js +126 -0
- package/dist/components/backup-codes.d.ts +42 -0
- package/dist/components/backup-codes.js +67 -0
- package/dist/components/badge.d.ts +41 -0
- package/dist/components/badge.js +68 -0
- package/dist/components/breadcrumb.d.ts +78 -0
- package/dist/components/breadcrumb.js +106 -0
- package/dist/components/button-group.d.ts +52 -0
- package/dist/components/button-group.js +77 -0
- package/dist/components/button.d.ts +58 -0
- package/dist/components/button.js +107 -0
- package/dist/components/calendar.d.ts +240 -0
- package/dist/components/calendar.js +483 -0
- package/dist/components/card.d.ts +66 -0
- package/dist/components/card.js +76 -0
- package/dist/components/carousel.d.ts +170 -0
- package/dist/components/carousel.js +348 -0
- package/dist/components/checkbox.d.ts +78 -0
- package/dist/components/checkbox.js +138 -0
- package/dist/components/color-picker.d.ts +112 -0
- package/dist/components/color-picker.js +235 -0
- package/dist/components/combobox.d.ts +136 -0
- package/dist/components/combobox.js +294 -0
- package/dist/components/command.d.ts +281 -0
- package/dist/components/command.js +498 -0
- package/dist/components/comment-thread.d.ts +252 -0
- package/dist/components/comment-thread.js +449 -0
- package/dist/components/context-menu.d.ts +77 -0
- package/dist/components/context-menu.js +82 -0
- package/dist/components/currency-input.d.ts +43 -0
- package/dist/components/currency-input.js +85 -0
- package/dist/components/date-picker.d.ts +141 -0
- package/dist/components/date-picker.js +241 -0
- package/dist/components/date-range-picker.d.ts +91 -0
- package/dist/components/date-range-picker.js +251 -0
- package/dist/components/description-list.d.ts +92 -0
- package/dist/components/description-list.js +42 -0
- package/dist/components/dialog.d.ts +139 -0
- package/dist/components/dialog.js +185 -0
- package/dist/components/dropdown-menu.d.ts +100 -0
- package/dist/components/dropdown-menu.js +102 -0
- package/dist/components/editor-layout.d.ts +166 -0
- package/dist/components/editor-layout.js +237 -0
- package/dist/components/empty-state.d.ts +49 -0
- package/dist/components/empty-state.js +68 -0
- package/dist/components/entity-card.d.ts +83 -0
- package/dist/components/entity-card.js +92 -0
- package/dist/components/file-upload.d.ts +256 -0
- package/dist/components/file-upload.js +490 -0
- package/dist/components/formatted-input.d.ts +177 -0
- package/dist/components/formatted-input.js +399 -0
- package/dist/components/hierarchy-chart.d.ts +190 -0
- package/dist/components/hierarchy-chart.js +890 -0
- package/dist/components/hover-card.d.ts +21 -0
- package/dist/components/hover-card.js +32 -0
- package/dist/components/iban-input.d.ts +38 -0
- package/dist/components/iban-input.js +112 -0
- package/dist/components/id-input.d.ts +65 -0
- package/dist/components/id-input.js +130 -0
- package/dist/components/image.d.ts +130 -0
- package/dist/components/image.js +168 -0
- package/dist/components/input-otp.d.ts +62 -0
- package/dist/components/input-otp.js +73 -0
- package/dist/components/input.d.ts +141 -0
- package/dist/components/input.js +187 -0
- package/dist/components/item.d.ts +96 -0
- package/dist/components/item.js +113 -0
- package/dist/components/kbd.d.ts +64 -0
- package/dist/components/kbd.js +119 -0
- package/dist/components/list-layout.d.ts +144 -0
- package/dist/components/list-layout.js +210 -0
- package/dist/components/native-select.d.ts +33 -0
- package/dist/components/native-select.js +48 -0
- package/dist/components/navigation-menu.d.ts +127 -0
- package/dist/components/navigation-menu.js +129 -0
- package/dist/components/notification-center.d.ts +164 -0
- package/dist/components/notification-center.js +399 -0
- package/dist/components/page-header.d.ts +60 -0
- package/dist/components/page-header.js +60 -0
- package/dist/components/pagination.d.ts +121 -0
- package/dist/components/pagination.js +174 -0
- package/dist/components/phone-input.d.ts +49 -0
- package/dist/components/phone-input.js +266 -0
- package/dist/components/pin-map.d.ts +58 -0
- package/dist/components/pin-map.js +167 -0
- package/dist/components/popover.d.ts +38 -0
- package/dist/components/popover.js +69 -0
- package/dist/components/progress.d.ts +79 -0
- package/dist/components/progress.js +97 -0
- package/dist/components/qr-code.d.ts +36 -0
- package/dist/components/qr-code.js +27 -0
- package/dist/components/radio-group.d.ts +43 -0
- package/dist/components/radio-group.js +81 -0
- package/dist/components/record-detail-layout.d.ts +167 -0
- package/dist/components/record-detail-layout.js +233 -0
- package/dist/components/record-picker.d.ts +199 -0
- package/dist/components/record-picker.js +650 -0
- package/dist/components/resizable.d.ts +50 -0
- package/dist/components/resizable.js +88 -0
- package/dist/components/scroll-area.d.ts +40 -0
- package/dist/components/scroll-area.js +56 -0
- package/dist/components/select.d.ts +126 -0
- package/dist/components/select.js +137 -0
- package/dist/components/separator.d.ts +31 -0
- package/dist/components/separator.js +41 -0
- package/dist/components/settings-layout.d.ts +134 -0
- package/dist/components/settings-layout.js +180 -0
- package/dist/components/sheet.d.ts +103 -0
- package/dist/components/sheet.js +165 -0
- package/dist/components/sidebar.d.ts +171 -0
- package/dist/components/sidebar.js +421 -0
- package/dist/components/signature-pad.d.ts +85 -0
- package/dist/components/signature-pad.js +283 -0
- package/dist/components/skeleton.d.ts +64 -0
- package/dist/components/skeleton.js +53 -0
- package/dist/components/sla-timer.d.ts +75 -0
- package/dist/components/sla-timer.js +142 -0
- package/dist/components/slider.d.ts +57 -0
- package/dist/components/slider.js +133 -0
- package/dist/components/slug-input.d.ts +69 -0
- package/dist/components/slug-input.js +201 -0
- package/dist/components/sparkline.d.ts +54 -0
- package/dist/components/sparkline.js +122 -0
- package/dist/components/spinner.d.ts +34 -0
- package/dist/components/spinner.js +34 -0
- package/dist/components/stat.d.ts +135 -0
- package/dist/components/stat.js +130 -0
- package/dist/components/status-picker.d.ts +107 -0
- package/dist/components/status-picker.js +175 -0
- package/dist/components/stepper.d.ts +86 -0
- package/dist/components/stepper.js +103 -0
- package/dist/components/switch.d.ts +34 -0
- package/dist/components/switch.js +70 -0
- package/dist/components/table.d.ts +101 -0
- package/dist/components/table.js +72 -0
- package/dist/components/tabs.d.ts +103 -0
- package/dist/components/tabs.js +173 -0
- package/dist/components/tag-input.d.ts +77 -0
- package/dist/components/tag-input.js +305 -0
- package/dist/components/task-list.d.ts +89 -0
- package/dist/components/task-list.js +238 -0
- package/dist/components/time-picker.d.ts +119 -0
- package/dist/components/time-picker.js +399 -0
- package/dist/components/toast.d.ts +87 -0
- package/dist/components/toast.js +142 -0
- package/dist/components/toggle.d.ts +77 -0
- package/dist/components/toggle.js +109 -0
- package/dist/components/tooltip.d.ts +69 -0
- package/dist/components/tooltip.js +105 -0
- package/dist/components/top-bar.d.ts +87 -0
- package/dist/components/top-bar.js +99 -0
- package/dist/components/tour.d.ts +60 -0
- package/dist/components/tour.js +139 -0
- package/dist/components/tree-select.d.ts +89 -0
- package/dist/components/tree-select.js +243 -0
- package/dist/components/tree-view.d.ts +109 -0
- package/dist/components/tree-view.js +170 -0
- package/dist/components/typography.d.ts +107 -0
- package/dist/components/typography.js +128 -0
- package/dist/components/user-picker.d.ts +89 -0
- package/dist/components/user-picker.js +162 -0
- package/dist/components/version-history.d.ts +191 -0
- package/dist/components/version-history.js +431 -0
- package/dist/data-table/csv.d.ts +27 -0
- package/dist/data-table/csv.js +68 -0
- package/dist/data-table/data-table.d.ts +423 -0
- package/dist/data-table/data-table.js +1259 -0
- package/dist/data-table/filter-bar.d.ts +146 -0
- package/dist/data-table/filter-bar.js +569 -0
- package/dist/data-table/filter-fns.d.ts +65 -0
- package/dist/data-table/filter-fns.js +382 -0
- package/dist/data-table/index.d.ts +8 -0
- package/dist/data-table/index.js +9 -0
- package/dist/data-table/saved-views.d.ts +100 -0
- package/dist/data-table/saved-views.js +251 -0
- package/dist/data-table/types.d.ts +168 -0
- package/dist/data-table/types.js +87 -0
- package/dist/data-table/url-state.d.ts +94 -0
- package/dist/data-table/url-state.js +303 -0
- package/dist/data-table/view-state.d.ts +16 -0
- package/dist/data-table/view-state.js +81 -0
- package/dist/editor/_test-setup.d.ts +1 -0
- package/dist/editor/_test-setup.js +33 -0
- package/dist/editor/block-editor.d.ts +137 -0
- package/dist/editor/block-editor.js +280 -0
- package/dist/editor/commands.d.ts +31 -0
- package/dist/editor/commands.js +150 -0
- package/dist/editor/context.d.ts +108 -0
- package/dist/editor/context.js +30 -0
- package/dist/editor/convert.d.ts +66 -0
- package/dist/editor/convert.js +567 -0
- package/dist/editor/drag-handle.d.ts +10 -0
- package/dist/editor/drag-handle.js +69 -0
- package/dist/editor/extensions.d.ts +34 -0
- package/dist/editor/extensions.js +239 -0
- package/dist/editor/index.d.ts +14 -0
- package/dist/editor/index.js +17 -0
- package/dist/editor/inserter.d.ts +12 -0
- package/dist/editor/inserter.js +88 -0
- package/dist/editor/inspector.d.ts +17 -0
- package/dist/editor/inspector.js +65 -0
- package/dist/editor/items.d.ts +62 -0
- package/dist/editor/items.js +195 -0
- package/dist/editor/labels.d.ts +119 -0
- package/dist/editor/labels.js +130 -0
- package/dist/editor/markdown.d.ts +14 -0
- package/dist/editor/markdown.js +209 -0
- package/dist/editor/menus.d.ts +20 -0
- package/dist/editor/menus.js +236 -0
- package/dist/editor/nodes.d.ts +14 -0
- package/dist/editor/nodes.js +201 -0
- package/dist/editor/outline.d.ts +11 -0
- package/dist/editor/outline.js +52 -0
- package/dist/editor/schema-form.d.ts +64 -0
- package/dist/editor/schema-form.js +290 -0
- package/dist/editor/slash-menu.d.ts +15 -0
- package/dist/editor/slash-menu.js +119 -0
- package/dist/fonts/catalog.d.ts +53 -0
- package/dist/fonts/catalog.js +121 -0
- package/dist/fonts/font-picker.d.ts +70 -0
- package/dist/fonts/font-picker.js +225 -0
- package/dist/fonts/index.d.ts +6 -0
- package/dist/fonts/index.js +7 -0
- package/dist/fonts/loader.d.ts +66 -0
- package/dist/fonts/loader.js +161 -0
- package/dist/fonts/pairing-picker.d.ts +31 -0
- package/dist/fonts/pairing-picker.js +81 -0
- package/dist/fonts/pairings.d.ts +84 -0
- package/dist/fonts/pairings.js +149 -0
- package/dist/fonts/provider.d.ts +34 -0
- package/dist/fonts/provider.js +51 -0
- package/dist/form/index.d.ts +1 -0
- package/dist/form/index.js +1 -0
- package/dist/format/core.d.ts +149 -0
- package/dist/format/core.js +357 -0
- package/dist/format/index.d.ts +4 -0
- package/dist/format/index.js +5 -0
- package/dist/format/use-format.d.ts +1 -0
- package/dist/format/use-format.js +3 -0
- package/dist/index.d.ts +91 -0
- package/dist/index.js +92 -0
- package/dist/lib/cn.d.ts +3 -0
- package/dist/lib/cn.js +16 -0
- package/dist/lib/color.d.ts +64 -0
- package/dist/lib/color.js +177 -0
- package/dist/lib/compose-refs.d.ts +24 -0
- package/dist/lib/compose-refs.js +45 -0
- package/dist/lib/data-islands.d.ts +194 -0
- package/dist/lib/data-islands.js +368 -0
- package/dist/lib/date.d.ts +129 -0
- package/dist/lib/date.js +386 -0
- package/dist/lib/field-context.d.ts +64 -0
- package/dist/lib/field-context.js +62 -0
- package/dist/lib/floating-arrow.d.ts +18 -0
- package/dist/lib/floating-arrow.js +15 -0
- package/dist/lib/islands.d.ts +38 -0
- package/dist/lib/islands.js +40 -0
- package/dist/lib/labels.d.ts +51 -0
- package/dist/lib/labels.js +56 -0
- package/dist/lib/layer.d.ts +36 -0
- package/dist/lib/layer.js +42 -0
- package/dist/lib/locale.d.ts +85 -0
- package/dist/lib/locale.js +105 -0
- package/dist/lib/menu.d.ts +58 -0
- package/dist/lib/menu.js +99 -0
- package/dist/lib/message-format.d.ts +20 -0
- package/dist/lib/message-format.js +116 -0
- package/dist/lib/nav.d.ts +132 -0
- package/dist/lib/nav.js +178 -0
- package/dist/lib/provider.d.ts +100 -0
- package/dist/lib/provider.js +105 -0
- package/dist/lib/public.d.ts +23 -0
- package/dist/lib/public.js +34 -0
- package/dist/lib/sr-name.d.ts +18 -0
- package/dist/lib/sr-name.js +17 -0
- package/dist/lib/text.d.ts +100 -0
- package/dist/lib/text.js +233 -0
- package/dist/lib/theme-scope.d.ts +58 -0
- package/dist/lib/theme-scope.js +59 -0
- package/dist/lib/use-async-list.d.ts +60 -0
- package/dist/lib/use-async-list.js +119 -0
- package/dist/lib/use-container-width.d.ts +19 -0
- package/dist/lib/use-container-width.js +39 -0
- package/dist/lib/use-controllable-state.d.ts +33 -0
- package/dist/lib/use-controllable-state.js +56 -0
- package/dist/lib/use-edge-fade.d.ts +13 -0
- package/dist/lib/use-edge-fade.js +43 -0
- package/dist/lib/use-formatted-input.d.ts +69 -0
- package/dist/lib/use-formatted-input.js +152 -0
- package/dist/lib/use-hotkeys.d.ts +80 -0
- package/dist/lib/use-hotkeys.js +221 -0
- package/dist/lib/use-hover-intent.d.ts +44 -0
- package/dist/lib/use-hover-intent.js +119 -0
- package/dist/lib/use-media-query.d.ts +21 -0
- package/dist/lib/use-media-query.js +28 -0
- package/dist/lib/use-reduced-motion.d.ts +8 -0
- package/dist/lib/use-reduced-motion.js +13 -0
- package/dist/lib/use-tree.d.ts +153 -0
- package/dist/lib/use-tree.js +534 -0
- package/dist/lib/value-format.d.ts +25 -0
- package/dist/lib/value-format.js +56 -0
- package/dist/lib/variants.d.ts +131 -0
- package/dist/lib/variants.js +109 -0
- package/dist/locale-data/core/date.d.ts +24 -0
- package/dist/locale-data/core/date.js +68 -0
- package/dist/locale-data/core/decimal.d.ts +19 -0
- package/dist/locale-data/core/decimal.js +79 -0
- package/dist/locale-data/core/holidays.d.ts +30 -0
- package/dist/locale-data/core/holidays.js +79 -0
- package/dist/locale-data/core/iban.d.ts +29 -0
- package/dist/locale-data/core/iban.js +74 -0
- package/dist/locale-data/core/index.d.ts +7 -0
- package/dist/locale-data/core/index.js +6 -0
- package/dist/locale-data/core/types.d.ts +173 -0
- package/dist/locale-data/core/types.js +6 -0
- package/dist/locale-data/core/week-info.d.ts +23 -0
- package/dist/locale-data/core/week-info.js +85 -0
- package/dist/locale-data/core/working-days.d.ts +27 -0
- package/dist/locale-data/core/working-days.js +133 -0
- package/dist/locale-data/index.d.ts +2 -0
- package/dist/locale-data/index.js +4 -0
- package/dist/locale-data/tr/address-tr.json +1 -0
- package/dist/locale-data/tr/address.d.ts +23 -0
- package/dist/locale-data/tr/address.js +52 -0
- package/dist/locale-data/tr/holidays.d.ts +31 -0
- package/dist/locale-data/tr/holidays.js +81 -0
- package/dist/locale-data/tr/iban.d.ts +21 -0
- package/dist/locale-data/tr/iban.js +45 -0
- package/dist/locale-data/tr/id.d.ts +36 -0
- package/dist/locale-data/tr/id.js +120 -0
- package/dist/locale-data/tr/index.d.ts +12 -0
- package/dist/locale-data/tr/index.js +33 -0
- package/dist/locale-data/tr/kdv.d.ts +91 -0
- package/dist/locale-data/tr/kdv.js +222 -0
- package/dist/locales/en.d.ts +2102 -0
- package/dist/locales/en.js +2088 -0
- package/dist/locales/tr.d.ts +2086 -0
- package/dist/locales/tr.js +2087 -0
- package/dist/media/focal-point.d.ts +42 -0
- package/dist/media/focal-point.js +96 -0
- package/dist/media/gallery-layout.d.ts +19 -0
- package/dist/media/gallery-layout.js +61 -0
- package/dist/media/gallery.d.ts +64 -0
- package/dist/media/gallery.js +140 -0
- package/dist/media/image-cropper.d.ts +86 -0
- package/dist/media/image-cropper.js +170 -0
- package/dist/media/image-field.d.ts +115 -0
- package/dist/media/image-field.js +212 -0
- package/dist/media/index.d.ts +19 -0
- package/dist/media/index.js +23 -0
- package/dist/media/lightbox.d.ts +82 -0
- package/dist/media/lightbox.js +171 -0
- package/dist/media/link-preview.d.ts +97 -0
- package/dist/media/link-preview.js +177 -0
- package/dist/media/media-library.d.ts +244 -0
- package/dist/media/media-library.js +776 -0
- package/dist/media/media-picker.d.ts +96 -0
- package/dist/media/media-picker.js +209 -0
- package/dist/media/media-provider.d.ts +23 -0
- package/dist/media/media-provider.js +44 -0
- package/dist/media/media-utils.d.ts +39 -0
- package/dist/media/media-utils.js +145 -0
- package/dist/media/memory-adapter.d.ts +22 -0
- package/dist/media/memory-adapter.js +162 -0
- package/dist/media/rest-adapter.d.ts +90 -0
- package/dist/media/rest-adapter.js +208 -0
- package/dist/media/serp.d.ts +62 -0
- package/dist/media/serp.js +108 -0
- package/dist/media/test-fixtures.d.ts +3 -0
- package/dist/media/test-fixtures.js +37 -0
- package/dist/media/types.d.ts +183 -0
- package/dist/media/types.js +3 -0
- package/dist/media/use-pan-zoom.d.ts +51 -0
- package/dist/media/use-pan-zoom.js +156 -0
- package/dist/media/use-upload-queue.d.ts +64 -0
- package/dist/media/use-upload-queue.js +115 -0
- package/dist/media/video-player.d.ts +135 -0
- package/dist/media/video-player.js +319 -0
- package/dist/motion/core.d.ts +32 -0
- package/dist/motion/core.js +77 -0
- package/dist/motion/count-up.d.ts +29 -0
- package/dist/motion/count-up.js +92 -0
- package/dist/motion/index.d.ts +11 -0
- package/dist/motion/index.js +13 -0
- package/dist/motion/motion-scope.d.ts +17 -0
- package/dist/motion/motion-scope.js +16 -0
- package/dist/motion/page-transition.d.ts +33 -0
- package/dist/motion/page-transition.js +61 -0
- package/dist/motion/parallax.d.ts +37 -0
- package/dist/motion/parallax.js +90 -0
- package/dist/motion/pointer.d.ts +38 -0
- package/dist/motion/pointer.js +117 -0
- package/dist/motion/reveal.d.ts +72 -0
- package/dist/motion/reveal.js +133 -0
- package/dist/motion/scroll-shrink.d.ts +18 -0
- package/dist/motion/scroll-shrink.js +47 -0
- package/dist/motion/skeleton-swap.d.ts +17 -0
- package/dist/motion/skeleton-swap.js +43 -0
- package/dist/motion/text-reveal.d.ts +30 -0
- package/dist/motion/text-reveal.js +29 -0
- package/dist/motion/ticker.d.ts +35 -0
- package/dist/motion/ticker.js +16 -0
- package/dist/next/index.d.ts +42 -0
- package/dist/next/index.js +36 -0
- package/dist/render/block-renderer.d.ts +56 -0
- package/dist/render/block-renderer.js +137 -0
- package/dist/render/index.d.ts +6 -0
- package/dist/render/index.js +7 -0
- package/dist/render/prepare.d.ts +61 -0
- package/dist/render/prepare.js +119 -0
- package/dist/scheduler/core/duration.d.ts +83 -0
- package/dist/scheduler/core/duration.js +174 -0
- package/dist/scheduler/core/gantt.d.ts +63 -0
- package/dist/scheduler/core/gantt.js +226 -0
- package/dist/scheduler/core/index.d.ts +6 -0
- package/dist/scheduler/core/index.js +7 -0
- package/dist/scheduler/core/layout.d.ts +97 -0
- package/dist/scheduler/core/layout.js +249 -0
- package/dist/scheduler/core/time-scale.d.ts +89 -0
- package/dist/scheduler/core/time-scale.js +173 -0
- package/dist/scheduler/gantt.d.ts +125 -0
- package/dist/scheduler/gantt.js +532 -0
- package/dist/scheduler/index.d.ts +6 -0
- package/dist/scheduler/index.js +7 -0
- package/dist/scheduler/resource-calendar.d.ts +218 -0
- package/dist/scheduler/resource-calendar.js +661 -0
- package/dist/scheduler/scheduler.d.ts +168 -0
- package/dist/scheduler/scheduler.js +768 -0
- package/dist/scheduler/shared.d.ts +63 -0
- package/dist/scheduler/shared.js +145 -0
- package/dist/scheduler/time-tracker.d.ts +138 -0
- package/dist/scheduler/time-tracker.js +403 -0
- package/dist/sortable/core.d.ts +67 -0
- package/dist/sortable/core.js +167 -0
- package/dist/sortable/index.d.ts +8 -0
- package/dist/sortable/index.js +10 -0
- package/dist/sortable/kanban-core.d.ts +70 -0
- package/dist/sortable/kanban-core.js +67 -0
- package/dist/sortable/kanban.d.ts +147 -0
- package/dist/sortable/kanban.js +472 -0
- package/dist/sortable/sortable-list.d.ts +71 -0
- package/dist/sortable/sortable-list.js +76 -0
- package/dist/sortable/sortable-tree.d.ts +105 -0
- package/dist/sortable/sortable-tree.js +462 -0
- package/dist/sortable/sortable.d.ts +188 -0
- package/dist/sortable/sortable.js +485 -0
- package/dist/sortable/use-pointer-drag.d.ts +75 -0
- package/dist/sortable/use-pointer-drag.js +173 -0
- package/dist/sortable/use-time-scale.d.ts +11 -0
- package/dist/sortable/use-time-scale.js +19 -0
- package/dist/styles/base.css +51 -0
- package/dist/styles/blocks.css +949 -0
- package/dist/styles/calendar.css +642 -0
- package/dist/styles/charts.css +264 -0
- package/dist/styles/data.css +474 -0
- package/dist/styles/editors.css +1022 -0
- package/dist/styles/forms.css +406 -0
- package/dist/styles/media.css +515 -0
- package/dist/styles/motion.css +389 -0
- package/dist/styles/navigation.css +293 -0
- package/dist/styles/overlays.css +244 -0
- package/dist/styles.css +743 -0
- package/package.json +160 -4
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { BlockRenderer, renderDoc, renderPrepared, BlockNotice, type BlockRendererProps, type RenderDocOptions } from "./block-renderer.js";
|
|
2
|
+
export { prepareDoc, resolveDoc, isOutsideSchedule, type PreparedDoc, type PreparedNode, type PreparedStatus, type PreparedQuery, type PrepareOptions, type Resolvers } from "./prepare.js";
|
|
3
|
+
export { RichText, renderInline, renderRichBlocks, type RichTextProps, type RichTextRenderOptions } from "../blocks/rich-text.js";
|
|
4
|
+
export { JsonLd, mergeJsonLd } from "../blocks/json-ld.js";
|
|
5
|
+
/** Alias of `BlockRenderer` (plan 05 vocabulary). */
|
|
6
|
+
export { BlockRenderer as DocRenderer } from "./block-renderer.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Public API of @vamos-ui/react/render — layer 3: VamosDoc → React. RSC-safe, zero editor code.
|
|
2
|
+
export { BlockRenderer, renderDoc, renderPrepared, BlockNotice } from "./block-renderer.js";
|
|
3
|
+
export { prepareDoc, resolveDoc, isOutsideSchedule } from "./prepare.js";
|
|
4
|
+
export { RichText, renderInline, renderRichBlocks } from "../blocks/rich-text.js";
|
|
5
|
+
export { JsonLd, mergeJsonLd } from "../blocks/json-ld.js";
|
|
6
|
+
/** Alias of `BlockRenderer` (plan 05 vocabulary). */
|
|
7
|
+
export { BlockRenderer as DocRenderer } from "./block-renderer.js";
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { AnyBlockDefinition, BlockRegistry, BlockRegion } from "../blocks/schema/define-block.js";
|
|
2
|
+
import type { BlockNode, VamosDoc } from "../blocks/schema/types.js";
|
|
3
|
+
import type { LintIssue } from "../blocks/schema/lint-types.js";
|
|
4
|
+
export type PreparedStatus = "ok" | "core" | "unknown" | "invalid" | "newer" | "unrenderable";
|
|
5
|
+
export interface PreparedQuery {
|
|
6
|
+
/** Resolver name (`f.query("posts")` → "posts"). */
|
|
7
|
+
resource: string;
|
|
8
|
+
/** Prop the resolved data lands in. */
|
|
9
|
+
into: string;
|
|
10
|
+
/** The stored query value ({ kind, limit, … }). */
|
|
11
|
+
query: unknown;
|
|
12
|
+
}
|
|
13
|
+
export interface PreparedNode {
|
|
14
|
+
/** Migrated + localized node. */
|
|
15
|
+
node: BlockNode;
|
|
16
|
+
def?: AnyBlockDefinition;
|
|
17
|
+
status: PreparedStatus;
|
|
18
|
+
/** Validated, localized props (defaults applied). */
|
|
19
|
+
props: Record<string, unknown>;
|
|
20
|
+
/** Top-level fields replaced by sample values during salvage. */
|
|
21
|
+
replaced: string[];
|
|
22
|
+
headingLevel: 1 | 2;
|
|
23
|
+
region: BlockRegion;
|
|
24
|
+
slots: Record<string, PreparedNode[]>;
|
|
25
|
+
queries: PreparedQuery[];
|
|
26
|
+
}
|
|
27
|
+
export interface PrepareOptions {
|
|
28
|
+
registry: BlockRegistry;
|
|
29
|
+
/** Active locale. Default: `doc.lang ?? doc.locales[0] ?? "en"`. */
|
|
30
|
+
locale?: string;
|
|
31
|
+
fallbackLocales?: readonly string[];
|
|
32
|
+
/** Builder canvas: keep hidden/scheduled blocks (marked) and show placeholders. */
|
|
33
|
+
editMode?: boolean;
|
|
34
|
+
/** Clock for `schedule`. Default `new Date()`. */
|
|
35
|
+
now?: Date;
|
|
36
|
+
/** Called for every problem found (logging, builder badges). */
|
|
37
|
+
onIssue?: (issue: LintIssue) => void;
|
|
38
|
+
}
|
|
39
|
+
export interface PreparedDoc {
|
|
40
|
+
doc: VamosDoc;
|
|
41
|
+
locale: string;
|
|
42
|
+
header: PreparedNode[];
|
|
43
|
+
body: PreparedNode[];
|
|
44
|
+
footer: PreparedNode[];
|
|
45
|
+
overlay: PreparedNode[];
|
|
46
|
+
issues: LintIssue[];
|
|
47
|
+
}
|
|
48
|
+
/** Whether a node is outside its schedule window at `now`. */
|
|
49
|
+
export declare function isOutsideSchedule(node: BlockNode, now: Date): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Turns a stored doc into render-ready nodes for one locale. Never throws on bad content:
|
|
52
|
+
* problems become statuses + issues, and content is never dropped from the source doc.
|
|
53
|
+
*/
|
|
54
|
+
export declare function prepareDoc(input: VamosDoc | unknown, opts: PrepareOptions): PreparedDoc;
|
|
55
|
+
/** Resolver map: `resolvers.posts(query, ctx)` returns the data for `f.query("posts")`. */
|
|
56
|
+
export type Resolvers = Record<string, (query: unknown, ctx: {
|
|
57
|
+
locale: string;
|
|
58
|
+
node: BlockNode;
|
|
59
|
+
}) => unknown | Promise<unknown>>;
|
|
60
|
+
/** Runs every block's queries in parallel and writes the results into its props. Failures leave the prop unset (block's empty state). */
|
|
61
|
+
export declare function resolveDoc(prepared: PreparedDoc, resolvers?: Resolvers, onIssue?: (i: LintIssue) => void): Promise<PreparedDoc>;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// The render pipeline as pure data: filter hidden/scheduled → migrate → validate (salvage) →
|
|
2
|
+
// localize → heading levels → collect queries. No React; unit-testable and reusable by builders.
|
|
3
|
+
import { migrateDoc, migrateNode } from "../blocks/schema/migrate.js";
|
|
4
|
+
import { validateNode } from "../blocks/schema/validate.js";
|
|
5
|
+
import { localize, localizeProps } from "../blocks/schema/localize.js";
|
|
6
|
+
import { walkFields } from "../blocks/schema/walk.js";
|
|
7
|
+
import { isCoreTextType } from "../blocks/schema/nodes.js";
|
|
8
|
+
/** Whether a node is outside its schedule window at `now`. */
|
|
9
|
+
export function isOutsideSchedule(node, now) {
|
|
10
|
+
const s = node.schedule;
|
|
11
|
+
if (!s)
|
|
12
|
+
return false;
|
|
13
|
+
const t = now.getTime();
|
|
14
|
+
if (s.from && Number.isFinite(Date.parse(s.from)) && t < Date.parse(s.from))
|
|
15
|
+
return true;
|
|
16
|
+
if (s.until && Number.isFinite(Date.parse(s.until)) && t >= Date.parse(s.until))
|
|
17
|
+
return true;
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Turns a stored doc into render-ready nodes for one locale. Never throws on bad content:
|
|
22
|
+
* problems become statuses + issues, and content is never dropped from the source doc.
|
|
23
|
+
*/
|
|
24
|
+
export function prepareDoc(input, opts) {
|
|
25
|
+
const issues = [];
|
|
26
|
+
const report = (i) => {
|
|
27
|
+
issues.push(i);
|
|
28
|
+
opts.onIssue?.(i);
|
|
29
|
+
};
|
|
30
|
+
const doc = migrateDoc(input);
|
|
31
|
+
const locale = opts.locale ?? doc.lang ?? doc.locales?.[0] ?? "en";
|
|
32
|
+
const fallback = opts.fallbackLocales ?? [...(doc.locales ?? []).filter((l) => l !== locale), "en"];
|
|
33
|
+
const now = opts.now ?? new Date();
|
|
34
|
+
const { registry, editMode } = opts;
|
|
35
|
+
const prepareNode = (raw, region) => {
|
|
36
|
+
if (!editMode && (raw.hidden || isOutsideSchedule(raw, now)))
|
|
37
|
+
return null;
|
|
38
|
+
const def = registry.get(raw.type);
|
|
39
|
+
const base = { replaced: [], headingLevel: 2, region, queries: [] };
|
|
40
|
+
const prepareSlots = (n) => Object.fromEntries(Object.entries(n.slots ?? {}).map(([k, list]) => [k, list.map((c) => prepareNode(c, region)).filter((c) => !!c)]));
|
|
41
|
+
if (!def) {
|
|
42
|
+
if (isCoreTextType(raw.type)) {
|
|
43
|
+
const node = localize(raw, undefined, { locale, fallback });
|
|
44
|
+
return { ...base, node, status: "core", props: (raw.props ?? {}), slots: prepareSlots(raw) };
|
|
45
|
+
}
|
|
46
|
+
report({ severity: "warning", code: "unknown-block", message: `Unknown block type "${raw.type}".`, blockId: raw.id, blockType: raw.type });
|
|
47
|
+
return { ...base, node: raw, status: "unknown", props: {}, slots: {} };
|
|
48
|
+
}
|
|
49
|
+
const migrated = migrateNode(raw, def);
|
|
50
|
+
if (migrated.error)
|
|
51
|
+
report({ severity: "error", code: "missing-migration", message: migrated.error.message, blockId: raw.id, blockType: raw.type });
|
|
52
|
+
if (migrated.newer)
|
|
53
|
+
report({ severity: "warning", code: "newer-version", message: `"${raw.type}" v${raw.v} is newer than v${def.version}.`, blockId: raw.id, blockType: raw.type });
|
|
54
|
+
const node = migrated.node;
|
|
55
|
+
const result = validateNode(node, def);
|
|
56
|
+
if (!result.ok || result.replaced.length) {
|
|
57
|
+
for (const iss of result.issues)
|
|
58
|
+
report({ severity: "error", code: "invalid-props", message: iss.message, path: ["props", ...iss.path.map(String)].join("."), blockId: node.id, blockType: node.type });
|
|
59
|
+
}
|
|
60
|
+
const status = !result.ok ? "unrenderable" : migrated.newer ? "newer" : result.replaced.length ? "invalid" : "ok";
|
|
61
|
+
const props = result.ok ? localizeProps(def.schema, result.data, { locale, fallback }) : {};
|
|
62
|
+
const queries = [];
|
|
63
|
+
if (result.ok)
|
|
64
|
+
walkFields(def.schema, result.data, (f) => {
|
|
65
|
+
if (f.meta?.query && f.value !== undefined) {
|
|
66
|
+
queries.push({ resource: f.meta.query.resource, into: f.meta.query.into, query: f.value });
|
|
67
|
+
return "skip";
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
const localizedNode = localize({ ...node, props: undefined }, undefined, { locale, fallback });
|
|
71
|
+
return { ...base, node: { ...localizedNode, props }, def, status, props, replaced: result.replaced, slots: prepareSlots(node), queries };
|
|
72
|
+
};
|
|
73
|
+
const prepareList = (list, region) => (list ?? []).map((n) => prepareNode(n, region)).filter((n) => !!n);
|
|
74
|
+
const body = prepareList(doc.blocks, "body");
|
|
75
|
+
// Automatic heading levels: the first page-title block (hero, page intro) owns the page's h1.
|
|
76
|
+
const first = body.find((n) => n.def?.supports.pageTitle && n.status !== "unknown");
|
|
77
|
+
if (first)
|
|
78
|
+
first.headingLevel = 1;
|
|
79
|
+
return {
|
|
80
|
+
doc,
|
|
81
|
+
locale,
|
|
82
|
+
header: prepareList(doc.layout?.header, "header"),
|
|
83
|
+
body,
|
|
84
|
+
footer: prepareList(doc.layout?.footer, "footer"),
|
|
85
|
+
overlay: prepareList(doc.layout?.overlay, "overlay"),
|
|
86
|
+
issues,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/** Runs every block's queries in parallel and writes the results into its props. Failures leave the prop unset (block's empty state). */
|
|
90
|
+
export async function resolveDoc(prepared, resolvers = {}, onIssue) {
|
|
91
|
+
const tasks = [];
|
|
92
|
+
const visit = (n) => {
|
|
93
|
+
for (const q of n.queries) {
|
|
94
|
+
const fn = resolvers[q.resource];
|
|
95
|
+
if (!fn) {
|
|
96
|
+
const issue = { severity: "warning", code: "missing-resolver", message: `No resolver for "${q.resource}".`, blockId: n.node.id, blockType: n.node.type };
|
|
97
|
+
prepared.issues.push(issue);
|
|
98
|
+
onIssue?.(issue);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
tasks.push(Promise.resolve()
|
|
102
|
+
.then(() => fn(q.query, { locale: prepared.locale, node: n.node }))
|
|
103
|
+
.then((data) => {
|
|
104
|
+
n.props = { ...n.props, [q.into]: data };
|
|
105
|
+
n.node = { ...n.node, props: n.props };
|
|
106
|
+
})
|
|
107
|
+
.catch((error) => {
|
|
108
|
+
const issue = { severity: "error", code: "resolver-failed", message: `Resolver "${q.resource}" failed: ${error instanceof Error ? error.message : String(error)}`, blockId: n.node.id, blockType: n.node.type };
|
|
109
|
+
prepared.issues.push(issue);
|
|
110
|
+
onIssue?.(issue);
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
for (const list of Object.values(n.slots))
|
|
114
|
+
list.forEach(visit);
|
|
115
|
+
};
|
|
116
|
+
[prepared.header, prepared.body, prepared.footer, prepared.overlay].forEach((list) => list.forEach(visit));
|
|
117
|
+
await Promise.all(tasks);
|
|
118
|
+
return prepared;
|
|
119
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export interface TimeEntry {
|
|
2
|
+
id: string;
|
|
3
|
+
/** UTC ISO instant. */
|
|
4
|
+
start: string;
|
|
5
|
+
/** UTC ISO instant; absent while the timer runs. */
|
|
6
|
+
end?: string;
|
|
7
|
+
/** Overrides `end - start` (manual entries). */
|
|
8
|
+
durationMin?: number;
|
|
9
|
+
projectId?: string;
|
|
10
|
+
/** Display name of the project (denormalised for lists and invoices). */
|
|
11
|
+
projectLabel?: string;
|
|
12
|
+
taskId?: string;
|
|
13
|
+
taskLabel?: string;
|
|
14
|
+
note?: string;
|
|
15
|
+
billable?: boolean;
|
|
16
|
+
/** Hourly rate. `amount` is a decimal string. */
|
|
17
|
+
rate?: {
|
|
18
|
+
amount: string;
|
|
19
|
+
currency: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/** A draft line for Line items (01): quantity in hours, decimal strings throughout. */
|
|
23
|
+
export interface LineItemDraft {
|
|
24
|
+
description: string;
|
|
25
|
+
/** Hours, 2 decimals ("3.25"). */
|
|
26
|
+
quantity: string;
|
|
27
|
+
/** UN/ECE Rec 20 unit code: `HUR` (hour). */
|
|
28
|
+
unitCode: "HUR";
|
|
29
|
+
unitPrice: string;
|
|
30
|
+
currency: string;
|
|
31
|
+
/** quantity × unitPrice, rounded half-up to 2 places. */
|
|
32
|
+
total: string;
|
|
33
|
+
/** Ids of the entries folded into this line. */
|
|
34
|
+
entryIds: string[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parses what people type into a timesheet cell. Returns minutes, or `null` when it can't be read.
|
|
38
|
+
*
|
|
39
|
+
* ```ts
|
|
40
|
+
* parseDuration("1.5", "en-US"); // 90 (bare numbers are hours)
|
|
41
|
+
* parseDuration("1,5", "tr-TR"); // 90 (decimal comma where the locale uses it)
|
|
42
|
+
* parseDuration("1:30"); // 90
|
|
43
|
+
* parseDuration("90m"); // 90
|
|
44
|
+
* parseDuration("1h 30m"); // 90
|
|
45
|
+
* parseDuration("1 sa 30 dk", "tr"); // 90
|
|
46
|
+
* parseDuration(""); // 0 (cleared)
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function parseDuration(input: string, locale?: string): number | null;
|
|
50
|
+
/**
|
|
51
|
+
* Formats minutes for display.
|
|
52
|
+
*
|
|
53
|
+
* - `"short"` (default): "3 h 20 min" / "3 sa 20 dk" (built-in for en / tr / de, Intl.DurationFormat for other locales when available).
|
|
54
|
+
* - `"clock"`: "3:20".
|
|
55
|
+
* - `"decimal"`: "3.33" / "3,33" hours.
|
|
56
|
+
*/
|
|
57
|
+
export declare function formatDuration(min: number, locale?: string, style?: "short" | "clock" | "decimal"): string;
|
|
58
|
+
/** Minutes of an entry (running entries count up to `now`). */
|
|
59
|
+
export declare function entryMinutes(e: Pick<TimeEntry, "start" | "end" | "durationMin">, now?: number): number;
|
|
60
|
+
/** Sums a timesheet value map: per row, per day and the grand total. */
|
|
61
|
+
export declare function timesheetTotals(value: Record<string, Record<string, number>>, days: readonly string[]): {
|
|
62
|
+
rows: Record<string, number>;
|
|
63
|
+
days: Record<string, number>;
|
|
64
|
+
total: number;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Billable entries → invoice line drafts, one line per project (or task) and rate.
|
|
68
|
+
* Hours are rounded half-up to 2 decimals per line; amounts stay decimal strings.
|
|
69
|
+
*
|
|
70
|
+
* ```ts
|
|
71
|
+
* toLineItems(entries, "project");
|
|
72
|
+
* // [{ description: "Mobile app", quantity: "3.33", unitCode: "HUR", unitPrice: "95.00", currency: "EUR", total: "316.35", … }]
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export declare function toLineItems(entries: readonly TimeEntry[], groupBy?: "project" | "task", opts?: {
|
|
76
|
+
now?: number;
|
|
77
|
+
describe?(key: {
|
|
78
|
+
project?: string;
|
|
79
|
+
task?: string;
|
|
80
|
+
}): string;
|
|
81
|
+
}): LineItemDraft[];
|
|
82
|
+
/** Sum of line totals (decimal string). */
|
|
83
|
+
export declare const lineItemsTotal: (lines: readonly LineItemDraft[]) => string;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Time tracking core: duration parsing / formatting, entry totals and the bridge to invoice
|
|
3
|
+
* line items. React-free; identical results on server and client.
|
|
4
|
+
*/
|
|
5
|
+
import { addDecimal, multiplyDecimal, roundHalfUp } from "../../locale-data/core/decimal.js";
|
|
6
|
+
const UNIT_WORDS = {
|
|
7
|
+
h: "h", hr: "h", hrs: "h", hour: "h", hours: "h", sa: "h", saat: "h", std: "h",
|
|
8
|
+
m: "m", min: "m", mins: "m", minute: "m", minutes: "m", dk: "m", dak: "m", dakika: "m", mn: "m",
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Parses what people type into a timesheet cell. Returns minutes, or `null` when it can't be read.
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* parseDuration("1.5", "en-US"); // 90 (bare numbers are hours)
|
|
15
|
+
* parseDuration("1,5", "tr-TR"); // 90 (decimal comma where the locale uses it)
|
|
16
|
+
* parseDuration("1:30"); // 90
|
|
17
|
+
* parseDuration("90m"); // 90
|
|
18
|
+
* parseDuration("1h 30m"); // 90
|
|
19
|
+
* parseDuration("1 sa 30 dk", "tr"); // 90
|
|
20
|
+
* parseDuration(""); // 0 (cleared)
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function parseDuration(input, locale = "en-US") {
|
|
24
|
+
const raw = input.trim().toLocaleLowerCase(locale.startsWith("tr") ? "tr-TR" : "en-US");
|
|
25
|
+
if (raw === "" || raw === "-" || raw === "–")
|
|
26
|
+
return 0;
|
|
27
|
+
const commaDecimal = decimalSeparator(locale) === ",";
|
|
28
|
+
// h:mm
|
|
29
|
+
const clock = /^(\d{1,3}):([0-5]?\d)$/.exec(raw);
|
|
30
|
+
if (clock)
|
|
31
|
+
return Number(clock[1]) * 60 + Number(clock[2]);
|
|
32
|
+
const num = (s) => {
|
|
33
|
+
let t = s;
|
|
34
|
+
if (commaDecimal)
|
|
35
|
+
t = t.replace(/\./g, "").replace(",", ".");
|
|
36
|
+
else
|
|
37
|
+
t = t.replace(/,/g, ".");
|
|
38
|
+
if (!/^\d+(\.\d+)?$|^\.\d+$/.test(t))
|
|
39
|
+
return null;
|
|
40
|
+
return Number(t);
|
|
41
|
+
};
|
|
42
|
+
// bare number → hours
|
|
43
|
+
const bare = num(raw);
|
|
44
|
+
if (bare !== null)
|
|
45
|
+
return Math.round(bare * 60);
|
|
46
|
+
// unit tokens: "1h 30m", "1.5h", "90 min", "1 sa 30 dk"
|
|
47
|
+
const re = /(\d+(?:[.,]\d+)?)\s*([a-zçğıöşü]+)\.?/g;
|
|
48
|
+
let total = 0;
|
|
49
|
+
let consumed = "";
|
|
50
|
+
let m;
|
|
51
|
+
while ((m = re.exec(raw))) {
|
|
52
|
+
const unit = UNIT_WORDS[m[2]];
|
|
53
|
+
if (!unit)
|
|
54
|
+
return null;
|
|
55
|
+
const value = Number(m[1].replace(",", "."));
|
|
56
|
+
total += unit === "h" ? value * 60 : value;
|
|
57
|
+
consumed += m[0];
|
|
58
|
+
}
|
|
59
|
+
if (!consumed || consumed.replace(/\s+/g, "") !== raw.replace(/\s+/g, ""))
|
|
60
|
+
return null;
|
|
61
|
+
return Math.round(total);
|
|
62
|
+
}
|
|
63
|
+
function decimalSeparator(locale) {
|
|
64
|
+
try {
|
|
65
|
+
return new Intl.NumberFormat(locale).formatToParts(1.5).find((p) => p.type === "decimal")?.value ?? ".";
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return ".";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const FALLBACK_UNITS = {
|
|
72
|
+
en: { h: "h", m: "min" },
|
|
73
|
+
tr: { h: "sa", m: "dk" },
|
|
74
|
+
de: { h: "Std.", m: "Min." },
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Formats minutes for display.
|
|
78
|
+
*
|
|
79
|
+
* - `"short"` (default): "3 h 20 min" / "3 sa 20 dk" (built-in for en / tr / de, Intl.DurationFormat for other locales when available).
|
|
80
|
+
* - `"clock"`: "3:20".
|
|
81
|
+
* - `"decimal"`: "3.33" / "3,33" hours.
|
|
82
|
+
*/
|
|
83
|
+
export function formatDuration(min, locale = "en-US", style = "short") {
|
|
84
|
+
const sign = min < 0 ? "−" : "";
|
|
85
|
+
const abs = Math.round(Math.abs(min));
|
|
86
|
+
const h = Math.floor(abs / 60);
|
|
87
|
+
const m = abs % 60;
|
|
88
|
+
if (style === "clock")
|
|
89
|
+
return `${sign}${h}:${String(m).padStart(2, "0")}`;
|
|
90
|
+
if (style === "decimal")
|
|
91
|
+
return sign + new Intl.NumberFormat(locale, { minimumFractionDigits: 0, maximumFractionDigits: 2 }).format(abs / 60);
|
|
92
|
+
const known = FALLBACK_UNITS[locale.slice(0, 2).toLowerCase()];
|
|
93
|
+
// Known languages use the dictionary so server and browser render the same text (no
|
|
94
|
+
// hydration drift between runtimes with and without Intl.DurationFormat).
|
|
95
|
+
const DF = Intl.DurationFormat;
|
|
96
|
+
if (!known && DF) {
|
|
97
|
+
try {
|
|
98
|
+
return sign + new DF(locale, { style: "short" }).format(h && m ? { hours: h, minutes: m } : h ? { hours: h } : { minutes: m });
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
/* fall through */
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const u = FALLBACK_UNITS[locale.slice(0, 2).toLowerCase()] ?? FALLBACK_UNITS.en;
|
|
105
|
+
const nf = new Intl.NumberFormat(locale);
|
|
106
|
+
if (h && m)
|
|
107
|
+
return `${sign}${nf.format(h)} ${u.h} ${nf.format(m)} ${u.m}`;
|
|
108
|
+
if (h)
|
|
109
|
+
return `${sign}${nf.format(h)} ${u.h}`;
|
|
110
|
+
return `${sign}${nf.format(m)} ${u.m}`;
|
|
111
|
+
}
|
|
112
|
+
/** Minutes of an entry (running entries count up to `now`). */
|
|
113
|
+
export function entryMinutes(e, now = Date.now()) {
|
|
114
|
+
if (typeof e.durationMin === "number")
|
|
115
|
+
return e.durationMin;
|
|
116
|
+
const s = Date.parse(e.start);
|
|
117
|
+
const en = e.end ? Date.parse(e.end) : now;
|
|
118
|
+
return Math.max(0, Math.round((en - s) / 60_000));
|
|
119
|
+
}
|
|
120
|
+
/** Sums a timesheet value map: per row, per day and the grand total. */
|
|
121
|
+
export function timesheetTotals(value, days) {
|
|
122
|
+
const rows = {};
|
|
123
|
+
const dayTotals = Object.fromEntries(days.map((d) => [d, 0]));
|
|
124
|
+
let total = 0;
|
|
125
|
+
for (const [rowId, cells] of Object.entries(value)) {
|
|
126
|
+
let r = 0;
|
|
127
|
+
for (const d of days) {
|
|
128
|
+
const v = cells[d] ?? 0;
|
|
129
|
+
r += v;
|
|
130
|
+
dayTotals[d] = (dayTotals[d] ?? 0) + v;
|
|
131
|
+
}
|
|
132
|
+
rows[rowId] = r;
|
|
133
|
+
total += r;
|
|
134
|
+
}
|
|
135
|
+
return { rows, days: dayTotals, total };
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Billable entries → invoice line drafts, one line per project (or task) and rate.
|
|
139
|
+
* Hours are rounded half-up to 2 decimals per line; amounts stay decimal strings.
|
|
140
|
+
*
|
|
141
|
+
* ```ts
|
|
142
|
+
* toLineItems(entries, "project");
|
|
143
|
+
* // [{ description: "Mobile app", quantity: "3.33", unitCode: "HUR", unitPrice: "95.00", currency: "EUR", total: "316.35", … }]
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
export function toLineItems(entries, groupBy = "project", opts = {}) {
|
|
147
|
+
const groups = new Map();
|
|
148
|
+
for (const e of entries) {
|
|
149
|
+
if (!e.billable || !e.rate)
|
|
150
|
+
continue;
|
|
151
|
+
const project = e.projectLabel ?? e.projectId;
|
|
152
|
+
const task = e.taskLabel ?? e.taskId;
|
|
153
|
+
const key = `${groupBy === "task" ? `${project}\u0000${task}` : project}\u0000${e.rate.amount}\u0000${e.rate.currency}`;
|
|
154
|
+
const g = groups.get(key) ?? { project, task: groupBy === "task" ? task : undefined, minutes: 0, rate: e.rate, ids: [] };
|
|
155
|
+
g.minutes += entryMinutes(e, opts.now);
|
|
156
|
+
g.ids.push(e.id);
|
|
157
|
+
groups.set(key, g);
|
|
158
|
+
}
|
|
159
|
+
return [...groups.values()].map((g) => {
|
|
160
|
+
const quantity = roundHalfUp(String(g.minutes / 60), 2);
|
|
161
|
+
const description = opts.describe ? opts.describe({ project: g.project, task: g.task }) : [g.project, g.task].filter(Boolean).join(" · ") || "Time";
|
|
162
|
+
return {
|
|
163
|
+
description,
|
|
164
|
+
quantity,
|
|
165
|
+
unitCode: "HUR",
|
|
166
|
+
unitPrice: roundHalfUp(g.rate.amount, 2),
|
|
167
|
+
currency: g.rate.currency,
|
|
168
|
+
total: multiplyDecimal(quantity, g.rate.amount, 2),
|
|
169
|
+
entryIds: g.ids,
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/** Sum of line totals (decimal string). */
|
|
174
|
+
export const lineItemsTotal = (lines) => (lines.length ? addDecimal(...lines.map((l) => l.total)) : "0.00");
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { IsoDate, WorkCalendar } from "../../locale-data/core/types.js";
|
|
2
|
+
export type GanttTaskType = "task" | "milestone" | "summary";
|
|
3
|
+
export interface GanttTaskCore {
|
|
4
|
+
id: string;
|
|
5
|
+
parentId?: string;
|
|
6
|
+
start: IsoDate;
|
|
7
|
+
end: IsoDate;
|
|
8
|
+
type?: GanttTaskType;
|
|
9
|
+
progress?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface GanttLinkCore {
|
|
12
|
+
id: string;
|
|
13
|
+
from: string;
|
|
14
|
+
to: string;
|
|
15
|
+
/** First release: `"FS"` (finish-to-start) only. */
|
|
16
|
+
type?: "FS" | "SS" | "FF" | "SF";
|
|
17
|
+
/** Days between the predecessor's end and the successor's start. Default 0. */
|
|
18
|
+
lagDays?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface FlatTask<T extends GanttTaskCore = GanttTaskCore> {
|
|
21
|
+
task: T;
|
|
22
|
+
depth: number;
|
|
23
|
+
/** "1", "1.2", "1.2.3" */
|
|
24
|
+
wbs: string;
|
|
25
|
+
/** Row number (1-based) in the full, expanded order. */
|
|
26
|
+
index: number;
|
|
27
|
+
hasChildren: boolean;
|
|
28
|
+
parentId?: string;
|
|
29
|
+
}
|
|
30
|
+
/** Depth-first order of a task forest (input order is kept among siblings). */
|
|
31
|
+
export declare function flattenTasks<T extends GanttTaskCore>(tasks: readonly T[]): FlatTask<T>[];
|
|
32
|
+
/** Visible rows given a set of collapsed task ids. */
|
|
33
|
+
export declare function visibleTasks<T extends GanttTaskCore>(flat: readonly FlatTask<T>[], collapsed: ReadonlySet<string>): FlatTask<T>[];
|
|
34
|
+
/**
|
|
35
|
+
* Summary tasks (and any task with children) span their children: earliest start, latest end,
|
|
36
|
+
* duration-weighted progress. Returns new task objects for changed summaries only.
|
|
37
|
+
*/
|
|
38
|
+
export declare function rollupSummaries<T extends GanttTaskCore>(tasks: readonly T[]): T[];
|
|
39
|
+
/**
|
|
40
|
+
* Cycles in the dependency graph, each as a list of task ids (`["a", "b", "c"]` for a → b → c → a).
|
|
41
|
+
* Empty when the graph is acyclic.
|
|
42
|
+
*/
|
|
43
|
+
export declare function detectCycles(links: readonly Pick<GanttLinkCore, "from" | "to">[]): string[][];
|
|
44
|
+
/** Would adding `from → to` create a cycle? */
|
|
45
|
+
export declare function createsCycle(links: readonly Pick<GanttLinkCore, "from" | "to">[], from: string, to: string): boolean;
|
|
46
|
+
/** Task length in days or working days (inclusive of both ends). Milestones are 0. */
|
|
47
|
+
export declare function taskDuration(task: Pick<GanttTaskCore, "start" | "end" | "type">, cal?: WorkCalendar, unit?: "workdays" | "days"): number;
|
|
48
|
+
/** Moves a task so it starts on `start`, keeping its length (working days when a calendar is given). */
|
|
49
|
+
export declare function moveTaskTo<T extends GanttTaskCore>(task: T, start: IsoDate, cal?: WorkCalendar, unit?: "workdays" | "days"): T;
|
|
50
|
+
/**
|
|
51
|
+
* Forward scheduling of finish-to-start links: every successor starts no earlier than the day
|
|
52
|
+
* after its predecessor ends (+ `lagDays`), skipping non-working days when a calendar is given.
|
|
53
|
+
* Successors are only pushed later, never pulled earlier. Returns a new array with moved tasks
|
|
54
|
+
* replaced; unchanged tasks keep their identity. Links in a cycle are ignored.
|
|
55
|
+
*
|
|
56
|
+
* ```ts
|
|
57
|
+
* const next = scheduleForward(tasks, links, trWorkCalendar);
|
|
58
|
+
* const moved = next.filter((t, i) => t !== tasks[i]);
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function scheduleForward<T extends GanttTaskCore>(tasks: readonly T[], links: readonly GanttLinkCore[], cal?: WorkCalendar, unit?: "workdays" | "days"): T[];
|
|
62
|
+
/** Links whose successor starts before its predecessor allows (FS violated). */
|
|
63
|
+
export declare function linkViolations(tasks: readonly GanttTaskCore[], links: readonly GanttLinkCore[]): Set<string>;
|