@mono-lit/helper 0.0.0-stage → 0.0.1
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.md +55 -0
- package/README.md +34 -2
- package/dist/breakpoints-CAbhDUht.js +84 -0
- package/dist/checkbox-Cqpie9Ap.js +4 -0
- package/dist/chip-DBUUa2eB.js +4 -0
- package/dist/chip-limits-BMoO31JM.js +213 -0
- package/dist/chip-strip-Cw3gyz0q.js +213 -0
- package/dist/color-DHYrfXsX.js +253 -0
- package/dist/css-class-BRKRzHx-.js +60 -0
- package/dist/css-size-DhHSVZJK.js +37 -0
- package/dist/data/theme/presets.json.d.ts +140 -0
- package/dist/data-search-Bwo5bg8K.js +573 -0
- package/dist/data-source-controller-C50Qyfzh.js +178 -0
- package/dist/data-source-options-BTpfrOZ_.js +535 -0
- package/dist/data-source-options-CQSTZHPE.js +537 -0
- package/dist/data-source-read-CUX-lgrQ.js +216 -0
- package/dist/data-source-read-DL88aH8t.js +217 -0
- package/dist/decorate-DEXtNagw.js +141 -0
- package/dist/element-props-CLB6yvbm.js +114 -0
- package/dist/esm-Ptok4SQZ.js +2026 -0
- package/dist/excel-CY6zGkcx.js +608 -0
- package/dist/excel-DopRbEMK.js +608 -0
- package/dist/export-BvlBx_GZ.js +2302 -0
- package/dist/export.d.ts +1 -0
- package/dist/export.js +2302 -0
- package/dist/field-icons-BoOG6KrL.js +51 -0
- package/dist/field-path-C92eGLg3.js +251 -0
- package/dist/filter-builder-Bke3qOgJ.js +205 -0
- package/dist/filter-builder-CE4zE0V5.js +205 -0
- package/dist/filter-eval-DIfU2EAn.js +173 -0
- package/dist/filter-odata-C1vSGZaY.js +591 -0
- package/dist/form-control-core-B8d7k6vk.js +223 -0
- package/dist/form-control-core-eeRr0zLU.js +223 -0
- package/dist/hydration-flush-RB5Tz5nl.js +1001 -0
- package/dist/icon-CJkTlmTb.js +55 -0
- package/dist/icon-dVhYJUIH.js +17 -0
- package/dist/import-BgJdkwBI.js +606 -0
- package/dist/import.d.ts +1 -0
- package/dist/import.js +606 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +16 -0
- package/dist/index.node-DjvYOL-J.js +395 -0
- package/dist/index.node.d.ts +1 -0
- package/dist/index.node.js +16 -0
- package/dist/input-zGOULADt.js +4 -0
- package/dist/layout-var-CZnzMC0s.js +73 -0
- package/dist/light-slots-BVJwyg_2.js +244 -0
- package/dist/light-slots-DW1WgfgT.js +254 -0
- package/dist/markdown-DfqrfOJN.js +20146 -0
- package/dist/mono-button-CoVnBLav.js +873 -0
- package/dist/mono-button.shadow-FfP_hMH4.js +784 -0
- package/dist/mono-data-chart-ChU4Ii3p.js +738 -0
- package/dist/mono-data-dropdown-BAUl58kW.js +357 -0
- package/dist/mono-data-grid-CLBK8clE.js +4140 -0
- package/dist/mono-data-grid-Db80FzdZ.js +4142 -0
- package/dist/mono-element-B0kP_96P.js +232 -0
- package/dist/mono-event-Bi1qP9uN.js +129 -0
- package/dist/mono-form-controller-5PfsU4qa.js +409 -0
- package/dist/mono-modal-controller-BMO3n3rP.js +223 -0
- package/dist/mono-ui-CPV7rrdo.js +358 -0
- package/dist/notifier-CE4yxMUQ.js +88 -0
- package/dist/nuxt.d.ts +1 -0
- package/dist/nuxt.js +130 -0
- package/dist/popup-portal-BziRX1yG.js +465 -0
- package/dist/popup-stack-CEEMib__.js +189 -0
- package/dist/rate-limit-BBa2PO79.js +521 -0
- package/dist/reactive-BHsqVjRh.js +789 -0
- package/dist/reactive-D3EERqgO.js +47 -0
- package/dist/search.d.ts +1 -0
- package/dist/search.js +97 -0
- package/dist/src/components/accordion/accordion-core.d.ts +62 -0
- package/dist/src/components/accordion/accordion-types.d.ts +62 -0
- package/dist/src/components/accordion/index.d.ts +3 -0
- package/dist/src/components/accordion/index.shadow.d.ts +5 -0
- package/dist/src/components/accordion/mono-accordion.d.ts +55 -0
- package/dist/src/components/accordion/mono-accordion.shadow.d.ts +56 -0
- package/dist/src/components/alert/alert-core.d.ts +46 -0
- package/dist/src/components/alert/alert-types.d.ts +44 -0
- package/dist/src/components/alert/index.d.ts +3 -0
- package/dist/src/components/alert/index.shadow.d.ts +5 -0
- package/dist/src/components/alert/mono-alert.d.ts +44 -0
- package/dist/src/components/alert/mono-alert.shadow.d.ts +34 -0
- package/dist/src/components/breadcrumb/breadcrumb-core.d.ts +61 -0
- package/dist/src/components/breadcrumb/breadcrumb-list-core.d.ts +49 -0
- package/dist/src/components/breadcrumb/breadcrumb-render.d.ts +31 -0
- package/dist/src/components/breadcrumb/breadcrumb-types.d.ts +117 -0
- package/dist/src/components/breadcrumb/breadcrumb-utils.d.ts +43 -0
- package/dist/src/components/breadcrumb/index.d.ts +6 -0
- package/dist/src/components/breadcrumb/index.shadow.d.ts +8 -0
- package/dist/src/components/breadcrumb/mono-breadcrumb-list.d.ts +29 -0
- package/dist/src/components/breadcrumb/mono-breadcrumb-list.shadow.d.ts +48 -0
- package/dist/src/components/breadcrumb/mono-breadcrumb.d.ts +38 -0
- package/dist/src/components/breadcrumb/mono-breadcrumb.shadow.d.ts +73 -0
- package/dist/src/components/button/button-core.d.ts +90 -0
- package/dist/src/components/button/button-dropdown-core.d.ts +57 -0
- package/dist/src/components/button/button-dropdown-types.d.ts +129 -0
- package/dist/src/components/button/button-types.d.ts +219 -0
- package/dist/src/components/button/button-utils.d.ts +18 -0
- package/dist/src/components/button/index.button-dropdown.d.ts +4 -0
- package/dist/src/components/button/index.button-dropdown.shadow.d.ts +4 -0
- package/dist/src/components/button/index.d.ts +8 -0
- package/dist/src/components/button/index.shadow.d.ts +5 -0
- package/dist/src/components/button/mono-button-dropdown.d.ts +35 -0
- package/dist/src/components/button/mono-button-dropdown.shadow.d.ts +45 -0
- package/dist/src/components/button/mono-button.d.ts +123 -0
- package/dist/src/components/button/mono-button.shadow.d.ts +56 -0
- package/dist/src/components/card/card-core.d.ts +74 -0
- package/dist/src/components/card/card-types.d.ts +137 -0
- package/dist/src/components/card/card-utils.d.ts +23 -0
- package/dist/src/components/card/index.d.ts +4 -0
- package/dist/src/components/card/index.shadow.d.ts +6 -0
- package/dist/src/components/card/mono-card.d.ts +56 -0
- package/dist/src/components/card/mono-card.shadow.d.ts +52 -0
- package/dist/src/components/chart/chart-core.d.ts +43 -0
- package/dist/src/components/chart/chart-odata.d.ts +52 -0
- package/dist/src/components/chart/chart-types.d.ts +337 -0
- package/dist/src/components/chart/index.d.ts +8 -0
- package/dist/src/components/chart/index.shadow.d.ts +7 -0
- package/dist/src/components/chart/mono-chart-presets.d.ts +43 -0
- package/dist/src/components/chart/mono-chart-presets.shadow.d.ts +43 -0
- package/dist/src/components/chart/mono-chart.d.ts +30 -0
- package/dist/src/components/chart/mono-chart.shadow.d.ts +22 -0
- package/dist/src/components/chart/mono-data-chart.d.ts +27 -0
- package/dist/src/components/checkbox/checkbox-core.d.ts +53 -0
- package/dist/src/components/checkbox/checkbox-types.d.ts +69 -0
- package/dist/src/components/checkbox/checkbox-utils.d.ts +35 -0
- package/dist/src/components/checkbox/index.d.ts +4 -0
- package/dist/src/components/checkbox/index.shadow.d.ts +5 -0
- package/dist/src/components/checkbox/mono-checkbox.d.ts +34 -0
- package/dist/src/components/checkbox/mono-checkbox.shadow.d.ts +45 -0
- package/dist/src/components/chip/chip-core.d.ts +58 -0
- package/dist/src/components/chip/chip-types.d.ts +142 -0
- package/dist/src/components/chip/chip-utils.d.ts +24 -0
- package/dist/src/components/chip/index.d.ts +8 -0
- package/dist/src/components/chip/index.shadow.d.ts +6 -0
- package/dist/src/components/chip/mono-chip.d.ts +48 -0
- package/dist/src/components/chip/mono-chip.shadow.d.ts +33 -0
- package/dist/src/components/chip/mono-status-dot.d.ts +34 -0
- package/dist/src/components/date/date-core.d.ts +80 -0
- package/dist/src/components/date/date-types.d.ts +163 -0
- package/dist/src/components/date/index.d.ts +3 -0
- package/dist/src/components/date/index.shadow.d.ts +4 -0
- package/dist/src/components/date/mono-date.d.ts +22 -0
- package/dist/src/components/date/mono-date.shadow.d.ts +31 -0
- package/dist/src/components/drawer/drawer-core.d.ts +99 -0
- package/dist/src/components/drawer/drawer-types.d.ts +153 -0
- package/dist/src/components/drawer/index.d.ts +3 -0
- package/dist/src/components/drawer/index.shadow.d.ts +4 -0
- package/dist/src/components/drawer/mono-drawer.d.ts +45 -0
- package/dist/src/components/drawer/mono-drawer.shadow.d.ts +46 -0
- package/dist/src/components/dropdown/dropdown-core.d.ts +33 -0
- package/dist/src/components/dropdown/dropdown-types.d.ts +88 -0
- package/dist/src/components/dropdown/index.d.ts +3 -0
- package/dist/src/components/dropdown/index.shadow.d.ts +4 -0
- package/dist/src/components/dropdown/mono-dropdown.d.ts +34 -0
- package/dist/src/components/dropdown/mono-dropdown.shadow.d.ts +28 -0
- package/dist/src/components/dropdown-table/dropdown-table-core.d.ts +65 -0
- package/dist/src/components/dropdown-table/dropdown-table-types.d.ts +278 -0
- package/dist/src/components/dropdown-table/index.d.ts +5 -0
- package/dist/src/components/dropdown-table/index.shadow.d.ts +6 -0
- package/dist/src/components/dropdown-table/mono-data-dropdown.d.ts +152 -0
- package/dist/src/components/dropdown-table/mono-dropdown-table.d.ts +46 -0
- package/dist/src/components/dropdown-table/mono-dropdown-table.shadow.d.ts +22 -0
- package/dist/src/components/file-upload/file-upload-core.d.ts +60 -0
- package/dist/src/components/file-upload/file-upload-types.d.ts +145 -0
- package/dist/src/components/file-upload/file-upload-utils.d.ts +16 -0
- package/dist/src/components/file-upload/index.d.ts +4 -0
- package/dist/src/components/file-upload/index.shadow.d.ts +5 -0
- package/dist/src/components/file-upload/mono-file-upload.d.ts +33 -0
- package/dist/src/components/file-upload/mono-file-upload.shadow.d.ts +50 -0
- package/dist/src/components/filter/filter-builder-core.d.ts +36 -0
- package/dist/src/components/filter/filter-builder.d.ts +23 -0
- package/dist/src/components/filter/filter-odata.d.ts +27 -0
- package/dist/src/components/filter/filter-operators.d.ts +13 -0
- package/dist/src/components/filter/filter-types.d.ts +253 -0
- package/dist/src/components/filter/index.d.ts +6 -0
- package/dist/src/components/filter/index.shadow.d.ts +7 -0
- package/dist/src/components/filter/mono-filter-builder.d.ts +21 -0
- package/dist/src/components/filter/mono-filter-builder.shadow.d.ts +17 -0
- package/dist/src/components/form/form-control-core.d.ts +37 -0
- package/dist/src/components/form/form-rules.d.ts +25 -0
- package/dist/src/components/form/form-types.d.ts +307 -0
- package/dist/src/components/form/index.d.ts +6 -0
- package/dist/src/components/form/mono-form-controller.d.ts +16 -0
- package/dist/src/components/input/index.d.ts +6 -0
- package/dist/src/components/input/index.shadow.d.ts +8 -0
- package/dist/src/components/input/input-core.d.ts +91 -0
- package/dist/src/components/input/input-format.d.ts +118 -0
- package/dist/src/components/input/input-types.d.ts +179 -0
- package/dist/src/components/input/input-utils.d.ts +10 -0
- package/dist/src/components/input/mono-input.d.ts +46 -0
- package/dist/src/components/input/mono-input.shadow.d.ts +34 -0
- package/dist/src/components/menu/index.d.ts +6 -0
- package/dist/src/components/menu/index.shadow.d.ts +7 -0
- package/dist/src/components/menu/menu-core.d.ts +65 -0
- package/dist/src/components/menu/menu-render.d.ts +55 -0
- package/dist/src/components/menu/menu-types.d.ts +195 -0
- package/dist/src/components/menu/menu-utils.d.ts +53 -0
- package/dist/src/components/menu/mono-menu-list.d.ts +118 -0
- package/dist/src/components/menu/mono-menu.d.ts +39 -0
- package/dist/src/components/menu/mono-menu.shadow.d.ts +40 -0
- package/dist/src/components/modal/index.d.ts +4 -0
- package/dist/src/components/modal/index.shadow.d.ts +5 -0
- package/dist/src/components/modal/modal-core.d.ts +110 -0
- package/dist/src/components/modal/modal-types.d.ts +304 -0
- package/dist/src/components/modal/mono-modal-controller.d.ts +4 -0
- package/dist/src/components/modal/mono-modal.d.ts +45 -0
- package/dist/src/components/modal/mono-modal.shadow.d.ts +50 -0
- package/dist/src/components/nav/index.d.ts +4 -0
- package/dist/src/components/nav/index.shadow.d.ts +6 -0
- package/dist/src/components/nav/mono-nav.d.ts +41 -0
- package/dist/src/components/nav/mono-nav.shadow.d.ts +21 -0
- package/dist/src/components/nav/nav-core.d.ts +34 -0
- package/dist/src/components/nav/nav-types.d.ts +48 -0
- package/dist/src/components/nav/nav-utils.d.ts +12 -0
- package/dist/src/components/radio/index.d.ts +4 -0
- package/dist/src/components/radio/index.shadow.d.ts +5 -0
- package/dist/src/components/radio/mono-radio.d.ts +31 -0
- package/dist/src/components/radio/mono-radio.shadow.d.ts +35 -0
- package/dist/src/components/radio/radio-core.d.ts +45 -0
- package/dist/src/components/radio/radio-types.d.ts +58 -0
- package/dist/src/components/radio/radio-utils.d.ts +12 -0
- package/dist/src/components/rich-text-editor/index.d.ts +5 -0
- package/dist/src/components/rich-text-editor/index.shadow.d.ts +6 -0
- package/dist/src/components/rich-text-editor/mono-rich-text-editor.d.ts +31 -0
- package/dist/src/components/rich-text-editor/mono-rich-text-editor.shadow.d.ts +34 -0
- package/dist/src/components/rich-text-editor/rich-text-editor-core.d.ts +100 -0
- package/dist/src/components/rich-text-editor/rich-text-editor-loader.d.ts +17 -0
- package/dist/src/components/rich-text-editor/rich-text-editor-toolbar.d.ts +65 -0
- package/dist/src/components/rich-text-editor/rich-text-editor-types.d.ts +231 -0
- package/dist/src/components/select/index.d.ts +4 -0
- package/dist/src/components/select/index.shadow.d.ts +5 -0
- package/dist/src/components/select/mono-select.d.ts +69 -0
- package/dist/src/components/select/mono-select.shadow.d.ts +48 -0
- package/dist/src/components/select/select-core.d.ts +98 -0
- package/dist/src/components/select/select-types.d.ts +258 -0
- package/dist/src/components/select/select-utils.d.ts +7 -0
- package/dist/src/components/sidebar/index.d.ts +4 -0
- package/dist/src/components/sidebar/index.shadow.d.ts +6 -0
- package/dist/src/components/sidebar/mono-sidebar.d.ts +34 -0
- package/dist/src/components/sidebar/mono-sidebar.shadow.d.ts +27 -0
- package/dist/src/components/sidebar/sidebar-core.d.ts +51 -0
- package/dist/src/components/sidebar/sidebar-types.d.ts +119 -0
- package/dist/src/components/sidebar/sidebar-utils.d.ts +55 -0
- package/dist/src/components/switch/index.d.ts +4 -0
- package/dist/src/components/switch/index.shadow.d.ts +5 -0
- package/dist/src/components/switch/mono-switch.d.ts +31 -0
- package/dist/src/components/switch/mono-switch.shadow.d.ts +36 -0
- package/dist/src/components/switch/switch-core.d.ts +49 -0
- package/dist/src/components/switch/switch-types.d.ts +64 -0
- package/dist/src/components/switch/switch-utils.d.ts +12 -0
- package/dist/src/components/table/array-source.d.ts +44 -0
- package/dist/src/components/table/date-filter-tree.d.ts +93 -0
- package/dist/src/components/table/grouping.d.ts +55 -0
- package/dist/src/components/table/index.d.ts +33 -0
- package/dist/src/components/table/index.shadow.d.ts +47 -0
- package/dist/src/components/table/mono-data-grid.d.ts +1756 -0
- package/dist/src/components/table/mono-table-checkbox-core.d.ts +76 -0
- package/dist/src/components/table/mono-table-checkbox.d.ts +34 -0
- package/dist/src/components/table/mono-table-checkbox.shadow.d.ts +26 -0
- package/dist/src/components/table/mono-table-detail-core.d.ts +87 -0
- package/dist/src/components/table/mono-table-detail.d.ts +32 -0
- package/dist/src/components/table/mono-table-detail.shadow.d.ts +31 -0
- package/dist/src/components/table/mono-table-empty-core.d.ts +60 -0
- package/dist/src/components/table/mono-table-empty.d.ts +35 -0
- package/dist/src/components/table/mono-table-empty.shadow.d.ts +40 -0
- package/dist/src/components/table/mono-table-error-core.d.ts +84 -0
- package/dist/src/components/table/mono-table-error.d.ts +28 -0
- package/dist/src/components/table/mono-table-error.shadow.d.ts +21 -0
- package/dist/src/components/table/mono-table-info-core.d.ts +13 -0
- package/dist/src/components/table/mono-table-info.d.ts +19 -0
- package/dist/src/components/table/mono-table-info.shadow.d.ts +14 -0
- package/dist/src/components/table/mono-table-loading-core.d.ts +41 -0
- package/dist/src/components/table/mono-table-loading.d.ts +50 -0
- package/dist/src/components/table/mono-table-loading.shadow.d.ts +14 -0
- package/dist/src/components/table/mono-table-page-size-core.d.ts +14 -0
- package/dist/src/components/table/mono-table-page-size.d.ts +16 -0
- package/dist/src/components/table/mono-table-page-size.shadow.d.ts +11 -0
- package/dist/src/components/table/mono-table-paging-core.d.ts +22 -0
- package/dist/src/components/table/mono-table-paging-group-core.d.ts +18 -0
- package/dist/src/components/table/mono-table-paging-group.d.ts +20 -0
- package/dist/src/components/table/mono-table-paging-group.shadow.d.ts +13 -0
- package/dist/src/components/table/mono-table-paging.d.ts +16 -0
- package/dist/src/components/table/mono-table-paging.shadow.d.ts +11 -0
- package/dist/src/components/table/mono-table-search-core.d.ts +74 -0
- package/dist/src/components/table/mono-table-search.d.ts +34 -0
- package/dist/src/components/table/mono-table-search.shadow.d.ts +21 -0
- package/dist/src/components/table/mono-table-sort-core.d.ts +35 -0
- package/dist/src/components/table/mono-table-sort.d.ts +38 -0
- package/dist/src/components/table/mono-table-sort.shadow.d.ts +20 -0
- package/dist/src/components/table/mono-table-summary-core.d.ts +26 -0
- package/dist/src/components/table/mono-table-summary.d.ts +24 -0
- package/dist/src/components/table/mono-table-summary.shadow.d.ts +14 -0
- package/dist/src/components/table/mono-table-th-core.d.ts +56 -0
- package/dist/src/components/table/mono-table-th.d.ts +41 -0
- package/dist/src/components/table/mono-table-th.shadow.d.ts +19 -0
- package/dist/src/components/table/store-group-source.d.ts +24 -0
- package/dist/src/components/table/table-controller-core.d.ts +40 -0
- package/dist/src/components/table/table-filter-icons.d.ts +3 -0
- package/dist/src/components/table/table-menu-core.d.ts +65 -0
- package/dist/src/components/table/table-overlay.d.ts +165 -0
- package/dist/src/components/table/table-sort-icons.d.ts +4 -0
- package/dist/src/components/table/table-sort-utils.d.ts +20 -0
- package/dist/src/components/table/table-types.d.ts +475 -0
- package/dist/src/components/tabs/index.d.ts +3 -0
- package/dist/src/components/tabs/index.shadow.d.ts +4 -0
- package/dist/src/components/tabs/mono-tabs.d.ts +33 -0
- package/dist/src/components/tabs/mono-tabs.shadow.d.ts +37 -0
- package/dist/src/components/tabs/tabs-core.d.ts +57 -0
- package/dist/src/components/tabs/tabs-types.d.ts +65 -0
- package/dist/src/components/tag-input/index.d.ts +4 -0
- package/dist/src/components/tag-input/index.shadow.d.ts +5 -0
- package/dist/src/components/tag-input/mono-tag-input.d.ts +66 -0
- package/dist/src/components/tag-input/mono-tag-input.shadow.d.ts +40 -0
- package/dist/src/components/tag-input/tag-input-core.d.ts +108 -0
- package/dist/src/components/tag-input/tag-input-types.d.ts +394 -0
- package/dist/src/components/tag-input/tag-input-utils.d.ts +8 -0
- package/dist/src/components/textarea/index.d.ts +4 -0
- package/dist/src/components/textarea/index.shadow.d.ts +5 -0
- package/dist/src/components/textarea/mono-textarea.d.ts +29 -0
- package/dist/src/components/textarea/mono-textarea.shadow.d.ts +31 -0
- package/dist/src/components/textarea/textarea-core.d.ts +60 -0
- package/dist/src/components/textarea/textarea-types.d.ts +131 -0
- package/dist/src/components/textarea/textarea-utils.d.ts +7 -0
- package/dist/src/components/tooltip/control-tooltip.d.ts +36 -0
- package/dist/src/components/tooltip/index.d.ts +6 -0
- package/dist/src/components/tooltip/tooltip-config.d.ts +27 -0
- package/dist/src/components/tooltip/tooltip-declarative.d.ts +41 -0
- package/dist/src/components/tooltip/tooltip-loader.d.ts +1 -0
- package/dist/src/components/tooltip/tooltip-types.d.ts +110 -0
- package/dist/src/composables/breakpoints.d.ts +59 -0
- package/dist/src/composables/chip-limits.d.ts +48 -0
- package/dist/src/composables/chip-strip.d.ts +93 -0
- package/dist/src/composables/color.d.ts +103 -0
- package/dist/src/composables/css-class.d.ts +27 -0
- package/dist/src/composables/css-size.d.ts +40 -0
- package/dist/src/composables/data-source-controller.d.ts +84 -0
- package/dist/src/composables/element-props.d.ts +46 -0
- package/dist/src/composables/field-icons.d.ts +7 -0
- package/dist/src/composables/hybird-prop.d.ts +79 -0
- package/dist/src/composables/hydration-flush.d.ts +34 -0
- package/dist/src/composables/icon.d.ts +17 -0
- package/dist/src/composables/layout-var.d.ts +34 -0
- package/dist/src/composables/light-slots.d.ts +133 -0
- package/dist/src/composables/mdi-glyphs.d.ts +4 -0
- package/dist/src/composables/mono-element.d.ts +9 -0
- package/dist/src/composables/mono-event.d.ts +55 -0
- package/dist/src/composables/mono-pending.d.ts +8 -0
- package/dist/src/composables/mono-skeleton.d.ts +193 -0
- package/dist/src/composables/mono-ui.d.ts +58 -0
- package/dist/src/composables/notifier.d.ts +46 -0
- package/dist/src/composables/popup-portal.d.ts +226 -0
- package/dist/src/composables/popup-stack.d.ts +70 -0
- package/dist/src/composables/rate-limit.d.ts +108 -0
- package/dist/src/composables/reactive.d.ts +53 -0
- package/dist/src/composables/shadow-css.d.ts +42 -0
- package/dist/src/composables/visibility.d.ts +36 -0
- package/dist/src/data/theme/index.d.ts +30 -0
- package/dist/src/data/theme/presets.d.ts +94 -0
- package/dist/src/entries/index.d.ts +2 -0
- package/dist/src/entries/index.node.d.ts +42 -0
- package/dist/src/entries/search.d.ts +3 -0
- package/dist/src/export/detail.d.ts +29 -0
- package/dist/src/export/download.d.ts +9 -0
- package/dist/src/export/excel/index.d.ts +27 -0
- package/dist/src/export/excel/nodes.d.ts +123 -0
- package/dist/src/export/expression.d.ts +36 -0
- package/dist/src/export/helpers.d.ts +6 -0
- package/dist/src/export/index.d.ts +13 -0
- package/dist/src/export/markdown.d.ts +52 -0
- package/dist/src/export/resolve-data.d.ts +31 -0
- package/dist/src/export/sentinel.d.ts +97 -0
- package/dist/src/export/sheet-name.d.ts +45 -0
- package/dist/src/export/styles.d.ts +33 -0
- package/dist/src/export/template.d.ts +10 -0
- package/dist/src/export/types.d.ts +259 -0
- package/dist/src/import/coerce.d.ts +38 -0
- package/dist/src/import/index.d.ts +16 -0
- package/dist/src/import/match.d.ts +54 -0
- package/dist/src/import/parse.d.ts +15 -0
- package/dist/src/import/types.d.ts +153 -0
- package/dist/src/nuxt/index.d.ts +94 -0
- package/dist/src/search/data-search.d.ts +207 -0
- package/dist/src/search/field-path.d.ts +107 -0
- package/dist/src/search/filter-eval.d.ts +30 -0
- package/dist/src/search/index.d.ts +22 -0
- package/dist/src/search/odata-search.d.ts +18 -0
- package/dist/src/search/search-expr.d.ts +160 -0
- package/dist/src/utils/data-source-apply.d.ts +97 -0
- package/dist/src/utils/data-source-options.d.ts +116 -0
- package/dist/src/utils/data-source-read.d.ts +85 -0
- package/dist/src/utils/data-source-summary.d.ts +55 -0
- package/dist/src/utils/normalize-error.d.ts +60 -0
- package/dist/src/vite/index.d.ts +48 -0
- package/dist/src/vite/mono-client-only.d.ts +35 -0
- package/dist/src/vite/mono-ssr-stub.d.ts +20 -0
- package/dist/src/vite/shadow-manifest.d.ts +8 -0
- package/dist/styles-BIJ31TM4.js +20146 -0
- package/dist/tooltip-CysgRgBi.js +760 -0
- package/dist/tooltip.d.ts +1 -0
- package/dist/tooltip.js +2 -0
- package/dist/ui/accordion.d.ts +1 -0
- package/dist/ui/accordion.js +466 -0
- package/dist/ui/alert.d.ts +1 -0
- package/dist/ui/alert.js +221 -0
- package/dist/ui/breadcrumb.d.ts +1 -0
- package/dist/ui/breadcrumb.js +902 -0
- package/dist/ui/button-dropdown.d.ts +1 -0
- package/dist/ui/button-dropdown.js +679 -0
- package/dist/ui/button.d.ts +1 -0
- package/dist/ui/button.js +63 -0
- package/dist/ui/card.d.ts +1 -0
- package/dist/ui/card.js +511 -0
- package/dist/ui/chart.d.ts +1 -0
- package/dist/ui/chart.js +808 -0
- package/dist/ui/checkbox.d.ts +1 -0
- package/dist/ui/checkbox.js +413 -0
- package/dist/ui/chip.d.ts +1 -0
- package/dist/ui/chip.js +558 -0
- package/dist/ui/date.d.ts +1 -0
- package/dist/ui/date.js +686 -0
- package/dist/ui/drawer.d.ts +1 -0
- package/dist/ui/drawer.js +901 -0
- package/dist/ui/dropdown-table.d.ts +1 -0
- package/dist/ui/dropdown-table.js +1291 -0
- package/dist/ui/dropdown.d.ts +1 -0
- package/dist/ui/dropdown.js +586 -0
- package/dist/ui/file-upload.d.ts +1 -0
- package/dist/ui/file-upload.js +688 -0
- package/dist/ui/filter.d.ts +1 -0
- package/dist/ui/filter.js +400 -0
- package/dist/ui/font/files/geist-47c091c9.woff2 +0 -0
- package/dist/ui/font/files/geist-8dd77544.woff2 +0 -0
- package/dist/ui/font/files/geist-b9248b1e.woff2 +0 -0
- package/dist/ui/font/files/geist-d40d74b4.woff2 +0 -0
- package/dist/ui/font/files/geist-f493429a.woff2 +0 -0
- package/dist/ui/font/files/geistmono-03737868.woff2 +0 -0
- package/dist/ui/font/files/geistmono-421a7e38.woff2 +0 -0
- package/dist/ui/font/files/geistmono-48ef518d.woff2 +0 -0
- package/dist/ui/font/files/geistmono-5df35d39.woff2 +0 -0
- package/dist/ui/font/files/geistmono-7de289a4.woff2 +0 -0
- package/dist/ui/font/files/geistmono-e976128f.woff2 +0 -0
- package/dist/ui/font/files/inter-05cf802c.woff2 +0 -0
- package/dist/ui/font/files/inter-2b2f25a4.woff2 +0 -0
- package/dist/ui/font/files/inter-467acc7a.woff2 +0 -0
- package/dist/ui/font/files/inter-6e85163c.woff2 +0 -0
- package/dist/ui/font/files/inter-7048add3.woff2 +0 -0
- package/dist/ui/font/files/inter-9be0371e.woff2 +0 -0
- package/dist/ui/font/files/inter-a28b7e31.woff2 +0 -0
- package/dist/ui/font/files/poppins-054df55a.woff2 +0 -0
- package/dist/ui/font/files/poppins-0ee5dc9a.woff2 +0 -0
- package/dist/ui/font/files/poppins-0f44cb18.woff2 +0 -0
- package/dist/ui/font/files/poppins-0ff0d30c.woff2 +0 -0
- package/dist/ui/font/files/poppins-13045147.woff2 +0 -0
- package/dist/ui/font/files/poppins-1db57cd9.woff2 +0 -0
- package/dist/ui/font/files/poppins-2cf2a902.woff2 +0 -0
- package/dist/ui/font/files/poppins-39e7f079.woff2 +0 -0
- package/dist/ui/font/files/poppins-9607042d.woff2 +0 -0
- package/dist/ui/font/files/poppins-9a88fc1f.woff2 +0 -0
- package/dist/ui/font/files/poppins-b8f4f752.woff2 +0 -0
- package/dist/ui/font/files/poppins-f5e57db4.woff2 +0 -0
- package/dist/ui/font/geist-mono.css +104 -0
- package/dist/ui/font/geist.css +168 -0
- package/dist/ui/font/inter.css +232 -0
- package/dist/ui/font/poppins.css +104 -0
- package/dist/ui/form.d.ts +1 -0
- package/dist/ui/form.js +3 -0
- package/dist/ui/index.css +21826 -0
- package/dist/ui/input.d.ts +1 -0
- package/dist/ui/input.js +1176 -0
- package/dist/ui/menu.d.ts +1 -0
- package/dist/ui/menu.js +1289 -0
- package/dist/ui/modal.d.ts +1 -0
- package/dist/ui/modal.js +995 -0
- package/dist/ui/nav.d.ts +1 -0
- package/dist/ui/nav.js +295 -0
- package/dist/ui/radio.d.ts +1 -0
- package/dist/ui/radio.js +379 -0
- package/dist/ui/rich-text-editor.d.ts +1 -0
- package/dist/ui/rich-text-editor.js +1338 -0
- package/dist/ui/select.d.ts +1 -0
- package/dist/ui/select.js +2066 -0
- package/dist/ui/shadow/accordion.js +442 -0
- package/dist/ui/shadow/alert.js +218 -0
- package/dist/ui/shadow/breadcrumb.js +919 -0
- package/dist/ui/shadow/button-dropdown.js +696 -0
- package/dist/ui/shadow/button.js +63 -0
- package/dist/ui/shadow/card.js +524 -0
- package/dist/ui/shadow/chart.js +1569 -0
- package/dist/ui/shadow/checkbox.js +457 -0
- package/dist/ui/shadow/chip.js +559 -0
- package/dist/ui/shadow/date.js +712 -0
- package/dist/ui/shadow/drawer.js +869 -0
- package/dist/ui/shadow/dropdown-table.js +1620 -0
- package/dist/ui/shadow/dropdown.js +547 -0
- package/dist/ui/shadow/file-upload.js +731 -0
- package/dist/ui/shadow/filter.js +402 -0
- package/dist/ui/shadow/input.js +1150 -0
- package/dist/ui/shadow/menu.js +899 -0
- package/dist/ui/shadow/modal.js +1193 -0
- package/dist/ui/shadow/nav.js +240 -0
- package/dist/ui/shadow/radio.js +408 -0
- package/dist/ui/shadow/rich-text-editor.js +1344 -0
- package/dist/ui/shadow/select.js +2033 -0
- package/dist/ui/shadow/sidebar.js +606 -0
- package/dist/ui/shadow/switch.js +428 -0
- package/dist/ui/shadow/table.js +4755 -0
- package/dist/ui/shadow/tabs.js +372 -0
- package/dist/ui/shadow/tag-input.js +2846 -0
- package/dist/ui/shadow/textarea.js +816 -0
- package/dist/ui/sidebar.d.ts +1 -0
- package/dist/ui/sidebar.js +659 -0
- package/dist/ui/switch.d.ts +1 -0
- package/dist/ui/switch.js +398 -0
- package/dist/ui/table.d.ts +1 -0
- package/dist/ui/table.js +4654 -0
- package/dist/ui/tabs.d.ts +1 -0
- package/dist/ui/tabs.js +379 -0
- package/dist/ui/tag-input.d.ts +1 -0
- package/dist/ui/tag-input.js +2819 -0
- package/dist/ui/textarea.d.ts +1 -0
- package/dist/ui/textarea.js +819 -0
- package/dist/ui/theme/legacy.css +293 -0
- package/dist/ui/theme/luma.css +743 -0
- package/dist/ui/theme/lyra.css +754 -0
- package/dist/ui/theme/maia.css +673 -0
- package/dist/ui/theme/mira.css +802 -0
- package/dist/ui/theme/nova.css +662 -0
- package/dist/ui/theme/one.css +699 -0
- package/dist/ui/theme/rhea.css +742 -0
- package/dist/ui/theme/sera.css +845 -0
- package/dist/ui/theme/tokens.css +261 -0
- package/dist/ui/theme/vega.css +467 -0
- package/dist/vite-C5iUK7so.js +329 -0
- package/dist/vite.d.ts +1 -0
- package/dist/vite.js +2 -0
- package/dist/vue.d.ts +282 -0
- package/package.json +411 -3
|
@@ -0,0 +1,608 @@
|
|
|
1
|
+
import { c as mergeStyles, l as toExcelStyle, s as combineStyles, t as flattenInline } from "./markdown-DfqrfOJN.js";
|
|
2
|
+
//#region src/export/sheet-name.ts
|
|
3
|
+
/**
|
|
4
|
+
* Worksheet names, which Excel is fussier about than anything else in a
|
|
5
|
+
* workbook — and every rule below is one it enforces by refusing to open the
|
|
6
|
+
* file, not by degrading.
|
|
7
|
+
*
|
|
8
|
+
* · at most 31 characters
|
|
9
|
+
* · none of `* ? : \ / [ ]`
|
|
10
|
+
* · cannot be empty
|
|
11
|
+
* · cannot start or end with an apostrophe
|
|
12
|
+
* · unique within the workbook, case-insensitively
|
|
13
|
+
*
|
|
14
|
+
* A name derived from user data — a document number like `TU/2026/001` — breaks
|
|
15
|
+
* three of those at once, so nothing may reach `addWorksheet` unsanitised.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* The characters Excel refuses outright.
|
|
19
|
+
*
|
|
20
|
+
* Note what is NOT in here: the space and the hyphen are both perfectly legal,
|
|
21
|
+
* and stripping them would quietly rewrite a document number like `TP-001` into
|
|
22
|
+
* `TP 001`, so the sheet name would no longer match what the master sheet shows.
|
|
23
|
+
*/
|
|
24
|
+
var FORBIDDEN = /[*?:\\/[\]]/g;
|
|
25
|
+
/**
|
|
26
|
+
* One name, made legal. Does NOT make it unique — that is
|
|
27
|
+
* {@link SheetNames.take}'s job, because uniqueness needs the whole workbook.
|
|
28
|
+
*/
|
|
29
|
+
function sanitizeSheetName(raw, fallback = "Sheet") {
|
|
30
|
+
return String(raw ?? "").replace(FORBIDDEN, " ").replace(/\s+/g, " ").trim().replace(/^'+|'+$/g, "").trim().slice(0, 31).replace(/'+$/, "").trim() || fallback;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Escape a name for use inside a reference like `#'Sheet'!A1`.
|
|
34
|
+
*
|
|
35
|
+
* The name is single-quoted there, so a literal apostrophe has to be doubled.
|
|
36
|
+
* {@link sanitizeSheetName} only strips apostrophes at the ends — one in the
|
|
37
|
+
* middle (`Bob's Data`) is legal and has to survive.
|
|
38
|
+
*/
|
|
39
|
+
function escapeSheetRef(name) {
|
|
40
|
+
return name.replace(/'/g, "''");
|
|
41
|
+
}
|
|
42
|
+
/** A reference to `A1` of `name`, ready to use as a hyperlink target. */
|
|
43
|
+
function sheetRef(name, cell = "A1") {
|
|
44
|
+
return `#'${escapeSheetRef(name)}'!${cell}`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The workbook's name registry.
|
|
48
|
+
*
|
|
49
|
+
* Deliberately the ONLY place a name is claimed. The implementation this feature
|
|
50
|
+
* is modelled on reserves a name up front and then dedupes a second time inside
|
|
51
|
+
* its writer against the same set — so the second call always collides with the
|
|
52
|
+
* reservation it just made, and every sheet in that workbook ends up suffixed
|
|
53
|
+
* ` (2)`. One registry, one `take()`, no second opinion.
|
|
54
|
+
*/
|
|
55
|
+
var SheetNames = class {
|
|
56
|
+
constructor(existing = []) {
|
|
57
|
+
this.used = /* @__PURE__ */ new Set();
|
|
58
|
+
for (const name of existing) this.used.add(name.toLowerCase());
|
|
59
|
+
}
|
|
60
|
+
/** Claim a legal, unique name derived from `raw`. */
|
|
61
|
+
take(raw, fallback = "Sheet") {
|
|
62
|
+
const base = sanitizeSheetName(raw, fallback);
|
|
63
|
+
if (!this.used.has(base.toLowerCase())) {
|
|
64
|
+
this.used.add(base.toLowerCase());
|
|
65
|
+
return base;
|
|
66
|
+
}
|
|
67
|
+
for (let n = 2; n < 1e4; n += 1) {
|
|
68
|
+
const suffix = ` (${n})`;
|
|
69
|
+
const candidate = `${base.slice(0, 31 - suffix.length).trim()}${suffix}`;
|
|
70
|
+
if (!this.used.has(candidate.toLowerCase())) {
|
|
71
|
+
this.used.add(candidate.toLowerCase());
|
|
72
|
+
return candidate;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const last = `${base.slice(0, 20)} ${Date.now().toString(36)}`.slice(0, 31);
|
|
76
|
+
this.used.add(last.toLowerCase());
|
|
77
|
+
return last;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
//#endregion
|
|
81
|
+
//#region src/export/excel/nodes.ts
|
|
82
|
+
/** An ISO date string (`2026-07-21`, optionally with a time part). */
|
|
83
|
+
var ISO_DATE_RE = /^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:?\d{2})?)?$/;
|
|
84
|
+
/** A plain number, allowing a leading sign and a decimal part. */
|
|
85
|
+
var NUMERIC_RE = /^[+-]?\d+(?:\.\d+)?$/;
|
|
86
|
+
/**
|
|
87
|
+
* Walks an mdast tree and plans a worksheet. Planning (rather than writing
|
|
88
|
+
* ExcelJS objects directly) keeps this file free of any ExcelJS import, so the
|
|
89
|
+
* mapping stays testable and a future renderer can reuse the same walk.
|
|
90
|
+
*/
|
|
91
|
+
var WorksheetWriter = class {
|
|
92
|
+
constructor(ctx) {
|
|
93
|
+
this.ctx = ctx;
|
|
94
|
+
this.plan = {
|
|
95
|
+
rows: [],
|
|
96
|
+
images: [],
|
|
97
|
+
spans: [],
|
|
98
|
+
merges: [],
|
|
99
|
+
width: 0,
|
|
100
|
+
widths: []
|
|
101
|
+
};
|
|
102
|
+
this.tableColumns = [];
|
|
103
|
+
this.tableFirstRow = 0;
|
|
104
|
+
this.tableLastRow = 0;
|
|
105
|
+
}
|
|
106
|
+
/** Resolve a named style, or an empty style when the name is unknown. */
|
|
107
|
+
named(name) {
|
|
108
|
+
return name && this.ctx.styles[name] || {};
|
|
109
|
+
}
|
|
110
|
+
write(root) {
|
|
111
|
+
this.writeBlocks(root.children);
|
|
112
|
+
this.plan.width = this.plan.rows.reduce((max, row) => Math.max(max, row.cells.length), 0);
|
|
113
|
+
return this.plan;
|
|
114
|
+
}
|
|
115
|
+
writeBlocks(nodes, indent = 0) {
|
|
116
|
+
for (const node of nodes) this.writeBlock(node, indent);
|
|
117
|
+
}
|
|
118
|
+
writeBlock(node, indent) {
|
|
119
|
+
switch (node.type) {
|
|
120
|
+
case "heading": {
|
|
121
|
+
const inline = flattenInline(node.children);
|
|
122
|
+
const style = combineStyles(this.named(`h${node.depth}`), this.styleFrom(inline.directives));
|
|
123
|
+
this.appendSpanningRow(inline, style);
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case "paragraph": {
|
|
127
|
+
const inline = flattenInline(node.children);
|
|
128
|
+
const style = combineStyles(this.styleFrom(inline.directives), { indent });
|
|
129
|
+
this.appendSpanningRow(inline, style);
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
case "table":
|
|
133
|
+
this.writeTable(node.children);
|
|
134
|
+
break;
|
|
135
|
+
case "list":
|
|
136
|
+
for (const item of node.children) this.writeBlocks(item.children, indent + 1);
|
|
137
|
+
break;
|
|
138
|
+
case "blockquote":
|
|
139
|
+
this.writeBlockquote(node.children, indent);
|
|
140
|
+
break;
|
|
141
|
+
case "code":
|
|
142
|
+
for (const line of node.value.split("\n")) this.pushRow([{
|
|
143
|
+
value: line,
|
|
144
|
+
style: {},
|
|
145
|
+
width: line.length
|
|
146
|
+
}], void 0, true);
|
|
147
|
+
break;
|
|
148
|
+
case "thematicBreak":
|
|
149
|
+
this.pushRow([{
|
|
150
|
+
value: null,
|
|
151
|
+
style: {},
|
|
152
|
+
width: 0
|
|
153
|
+
}], void 0, true);
|
|
154
|
+
break;
|
|
155
|
+
default: if ("children" in node) this.writeBlocks(node.children, indent);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
writeBlockquote(children, indent) {
|
|
159
|
+
const before = this.plan.rows.length;
|
|
160
|
+
this.writeBlocks(children, indent);
|
|
161
|
+
const note = toExcelStyle(this.named("note"));
|
|
162
|
+
for (let i = before; i < this.plan.rows.length; i += 1) for (const cell of this.plan.rows[i].cells) cell.style = mergeExcelStyle(note, cell.style);
|
|
163
|
+
}
|
|
164
|
+
/** A one-cell row that will later be merged across the sheet's full width. */
|
|
165
|
+
appendSpanningRow(inline, style) {
|
|
166
|
+
const cell = this.toCell(inline, style);
|
|
167
|
+
if (cell.value === null && !cell.formula && !inline.directives.length && !inline.images.length) return;
|
|
168
|
+
const rowIndex = this.pushRow([cell], style.height, true);
|
|
169
|
+
this.plan.spans.push({
|
|
170
|
+
row: rowIndex,
|
|
171
|
+
from: 1
|
|
172
|
+
});
|
|
173
|
+
this.placeImages(inline, rowIndex, 1);
|
|
174
|
+
this.applyMerge(inline.directives, rowIndex, 1);
|
|
175
|
+
}
|
|
176
|
+
writeTable(rows) {
|
|
177
|
+
if (!rows.length) return;
|
|
178
|
+
const [headerRow, ...bodyRows] = rows;
|
|
179
|
+
const headerInlines = headerRow.children.map((cell) => flattenInline(cell.children));
|
|
180
|
+
this.tableColumns = headerInlines.map((inline) => inline.text.trim());
|
|
181
|
+
const headerStyle = this.named("header");
|
|
182
|
+
const headerRowIndex = this.pushRow(headerInlines.map((inline) => this.toCell(inline, combineStyles(headerStyle, this.styleFrom(inline.directives)))), headerStyle.height);
|
|
183
|
+
headerInlines.forEach((inline, index) => {
|
|
184
|
+
this.placeImages(inline, headerRowIndex, index + 1);
|
|
185
|
+
this.applyMerge(inline.directives, headerRowIndex, index + 1);
|
|
186
|
+
});
|
|
187
|
+
this.tableFirstRow = this.plan.rows.length + 1;
|
|
188
|
+
this.tableLastRow = this.tableFirstRow + bodyRows.length - 1;
|
|
189
|
+
for (const bodyRow of bodyRows) {
|
|
190
|
+
const inlines = bodyRow.children.map((cell) => flattenInline(cell.children));
|
|
191
|
+
const rowDirectives = inlines.flatMap((inline) => inline.directives);
|
|
192
|
+
const rowStyle = this.rowStyleFrom(rowDirectives);
|
|
193
|
+
const cells = inlines.map((inline, index) => this.toCell(inline, combineStyles(rowStyle, this.columnStyle(index), this.styleFrom(inline.directives))));
|
|
194
|
+
const rowIndex = this.pushRow(cells, rowStyle.height);
|
|
195
|
+
inlines.forEach((inline, index) => {
|
|
196
|
+
this.placeImages(inline, rowIndex, index + 1);
|
|
197
|
+
this.applyMerge(inline.directives, rowIndex, index + 1);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
this.tableColumns = [];
|
|
201
|
+
}
|
|
202
|
+
/** Per-column `numFmt` override from `options.columns`. */
|
|
203
|
+
columnStyle(index) {
|
|
204
|
+
const numFmt = this.ctx.columns?.[index]?.numFmt;
|
|
205
|
+
return numFmt ? { numFmt } : {};
|
|
206
|
+
}
|
|
207
|
+
/** Collect `{{style}}` directives into one style object. */
|
|
208
|
+
styleFrom(directives) {
|
|
209
|
+
return combineStyles(...directives.filter((d) => d.k === "style").map((d) => this.named(d.v)));
|
|
210
|
+
}
|
|
211
|
+
/** Collect `{{rowStyle}}` directives into one style object. */
|
|
212
|
+
rowStyleFrom(directives) {
|
|
213
|
+
return combineStyles(...directives.filter((d) => d.k === "rowStyle").map((d) => this.named(d.v)));
|
|
214
|
+
}
|
|
215
|
+
/** Build one planned cell from flattened inline content plus its style. */
|
|
216
|
+
toCell(inline, style) {
|
|
217
|
+
const value = inline.directives.find((d) => d.k === "val");
|
|
218
|
+
const formula = inline.directives.find((d) => d.k === "formula");
|
|
219
|
+
const excelStyle = toExcelStyle(combineStyles({
|
|
220
|
+
...inline.bold ? { bold: true } : {},
|
|
221
|
+
...inline.italic ? { italic: true } : {}
|
|
222
|
+
}, style));
|
|
223
|
+
const width = inline.text.trim().length;
|
|
224
|
+
const link = inline.link ? { hyperlink: inline.link } : void 0;
|
|
225
|
+
if (formula) return {
|
|
226
|
+
value: null,
|
|
227
|
+
formula: this.resolveFormula(formula.v),
|
|
228
|
+
style: excelStyle,
|
|
229
|
+
numFmt: value?.f ?? style.numFmt,
|
|
230
|
+
width: Math.max(width, 10),
|
|
231
|
+
...link
|
|
232
|
+
};
|
|
233
|
+
const isLoneValue = !!value && (value.t == null || value.t.trim() === inline.text.trim());
|
|
234
|
+
if (value && isLoneValue) {
|
|
235
|
+
if (typeof value.n === "number") return {
|
|
236
|
+
value: value.n,
|
|
237
|
+
style: excelStyle,
|
|
238
|
+
numFmt: value.f,
|
|
239
|
+
width,
|
|
240
|
+
...link
|
|
241
|
+
};
|
|
242
|
+
if (value.d) {
|
|
243
|
+
const date = new Date(value.d);
|
|
244
|
+
if (!Number.isNaN(date.getTime())) return {
|
|
245
|
+
value: date,
|
|
246
|
+
style: excelStyle,
|
|
247
|
+
numFmt: value.f,
|
|
248
|
+
width,
|
|
249
|
+
...link
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return {
|
|
254
|
+
value: coerceValue(inline.text),
|
|
255
|
+
style: excelStyle,
|
|
256
|
+
width,
|
|
257
|
+
...link
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Substitute the placeholders a template couldn't resolve on its own:
|
|
262
|
+
* `{row}` (the row about to be written), `{prevRow}` (the one above it),
|
|
263
|
+
* `{firstRow}` / `{lastRow}` (the current table's body range) and
|
|
264
|
+
* `{col:Caption}` (that header's column letter).
|
|
265
|
+
*
|
|
266
|
+
* `{lastRow}` includes *every* body row — so a total row that lives inside
|
|
267
|
+
* the same Markdown table must sum `{firstRow}:{prevRow}` to avoid a circular
|
|
268
|
+
* reference to itself.
|
|
269
|
+
*/
|
|
270
|
+
resolveFormula(expr) {
|
|
271
|
+
const row = this.plan.rows.length + 1;
|
|
272
|
+
return expr.replace(/\{row\}/g, String(row)).replace(/\{prevRow\}/g, String(Math.max(1, row - 1))).replace(/\{firstRow\}/g, String(this.tableFirstRow || row)).replace(/\{lastRow\}/g, String(this.tableLastRow || row)).replace(/\{col:([^}]+)\}/g, (_match, caption) => {
|
|
273
|
+
const index = this.tableColumns.findIndex((c) => c.toLowerCase() === caption.trim().toLowerCase());
|
|
274
|
+
return index >= 0 ? columnLetter(index + 1) : caption;
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
placeImages(inline, row, col) {
|
|
278
|
+
const directives = inline.directives.filter((d) => d.k === "image");
|
|
279
|
+
for (const d of directives) this.plan.images.push({
|
|
280
|
+
src: d.v,
|
|
281
|
+
row,
|
|
282
|
+
col,
|
|
283
|
+
width: d.width ?? 120,
|
|
284
|
+
height: d.height ?? 40
|
|
285
|
+
});
|
|
286
|
+
for (const img of inline.images) this.plan.images.push({
|
|
287
|
+
src: img.url,
|
|
288
|
+
row,
|
|
289
|
+
col,
|
|
290
|
+
width: 120,
|
|
291
|
+
height: 40
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
applyMerge(directives, row, col) {
|
|
295
|
+
const merge = directives.find((d) => d.k === "merge");
|
|
296
|
+
if (!merge) return;
|
|
297
|
+
const colEnd = col + Math.max(1, merge.cols ?? 1) - 1;
|
|
298
|
+
const rowEnd = row + Math.max(1, merge.rows ?? 1) - 1;
|
|
299
|
+
if (colEnd === col && rowEnd === row) return;
|
|
300
|
+
this.plan.merges.push([
|
|
301
|
+
row,
|
|
302
|
+
col,
|
|
303
|
+
rowEnd,
|
|
304
|
+
colEnd
|
|
305
|
+
]);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Append a row and return its 1-based index. `spanning` rows (headings,
|
|
309
|
+
* paragraphs) are excluded from auto-fit: they get merged across the whole
|
|
310
|
+
* sheet, so letting a long title set column A's width would leave a 60-wide
|
|
311
|
+
* first column next to four narrow ones.
|
|
312
|
+
*/
|
|
313
|
+
pushRow(cells, height, spanning = false) {
|
|
314
|
+
this.plan.rows.push({
|
|
315
|
+
cells,
|
|
316
|
+
...height ? { height } : {}
|
|
317
|
+
});
|
|
318
|
+
if (!spanning) cells.forEach((cell, index) => {
|
|
319
|
+
this.plan.widths[index] = Math.max(this.plan.widths[index] ?? 0, cell.width);
|
|
320
|
+
});
|
|
321
|
+
return this.plan.rows.length;
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
/** Later style wins, but per sub-object so a font isn't wiped by a fill. */
|
|
325
|
+
function mergeExcelStyle(base, over) {
|
|
326
|
+
return {
|
|
327
|
+
...base,
|
|
328
|
+
...over,
|
|
329
|
+
font: {
|
|
330
|
+
...base.font,
|
|
331
|
+
...over.font
|
|
332
|
+
},
|
|
333
|
+
alignment: {
|
|
334
|
+
...base.alignment,
|
|
335
|
+
...over.alignment
|
|
336
|
+
},
|
|
337
|
+
border: {
|
|
338
|
+
...base.border,
|
|
339
|
+
...over.border
|
|
340
|
+
}
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Give a plain cell string its most useful type. Text that merely *looks*
|
|
345
|
+
* numeric (`"00123"`, `"1,234"`) is left alone — coercing it would silently
|
|
346
|
+
* mangle invoice numbers and phone numbers.
|
|
347
|
+
*/
|
|
348
|
+
function coerceValue(text) {
|
|
349
|
+
const trimmed = text.trim();
|
|
350
|
+
if (!trimmed) return null;
|
|
351
|
+
if (NUMERIC_RE.test(trimmed) && !/^0\d/.test(trimmed)) {
|
|
352
|
+
const n = Number(trimmed);
|
|
353
|
+
if (Number.isFinite(n)) return n;
|
|
354
|
+
}
|
|
355
|
+
if (ISO_DATE_RE.test(trimmed)) {
|
|
356
|
+
const date = new Date(trimmed);
|
|
357
|
+
if (!Number.isNaN(date.getTime())) return date;
|
|
358
|
+
}
|
|
359
|
+
return text;
|
|
360
|
+
}
|
|
361
|
+
/** 1-based column index → spreadsheet letter (1 → A, 27 → AA). */
|
|
362
|
+
function columnLetter(index) {
|
|
363
|
+
let n = index;
|
|
364
|
+
let out = "";
|
|
365
|
+
while (n > 0) {
|
|
366
|
+
const rem = (n - 1) % 26;
|
|
367
|
+
out = String.fromCharCode(65 + rem) + out;
|
|
368
|
+
n = Math.floor((n - 1) / 26);
|
|
369
|
+
}
|
|
370
|
+
return out;
|
|
371
|
+
}
|
|
372
|
+
/** Auto-fit bounds, in characters — narrow enough to read, wide enough to fit. */
|
|
373
|
+
var MIN_WIDTH = 8;
|
|
374
|
+
var MAX_WIDTH = 60;
|
|
375
|
+
/** Extra characters of padding added to the widest cell in a column. */
|
|
376
|
+
var WIDTH_PADDING = 2;
|
|
377
|
+
/** Load the optional `exceljs` peer, with an actionable error when it's absent. */
|
|
378
|
+
async function loadExcelJs() {
|
|
379
|
+
try {
|
|
380
|
+
const mod = await import("exceljs");
|
|
381
|
+
return mod?.default ?? mod;
|
|
382
|
+
} catch (err) {
|
|
383
|
+
throw new Error("[mono-export] xlsx output needs the optional peer dependency \"exceljs\". Install it in your app: pnpm add exceljs" + (err instanceof Error ? `\n (resolution failed: ${err.message})` : ""));
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* `{{image}}` accepts a data URL, a bare base64 string, or an `http(s)` URL.
|
|
388
|
+
* ExcelJS wants raw base64 plus an extension, so normalise here — and fetch a
|
|
389
|
+
* remote URL, which is the only genuinely async part of image handling.
|
|
390
|
+
*/
|
|
391
|
+
async function toImagePayload(src) {
|
|
392
|
+
const dataUrl = /^data:image\/(png|jpe?g|gif);base64,(.+)$/i.exec(src);
|
|
393
|
+
if (dataUrl) {
|
|
394
|
+
const ext = dataUrl[1].toLowerCase();
|
|
395
|
+
return {
|
|
396
|
+
base64: dataUrl[2],
|
|
397
|
+
extension: ext === "gif" ? "gif" : ext === "png" ? "png" : "jpeg"
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
if (/^https?:\/\//i.test(src)) try {
|
|
401
|
+
const res = await fetch(src);
|
|
402
|
+
if (!res.ok) return null;
|
|
403
|
+
const buffer = await res.arrayBuffer();
|
|
404
|
+
const type = res.headers.get("content-type") ?? "";
|
|
405
|
+
const extension = type.includes("gif") ? "gif" : type.includes("png") ? "png" : "jpeg";
|
|
406
|
+
return {
|
|
407
|
+
base64: arrayBufferToBase64(buffer),
|
|
408
|
+
extension
|
|
409
|
+
};
|
|
410
|
+
} catch {
|
|
411
|
+
return null;
|
|
412
|
+
}
|
|
413
|
+
return /^[A-Za-z0-9+/=\s]+$/.test(src) ? {
|
|
414
|
+
base64: src.trim(),
|
|
415
|
+
extension: "png"
|
|
416
|
+
} : null;
|
|
417
|
+
}
|
|
418
|
+
function arrayBufferToBase64(buffer) {
|
|
419
|
+
const bytes = new Uint8Array(buffer);
|
|
420
|
+
let binary = "";
|
|
421
|
+
for (let i = 0; i < bytes.length; i += 1) binary += String.fromCharCode(bytes[i]);
|
|
422
|
+
return typeof btoa === "function" ? btoa(binary) : globalThis.Buffer.from(bytes).toString("base64");
|
|
423
|
+
}
|
|
424
|
+
/** Build the ExcelJS workbook for a parsed report. */
|
|
425
|
+
async function renderExcel(ast, options = {}) {
|
|
426
|
+
const styles = mergeStyles(options.styles);
|
|
427
|
+
const plan = new WorksheetWriter({
|
|
428
|
+
styles,
|
|
429
|
+
columns: options.columns
|
|
430
|
+
}).write(ast);
|
|
431
|
+
const workbook = new (await (loadExcelJs())).Workbook();
|
|
432
|
+
workbook.created = /* @__PURE__ */ new Date();
|
|
433
|
+
const names = new SheetNames();
|
|
434
|
+
const masterName = names.take(options.sheetName ?? "Sheet1", "Sheet1");
|
|
435
|
+
const sheet = workbook.addWorksheet(masterName);
|
|
436
|
+
const pending = [];
|
|
437
|
+
writeRows(sheet, plan, pending);
|
|
438
|
+
applyMerges(sheet, plan);
|
|
439
|
+
applyWidths(sheet, plan, options.columns);
|
|
440
|
+
if (options.freezeRows) sheet.views = [{
|
|
441
|
+
state: "frozen",
|
|
442
|
+
ySplit: options.freezeRows
|
|
443
|
+
}];
|
|
444
|
+
await placeImages(workbook, sheet, plan);
|
|
445
|
+
const targets = /* @__PURE__ */ new Map();
|
|
446
|
+
for (const spec of options.sheets ?? []) {
|
|
447
|
+
const name = names.take(spec.name || spec.key, "Detail");
|
|
448
|
+
targets.set(spec.key, name);
|
|
449
|
+
const detailPlan = new WorksheetWriter({
|
|
450
|
+
styles,
|
|
451
|
+
columns: options.columns
|
|
452
|
+
}).write(spec.ast);
|
|
453
|
+
const detailSheet = workbook.addWorksheet(name);
|
|
454
|
+
if (options.back !== false) {
|
|
455
|
+
const back = detailSheet.addRow([]).getCell(1);
|
|
456
|
+
back.value = {
|
|
457
|
+
text: "← Back",
|
|
458
|
+
hyperlink: sheetRef(masterName)
|
|
459
|
+
};
|
|
460
|
+
back.font = {
|
|
461
|
+
...toExcelStyle(styles.link ?? {}).font ?? {},
|
|
462
|
+
bold: true
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
writeRows(detailSheet, detailPlan, pending);
|
|
466
|
+
applyMerges(detailSheet, detailPlan);
|
|
467
|
+
applyWidths(detailSheet, detailPlan, options.columns);
|
|
468
|
+
await placeImages(workbook, detailSheet, detailPlan);
|
|
469
|
+
}
|
|
470
|
+
applySheetLinks(pending, targets, styles);
|
|
471
|
+
return workbook;
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Rewrite every `sheet:<key>` target into a real in-workbook reference.
|
|
475
|
+
*
|
|
476
|
+
* Done last, and only here, because a template cannot know the name it is
|
|
477
|
+
* linking to: names are sanitised for Excel and de-duplicated against the
|
|
478
|
+
* workbook, both of which need every sheet to exist first.
|
|
479
|
+
*
|
|
480
|
+
* A key with no sheet — a document whose details failed to load, or had none —
|
|
481
|
+
* has its link REMOVED rather than left dangling. The prior art leaves those
|
|
482
|
+
* cells underlined and unclickable, which reads as a broken link.
|
|
483
|
+
*/
|
|
484
|
+
function applySheetLinks(pending, targets, styles) {
|
|
485
|
+
const linkFont = styles.link ? toExcelStyle(styles.link).font : void 0;
|
|
486
|
+
for (const link of pending) {
|
|
487
|
+
const name = targets.get(link.key);
|
|
488
|
+
if (!name) continue;
|
|
489
|
+
applyHyperlink(link.cell, sheetRef(name), link.value);
|
|
490
|
+
if (linkFont) link.cell.font = {
|
|
491
|
+
...link.cell.font ?? {},
|
|
492
|
+
...linkFont
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Attach a link to a cell without wrecking what is already in it.
|
|
498
|
+
*
|
|
499
|
+
* `cell.hyperlink` looks assignable — ExcelJS' own typings declare it on
|
|
500
|
+
* `Cell` — but at runtime it is a GETTER ONLY (`lib/doc/cell.js:201`), so
|
|
501
|
+
* assigning it throws. The only public route is the value form, and that form
|
|
502
|
+
* replaces the cell outright: a number linked this way stops being a number and
|
|
503
|
+
* no longer sums in Excel. `numFmt` does survive, since it lives on the style
|
|
504
|
+
* rather than the value, but the type does not.
|
|
505
|
+
*
|
|
506
|
+
* So each kind of cell takes the route that costs it nothing:
|
|
507
|
+
*
|
|
508
|
+
* · number — Excel's own HYPERLINK(), with the number as the displayed
|
|
509
|
+
* argument and cached as `result`. Stays numeric, still sums,
|
|
510
|
+
* still formats.
|
|
511
|
+
* · text — the plain value form, which for a string loses nothing at all.
|
|
512
|
+
* A Date takes this route too and becomes text; dates as link
|
|
513
|
+
* anchors are not a case this feature has, and the alternative
|
|
514
|
+
* is emitting a serial number nobody can read.
|
|
515
|
+
*
|
|
516
|
+
* Formula cells never reach here: a formula owns `cell.value`, so there is no
|
|
517
|
+
* way to add a link without destroying it, and silently swapping one for the
|
|
518
|
+
* other would be worse than not linking. Callers skip them.
|
|
519
|
+
*/
|
|
520
|
+
function applyHyperlink(cell, target, value) {
|
|
521
|
+
if (typeof value === "number") {
|
|
522
|
+
cell.value = {
|
|
523
|
+
formula: `HYPERLINK(${quoteFormulaArg(target)},${value})`,
|
|
524
|
+
result: value
|
|
525
|
+
};
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
cell.value = {
|
|
529
|
+
text: String(value ?? ""),
|
|
530
|
+
hyperlink: target
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
/** A string literal inside an Excel formula: wrapped, with `"` doubled. */
|
|
534
|
+
function quoteFormulaArg(value) {
|
|
535
|
+
return `"${value.replace(/"/g, "\"\"")}"`;
|
|
536
|
+
}
|
|
537
|
+
function writeRows(sheet, plan, pending) {
|
|
538
|
+
for (const plannedRow of plan.rows) {
|
|
539
|
+
const row = sheet.addRow([]);
|
|
540
|
+
plannedRow.cells.forEach((planned, index) => {
|
|
541
|
+
const cell = row.getCell(index + 1);
|
|
542
|
+
if (planned.formula) cell.value = { formula: planned.formula };
|
|
543
|
+
else if (planned.value !== null) cell.value = planned.value;
|
|
544
|
+
if (planned.style.font) cell.font = planned.style.font;
|
|
545
|
+
if (planned.style.fill) cell.fill = planned.style.fill;
|
|
546
|
+
if (planned.style.alignment) cell.alignment = planned.style.alignment;
|
|
547
|
+
if (planned.style.border) cell.border = planned.style.border;
|
|
548
|
+
const numFmt = planned.numFmt ?? planned.style.numFmt;
|
|
549
|
+
if (numFmt) cell.numFmt = numFmt;
|
|
550
|
+
if (planned.hyperlink && !planned.formula) if (pending && planned.hyperlink.startsWith("sheet:")) pending.push({
|
|
551
|
+
cell,
|
|
552
|
+
key: planned.hyperlink.slice(6),
|
|
553
|
+
value: planned.value
|
|
554
|
+
});
|
|
555
|
+
else applyHyperlink(cell, planned.hyperlink, planned.value);
|
|
556
|
+
});
|
|
557
|
+
if (plannedRow.height) row.height = plannedRow.height;
|
|
558
|
+
row.commit?.();
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
function applyMerges(sheet, plan) {
|
|
562
|
+
for (const span of plan.spans) if (plan.width > span.from) safeMerge(sheet, span.row, span.from, span.row, plan.width);
|
|
563
|
+
for (const [row, col, rowEnd, colEnd] of plan.merges) safeMerge(sheet, row, col, rowEnd, colEnd);
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* ExcelJS throws when two merges overlap. A template that merges a cell inside
|
|
567
|
+
* a heading row is a mistake, not a reason to lose the whole report — so log
|
|
568
|
+
* and keep going.
|
|
569
|
+
*/
|
|
570
|
+
function safeMerge(sheet, top, left, bottom, right) {
|
|
571
|
+
try {
|
|
572
|
+
sheet.mergeCells(top, left, bottom, right);
|
|
573
|
+
} catch {
|
|
574
|
+
console.warn(`[mono-export] skipped overlapping merge ${columnLetter(left)}${top}:${columnLetter(right)}${bottom}`);
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
function applyWidths(sheet, plan, columns) {
|
|
578
|
+
for (let i = 0; i < plan.width; i += 1) {
|
|
579
|
+
const explicit = columns?.[i]?.width;
|
|
580
|
+
const measured = (plan.widths[i] ?? 0) + WIDTH_PADDING;
|
|
581
|
+
sheet.getColumn(i + 1).width = explicit ?? Math.min(MAX_WIDTH, Math.max(MIN_WIDTH, measured));
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
async function placeImages(workbook, sheet, plan) {
|
|
585
|
+
for (const pending of plan.images) {
|
|
586
|
+
const payload = await toImagePayload(pending.src);
|
|
587
|
+
if (!payload) {
|
|
588
|
+
console.warn(`[mono-export] could not load image: ${pending.src.slice(0, 60)}`);
|
|
589
|
+
continue;
|
|
590
|
+
}
|
|
591
|
+
const id = workbook.addImage({
|
|
592
|
+
base64: payload.base64,
|
|
593
|
+
extension: payload.extension
|
|
594
|
+
});
|
|
595
|
+
sheet.addImage(id, {
|
|
596
|
+
tl: {
|
|
597
|
+
col: pending.col - 1,
|
|
598
|
+
row: pending.row - 1
|
|
599
|
+
},
|
|
600
|
+
ext: {
|
|
601
|
+
width: pending.width,
|
|
602
|
+
height: pending.height
|
|
603
|
+
}
|
|
604
|
+
});
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
//#endregion
|
|
608
|
+
export { renderExcel };
|