@aglyn/plugins-crm 1.0.0-beta.143
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 +201 -0
- package/README.md +7 -0
- package/package.json +57 -0
- package/src/index.d.ts +21 -0
- package/src/index.js +29 -0
- package/src/index.js.map +1 -0
- package/src/lib/components/activity-list.d.ts +98 -0
- package/src/lib/components/activity-list.js +321 -0
- package/src/lib/components/activity-list.js.map +1 -0
- package/src/lib/components/activity-queries.d.ts +117 -0
- package/src/lib/components/activity-queries.js +198 -0
- package/src/lib/components/activity-queries.js.map +1 -0
- package/src/lib/components/add-to-list-button.d.ts +25 -0
- package/src/lib/components/add-to-list-button.js +64 -0
- package/src/lib/components/add-to-list-button.js.map +1 -0
- package/src/lib/components/add-to-list-dialog.d.ts +24 -0
- package/src/lib/components/add-to-list-dialog.js +327 -0
- package/src/lib/components/add-to-list-dialog.js.map +1 -0
- package/src/lib/components/assignment-rule-drawer.d.ts +43 -0
- package/src/lib/components/assignment-rule-drawer.js +293 -0
- package/src/lib/components/assignment-rule-drawer.js.map +1 -0
- package/src/lib/components/companies-bulk-bar.d.ts +29 -0
- package/src/lib/components/companies-bulk-bar.js +274 -0
- package/src/lib/components/companies-bulk-bar.js.map +1 -0
- package/src/lib/components/companies-section.d.ts +54 -0
- package/src/lib/components/companies-section.js +522 -0
- package/src/lib/components/companies-section.js.map +1 -0
- package/src/lib/components/company-contacts-card.d.ts +49 -0
- package/src/lib/components/company-contacts-card.js +435 -0
- package/src/lib/components/company-contacts-card.js.map +1 -0
- package/src/lib/components/company-deals-card.d.ts +20 -0
- package/src/lib/components/company-deals-card.js +38 -0
- package/src/lib/components/company-deals-card.js.map +1 -0
- package/src/lib/components/company-detail-page.d.ts +20 -0
- package/src/lib/components/company-detail-page.js +165 -0
- package/src/lib/components/company-detail-page.js.map +1 -0
- package/src/lib/components/company-edit-drawer.d.ts +65 -0
- package/src/lib/components/company-edit-drawer.js +433 -0
- package/src/lib/components/company-edit-drawer.js.map +1 -0
- package/src/lib/components/company-import-drawer.d.ts +42 -0
- package/src/lib/components/company-import-drawer.js +99 -0
- package/src/lib/components/company-import-drawer.js.map +1 -0
- package/src/lib/components/company-picker.d.ts +127 -0
- package/src/lib/components/company-picker.js +323 -0
- package/src/lib/components/company-picker.js.map +1 -0
- package/src/lib/components/company-properties-card.d.ts +47 -0
- package/src/lib/components/company-properties-card.js +289 -0
- package/src/lib/components/company-properties-card.js.map +1 -0
- package/src/lib/components/contact-address-fields.d.ts +29 -0
- package/src/lib/components/contact-address-fields.js +149 -0
- package/src/lib/components/contact-address-fields.js.map +1 -0
- package/src/lib/components/contact-associations-card.d.ts +72 -0
- package/src/lib/components/contact-associations-card.js +296 -0
- package/src/lib/components/contact-associations-card.js.map +1 -0
- package/src/lib/components/contact-custom-columns.d.ts +38 -0
- package/src/lib/components/contact-custom-columns.js +102 -0
- package/src/lib/components/contact-custom-columns.js.map +1 -0
- package/src/lib/components/contact-custom-fields-card.d.ts +39 -0
- package/src/lib/components/contact-custom-fields-card.js +204 -0
- package/src/lib/components/contact-custom-fields-card.js.map +1 -0
- package/src/lib/components/contact-deals-card.d.ts +20 -0
- package/src/lib/components/contact-deals-card.js +38 -0
- package/src/lib/components/contact-deals-card.js.map +1 -0
- package/src/lib/components/contact-detail-page.d.ts +46 -0
- package/src/lib/components/contact-detail-page.js +535 -0
- package/src/lib/components/contact-detail-page.js.map +1 -0
- package/src/lib/components/contact-duplicates-card.d.ts +42 -0
- package/src/lib/components/contact-duplicates-card.js +167 -0
- package/src/lib/components/contact-duplicates-card.js.map +1 -0
- package/src/lib/components/contact-field-drawer.d.ts +64 -0
- package/src/lib/components/contact-field-drawer.js +251 -0
- package/src/lib/components/contact-field-drawer.js.map +1 -0
- package/src/lib/components/contact-import-drawer.d.ts +46 -0
- package/src/lib/components/contact-import-drawer.js +149 -0
- package/src/lib/components/contact-import-drawer.js.map +1 -0
- package/src/lib/components/contact-known-by-card.d.ts +39 -0
- package/src/lib/components/contact-known-by-card.js +142 -0
- package/src/lib/components/contact-known-by-card.js.map +1 -0
- package/src/lib/components/contact-list-columns.d.ts +53 -0
- package/src/lib/components/contact-list-columns.js +288 -0
- package/src/lib/components/contact-list-columns.js.map +1 -0
- package/src/lib/components/contact-merge-dialog.d.ts +79 -0
- package/src/lib/components/contact-merge-dialog.js +405 -0
- package/src/lib/components/contact-merge-dialog.js.map +1 -0
- package/src/lib/components/contact-properties-card.d.ts +89 -0
- package/src/lib/components/contact-properties-card.js +492 -0
- package/src/lib/components/contact-properties-card.js.map +1 -0
- package/src/lib/components/contact-timeline-card.d.ts +68 -0
- package/src/lib/components/contact-timeline-card.js +435 -0
- package/src/lib/components/contact-timeline-card.js.map +1 -0
- package/src/lib/components/contacts-bulk-bar.d.ts +91 -0
- package/src/lib/components/contacts-bulk-bar.js +493 -0
- package/src/lib/components/contacts-bulk-bar.js.map +1 -0
- package/src/lib/components/contacts-section.d.ts +26 -0
- package/src/lib/components/contacts-section.js +1025 -0
- package/src/lib/components/contacts-section.js.map +1 -0
- package/src/lib/components/copy-capture-address-button.d.ts +33 -0
- package/src/lib/components/copy-capture-address-button.js +60 -0
- package/src/lib/components/copy-capture-address-button.js.map +1 -0
- package/src/lib/components/crm-attribution-zone.d.ts +38 -0
- package/src/lib/components/crm-attribution-zone.js +36 -0
- package/src/lib/components/crm-attribution-zone.js.map +1 -0
- package/src/lib/components/crm-booking-zone.d.ts +61 -0
- package/src/lib/components/crm-booking-zone.js +50 -0
- package/src/lib/components/crm-booking-zone.js.map +1 -0
- package/src/lib/components/crm-bulk-bar-frame.d.ts +47 -0
- package/src/lib/components/crm-bulk-bar-frame.js +137 -0
- package/src/lib/components/crm-bulk-bar-frame.js.map +1 -0
- package/src/lib/components/crm-call-actions.d.ts +65 -0
- package/src/lib/components/crm-call-actions.js +110 -0
- package/src/lib/components/crm-call-actions.js.map +1 -0
- package/src/lib/components/crm-column-menu.d.ts +21 -0
- package/src/lib/components/crm-column-menu.js +103 -0
- package/src/lib/components/crm-column-menu.js.map +1 -0
- package/src/lib/components/crm-console-page.d.ts +19 -0
- package/src/lib/components/crm-console-page.js +151 -0
- package/src/lib/components/crm-console-page.js.map +1 -0
- package/src/lib/components/crm-console-sections.d.ts +52 -0
- package/src/lib/components/crm-console-sections.js +83 -0
- package/src/lib/components/crm-console-sections.js.map +1 -0
- package/src/lib/components/crm-custom-field-control.d.ts +26 -0
- package/src/lib/components/crm-custom-field-control.js +131 -0
- package/src/lib/components/crm-custom-field-control.js.map +1 -0
- package/src/lib/components/crm-email-template-tools.d.ts +69 -0
- package/src/lib/components/crm-email-template-tools.js +240 -0
- package/src/lib/components/crm-email-template-tools.js.map +1 -0
- package/src/lib/components/crm-export-all-button.d.ts +39 -0
- package/src/lib/components/crm-export-all-button.js +98 -0
- package/src/lib/components/crm-export-all-button.js.map +1 -0
- package/src/lib/components/crm-filter-bar.d.ts +53 -0
- package/src/lib/components/crm-filter-bar.js +294 -0
- package/src/lib/components/crm-filter-bar.js.map +1 -0
- package/src/lib/components/crm-glance-card.d.ts +54 -0
- package/src/lib/components/crm-glance-card.js +219 -0
- package/src/lib/components/crm-glance-card.js.map +1 -0
- package/src/lib/components/crm-next-activity-column.d.ts +35 -0
- package/src/lib/components/crm-next-activity-column.js +100 -0
- package/src/lib/components/crm-next-activity-column.js.map +1 -0
- package/src/lib/components/crm-record-header.d.ts +97 -0
- package/src/lib/components/crm-record-header.js +160 -0
- package/src/lib/components/crm-record-header.js.map +1 -0
- package/src/lib/components/crm-record-insights-zone.d.ts +50 -0
- package/src/lib/components/crm-record-insights-zone.js +169 -0
- package/src/lib/components/crm-record-insights-zone.js.map +1 -0
- package/src/lib/components/crm-record-picker.d.ts +42 -0
- package/src/lib/components/crm-record-picker.js +104 -0
- package/src/lib/components/crm-record-picker.js.map +1 -0
- package/src/lib/components/crm-send-email-button.d.ts +39 -0
- package/src/lib/components/crm-send-email-button.js +81 -0
- package/src/lib/components/crm-send-email-button.js.map +1 -0
- package/src/lib/components/crm-send-email-dialog.d.ts +61 -0
- package/src/lib/components/crm-send-email-dialog.js +851 -0
- package/src/lib/components/crm-send-email-dialog.js.map +1 -0
- package/src/lib/components/crm-site-picker.d.ts +61 -0
- package/src/lib/components/crm-site-picker.js +99 -0
- package/src/lib/components/crm-site-picker.js.map +1 -0
- package/src/lib/components/crm-suite-lock.d.ts +29 -0
- package/src/lib/components/crm-suite-lock.js +114 -0
- package/src/lib/components/crm-suite-lock.js.map +1 -0
- package/src/lib/components/crm-tasks-due-card.d.ts +42 -0
- package/src/lib/components/crm-tasks-due-card.js +225 -0
- package/src/lib/components/crm-tasks-due-card.js.map +1 -0
- package/src/lib/components/crm-views-control.d.ts +65 -0
- package/src/lib/components/crm-views-control.js +518 -0
- package/src/lib/components/crm-views-control.js.map +1 -0
- package/src/lib/components/csv-import-drawer.d.ts +132 -0
- package/src/lib/components/csv-import-drawer.js +746 -0
- package/src/lib/components/csv-import-drawer.js.map +1 -0
- package/src/lib/components/deal-board.d.ts +70 -0
- package/src/lib/components/deal-board.js +478 -0
- package/src/lib/components/deal-board.js.map +1 -0
- package/src/lib/components/deal-detail-page.d.ts +18 -0
- package/src/lib/components/deal-detail-page.js +323 -0
- package/src/lib/components/deal-detail-page.js.map +1 -0
- package/src/lib/components/deal-edit-drawer.d.ts +59 -0
- package/src/lib/components/deal-edit-drawer.js +640 -0
- package/src/lib/components/deal-edit-drawer.js.map +1 -0
- package/src/lib/components/deal-import-drawer.d.ts +24 -0
- package/src/lib/components/deal-import-drawer.js +83 -0
- package/src/lib/components/deal-import-drawer.js.map +1 -0
- package/src/lib/components/deal-products-card.d.ts +48 -0
- package/src/lib/components/deal-products-card.js +614 -0
- package/src/lib/components/deal-products-card.js.map +1 -0
- package/src/lib/components/deal-properties-card.d.ts +29 -0
- package/src/lib/components/deal-properties-card.js +144 -0
- package/src/lib/components/deal-properties-card.js.map +1 -0
- package/src/lib/components/deal-stage-card.d.ts +24 -0
- package/src/lib/components/deal-stage-card.js +199 -0
- package/src/lib/components/deal-stage-card.js.map +1 -0
- package/src/lib/components/deals-bulk-bar.d.ts +31 -0
- package/src/lib/components/deals-bulk-bar.js +340 -0
- package/src/lib/components/deals-bulk-bar.js.map +1 -0
- package/src/lib/components/deals-section.d.ts +49 -0
- package/src/lib/components/deals-section.js +767 -0
- package/src/lib/components/deals-section.js.map +1 -0
- package/src/lib/components/email-capture-card.d.ts +42 -0
- package/src/lib/components/email-capture-card.js +134 -0
- package/src/lib/components/email-capture-card.js.map +1 -0
- package/src/lib/components/email-template-drawer.d.ts +33 -0
- package/src/lib/components/email-template-drawer.js +209 -0
- package/src/lib/components/email-template-drawer.js.map +1 -0
- package/src/lib/components/email-templates-card.d.ts +33 -0
- package/src/lib/components/email-templates-card.js +370 -0
- package/src/lib/components/email-templates-card.js.map +1 -0
- package/src/lib/components/erase-person-action.d.ts +92 -0
- package/src/lib/components/erase-person-action.js +261 -0
- package/src/lib/components/erase-person-action.js.map +1 -0
- package/src/lib/components/fields-section.d.ts +37 -0
- package/src/lib/components/fields-section.js +641 -0
- package/src/lib/components/fields-section.js.map +1 -0
- package/src/lib/components/form-contact-fields-card.d.ts +46 -0
- package/src/lib/components/form-contact-fields-card.js +253 -0
- package/src/lib/components/form-contact-fields-card.js.map +1 -0
- package/src/lib/components/insert-link-at-caret.d.ts +28 -0
- package/src/lib/components/insert-link-at-caret.js +37 -0
- package/src/lib/components/insert-link-at-caret.js.map +1 -0
- package/src/lib/components/lead-convert-dialog.d.ts +32 -0
- package/src/lib/components/lead-convert-dialog.js +493 -0
- package/src/lib/components/lead-convert-dialog.js.map +1 -0
- package/src/lib/components/lead-detail-page.d.ts +16 -0
- package/src/lib/components/lead-detail-page.js +163 -0
- package/src/lib/components/lead-detail-page.js.map +1 -0
- package/src/lib/components/lead-history-card.d.ts +32 -0
- package/src/lib/components/lead-history-card.js +165 -0
- package/src/lib/components/lead-history-card.js.map +1 -0
- package/src/lib/components/lead-import-drawer.d.ts +24 -0
- package/src/lib/components/lead-import-drawer.js +95 -0
- package/src/lib/components/lead-import-drawer.js.map +1 -0
- package/src/lib/components/lead-owner-select.d.ts +35 -0
- package/src/lib/components/lead-owner-select.js +91 -0
- package/src/lib/components/lead-owner-select.js.map +1 -0
- package/src/lib/components/lead-properties-card.d.ts +61 -0
- package/src/lib/components/lead-properties-card.js +395 -0
- package/src/lib/components/lead-properties-card.js.map +1 -0
- package/src/lib/components/lead-status-chip.d.ts +12 -0
- package/src/lib/components/lead-status-chip.js +43 -0
- package/src/lib/components/lead-status-chip.js.map +1 -0
- package/src/lib/components/lead-surfaces-note.d.ts +126 -0
- package/src/lib/components/lead-surfaces-note.js +262 -0
- package/src/lib/components/lead-surfaces-note.js.map +1 -0
- package/src/lib/components/lead-unqualify-dialog.d.ts +24 -0
- package/src/lib/components/lead-unqualify-dialog.js +125 -0
- package/src/lib/components/lead-unqualify-dialog.js.map +1 -0
- package/src/lib/components/leads-bulk-bar.d.ts +58 -0
- package/src/lib/components/leads-bulk-bar.js +307 -0
- package/src/lib/components/leads-bulk-bar.js.map +1 -0
- package/src/lib/components/leads-section.d.ts +23 -0
- package/src/lib/components/leads-section.js +664 -0
- package/src/lib/components/leads-section.js.map +1 -0
- package/src/lib/components/linked-deals-card.d.ts +32 -0
- package/src/lib/components/linked-deals-card.js +163 -0
- package/src/lib/components/linked-deals-card.js.map +1 -0
- package/src/lib/components/log-activity-dialog.d.ts +60 -0
- package/src/lib/components/log-activity-dialog.js +368 -0
- package/src/lib/components/log-activity-dialog.js.map +1 -0
- package/src/lib/components/lost-reason-dialog.d.ts +26 -0
- package/src/lib/components/lost-reason-dialog.js +95 -0
- package/src/lib/components/lost-reason-dialog.js.map +1 -0
- package/src/lib/components/new-contact-drawer.d.ts +78 -0
- package/src/lib/components/new-contact-drawer.js +343 -0
- package/src/lib/components/new-contact-drawer.js.map +1 -0
- package/src/lib/components/org-lead-surfaces-note.d.ts +57 -0
- package/src/lib/components/org-lead-surfaces-note.js +172 -0
- package/src/lib/components/org-lead-surfaces-note.js.map +1 -0
- package/src/lib/components/owner-avatar.d.ts +18 -0
- package/src/lib/components/owner-avatar.js +61 -0
- package/src/lib/components/owner-avatar.js.map +1 -0
- package/src/lib/components/pipeline-stages-dialog.d.ts +43 -0
- package/src/lib/components/pipeline-stages-dialog.js +339 -0
- package/src/lib/components/pipeline-stages-dialog.js.map +1 -0
- package/src/lib/components/pipelines-dialog.d.ts +55 -0
- package/src/lib/components/pipelines-dialog.js +517 -0
- package/src/lib/components/pipelines-dialog.js.map +1 -0
- package/src/lib/components/recent-activity-feed.d.ts +39 -0
- package/src/lib/components/recent-activity-feed.js +103 -0
- package/src/lib/components/recent-activity-feed.js.map +1 -0
- package/src/lib/components/recipes-card.d.ts +39 -0
- package/src/lib/components/recipes-card.js +485 -0
- package/src/lib/components/recipes-card.js.map +1 -0
- package/src/lib/components/record-activity-card.d.ts +26 -0
- package/src/lib/components/record-activity-card.js +121 -0
- package/src/lib/components/record-activity-card.js.map +1 -0
- package/src/lib/components/record-files-card.d.ts +67 -0
- package/src/lib/components/record-files-card.js +290 -0
- package/src/lib/components/record-files-card.js.map +1 -0
- package/src/lib/components/record-tasks-card.d.ts +32 -0
- package/src/lib/components/record-tasks-card.js +306 -0
- package/src/lib/components/record-tasks-card.js.map +1 -0
- package/src/lib/components/reports/activity-card.d.ts +57 -0
- package/src/lib/components/reports/activity-card.js +281 -0
- package/src/lib/components/reports/activity-card.js.map +1 -0
- package/src/lib/components/reports/closed-deals-card.d.ts +20 -0
- package/src/lib/components/reports/closed-deals-card.js +194 -0
- package/src/lib/components/reports/closed-deals-card.js.map +1 -0
- package/src/lib/components/reports/contacts-mix-card.d.ts +27 -0
- package/src/lib/components/reports/contacts-mix-card.js +161 -0
- package/src/lib/components/reports/contacts-mix-card.js.map +1 -0
- package/src/lib/components/reports/contacts-trend-card.d.ts +31 -0
- package/src/lib/components/reports/contacts-trend-card.js +144 -0
- package/src/lib/components/reports/contacts-trend-card.js.map +1 -0
- package/src/lib/components/reports/forecast-card.d.ts +22 -0
- package/src/lib/components/reports/forecast-card.js +251 -0
- package/src/lib/components/reports/forecast-card.js.map +1 -0
- package/src/lib/components/reports/lead-counts.d.ts +32 -0
- package/src/lib/components/reports/lead-counts.js +44 -0
- package/src/lib/components/reports/lead-counts.js.map +1 -0
- package/src/lib/components/reports/lead-funnel-card.d.ts +38 -0
- package/src/lib/components/reports/lead-funnel-card.js +375 -0
- package/src/lib/components/reports/lead-funnel-card.js.map +1 -0
- package/src/lib/components/reports/pipeline-card.d.ts +19 -0
- package/src/lib/components/reports/pipeline-card.js +338 -0
- package/src/lib/components/reports/pipeline-card.js.map +1 -0
- package/src/lib/components/reports/report-bar-chart.d.ts +39 -0
- package/src/lib/components/reports/report-bar-chart.js +133 -0
- package/src/lib/components/reports/report-bar-chart.js.map +1 -0
- package/src/lib/components/reports/report-breakdown.d.ts +32 -0
- package/src/lib/components/reports/report-breakdown.js +105 -0
- package/src/lib/components/reports/report-breakdown.js.map +1 -0
- package/src/lib/components/reports/report-export.d.ts +37 -0
- package/src/lib/components/reports/report-export.js +66 -0
- package/src/lib/components/reports/report-export.js.map +1 -0
- package/src/lib/components/reports/report-format.d.ts +36 -0
- package/src/lib/components/reports/report-format.js +43 -0
- package/src/lib/components/reports/report-format.js.map +1 -0
- package/src/lib/components/reports/report-scope.d.ts +81 -0
- package/src/lib/components/reports/report-scope.js +58 -0
- package/src/lib/components/reports/report-scope.js.map +1 -0
- package/src/lib/components/reports/report-stat-tile.d.ts +47 -0
- package/src/lib/components/reports/report-stat-tile.js +96 -0
- package/src/lib/components/reports/report-stat-tile.js.map +1 -0
- package/src/lib/components/reports/source-conversion-card.d.ts +28 -0
- package/src/lib/components/reports/source-conversion-card.js +205 -0
- package/src/lib/components/reports/source-conversion-card.js.map +1 -0
- package/src/lib/components/reports/tasks-card.d.ts +26 -0
- package/src/lib/components/reports/tasks-card.js +279 -0
- package/src/lib/components/reports/tasks-card.js.map +1 -0
- package/src/lib/components/reports/use-aggregate-read.d.ts +99 -0
- package/src/lib/components/reports/use-aggregate-read.js +195 -0
- package/src/lib/components/reports/use-aggregate-read.js.map +1 -0
- package/src/lib/components/reports/won-lost-by-owner-card.d.ts +30 -0
- package/src/lib/components/reports/won-lost-by-owner-card.js +168 -0
- package/src/lib/components/reports/won-lost-by-owner-card.js.map +1 -0
- package/src/lib/components/reports-section.d.ts +42 -0
- package/src/lib/components/reports-section.js +308 -0
- package/src/lib/components/reports-section.js.map +1 -0
- package/src/lib/components/sending-addresses-card.d.ts +49 -0
- package/src/lib/components/sending-addresses-card.js +262 -0
- package/src/lib/components/sending-addresses-card.js.map +1 -0
- package/src/lib/components/settings-section.d.ts +151 -0
- package/src/lib/components/settings-section.js +783 -0
- package/src/lib/components/settings-section.js.map +1 -0
- package/src/lib/components/task-cells.d.ts +51 -0
- package/src/lib/components/task-cells.js +139 -0
- package/src/lib/components/task-cells.js.map +1 -0
- package/src/lib/components/task-edit-drawer.d.ts +53 -0
- package/src/lib/components/task-edit-drawer.js +483 -0
- package/src/lib/components/task-edit-drawer.js.map +1 -0
- package/src/lib/components/task-import-drawer.d.ts +24 -0
- package/src/lib/components/task-import-drawer.js +82 -0
- package/src/lib/components/task-import-drawer.js.map +1 -0
- package/src/lib/components/task-snooze-menu.d.ts +65 -0
- package/src/lib/components/task-snooze-menu.js +207 -0
- package/src/lib/components/task-snooze-menu.js.map +1 -0
- package/src/lib/components/tasks-bulk-bar.d.ts +25 -0
- package/src/lib/components/tasks-bulk-bar.js +348 -0
- package/src/lib/components/tasks-bulk-bar.js.map +1 -0
- package/src/lib/components/tasks-calendar.d.ts +38 -0
- package/src/lib/components/tasks-calendar.js +228 -0
- package/src/lib/components/tasks-calendar.js.map +1 -0
- package/src/lib/components/tasks-section.d.ts +27 -0
- package/src/lib/components/tasks-section.js +579 -0
- package/src/lib/components/tasks-section.js.map +1 -0
- package/src/lib/components/use-contact-campaign-emails.d.ts +32 -0
- package/src/lib/components/use-contact-campaign-emails.js +83 -0
- package/src/lib/components/use-contact-campaign-emails.js.map +1 -0
- package/src/lib/components/use-crm-api.d.ts +44 -0
- package/src/lib/components/use-crm-api.js +84 -0
- package/src/lib/components/use-crm-api.js.map +1 -0
- package/src/lib/components/use-crm-inbound-address.d.ts +60 -0
- package/src/lib/components/use-crm-inbound-address.js +124 -0
- package/src/lib/components/use-crm-inbound-address.js.map +1 -0
- package/src/lib/components/use-emails-hub-path.d.ts +24 -0
- package/src/lib/components/use-emails-hub-path.js +59 -0
- package/src/lib/components/use-emails-hub-path.js.map +1 -0
- package/src/lib/components/use-member-email-aliases.d.ts +54 -0
- package/src/lib/components/use-member-email-aliases.js +186 -0
- package/src/lib/components/use-member-email-aliases.js.map +1 -0
- package/src/lib/components/use-org-members.d.ts +40 -0
- package/src/lib/components/use-org-members.js +100 -0
- package/src/lib/components/use-org-members.js.map +1 -0
- package/src/lib/constants/api-routes.d.ts +109 -0
- package/src/lib/constants/api-routes.js +74 -0
- package/src/lib/constants/api-routes.js.map +1 -0
- package/src/lib/constants/bundle-common.d.ts +14 -0
- package/src/lib/constants/bundle-common.js +14 -0
- package/src/lib/constants/bundle-common.js.map +1 -0
- package/src/lib/constants/company-filters.d.ts +18 -0
- package/src/lib/constants/company-filters.js +51 -0
- package/src/lib/constants/company-filters.js.map +1 -0
- package/src/lib/constants/contact-filters.d.ts +38 -0
- package/src/lib/constants/contact-filters.js +294 -0
- package/src/lib/constants/contact-filters.js.map +1 -0
- package/src/lib/hooks/use-contact-field-definitions.d.ts +48 -0
- package/src/lib/hooks/use-contact-field-definitions.js +72 -0
- package/src/lib/hooks/use-contact-field-definitions.js.map +1 -0
- package/src/lib/hooks/use-contact-update.d.ts +25 -0
- package/src/lib/hooks/use-contact-update.js +80 -0
- package/src/lib/hooks/use-contact-update.js.map +1 -0
- package/src/lib/hooks/use-crm-activity-logger.d.ts +73 -0
- package/src/lib/hooks/use-crm-activity-logger.js +101 -0
- package/src/lib/hooks/use-crm-activity-logger.js.map +1 -0
- package/src/lib/hooks/use-crm-bulk-apply.d.ts +52 -0
- package/src/lib/hooks/use-crm-bulk-apply.js +112 -0
- package/src/lib/hooks/use-crm-bulk-apply.js.map +1 -0
- package/src/lib/hooks/use-crm-default-view.d.ts +24 -0
- package/src/lib/hooks/use-crm-default-view.js +64 -0
- package/src/lib/hooks/use-crm-default-view.js.map +1 -0
- package/src/lib/hooks/use-crm-email-templates.d.ts +59 -0
- package/src/lib/hooks/use-crm-email-templates.js +103 -0
- package/src/lib/hooks/use-crm-email-templates.js.map +1 -0
- package/src/lib/hooks/use-crm-hub-path.d.ts +29 -0
- package/src/lib/hooks/use-crm-hub-path.js +41 -0
- package/src/lib/hooks/use-crm-hub-path.js.map +1 -0
- package/src/lib/hooks/use-crm-org-mount.d.ts +97 -0
- package/src/lib/hooks/use-crm-org-mount.js +215 -0
- package/src/lib/hooks/use-crm-org-mount.js.map +1 -0
- package/src/lib/hooks/use-crm-record-names.d.ts +52 -0
- package/src/lib/hooks/use-crm-record-names.js +126 -0
- package/src/lib/hooks/use-crm-record-names.js.map +1 -0
- package/src/lib/hooks/use-crm-records-quota.d.ts +68 -0
- package/src/lib/hooks/use-crm-records-quota.js +118 -0
- package/src/lib/hooks/use-crm-records-quota.js.map +1 -0
- package/src/lib/hooks/use-crm-saved-view.d.ts +96 -0
- package/src/lib/hooks/use-crm-saved-view.js +329 -0
- package/src/lib/hooks/use-crm-saved-view.js.map +1 -0
- package/src/lib/hooks/use-crm-scope.d.ts +117 -0
- package/src/lib/hooks/use-crm-scope.js +147 -0
- package/src/lib/hooks/use-crm-scope.js.map +1 -0
- package/src/lib/hooks/use-crm-tasks.d.ts +85 -0
- package/src/lib/hooks/use-crm-tasks.js +153 -0
- package/src/lib/hooks/use-crm-tasks.js.map +1 -0
- package/src/lib/hooks/use-crm-view-grid.d.ts +55 -0
- package/src/lib/hooks/use-crm-view-grid.js +170 -0
- package/src/lib/hooks/use-crm-view-grid.js.map +1 -0
- package/src/lib/hooks/use-crm-views.d.ts +42 -0
- package/src/lib/hooks/use-crm-views.js +84 -0
- package/src/lib/hooks/use-crm-views.js.map +1 -0
- package/src/lib/hooks/use-deal-stage-api.d.ts +69 -0
- package/src/lib/hooks/use-deal-stage-api.js +78 -0
- package/src/lib/hooks/use-deal-stage-api.js.map +1 -0
- package/src/lib/hooks/use-deals.d.ts +47 -0
- package/src/lib/hooks/use-deals.js +105 -0
- package/src/lib/hooks/use-deals.js.map +1 -0
- package/src/lib/hooks/use-org-leads.d.ts +53 -0
- package/src/lib/hooks/use-org-leads.js +114 -0
- package/src/lib/hooks/use-org-leads.js.map +1 -0
- package/src/lib/hooks/use-org-member-directory.d.ts +36 -0
- package/src/lib/hooks/use-org-member-directory.js +116 -0
- package/src/lib/hooks/use-org-member-directory.js.map +1 -0
- package/src/lib/hooks/use-org-member-options.d.ts +38 -0
- package/src/lib/hooks/use-org-member-options.js +131 -0
- package/src/lib/hooks/use-org-member-options.js.map +1 -0
- package/src/lib/hooks/use-pipeline.d.ts +71 -0
- package/src/lib/hooks/use-pipeline.js +159 -0
- package/src/lib/hooks/use-pipeline.js.map +1 -0
- package/src/lib/model/companies-bulk-writes.d.ts +40 -0
- package/src/lib/model/companies-bulk-writes.js +103 -0
- package/src/lib/model/companies-bulk-writes.js.map +1 -0
- package/src/lib/model/companies-csv.d.ts +36 -0
- package/src/lib/model/companies-csv.js +38 -0
- package/src/lib/model/companies-csv.js.map +1 -0
- package/src/lib/model/companies.d.ts +99 -0
- package/src/lib/model/companies.js +168 -0
- package/src/lib/model/companies.js.map +1 -0
- package/src/lib/model/company-delete-route.d.ts +43 -0
- package/src/lib/model/company-delete-route.js +31 -0
- package/src/lib/model/company-delete-route.js.map +1 -0
- package/src/lib/model/company-delete.d.ts +42 -0
- package/src/lib/model/company-delete.js +52 -0
- package/src/lib/model/company-delete.js.map +1 -0
- package/src/lib/model/contact-duplicates.d.ts +58 -0
- package/src/lib/model/contact-duplicates.js +67 -0
- package/src/lib/model/contact-duplicates.js.map +1 -0
- package/src/lib/model/contact-record.d.ts +113 -0
- package/src/lib/model/contact-record.js +70 -0
- package/src/lib/model/contact-record.js.map +1 -0
- package/src/lib/model/contact-update.d.ts +93 -0
- package/src/lib/model/contact-update.js +50 -0
- package/src/lib/model/contact-update.js.map +1 -0
- package/src/lib/model/contacts-bulk-writes.d.ts +173 -0
- package/src/lib/model/contacts-bulk-writes.js +196 -0
- package/src/lib/model/contacts-bulk-writes.js.map +1 -0
- package/src/lib/model/contacts-csv.d.ts +54 -0
- package/src/lib/model/contacts-csv.js +67 -0
- package/src/lib/model/contacts-csv.js.map +1 -0
- package/src/lib/model/contacts-list-seed.d.ts +51 -0
- package/src/lib/model/contacts-list-seed.js +63 -0
- package/src/lib/model/contacts-list-seed.js.map +1 -0
- package/src/lib/model/crm-activity-report.d.ts +27 -0
- package/src/lib/model/crm-activity-report.js +56 -0
- package/src/lib/model/crm-activity-report.js.map +1 -0
- package/src/lib/model/crm-api.d.ts +49 -0
- package/src/lib/model/crm-api.js +47 -0
- package/src/lib/model/crm-api.js.map +1 -0
- package/src/lib/model/crm-bulk-writes.d.ts +147 -0
- package/src/lib/model/crm-bulk-writes.js +207 -0
- package/src/lib/model/crm-bulk-writes.js.map +1 -0
- package/src/lib/model/crm-company-import.d.ts +154 -0
- package/src/lib/model/crm-company-import.js +331 -0
- package/src/lib/model/crm-company-import.js.map +1 -0
- package/src/lib/model/crm-custom-draft.d.ts +62 -0
- package/src/lib/model/crm-custom-draft.js +67 -0
- package/src/lib/model/crm-custom-draft.js.map +1 -0
- package/src/lib/model/crm-deal-import.d.ts +112 -0
- package/src/lib/model/crm-deal-import.js +263 -0
- package/src/lib/model/crm-deal-import.js.map +1 -0
- package/src/lib/model/crm-import.d.ts +244 -0
- package/src/lib/model/crm-import.js +466 -0
- package/src/lib/model/crm-import.js.map +1 -0
- package/src/lib/model/crm-lead-import.d.ts +105 -0
- package/src/lib/model/crm-lead-import.js +255 -0
- package/src/lib/model/crm-lead-import.js.map +1 -0
- package/src/lib/model/crm-record-routes.d.ts +21 -0
- package/src/lib/model/crm-record-routes.js +70 -0
- package/src/lib/model/crm-record-routes.js.map +1 -0
- package/src/lib/model/crm-routes.d.ts +101 -0
- package/src/lib/model/crm-routes.js +92 -0
- package/src/lib/model/crm-routes.js.map +1 -0
- package/src/lib/model/crm-task-import.d.ts +94 -0
- package/src/lib/model/crm-task-import.js +275 -0
- package/src/lib/model/crm-task-import.js.map +1 -0
- package/src/lib/model/crm-view-param.d.ts +43 -0
- package/src/lib/model/crm-view-param.js +49 -0
- package/src/lib/model/crm-view-param.js.map +1 -0
- package/src/lib/model/deal-board-model.d.ts +241 -0
- package/src/lib/model/deal-board-model.js +439 -0
- package/src/lib/model/deal-board-model.js.map +1 -0
- package/src/lib/model/deal-form-model.d.ts +114 -0
- package/src/lib/model/deal-form-model.js +218 -0
- package/src/lib/model/deal-form-model.js.map +1 -0
- package/src/lib/model/deals-csv.d.ts +32 -0
- package/src/lib/model/deals-csv.js +37 -0
- package/src/lib/model/deals-csv.js.map +1 -0
- package/src/lib/model/import-column-shapes.d.ts +36 -0
- package/src/lib/model/import-column-shapes.js +76 -0
- package/src/lib/model/import-column-shapes.js.map +1 -0
- package/src/lib/model/lead-company-suggestion.d.ts +61 -0
- package/src/lib/model/lead-company-suggestion.js +65 -0
- package/src/lib/model/lead-company-suggestion.js.map +1 -0
- package/src/lib/model/lead-filters.d.ts +29 -0
- package/src/lib/model/lead-filters.js +39 -0
- package/src/lib/model/lead-filters.js.map +1 -0
- package/src/lib/model/lead-surfaces.d.ts +58 -0
- package/src/lib/model/lead-surfaces.js +67 -0
- package/src/lib/model/lead-surfaces.js.map +1 -0
- package/src/lib/model/leads-csv.d.ts +40 -0
- package/src/lib/model/leads-csv.js +40 -0
- package/src/lib/model/leads-csv.js.map +1 -0
- package/src/lib/model/next-activity-api.d.ts +31 -0
- package/src/lib/model/next-activity-api.js +57 -0
- package/src/lib/model/next-activity-api.js.map +1 -0
- package/src/lib/model/next-activity.d.ts +64 -0
- package/src/lib/model/next-activity.js +47 -0
- package/src/lib/model/next-activity.js.map +1 -0
- package/src/lib/model/person-key-web.d.ts +43 -0
- package/src/lib/model/person-key-web.js +52 -0
- package/src/lib/model/person-key-web.js.map +1 -0
- package/src/lib/model/record-facts.d.ts +282 -0
- package/src/lib/model/record-facts.js +434 -0
- package/src/lib/model/record-facts.js.map +1 -0
- package/src/lib/model/task-api.d.ts +28 -0
- package/src/lib/model/task-api.js +57 -0
- package/src/lib/model/task-api.js.map +1 -0
- package/src/lib/model/task-calendar.d.ts +108 -0
- package/src/lib/model/task-calendar.js +139 -0
- package/src/lib/model/task-calendar.js.map +1 -0
- package/src/lib/model/task-routes.d.ts +177 -0
- package/src/lib/model/task-routes.js +197 -0
- package/src/lib/model/task-routes.js.map +1 -0
- package/src/lib/model/task-scope.d.ts +45 -0
- package/src/lib/model/task-scope.js +51 -0
- package/src/lib/model/task-scope.js.map +1 -0
- package/src/lib/model/task-views.d.ts +149 -0
- package/src/lib/model/task-views.js +286 -0
- package/src/lib/model/task-views.js.map +1 -0
- package/src/lib/model/tasks-csv.d.ts +28 -0
- package/src/lib/model/tasks-csv.js +28 -0
- package/src/lib/model/tasks-csv.js.map +1 -0
- package/src/lib/plugin.d.ts +32 -0
- package/src/lib/plugin.js +208 -0
- package/src/lib/plugin.js.map +1 -0
- package/src/lib/server/companies-import.d.ts +57 -0
- package/src/lib/server/companies-import.js +242 -0
- package/src/lib/server/companies-import.js.map +1 -0
- package/src/lib/server/company-delete.d.ts +59 -0
- package/src/lib/server/company-delete.js +146 -0
- package/src/lib/server/company-delete.js.map +1 -0
- package/src/lib/server/contact-email-history.d.ts +82 -0
- package/src/lib/server/contact-email-history.js +264 -0
- package/src/lib/server/contact-email-history.js.map +1 -0
- package/src/lib/server/contact-profile.d.ts +41 -0
- package/src/lib/server/contact-profile.js +45 -0
- package/src/lib/server/contact-profile.js.map +1 -0
- package/src/lib/server/contact-update.d.ts +92 -0
- package/src/lib/server/contact-update.js +512 -0
- package/src/lib/server/contact-update.js.map +1 -0
- package/src/lib/server/contacts-import.d.ts +73 -0
- package/src/lib/server/contacts-import.js +263 -0
- package/src/lib/server/contacts-import.js.map +1 -0
- package/src/lib/server/contacts-merge.d.ts +86 -0
- package/src/lib/server/contacts-merge.js +206 -0
- package/src/lib/server/contacts-merge.js.map +1 -0
- package/src/lib/server/deals-import.d.ts +76 -0
- package/src/lib/server/deals-import.js +246 -0
- package/src/lib/server/deals-import.js.map +1 -0
- package/src/lib/server/email-send.d.ts +119 -0
- package/src/lib/server/email-send.js +667 -0
- package/src/lib/server/email-send.js.map +1 -0
- package/src/lib/server/email-template-duplicate.d.ts +19 -0
- package/src/lib/server/email-template-duplicate.js +206 -0
- package/src/lib/server/email-template-duplicate.js.map +1 -0
- package/src/lib/server/erase-person.d.ts +108 -0
- package/src/lib/server/erase-person.js +309 -0
- package/src/lib/server/erase-person.js.map +1 -0
- package/src/lib/server/import-context.d.ts +85 -0
- package/src/lib/server/import-context.js +181 -0
- package/src/lib/server/import-context.js.map +1 -0
- package/src/lib/server/inbound-address.d.ts +61 -0
- package/src/lib/server/inbound-address.js +188 -0
- package/src/lib/server/inbound-address.js.map +1 -0
- package/src/lib/server/lead-convert.d.ts +78 -0
- package/src/lib/server/lead-convert.js +250 -0
- package/src/lib/server/lead-convert.js.map +1 -0
- package/src/lib/server/leads-import.d.ts +84 -0
- package/src/lib/server/leads-import.js +261 -0
- package/src/lib/server/leads-import.js.map +1 -0
- package/src/lib/server/next-activity-routes.d.ts +33 -0
- package/src/lib/server/next-activity-routes.js +110 -0
- package/src/lib/server/next-activity-routes.js.map +1 -0
- package/src/lib/server/org-activity.d.ts +61 -0
- package/src/lib/server/org-activity.js +120 -0
- package/src/lib/server/org-activity.js.map +1 -0
- package/src/lib/server/org-caller.d.ts +110 -0
- package/src/lib/server/org-caller.js +154 -0
- package/src/lib/server/org-caller.js.map +1 -0
- package/src/lib/server/recipe-routes.d.ts +75 -0
- package/src/lib/server/recipe-routes.js +442 -0
- package/src/lib/server/recipe-routes.js.map +1 -0
- package/src/lib/server/record-facts.d.ts +65 -0
- package/src/lib/server/record-facts.js +337 -0
- package/src/lib/server/record-facts.js.map +1 -0
- package/src/lib/server/record-timeline.d.ts +51 -0
- package/src/lib/server/record-timeline.js +215 -0
- package/src/lib/server/record-timeline.js.map +1 -0
- package/src/lib/server/suite-gate.d.ts +42 -0
- package/src/lib/server/suite-gate.js +87 -0
- package/src/lib/server/suite-gate.js.map +1 -0
- package/src/lib/server/task-routes.d.ts +132 -0
- package/src/lib/server/task-routes.js +699 -0
- package/src/lib/server/task-routes.js.map +1 -0
- package/src/lib/server/tasks-import.d.ts +54 -0
- package/src/lib/server/tasks-import.js +157 -0
- package/src/lib/server/tasks-import.js.map +1 -0
- package/src/lib/server-deal-stage.d.ts +88 -0
- package/src/lib/server-deal-stage.js +316 -0
- package/src/lib/server-deal-stage.js.map +1 -0
- package/src/lib/server.d.ts +149 -0
- package/src/lib/server.js +615 -0
- package/src/lib/server.js.map +1 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ 'use client';
|
|
17
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
18
|
+
/**
|
|
19
|
+
* THE CHROME EVERY BULK BAR SHARES (AGL-2621).
|
|
20
|
+
*
|
|
21
|
+
* The contacts bar (AGL-2603) settled how a bar over a table reads: it
|
|
22
|
+
* appears only for a selection and says how many, its actions sit in one
|
|
23
|
+
* wrapping row with Clear at the end, and whatever the last action could
|
|
24
|
+
* not do is listed by name in an alert under it until dismissed. Companies,
|
|
25
|
+
* deals and tasks each have a bar now, and each would be the same frame
|
|
26
|
+
* around different buttons, so the frame lives here and each bar supplies
|
|
27
|
+
* its actions and its dialog's field.
|
|
28
|
+
*/ import { Alert, Button, Dialog, DialogActions, DialogContent, DialogTitle, Stack, Typography } from "@mui/material";
|
|
29
|
+
/** "1 company" or "3 companies". */ export function countNoun(count, noun) {
|
|
30
|
+
return count === 1 ? `1 ${noun.singular}` : `${count.toLocaleString()} ${noun.plural}`;
|
|
31
|
+
}
|
|
32
|
+
export function CrmBulkBarFrame(props) {
|
|
33
|
+
const { count, noun, busy, onClear, report, onDismissReport, children, extras } = props;
|
|
34
|
+
return /*#__PURE__*/ _jsxs(Stack, {
|
|
35
|
+
spacing: 1,
|
|
36
|
+
children: [
|
|
37
|
+
/*#__PURE__*/ _jsxs(Stack, {
|
|
38
|
+
direction: "row",
|
|
39
|
+
spacing: 1,
|
|
40
|
+
useFlexGap: true,
|
|
41
|
+
sx: {
|
|
42
|
+
alignItems: 'center',
|
|
43
|
+
flexWrap: 'wrap',
|
|
44
|
+
rowGap: 1,
|
|
45
|
+
p: 1,
|
|
46
|
+
border: 1,
|
|
47
|
+
borderColor: 'divider',
|
|
48
|
+
borderRadius: 1
|
|
49
|
+
},
|
|
50
|
+
children: [
|
|
51
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
52
|
+
variant: "body2",
|
|
53
|
+
sx: {
|
|
54
|
+
mr: 1
|
|
55
|
+
},
|
|
56
|
+
children: `${count.toLocaleString()} selected`
|
|
57
|
+
}),
|
|
58
|
+
children,
|
|
59
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
60
|
+
size: "small",
|
|
61
|
+
disabled: busy,
|
|
62
|
+
onClick: onClear,
|
|
63
|
+
children: 'Clear'
|
|
64
|
+
})
|
|
65
|
+
]
|
|
66
|
+
}),
|
|
67
|
+
report ? /*#__PURE__*/ _jsxs(Alert, {
|
|
68
|
+
severity: "warning",
|
|
69
|
+
onClose: onDismissReport,
|
|
70
|
+
children: [
|
|
71
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
72
|
+
variant: "body2",
|
|
73
|
+
children: report.length === 1 ? `One ${noun.singular} was not changed:` : `${report.length} ${noun.plural} were not changed:`
|
|
74
|
+
}),
|
|
75
|
+
report.map((row)=>/*#__PURE__*/ _jsx(Typography, {
|
|
76
|
+
variant: "caption",
|
|
77
|
+
component: "div",
|
|
78
|
+
children: `${row.label} — ${row.reason}`
|
|
79
|
+
}, `${row.label}:${row.reason}`))
|
|
80
|
+
]
|
|
81
|
+
}) : null,
|
|
82
|
+
extras
|
|
83
|
+
]
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
CrmBulkBarFrame.displayName = 'CrmBulkBarFrame';
|
|
87
|
+
/**
|
|
88
|
+
* The one small dialog a value-taking action opens: what it applies to,
|
|
89
|
+
* the field, Cancel and Apply. Closing is refused while the action runs.
|
|
90
|
+
*/ export function CrmBulkValueDialog(props) {
|
|
91
|
+
const { open, title, count, noun, busy, canApply, applyLabel, onClose, onApply, children } = props;
|
|
92
|
+
return /*#__PURE__*/ _jsxs(Dialog, {
|
|
93
|
+
open: open,
|
|
94
|
+
onClose: busy ? undefined : onClose,
|
|
95
|
+
fullWidth: true,
|
|
96
|
+
maxWidth: "xs",
|
|
97
|
+
children: [
|
|
98
|
+
/*#__PURE__*/ _jsx(DialogTitle, {
|
|
99
|
+
children: title
|
|
100
|
+
}),
|
|
101
|
+
/*#__PURE__*/ _jsx(DialogContent, {
|
|
102
|
+
children: /*#__PURE__*/ _jsxs(Stack, {
|
|
103
|
+
spacing: 1.5,
|
|
104
|
+
sx: {
|
|
105
|
+
pt: 1
|
|
106
|
+
},
|
|
107
|
+
children: [
|
|
108
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
109
|
+
variant: "body2",
|
|
110
|
+
color: "text.secondary",
|
|
111
|
+
children: `Applies to ${countNoun(count, noun)} selected.`
|
|
112
|
+
}),
|
|
113
|
+
children
|
|
114
|
+
]
|
|
115
|
+
})
|
|
116
|
+
}),
|
|
117
|
+
/*#__PURE__*/ _jsxs(DialogActions, {
|
|
118
|
+
children: [
|
|
119
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
120
|
+
onClick: onClose,
|
|
121
|
+
disabled: busy,
|
|
122
|
+
children: 'Cancel'
|
|
123
|
+
}),
|
|
124
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
125
|
+
variant: "contained",
|
|
126
|
+
disabled: busy || !canApply,
|
|
127
|
+
onClick: onApply,
|
|
128
|
+
children: applyLabel != null ? applyLabel : 'Apply'
|
|
129
|
+
})
|
|
130
|
+
]
|
|
131
|
+
})
|
|
132
|
+
]
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
CrmBulkValueDialog.displayName = 'CrmBulkValueDialog';
|
|
136
|
+
|
|
137
|
+
//# sourceMappingURL=crm-bulk-bar-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/crm/src/lib/components/crm-bulk-bar-frame.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\n/**\n * THE CHROME EVERY BULK BAR SHARES (AGL-2621).\n *\n * The contacts bar (AGL-2603) settled how a bar over a table reads: it\n * appears only for a selection and says how many, its actions sit in one\n * wrapping row with Clear at the end, and whatever the last action could\n * not do is listed by name in an alert under it until dismissed. Companies,\n * deals and tasks each have a bar now, and each would be the same frame\n * around different buttons, so the frame lives here and each bar supplies\n * its actions and its dialog's field.\n */\n\nimport {\n Alert,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Stack,\n Typography,\n} from '@mui/material'\nimport type { ReactNode } from 'react'\nimport type { CrmBulkSkip } from '../model/crm-bulk-writes'\n\n/** How a bar names its rows — \"1 company\", \"3 deals\". */\nexport interface CrmBulkNoun {\n singular: string\n plural: string\n}\n\n/** \"1 company\" or \"3 companies\". */\nexport function countNoun(count: number, noun: CrmBulkNoun): string {\n return count === 1\n ? `1 ${noun.singular}`\n : `${count.toLocaleString()} ${noun.plural}`\n}\n\nexport interface CrmBulkBarFrameProps {\n count: number\n noun: CrmBulkNoun\n busy: boolean\n onClear: () => void\n /** What the last action could not do, by name, until dismissed. */\n report: readonly CrmBulkSkip[] | null\n onDismissReport: () => void\n /** The action buttons, in order. */\n children: ReactNode\n /** Anything the bar mounts beside itself — a dialog, a confirm. */\n extras?: ReactNode\n}\n\nexport function CrmBulkBarFrame(props: CrmBulkBarFrameProps) {\n const { count, noun, busy, onClear, report, onDismissReport, children, extras } =\n props\n return (\n <Stack spacing={1}>\n <Stack\n direction=\"row\"\n spacing={1}\n useFlexGap\n sx={{\n alignItems: 'center',\n flexWrap: 'wrap',\n rowGap: 1,\n p: 1,\n border: 1,\n borderColor: 'divider',\n borderRadius: 1,\n }}\n >\n <Typography variant=\"body2\" sx={{ mr: 1 }}>\n {`${count.toLocaleString()} selected`}\n </Typography>\n {children}\n <Button size=\"small\" disabled={busy} onClick={onClear}>\n {'Clear'}\n </Button>\n </Stack>\n {report ? (\n <Alert severity=\"warning\" onClose={onDismissReport}>\n <Typography variant=\"body2\">\n {report.length === 1\n ? `One ${noun.singular} was not changed:`\n : `${report.length} ${noun.plural} were not changed:`}\n </Typography>\n {report.map((row) => (\n <Typography key={`${row.label}:${row.reason}`} variant=\"caption\" component=\"div\">\n {`${row.label} — ${row.reason}`}\n </Typography>\n ))}\n </Alert>\n ) : null}\n {extras}\n </Stack>\n )\n}\nCrmBulkBarFrame.displayName = 'CrmBulkBarFrame'\n\nexport interface CrmBulkValueDialogProps {\n open: boolean\n title: string\n count: number\n noun: CrmBulkNoun\n busy: boolean\n /** Whether Apply may be pressed — the field has a value the action can use. */\n canApply: boolean\n applyLabel?: string\n onClose: () => void\n onApply: () => void\n children: ReactNode\n}\n\n/**\n * The one small dialog a value-taking action opens: what it applies to,\n * the field, Cancel and Apply. Closing is refused while the action runs.\n */\nexport function CrmBulkValueDialog(props: CrmBulkValueDialogProps) {\n const { open, title, count, noun, busy, canApply, applyLabel, onClose, onApply, children } =\n props\n return (\n <Dialog open={open} onClose={busy ? undefined : onClose} fullWidth maxWidth=\"xs\">\n <DialogTitle>{title}</DialogTitle>\n <DialogContent>\n <Stack spacing={1.5} sx={{ pt: 1 }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`Applies to ${countNoun(count, noun)} selected.`}\n </Typography>\n {children}\n </Stack>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={busy}>\n {'Cancel'}\n </Button>\n <Button variant=\"contained\" disabled={busy || !canApply} onClick={onApply}>\n {applyLabel ?? 'Apply'}\n </Button>\n </DialogActions>\n </Dialog>\n )\n}\nCrmBulkValueDialog.displayName = 'CrmBulkValueDialog'\n"],"names":["Alert","Button","Dialog","DialogActions","DialogContent","DialogTitle","Stack","Typography","countNoun","count","noun","singular","toLocaleString","plural","CrmBulkBarFrame","props","busy","onClear","report","onDismissReport","children","extras","spacing","direction","useFlexGap","sx","alignItems","flexWrap","rowGap","p","border","borderColor","borderRadius","variant","mr","size","disabled","onClick","severity","onClose","length","map","row","component","label","reason","displayName","CrmBulkValueDialog","open","title","canApply","applyLabel","onApply","undefined","fullWidth","maxWidth","pt","color"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD;;AAEA;;;;;;;;;;CAUC,GAED,SACEA,KAAK,EACLC,MAAM,EACNC,MAAM,EACNC,aAAa,EACbC,aAAa,EACbC,WAAW,EACXC,KAAK,EACLC,UAAU,QACL,gBAAe;AAUtB,kCAAkC,GAClC,OAAO,SAASC,UAAUC,KAAa,EAAEC,IAAiB;IACxD,OAAOD,UAAU,IACb,CAAC,EAAE,EAAEC,KAAKC,QAAQ,EAAE,GACpB,GAAGF,MAAMG,cAAc,GAAG,CAAC,EAAEF,KAAKG,MAAM,EAAE;AAChD;AAgBA,OAAO,SAASC,gBAAgBC,KAA2B;IACzD,MAAM,EAAEN,KAAK,EAAEC,IAAI,EAAEM,IAAI,EAAEC,OAAO,EAAEC,MAAM,EAAEC,eAAe,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAC7EN;IACF,qBACE,MAACT;QAAMgB,SAAS;;0BACd,MAAChB;gBACCiB,WAAU;gBACVD,SAAS;gBACTE,UAAU;gBACVC,IAAI;oBACFC,YAAY;oBACZC,UAAU;oBACVC,QAAQ;oBACRC,GAAG;oBACHC,QAAQ;oBACRC,aAAa;oBACbC,cAAc;gBAChB;;kCAEA,KAACzB;wBAAW0B,SAAQ;wBAAQR,IAAI;4BAAES,IAAI;wBAAE;kCACrC,GAAGzB,MAAMG,cAAc,GAAG,SAAS,CAAC;;oBAEtCQ;kCACD,KAACnB;wBAAOkC,MAAK;wBAAQC,UAAUpB;wBAAMqB,SAASpB;kCAC3C;;;;YAGJC,uBACC,MAAClB;gBAAMsC,UAAS;gBAAUC,SAASpB;;kCACjC,KAACZ;wBAAW0B,SAAQ;kCACjBf,OAAOsB,MAAM,KAAK,IACf,CAAC,IAAI,EAAE9B,KAAKC,QAAQ,CAAC,iBAAiB,CAAC,GACvC,GAAGO,OAAOsB,MAAM,CAAC,CAAC,EAAE9B,KAAKG,MAAM,CAAC,kBAAkB,CAAC;;oBAExDK,OAAOuB,GAAG,CAAC,CAACC,oBACX,KAACnC;4BAA8C0B,SAAQ;4BAAUU,WAAU;sCACxE,GAAGD,IAAIE,KAAK,CAAC,GAAG,EAAEF,IAAIG,MAAM,EAAE;2BADhB,GAAGH,IAAIE,KAAK,CAAC,CAAC,EAAEF,IAAIG,MAAM,EAAE;;iBAK/C;YACHxB;;;AAGP;AACAP,gBAAgBgC,WAAW,GAAG;AAgB9B;;;CAGC,GACD,OAAO,SAASC,mBAAmBhC,KAA8B;IAC/D,MAAM,EAAEiC,IAAI,EAAEC,KAAK,EAAExC,KAAK,EAAEC,IAAI,EAAEM,IAAI,EAAEkC,QAAQ,EAAEC,UAAU,EAAEZ,OAAO,EAAEa,OAAO,EAAEhC,QAAQ,EAAE,GACxFL;IACF,qBACE,MAACb;QAAO8C,MAAMA;QAAMT,SAASvB,OAAOqC,YAAYd;QAASe,SAAS;QAACC,UAAS;;0BAC1E,KAAClD;0BAAa4C;;0BACd,KAAC7C;0BACC,cAAA,MAACE;oBAAMgB,SAAS;oBAAKG,IAAI;wBAAE+B,IAAI;oBAAE;;sCAC/B,KAACjD;4BAAW0B,SAAQ;4BAAQwB,OAAM;sCAC/B,CAAC,WAAW,EAAEjD,UAAUC,OAAOC,MAAM,UAAU,CAAC;;wBAElDU;;;;0BAGL,MAACjB;;kCACC,KAACF;wBAAOoC,SAASE;wBAASH,UAAUpB;kCACjC;;kCAEH,KAACf;wBAAOgC,SAAQ;wBAAYG,UAAUpB,QAAQ,CAACkC;wBAAUb,SAASe;kCAC/DD,qBAAAA,aAAc;;;;;;AAKzB;AACAJ,mBAAmBD,WAAW,GAAG"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type AglynOrgBilling } from '@aglyn/aglyn';
|
|
2
|
+
import type { ActivityRecordLink } from './activity-queries';
|
|
3
|
+
/**
|
|
4
|
+
* CLICK-TO-CALL (AGL-2661): a stored phone number, reachable in one tap,
|
|
5
|
+
* and the call logged in one more.
|
|
6
|
+
*
|
|
7
|
+
* A rep working a list opens a record to call the person on it. Until now
|
|
8
|
+
* the number was text: they read it, switched to a phone, typed it, and
|
|
9
|
+
* then — if they remembered — opened the activity dialog, chose "call" and
|
|
10
|
+
* wrote what happened. Two of those four steps are the machine's to do.
|
|
11
|
+
*
|
|
12
|
+
* `crmTelHref` in the shared library decides what is callable, so the link
|
|
13
|
+
* a record page draws and the one a list would draw cannot disagree; a
|
|
14
|
+
* value it refuses is shown as plain text rather than as a link that rings
|
|
15
|
+
* nothing.
|
|
16
|
+
*/
|
|
17
|
+
export interface CrmPhoneLinkProps {
|
|
18
|
+
/** The stored number — E.164 for anything the console wrote. */
|
|
19
|
+
phone?: string | null;
|
|
20
|
+
/** What a record with no number shows; nothing renders by default. */
|
|
21
|
+
fallback?: React.ReactNode;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A phone number as a `tel:` link, the one shape every CRM surface prints a
|
|
25
|
+
* number in. Not a link when the value is not a number a dialer could take
|
|
26
|
+
* — see `crmTelHref` — because a link that cannot ring is worse than text.
|
|
27
|
+
*/
|
|
28
|
+
export declare function CrmPhoneLink(props: CrmPhoneLinkProps): import("react").JSX.Element;
|
|
29
|
+
export declare namespace CrmPhoneLink {
|
|
30
|
+
var displayName: string;
|
|
31
|
+
}
|
|
32
|
+
export interface CrmCallButtonProps {
|
|
33
|
+
/**
|
|
34
|
+
* The site the activity is filed under, or `null` at the organization
|
|
35
|
+
* level — the same prop `CrmSendEmailButton` takes, for the same reason.
|
|
36
|
+
*/
|
|
37
|
+
hostId: string | null;
|
|
38
|
+
org?: Partial<AglynOrgBilling> | null;
|
|
39
|
+
/** The record the call is about; exactly one, as `ActivityRecordLink` says. */
|
|
40
|
+
link: ActivityRecordLink;
|
|
41
|
+
/** The record's number, when the page holds one. */
|
|
42
|
+
phone?: string | null;
|
|
43
|
+
/**
|
|
44
|
+
* The org's plan lacks the CRM (AGL-2788). Logging the call stands locked;
|
|
45
|
+
* dialing the number writes nothing, and stays.
|
|
46
|
+
*/
|
|
47
|
+
suiteLocked?: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The **Call** and **Log a call** pair a record page carries beside its
|
|
51
|
+
* number (AGL-2661): the first dials, the second opens the activity dialog
|
|
52
|
+
* already a call, with the record bound.
|
|
53
|
+
*
|
|
54
|
+
* One component file so a record page adds both with one import and one
|
|
55
|
+
* line, whichever header the page draws its actions in — the shape
|
|
56
|
+
* `CrmSendEmailButton` established. **Call** is disabled with its reason
|
|
57
|
+
* for a record whose number a dialer could not take, rather than absent:
|
|
58
|
+
* a rep looking for it should learn that the number is unusable, not
|
|
59
|
+
* wonder where the button went. **Log a call** stands whatever the number
|
|
60
|
+
* is, because a call placed from a mobile is still a call to log.
|
|
61
|
+
*/
|
|
62
|
+
export declare function CrmCallButton(props: CrmCallButtonProps): import("react").JSX.Element;
|
|
63
|
+
export declare namespace CrmCallButton {
|
|
64
|
+
var displayName: string;
|
|
65
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ 'use client';
|
|
17
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
18
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
19
|
+
import { crmTelHref } from "@aglyn/aglyn";
|
|
20
|
+
import { mdiPhoneOutline } from "@aglyn/shared-data-mdi";
|
|
21
|
+
import { MdiIcon } from "@aglyn/shared-ui-jsx";
|
|
22
|
+
import { Button, Link, Tooltip } from "@mui/material";
|
|
23
|
+
import { useState } from "react";
|
|
24
|
+
import { useActivityScope } from "./activity-queries.js";
|
|
25
|
+
import { CrmSuiteLockedButton } from "./crm-suite-lock.js";
|
|
26
|
+
import { LogActivityDialog } from "./log-activity-dialog.js";
|
|
27
|
+
/**
|
|
28
|
+
* A phone number as a `tel:` link, the one shape every CRM surface prints a
|
|
29
|
+
* number in. Not a link when the value is not a number a dialer could take
|
|
30
|
+
* — see `crmTelHref` — because a link that cannot ring is worse than text.
|
|
31
|
+
*/ export function CrmPhoneLink(props) {
|
|
32
|
+
const { phone, fallback = null } = props;
|
|
33
|
+
const text = String(phone != null ? phone : '').trim();
|
|
34
|
+
if (!text) return /*#__PURE__*/ _jsx(_Fragment, {
|
|
35
|
+
children: fallback
|
|
36
|
+
});
|
|
37
|
+
const href = crmTelHref(text);
|
|
38
|
+
if (!href) return /*#__PURE__*/ _jsx(_Fragment, {
|
|
39
|
+
children: text
|
|
40
|
+
});
|
|
41
|
+
return /*#__PURE__*/ _jsx(Link, {
|
|
42
|
+
href: href,
|
|
43
|
+
underline: "hover",
|
|
44
|
+
children: text
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
CrmPhoneLink.displayName = 'CrmPhoneLink';
|
|
48
|
+
/**
|
|
49
|
+
* The **Call** and **Log a call** pair a record page carries beside its
|
|
50
|
+
* number (AGL-2661): the first dials, the second opens the activity dialog
|
|
51
|
+
* already a call, with the record bound.
|
|
52
|
+
*
|
|
53
|
+
* One component file so a record page adds both with one import and one
|
|
54
|
+
* line, whichever header the page draws its actions in — the shape
|
|
55
|
+
* `CrmSendEmailButton` established. **Call** is disabled with its reason
|
|
56
|
+
* for a record whose number a dialer could not take, rather than absent:
|
|
57
|
+
* a rep looking for it should learn that the number is unusable, not
|
|
58
|
+
* wonder where the button went. **Log a call** stands whatever the number
|
|
59
|
+
* is, because a call placed from a mobile is still a call to log.
|
|
60
|
+
*/ export function CrmCallButton(props) {
|
|
61
|
+
const { hostId, org, link, phone, suiteLocked = false } = props;
|
|
62
|
+
const [open, setOpen] = useState(false);
|
|
63
|
+
const scope = useActivityScope(hostId, org);
|
|
64
|
+
const text = String(phone != null ? phone : '').trim();
|
|
65
|
+
const href = crmTelHref(text);
|
|
66
|
+
const reason = !text ? 'This record has no phone number' : !href ? `“${text}” is not a number a dialer can take` : '';
|
|
67
|
+
const call = /*#__PURE__*/ _jsx(Button, _extends({
|
|
68
|
+
size: "small",
|
|
69
|
+
variant: "outlined",
|
|
70
|
+
disabled: !href,
|
|
71
|
+
startIcon: /*#__PURE__*/ _jsx(MdiIcon, {
|
|
72
|
+
path: mdiPhoneOutline.path,
|
|
73
|
+
size: 0.8
|
|
74
|
+
})
|
|
75
|
+
}, href ? {
|
|
76
|
+
component: 'a',
|
|
77
|
+
href
|
|
78
|
+
} : {}, {
|
|
79
|
+
children: 'Call'
|
|
80
|
+
}));
|
|
81
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
82
|
+
children: [
|
|
83
|
+
reason ? /*#__PURE__*/ _jsx(Tooltip, {
|
|
84
|
+
title: reason,
|
|
85
|
+
children: /*#__PURE__*/ _jsx("span", {
|
|
86
|
+
children: call
|
|
87
|
+
})
|
|
88
|
+
}) : call,
|
|
89
|
+
suiteLocked ? /*#__PURE__*/ _jsx(CrmSuiteLockedButton, {
|
|
90
|
+
variant: "outlined",
|
|
91
|
+
children: 'Log a call'
|
|
92
|
+
}) : /*#__PURE__*/ _jsx(Button, {
|
|
93
|
+
size: "small",
|
|
94
|
+
variant: "outlined",
|
|
95
|
+
onClick: ()=>setOpen(true),
|
|
96
|
+
children: 'Log a call'
|
|
97
|
+
}),
|
|
98
|
+
open && !suiteLocked ? /*#__PURE__*/ _jsx(LogActivityDialog, {
|
|
99
|
+
open: true,
|
|
100
|
+
onClose: ()=>setOpen(false),
|
|
101
|
+
scope: scope,
|
|
102
|
+
link: link,
|
|
103
|
+
kind: "call"
|
|
104
|
+
}) : null
|
|
105
|
+
]
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
CrmCallButton.displayName = 'CrmCallButton';
|
|
109
|
+
|
|
110
|
+
//# sourceMappingURL=crm-call-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/crm/src/lib/components/crm-call-actions.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\nimport { type AglynOrgBilling, crmTelHref } from '@aglyn/aglyn'\nimport { mdiPhoneOutline } from '@aglyn/shared-data-mdi'\nimport { MdiIcon } from '@aglyn/shared-ui-jsx'\nimport { Button, Link, Tooltip } from '@mui/material'\nimport { useState } from 'react'\nimport type { ActivityRecordLink } from './activity-queries'\nimport { useActivityScope } from './activity-queries'\nimport { CrmSuiteLockedButton } from './crm-suite-lock'\nimport { LogActivityDialog } from './log-activity-dialog'\n\n/**\n * CLICK-TO-CALL (AGL-2661): a stored phone number, reachable in one tap,\n * and the call logged in one more.\n *\n * A rep working a list opens a record to call the person on it. Until now\n * the number was text: they read it, switched to a phone, typed it, and\n * then — if they remembered — opened the activity dialog, chose \"call\" and\n * wrote what happened. Two of those four steps are the machine's to do.\n *\n * `crmTelHref` in the shared library decides what is callable, so the link\n * a record page draws and the one a list would draw cannot disagree; a\n * value it refuses is shown as plain text rather than as a link that rings\n * nothing.\n */\n\nexport interface CrmPhoneLinkProps {\n /** The stored number — E.164 for anything the console wrote. */\n phone?: string | null\n /** What a record with no number shows; nothing renders by default. */\n fallback?: React.ReactNode\n}\n\n/**\n * A phone number as a `tel:` link, the one shape every CRM surface prints a\n * number in. Not a link when the value is not a number a dialer could take\n * — see `crmTelHref` — because a link that cannot ring is worse than text.\n */\nexport function CrmPhoneLink(props: CrmPhoneLinkProps) {\n const { phone, fallback = null } = props\n const text = String(phone ?? '').trim()\n if (!text) return <>{fallback}</>\n const href = crmTelHref(text)\n if (!href) return <>{text}</>\n return (\n <Link href={href} underline=\"hover\">\n {text}\n </Link>\n )\n}\nCrmPhoneLink.displayName = 'CrmPhoneLink'\n\nexport interface CrmCallButtonProps {\n /**\n * The site the activity is filed under, or `null` at the organization\n * level — the same prop `CrmSendEmailButton` takes, for the same reason.\n */\n hostId: string | null\n org?: Partial<AglynOrgBilling> | null\n /** The record the call is about; exactly one, as `ActivityRecordLink` says. */\n link: ActivityRecordLink\n /** The record's number, when the page holds one. */\n phone?: string | null\n /**\n * The org's plan lacks the CRM (AGL-2788). Logging the call stands locked;\n * dialing the number writes nothing, and stays.\n */\n suiteLocked?: boolean\n}\n\n/**\n * The **Call** and **Log a call** pair a record page carries beside its\n * number (AGL-2661): the first dials, the second opens the activity dialog\n * already a call, with the record bound.\n *\n * One component file so a record page adds both with one import and one\n * line, whichever header the page draws its actions in — the shape\n * `CrmSendEmailButton` established. **Call** is disabled with its reason\n * for a record whose number a dialer could not take, rather than absent:\n * a rep looking for it should learn that the number is unusable, not\n * wonder where the button went. **Log a call** stands whatever the number\n * is, because a call placed from a mobile is still a call to log.\n */\nexport function CrmCallButton(props: CrmCallButtonProps) {\n const { hostId, org, link, phone, suiteLocked = false } = props\n const [open, setOpen] = useState(false)\n const scope = useActivityScope(hostId, org)\n const text = String(phone ?? '').trim()\n const href = crmTelHref(text)\n const reason = !text\n ? 'This record has no phone number'\n : !href\n ? `“${text}” is not a number a dialer can take`\n : ''\n const call = (\n <Button\n size=\"small\"\n variant=\"outlined\"\n disabled={!href}\n startIcon={<MdiIcon path={mdiPhoneOutline.path} size={0.8} />}\n {...(href ? { component: 'a' as const, href } : {})}\n >\n {'Call'}\n </Button>\n )\n return (\n <>\n {reason ? (\n <Tooltip title={reason}>\n <span>{call}</span>\n </Tooltip>\n ) : (\n call\n )}\n {suiteLocked ? (\n <CrmSuiteLockedButton variant=\"outlined\">{'Log a call'}</CrmSuiteLockedButton>\n ) : (\n <Button size=\"small\" variant=\"outlined\" onClick={() => setOpen(true)}>\n {'Log a call'}\n </Button>\n )}\n {open && !suiteLocked ? (\n <LogActivityDialog\n open\n onClose={() => setOpen(false)}\n scope={scope}\n link={link}\n kind=\"call\"\n />\n ) : null}\n </>\n )\n}\nCrmCallButton.displayName = 'CrmCallButton'\n"],"names":["crmTelHref","mdiPhoneOutline","MdiIcon","Button","Link","Tooltip","useState","useActivityScope","CrmSuiteLockedButton","LogActivityDialog","CrmPhoneLink","props","phone","fallback","text","String","trim","href","underline","displayName","CrmCallButton","hostId","org","link","suiteLocked","open","setOpen","scope","reason","call","size","variant","disabled","startIcon","path","component","title","span","onClick","onClose","kind"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD;;;AAEA,SAA+BA,UAAU,QAAQ,eAAc;AAC/D,SAASC,eAAe,QAAQ,yBAAwB;AACxD,SAASC,OAAO,QAAQ,uBAAsB;AAC9C,SAASC,MAAM,EAAEC,IAAI,EAAEC,OAAO,QAAQ,gBAAe;AACrD,SAASC,QAAQ,QAAQ,QAAO;AAEhC,SAASC,gBAAgB,QAAQ,wBAAoB;AACrD,SAASC,oBAAoB,QAAQ,sBAAkB;AACvD,SAASC,iBAAiB,QAAQ,2BAAuB;AAwBzD;;;;CAIC,GACD,OAAO,SAASC,aAAaC,KAAwB;IACnD,MAAM,EAAEC,KAAK,EAAEC,WAAW,IAAI,EAAE,GAAGF;IACnC,MAAMG,OAAOC,OAAOH,gBAAAA,QAAS,IAAII,IAAI;IACrC,IAAI,CAACF,MAAM,qBAAO;kBAAGD;;IACrB,MAAMI,OAAOjB,WAAWc;IACxB,IAAI,CAACG,MAAM,qBAAO;kBAAGH;;IACrB,qBACE,KAACV;QAAKa,MAAMA;QAAMC,WAAU;kBACzBJ;;AAGP;AACAJ,aAAaS,WAAW,GAAG;AAoB3B;;;;;;;;;;;;CAYC,GACD,OAAO,SAASC,cAAcT,KAAyB;IACrD,MAAM,EAAEU,MAAM,EAAEC,GAAG,EAAEC,IAAI,EAAEX,KAAK,EAAEY,cAAc,KAAK,EAAE,GAAGb;IAC1D,MAAM,CAACc,MAAMC,QAAQ,GAAGpB,SAAS;IACjC,MAAMqB,QAAQpB,iBAAiBc,QAAQC;IACvC,MAAMR,OAAOC,OAAOH,gBAAAA,QAAS,IAAII,IAAI;IACrC,MAAMC,OAAOjB,WAAWc;IACxB,MAAMc,SAAS,CAACd,OACZ,oCACA,CAACG,OACC,CAAC,CAAC,EAAEH,KAAK,mCAAmC,CAAC,GAC7C;IACN,MAAMe,qBACJ,KAAC1B;QACC2B,MAAK;QACLC,SAAQ;QACRC,UAAU,CAACf;QACXgB,yBAAW,KAAC/B;YAAQgC,MAAMjC,gBAAgBiC,IAAI;YAAEJ,MAAM;;OACjDb,OAAO;QAAEkB,WAAW;QAAclB;IAAK,IAAI,CAAC;kBAEhD;;IAGL,qBACE;;YACGW,uBACC,KAACvB;gBAAQ+B,OAAOR;0BACd,cAAA,KAACS;8BAAMR;;iBAGTA;YAEDL,4BACC,KAAChB;gBAAqBuB,SAAQ;0BAAY;+BAE1C,KAAC5B;gBAAO2B,MAAK;gBAAQC,SAAQ;gBAAWO,SAAS,IAAMZ,QAAQ;0BAC5D;;YAGJD,QAAQ,CAACD,4BACR,KAACf;gBACCgB,IAAI;gBACJc,SAAS,IAAMb,QAAQ;gBACvBC,OAAOA;gBACPJ,MAAMA;gBACNiB,MAAK;iBAEL;;;AAGV;AACApB,cAAcD,WAAW,GAAG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type GridColumnMenuProps } from '@mui/x-data-grid';
|
|
2
|
+
import type { CrmColumnOrder } from '../hooks/use-crm-view-grid';
|
|
3
|
+
/** Wraps the list whose column menu should offer Move left / Move right. */
|
|
4
|
+
export declare const CrmColumnOrderProvider: import("react").Provider<CrmColumnOrder>;
|
|
5
|
+
/**
|
|
6
|
+
* The grid's own menu with the move items added between Filter and Hide —
|
|
7
|
+
* after what the column does, before what happens to it.
|
|
8
|
+
*/
|
|
9
|
+
export declare function CrmColumnMenu(props: GridColumnMenuProps): import("react").JSX.Element;
|
|
10
|
+
export declare namespace CrmColumnMenu {
|
|
11
|
+
var displayName: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The `slots` a CRM list hands its `ListTable`. One module-level object, so
|
|
15
|
+
* the grid sees one identity across renders rather than a new slot map —
|
|
16
|
+
* and a remounted menu — every time the section draws.
|
|
17
|
+
*/
|
|
18
|
+
export declare const CRM_LIST_SLOTS: {
|
|
19
|
+
readonly columnMenu: typeof CrmColumnMenu;
|
|
20
|
+
};
|
|
21
|
+
export default CrmColumnMenu;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ 'use client';
|
|
17
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
18
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
19
|
+
/**
|
|
20
|
+
* THE COLUMN MENU ON A CRM LIST, with a way to move the column (AGL-2635).
|
|
21
|
+
*
|
|
22
|
+
* A saved view keeps its columns in order, and the grid has no gesture for
|
|
23
|
+
* changing that order: the MIT grid forces `disableColumnReorder`, and
|
|
24
|
+
* its Manage columns panel only shows and hides. So the menu every
|
|
25
|
+
* column header already opens — Sort, Hide, Manage columns — grows Move
|
|
26
|
+
* left and Move right, which go through the view's own `columnOrder` (see
|
|
27
|
+
* `useCrmViewGrid`) rather than the grid's column state: the view is what
|
|
28
|
+
* is saved, and the grid draws what the view says.
|
|
29
|
+
*
|
|
30
|
+
* ## Fed by context, not slot props
|
|
31
|
+
*
|
|
32
|
+
* `ListTable` sets its own `slotProps`, so a caller's `slotProps.columnMenu`
|
|
33
|
+
* would replace them; a provider around the table costs nothing and reaches
|
|
34
|
+
* the menu through the grid's portal. A menu opened outside one offers no
|
|
35
|
+
* move — it is the same menu every other list has.
|
|
36
|
+
*/ import { mdiArrowLeft, mdiArrowRight } from "@aglyn/shared-data-mdi";
|
|
37
|
+
import { MdiIcon } from "@aglyn/shared-ui-jsx";
|
|
38
|
+
import { GridColumnMenu, useGridRootProps } from "@mui/x-data-grid";
|
|
39
|
+
import { createContext, useContext } from "react";
|
|
40
|
+
const CrmColumnOrderContext = /*#__PURE__*/ createContext(null);
|
|
41
|
+
/** Wraps the list whose column menu should offer Move left / Move right. */ export const CrmColumnOrderProvider = CrmColumnOrderContext.Provider;
|
|
42
|
+
/**
|
|
43
|
+
* Move left and Move right, as one menu item each.
|
|
44
|
+
*
|
|
45
|
+
* Disabled at the edge rather than absent, so a column that cannot move
|
|
46
|
+
* further still says which way it can. A pinned column (`hideable: false`)
|
|
47
|
+
* has no place in the order and gets neither.
|
|
48
|
+
*/ function MoveColumnItems(props) {
|
|
49
|
+
const { colDef, onClick } = props;
|
|
50
|
+
const rootProps = useGridRootProps();
|
|
51
|
+
const columnOrder = useContext(CrmColumnOrderContext);
|
|
52
|
+
if (!columnOrder || colDef.hideable === false) return null;
|
|
53
|
+
const index = columnOrder.order.indexOf(colDef.field);
|
|
54
|
+
if (index === -1) return null;
|
|
55
|
+
const MenuItem = rootProps.slots.baseMenuItem;
|
|
56
|
+
const item = (delta, label, icon, disabled)=>/*#__PURE__*/ _jsx(MenuItem, {
|
|
57
|
+
disabled: disabled,
|
|
58
|
+
iconStart: /*#__PURE__*/ _jsx(MdiIcon, {
|
|
59
|
+
path: icon,
|
|
60
|
+
size: 0.8
|
|
61
|
+
}),
|
|
62
|
+
onClick: (event)=>{
|
|
63
|
+
// A disabled item still receives an imperative click.
|
|
64
|
+
if (disabled) return;
|
|
65
|
+
columnOrder.move(colDef.field, delta);
|
|
66
|
+
onClick(event);
|
|
67
|
+
},
|
|
68
|
+
children: label
|
|
69
|
+
});
|
|
70
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
71
|
+
children: [
|
|
72
|
+
item(-1, 'Move left', mdiArrowLeft.path, index === 0),
|
|
73
|
+
item(1, 'Move right', mdiArrowRight.path, index === columnOrder.order.length - 1)
|
|
74
|
+
]
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
MoveColumnItems.displayName = 'MoveColumnItems';
|
|
78
|
+
/**
|
|
79
|
+
* The grid's own menu with the move items added between Filter and Hide —
|
|
80
|
+
* after what the column does, before what happens to it.
|
|
81
|
+
*/ export function CrmColumnMenu(props) {
|
|
82
|
+
return /*#__PURE__*/ _jsx(GridColumnMenu, _extends({}, props, {
|
|
83
|
+
slots: {
|
|
84
|
+
columnMenuMoveItems: MoveColumnItems
|
|
85
|
+
},
|
|
86
|
+
slotProps: {
|
|
87
|
+
columnMenuMoveItems: {
|
|
88
|
+
displayOrder: 25
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
CrmColumnMenu.displayName = 'CrmColumnMenu';
|
|
94
|
+
/**
|
|
95
|
+
* The `slots` a CRM list hands its `ListTable`. One module-level object, so
|
|
96
|
+
* the grid sees one identity across renders rather than a new slot map —
|
|
97
|
+
* and a remounted menu — every time the section draws.
|
|
98
|
+
*/ export const CRM_LIST_SLOTS = {
|
|
99
|
+
columnMenu: CrmColumnMenu
|
|
100
|
+
};
|
|
101
|
+
export default CrmColumnMenu;
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=crm-column-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/crm/src/lib/components/crm-column-menu.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\n/**\n * THE COLUMN MENU ON A CRM LIST, with a way to move the column (AGL-2635).\n *\n * A saved view keeps its columns in order, and the grid has no gesture for\n * changing that order: the MIT grid forces `disableColumnReorder`, and\n * its Manage columns panel only shows and hides. So the menu every\n * column header already opens — Sort, Hide, Manage columns — grows Move\n * left and Move right, which go through the view's own `columnOrder` (see\n * `useCrmViewGrid`) rather than the grid's column state: the view is what\n * is saved, and the grid draws what the view says.\n *\n * ## Fed by context, not slot props\n *\n * `ListTable` sets its own `slotProps`, so a caller's `slotProps.columnMenu`\n * would replace them; a provider around the table costs nothing and reaches\n * the menu through the grid's portal. A menu opened outside one offers no\n * move — it is the same menu every other list has.\n */\n\nimport { mdiArrowLeft, mdiArrowRight } from '@aglyn/shared-data-mdi'\nimport { MdiIcon } from '@aglyn/shared-ui-jsx'\nimport {\n type GridColDef,\n GridColumnMenu,\n type GridColumnMenuProps,\n useGridRootProps,\n} from '@mui/x-data-grid'\nimport { createContext, type SyntheticEvent, useContext } from 'react'\nimport type { CrmColumnOrder } from '../hooks/use-crm-view-grid'\n\nconst CrmColumnOrderContext = createContext<CrmColumnOrder | null>(null)\n\n/** Wraps the list whose column menu should offer Move left / Move right. */\nexport const CrmColumnOrderProvider = CrmColumnOrderContext.Provider\n\n/**\n * Move left and Move right, as one menu item each.\n *\n * Disabled at the edge rather than absent, so a column that cannot move\n * further still says which way it can. A pinned column (`hideable: false`)\n * has no place in the order and gets neither.\n */\nfunction MoveColumnItems(props: {\n colDef: GridColDef\n onClick: (event: SyntheticEvent) => void\n}) {\n const { colDef, onClick } = props\n const rootProps = useGridRootProps()\n const columnOrder = useContext(CrmColumnOrderContext)\n if (!columnOrder || colDef.hideable === false) return null\n const index = columnOrder.order.indexOf(colDef.field)\n if (index === -1) return null\n const MenuItem = rootProps.slots.baseMenuItem\n const item = (delta: -1 | 1, label: string, icon: string, disabled: boolean) => (\n <MenuItem\n disabled={disabled}\n iconStart={<MdiIcon path={icon} size={0.8} />}\n onClick={(event: SyntheticEvent) => {\n // A disabled item still receives an imperative click.\n if (disabled) return\n columnOrder.move(colDef.field, delta)\n onClick(event)\n }}\n >\n {label}\n </MenuItem>\n )\n return (\n <>\n {item(-1, 'Move left', mdiArrowLeft.path, index === 0)}\n {item(1, 'Move right', mdiArrowRight.path, index === columnOrder.order.length - 1)}\n </>\n )\n}\nMoveColumnItems.displayName = 'MoveColumnItems'\n\n/**\n * The grid's own menu with the move items added between Filter and Hide —\n * after what the column does, before what happens to it.\n */\nexport function CrmColumnMenu(props: GridColumnMenuProps) {\n return (\n <GridColumnMenu\n {...props}\n slots={{ columnMenuMoveItems: MoveColumnItems }}\n slotProps={{ columnMenuMoveItems: { displayOrder: 25 } }}\n />\n )\n}\nCrmColumnMenu.displayName = 'CrmColumnMenu'\n\n/**\n * The `slots` a CRM list hands its `ListTable`. One module-level object, so\n * the grid sees one identity across renders rather than a new slot map —\n * and a remounted menu — every time the section draws.\n */\nexport const CRM_LIST_SLOTS = { columnMenu: CrmColumnMenu } as const\n\nexport default CrmColumnMenu\n"],"names":["mdiArrowLeft","mdiArrowRight","MdiIcon","GridColumnMenu","useGridRootProps","createContext","useContext","CrmColumnOrderContext","CrmColumnOrderProvider","Provider","MoveColumnItems","props","colDef","onClick","rootProps","columnOrder","hideable","index","order","indexOf","field","MenuItem","slots","baseMenuItem","item","delta","label","icon","disabled","iconStart","path","size","event","move","length","displayName","CrmColumnMenu","columnMenuMoveItems","slotProps","displayOrder","CRM_LIST_SLOTS","columnMenu"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD;;;AAEA;;;;;;;;;;;;;;;;;CAiBC,GAED,SAASA,YAAY,EAAEC,aAAa,QAAQ,yBAAwB;AACpE,SAASC,OAAO,QAAQ,uBAAsB;AAC9C,SAEEC,cAAc,EAEdC,gBAAgB,QACX,mBAAkB;AACzB,SAASC,aAAa,EAAuBC,UAAU,QAAQ,QAAO;AAGtE,MAAMC,sCAAwBF,cAAqC;AAEnE,0EAA0E,GAC1E,OAAO,MAAMG,yBAAyBD,sBAAsBE,QAAQ,CAAA;AAEpE;;;;;;CAMC,GACD,SAASC,gBAAgBC,KAGxB;IACC,MAAM,EAAEC,MAAM,EAAEC,OAAO,EAAE,GAAGF;IAC5B,MAAMG,YAAYV;IAClB,MAAMW,cAAcT,WAAWC;IAC/B,IAAI,CAACQ,eAAeH,OAAOI,QAAQ,KAAK,OAAO,OAAO;IACtD,MAAMC,QAAQF,YAAYG,KAAK,CAACC,OAAO,CAACP,OAAOQ,KAAK;IACpD,IAAIH,UAAU,CAAC,GAAG,OAAO;IACzB,MAAMI,WAAWP,UAAUQ,KAAK,CAACC,YAAY;IAC7C,MAAMC,OAAO,CAACC,OAAeC,OAAeC,MAAcC,yBACxD,KAACP;YACCO,UAAUA;YACVC,yBAAW,KAAC3B;gBAAQ4B,MAAMH;gBAAMI,MAAM;;YACtClB,SAAS,CAACmB;gBACR,sDAAsD;gBACtD,IAAIJ,UAAU;gBACdb,YAAYkB,IAAI,CAACrB,OAAOQ,KAAK,EAAEK;gBAC/BZ,QAAQmB;YACV;sBAECN;;IAGL,qBACE;;YACGF,KAAK,CAAC,GAAG,aAAaxB,aAAa8B,IAAI,EAAEb,UAAU;YACnDO,KAAK,GAAG,cAAcvB,cAAc6B,IAAI,EAAEb,UAAUF,YAAYG,KAAK,CAACgB,MAAM,GAAG;;;AAGtF;AACAxB,gBAAgByB,WAAW,GAAG;AAE9B;;;CAGC,GACD,OAAO,SAASC,cAAczB,KAA0B;IACtD,qBACE,KAACR,6BACKQ;QACJW,OAAO;YAAEe,qBAAqB3B;QAAgB;QAC9C4B,WAAW;YAAED,qBAAqB;gBAAEE,cAAc;YAAG;QAAE;;AAG7D;AACAH,cAAcD,WAAW,GAAG;AAE5B;;;;CAIC,GACD,OAAO,MAAMK,iBAAiB;IAAEC,YAAYL;AAAc,EAAU;AAEpE,eAAeA,cAAa"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ConsolePluginPageProps } from '@aglyn/aglyn';
|
|
2
|
+
/**
|
|
3
|
+
* Contacts (AGL-109 → AGL-395 → AGL-2595): the CRM hub — people, companies,
|
|
4
|
+
* deals, tasks, reports and fields — owned by the contacts plugin and
|
|
5
|
+
* rendered by the shell's generic plugin route. The shell applies the
|
|
6
|
+
* `release_crm` gate (via the nav tab) and passes the resolved `org`
|
|
7
|
+
* doc, which the people section reads for the `contactsPerHost` quota.
|
|
8
|
+
*
|
|
9
|
+
* Sections are ROUTES, following the hubs that migrated before it (AGL-2501):
|
|
10
|
+
* `/contacts/people` is the v1 list, and every other section is a URL of its
|
|
11
|
+
* own, so the page builds one section's body and the others do not exist to
|
|
12
|
+
* subscribe. The v1 body moved to `contacts-section.tsx` untouched; what this
|
|
13
|
+
* file adds is the rail and the switch.
|
|
14
|
+
*/
|
|
15
|
+
export declare function CrmConsolePage(props: ConsolePluginPageProps): import("react").JSX.Element;
|
|
16
|
+
export declare namespace CrmConsolePage {
|
|
17
|
+
var displayName: string;
|
|
18
|
+
}
|
|
19
|
+
export default CrmConsolePage;
|