@widgetic/design-system 0.3.68
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/README.md +730 -0
- package/dist/components/CopyableHeader.svelte +456 -0
- package/dist/components/CopyableHeader.svelte.d.ts +40 -0
- package/dist/components/EmptyState.svelte +145 -0
- package/dist/components/EmptyState.svelte.d.ts +36 -0
- package/dist/components/PasswordInput.svelte +46 -0
- package/dist/components/PasswordInput.svelte.d.ts +26 -0
- package/dist/components/ThumbHashImage.svelte +124 -0
- package/dist/components/ThumbHashImage.svelte.d.ts +26 -0
- package/dist/components/WScrollArea.svelte +47 -0
- package/dist/components/WScrollArea.svelte.d.ts +38 -0
- package/dist/components/debug-grid/DebugGrid.svelte +207 -0
- package/dist/components/debug-grid/DebugGrid.svelte.d.ts +32 -0
- package/dist/components/ic/browser/BrowserInputController.svelte +481 -0
- package/dist/components/ic/browser/BrowserInputController.svelte.d.ts +34 -0
- package/dist/components/ic/browser/icons/audio.svg +7 -0
- package/dist/components/ic/browser/icons/document.svg +11 -0
- package/dist/components/ic/browser/icons/error.svg +5 -0
- package/dist/components/ic/browser/icons/folder.svg +28 -0
- package/dist/components/ic/browser/icons/info-icon.svg +3 -0
- package/dist/components/ic/browser/icons/player-pause.svg +12 -0
- package/dist/components/ic/browser/icons/player-play.svg +1 -0
- package/dist/components/ic/types.d.ts +14 -0
- package/dist/components/ic/types.js +18 -0
- package/dist/components/index.d.ts +51 -0
- package/dist/components/index.js +52 -0
- package/dist/components/modals/ActionModal.svelte +189 -0
- package/dist/components/modals/ActionModal.svelte.d.ts +49 -0
- package/dist/components/modals/BaseModal.svelte +409 -0
- package/dist/components/modals/BaseModal.svelte.d.ts +38 -0
- package/dist/components/modals/NewItemDialog.svelte +189 -0
- package/dist/components/modals/NewItemDialog.svelte.d.ts +39 -0
- package/dist/components/modals/Portal.svelte +104 -0
- package/dist/components/modals/Portal.svelte.d.ts +34 -0
- package/dist/components/modals/README.md +99 -0
- package/dist/components/modals/RenameDialog.svelte +316 -0
- package/dist/components/modals/RenameDialog.svelte.d.ts +39 -0
- package/dist/components/modals/modalStore.d.ts +10 -0
- package/dist/components/modals/modalStore.js +45 -0
- package/dist/components/navigation/Breadcrumbs.svelte +348 -0
- package/dist/components/navigation/Breadcrumbs.svelte.d.ts +35 -0
- package/dist/components/navigation/index.d.ts +2 -0
- package/dist/components/navigation/index.js +2 -0
- package/dist/components/navigation/types.d.ts +12 -0
- package/dist/components/navigation/types.js +1 -0
- package/dist/components/pdf/PDFViewer.svelte +608 -0
- package/dist/components/pdf/PDFViewer.svelte.d.ts +32 -0
- package/dist/components/search-input/SearchInput.svelte +115 -0
- package/dist/components/search-input/SearchInput.svelte.d.ts +46 -0
- package/dist/components/search-input/index.d.ts +14 -0
- package/dist/components/search-input/index.js +4 -0
- package/dist/components/shad-editor/colorpicker.svelte +17 -0
- package/dist/components/shad-editor/colorpicker.svelte.d.ts +6 -0
- package/dist/components/shad-editor/custom/Extentions/ColorHighlighter.d.ts +2 -0
- package/dist/components/shad-editor/custom/Extentions/ColorHighlighter.js +25 -0
- package/dist/components/shad-editor/custom/Extentions/ImageExtention.d.ts +1 -0
- package/dist/components/shad-editor/custom/Extentions/ImageExtention.js +30 -0
- package/dist/components/shad-editor/custom/Extentions/SearchAndReplace.d.ts +57 -0
- package/dist/components/shad-editor/custom/Extentions/SearchAndReplace.js +232 -0
- package/dist/components/shad-editor/custom/Extentions/SmilieReplacer.d.ts +2 -0
- package/dist/components/shad-editor/custom/Extentions/SmilieReplacer.js +131 -0
- package/dist/components/shad-editor/custom/code-extended.svelte +78 -0
- package/dist/components/shad-editor/custom/code-extended.svelte.d.ts +4 -0
- package/dist/components/shad-editor/custom/image-extended-component.svelte +251 -0
- package/dist/components/shad-editor/custom/image-extended-component.svelte.d.ts +4 -0
- package/dist/components/shad-editor/custom/utils.d.ts +5 -0
- package/dist/components/shad-editor/custom/utils.js +35 -0
- package/dist/components/shad-editor/editor-toolbar.svelte +59 -0
- package/dist/components/shad-editor/editor-toolbar.svelte.d.ts +8 -0
- package/dist/components/shad-editor/editor.css +179 -0
- package/dist/components/shad-editor/icons/block-quote.svelte +26 -0
- package/dist/components/shad-editor/icons/block-quote.svelte.d.ts +7 -0
- package/dist/components/shad-editor/icons/bold.svelte +26 -0
- package/dist/components/shad-editor/icons/bold.svelte.d.ts +8 -0
- package/dist/components/shad-editor/icons/buttle-list.svelte +27 -0
- package/dist/components/shad-editor/icons/buttle-list.svelte.d.ts +7 -0
- package/dist/components/shad-editor/icons/code.svelte +27 -0
- package/dist/components/shad-editor/icons/code.svelte.d.ts +8 -0
- package/dist/components/shad-editor/icons/highlighter.svelte +75 -0
- package/dist/components/shad-editor/icons/highlighter.svelte.d.ts +9 -0
- package/dist/components/shad-editor/icons/image.svelte +73 -0
- package/dist/components/shad-editor/icons/image.svelte.d.ts +8 -0
- package/dist/components/shad-editor/icons/index.d.ts +22 -0
- package/dist/components/shad-editor/icons/index.js +24 -0
- package/dist/components/shad-editor/icons/italic.svelte +26 -0
- package/dist/components/shad-editor/icons/italic.svelte.d.ts +8 -0
- package/dist/components/shad-editor/icons/link.svelte +72 -0
- package/dist/components/shad-editor/icons/link.svelte.d.ts +8 -0
- package/dist/components/shad-editor/icons/ordered-list.svelte +26 -0
- package/dist/components/shad-editor/icons/ordered-list.svelte.d.ts +7 -0
- package/dist/components/shad-editor/icons/quickcolor.svelte +95 -0
- package/dist/components/shad-editor/icons/quickcolor.svelte.d.ts +7 -0
- package/dist/components/shad-editor/icons/redo.svelte +26 -0
- package/dist/components/shad-editor/icons/redo.svelte.d.ts +8 -0
- package/dist/components/shad-editor/icons/search-replace.svelte +146 -0
- package/dist/components/shad-editor/icons/search-replace.svelte.d.ts +7 -0
- package/dist/components/shad-editor/icons/strikethrough.svelte +26 -0
- package/dist/components/shad-editor/icons/strikethrough.svelte.d.ts +8 -0
- package/dist/components/shad-editor/icons/subscript.svelte +26 -0
- package/dist/components/shad-editor/icons/subscript.svelte.d.ts +8 -0
- package/dist/components/shad-editor/icons/superscript.svelte +26 -0
- package/dist/components/shad-editor/icons/superscript.svelte.d.ts +8 -0
- package/dist/components/shad-editor/icons/table.svelte +111 -0
- package/dist/components/shad-editor/icons/table.svelte.d.ts +8 -0
- package/dist/components/shad-editor/icons/task-list.svelte +26 -0
- package/dist/components/shad-editor/icons/task-list.svelte.d.ts +7 -0
- package/dist/components/shad-editor/icons/text.svelte +95 -0
- package/dist/components/shad-editor/icons/text.svelte.d.ts +7 -0
- package/dist/components/shad-editor/icons/textalign.svelte +82 -0
- package/dist/components/shad-editor/icons/textalign.svelte.d.ts +7 -0
- package/dist/components/shad-editor/icons/textcolor.svelte +75 -0
- package/dist/components/shad-editor/icons/textcolor.svelte.d.ts +8 -0
- package/dist/components/shad-editor/icons/underline.svelte +26 -0
- package/dist/components/shad-editor/icons/underline.svelte.d.ts +8 -0
- package/dist/components/shad-editor/icons/undo.svelte +26 -0
- package/dist/components/shad-editor/icons/undo.svelte.d.ts +8 -0
- package/dist/components/shad-editor/index.d.ts +4 -0
- package/dist/components/shad-editor/index.js +5 -0
- package/dist/components/shad-editor/onedark.css +87 -0
- package/dist/components/shad-editor/shad-editor.svelte +153 -0
- package/dist/components/shad-editor/shad-editor.svelte.d.ts +34 -0
- package/dist/components/toast/ToasterModal.svelte +128 -0
- package/dist/components/toast/ToasterModal.svelte.d.ts +30 -0
- package/dist/components/toast/index.d.ts +2 -0
- package/dist/components/toast/index.js +2 -0
- package/dist/components/ui/accordion/accordion-content.svelte +24 -0
- package/dist/components/ui/accordion/accordion-content.svelte.d.ts +4 -0
- package/dist/components/ui/accordion/accordion-item.svelte +12 -0
- package/dist/components/ui/accordion/accordion-item.svelte.d.ts +4 -0
- package/dist/components/ui/accordion/accordion-trigger.svelte +29 -0
- package/dist/components/ui/accordion/accordion-trigger.svelte.d.ts +7 -0
- package/dist/components/ui/accordion/index.d.ts +6 -0
- package/dist/components/ui/accordion/index.js +6 -0
- package/dist/components/ui/alert/alert-description.svelte +13 -0
- package/dist/components/ui/alert/alert-description.svelte.d.ts +28 -0
- package/dist/components/ui/alert/alert-title.svelte +21 -0
- package/dist/components/ui/alert/alert-title.svelte.d.ts +31 -0
- package/dist/components/ui/alert/alert.svelte +17 -0
- package/dist/components/ui/alert/alert.svelte.d.ts +31 -0
- package/dist/components/ui/alert/index.d.ts +43 -0
- package/dist/components/ui/alert/index.js +19 -0
- package/dist/components/ui/badge/badge.svelte +50 -0
- package/dist/components/ui/badge/badge.svelte.d.ts +60 -0
- package/dist/components/ui/badge/index.d.ts +2 -0
- package/dist/components/ui/badge/index.js +2 -0
- package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +23 -0
- package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb-item.svelte +16 -0
- package/dist/components/ui/breadcrumb/breadcrumb-item.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb-link.svelte +31 -0
- package/dist/components/ui/breadcrumb/breadcrumb-link.svelte.d.ts +11 -0
- package/dist/components/ui/breadcrumb/breadcrumb-list.svelte +23 -0
- package/dist/components/ui/breadcrumb/breadcrumb-list.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb-page.svelte +23 -0
- package/dist/components/ui/breadcrumb/breadcrumb-page.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte +27 -0
- package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb.svelte +15 -0
- package/dist/components/ui/breadcrumb/breadcrumb.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/index.d.ts +8 -0
- package/dist/components/ui/breadcrumb/index.js +10 -0
- package/dist/components/ui/button/button.svelte +74 -0
- package/dist/components/ui/button/button.svelte.d.ts +118 -0
- package/dist/components/ui/button/index.d.ts +2 -0
- package/dist/components/ui/button/index.js +4 -0
- package/dist/components/ui/calendar/calendar-cell.svelte +19 -0
- package/dist/components/ui/calendar/calendar-cell.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-day.svelte +30 -0
- package/dist/components/ui/calendar/calendar-day.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-grid-body.svelte +12 -0
- package/dist/components/ui/calendar/calendar-grid-body.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-grid-head.svelte +12 -0
- package/dist/components/ui/calendar/calendar-grid-head.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-grid-row.svelte +12 -0
- package/dist/components/ui/calendar/calendar-grid-row.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-grid.svelte +16 -0
- package/dist/components/ui/calendar/calendar-grid.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-head-cell.svelte +16 -0
- package/dist/components/ui/calendar/calendar-head-cell.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-header.svelte +16 -0
- package/dist/components/ui/calendar/calendar-header.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-heading.svelte +12 -0
- package/dist/components/ui/calendar/calendar-heading.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-months.svelte +20 -0
- package/dist/components/ui/calendar/calendar-months.svelte.d.ts +5 -0
- package/dist/components/ui/calendar/calendar-next-button.svelte +28 -0
- package/dist/components/ui/calendar/calendar-next-button.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar-prev-button.svelte +28 -0
- package/dist/components/ui/calendar/calendar-prev-button.svelte.d.ts +4 -0
- package/dist/components/ui/calendar/calendar.svelte +61 -0
- package/dist/components/ui/calendar/calendar.svelte.d.ts +5 -0
- package/dist/components/ui/calendar/index.d.ts +14 -0
- package/dist/components/ui/calendar/index.js +16 -0
- package/dist/components/ui/card/card-content.svelte +16 -0
- package/dist/components/ui/card/card-content.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-description.svelte +16 -0
- package/dist/components/ui/card/card-description.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-footer.svelte +16 -0
- package/dist/components/ui/card/card-footer.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-header.svelte +16 -0
- package/dist/components/ui/card/card-header.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-title.svelte +25 -0
- package/dist/components/ui/card/card-title.svelte.d.ts +8 -0
- package/dist/components/ui/card/card.svelte +20 -0
- package/dist/components/ui/card/card.svelte.d.ts +5 -0
- package/dist/components/ui/card/index.d.ts +7 -0
- package/dist/components/ui/card/index.js +7 -0
- package/dist/components/ui/checkbox/checkbox.svelte +35 -0
- package/dist/components/ui/checkbox/checkbox.svelte.d.ts +4 -0
- package/dist/components/ui/checkbox/index.d.ts +2 -0
- package/dist/components/ui/checkbox/index.js +4 -0
- package/dist/components/ui/collapsible/index.d.ts +16 -0
- package/dist/components/ui/collapsible/index.js +7 -0
- package/dist/components/ui/command/command-dialog.svelte +35 -0
- package/dist/components/ui/command/command-dialog.svelte.d.ts +9 -0
- package/dist/components/ui/command/command-empty.svelte +12 -0
- package/dist/components/ui/command/command-empty.svelte.d.ts +4 -0
- package/dist/components/ui/command/command-group.svelte +29 -0
- package/dist/components/ui/command/command-group.svelte.d.ts +7 -0
- package/dist/components/ui/command/command-input.svelte +25 -0
- package/dist/components/ui/command/command-input.svelte.d.ts +4 -0
- package/dist/components/ui/command/command-item.svelte +19 -0
- package/dist/components/ui/command/command-item.svelte.d.ts +4 -0
- package/dist/components/ui/command/command-link-item.svelte +19 -0
- package/dist/components/ui/command/command-link-item.svelte.d.ts +4 -0
- package/dist/components/ui/command/command-list.svelte +16 -0
- package/dist/components/ui/command/command-list.svelte.d.ts +4 -0
- package/dist/components/ui/command/command-separator.svelte +12 -0
- package/dist/components/ui/command/command-separator.svelte.d.ts +4 -0
- package/dist/components/ui/command/command-shortcut.svelte +20 -0
- package/dist/components/ui/command/command-shortcut.svelte.d.ts +5 -0
- package/dist/components/ui/command/command.svelte +21 -0
- package/dist/components/ui/command/command.svelte.d.ts +4 -0
- package/dist/components/ui/command/index.d.ts +13 -0
- package/dist/components/ui/command/index.js +15 -0
- package/dist/components/ui/dialog/dialog-content.svelte +38 -0
- package/dist/components/ui/dialog/dialog-content.svelte.d.ts +9 -0
- package/dist/components/ui/dialog/dialog-description.svelte +16 -0
- package/dist/components/ui/dialog/dialog-description.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-footer.svelte +20 -0
- package/dist/components/ui/dialog/dialog-footer.svelte.d.ts +5 -0
- package/dist/components/ui/dialog/dialog-header.svelte +20 -0
- package/dist/components/ui/dialog/dialog-header.svelte.d.ts +5 -0
- package/dist/components/ui/dialog/dialog-overlay.svelte +19 -0
- package/dist/components/ui/dialog/dialog-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-title.svelte +16 -0
- package/dist/components/ui/dialog/dialog-title.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/index.d.ts +12 -0
- package/dist/components/ui/dialog/index.js +14 -0
- package/dist/components/ui/drawer/drawer-content.svelte +30 -0
- package/dist/components/ui/drawer/drawer-content.svelte.d.ts +7 -0
- package/dist/components/ui/drawer/drawer-description.svelte +16 -0
- package/dist/components/ui/drawer/drawer-description.svelte.d.ts +4 -0
- package/dist/components/ui/drawer/drawer-footer.svelte +16 -0
- package/dist/components/ui/drawer/drawer-footer.svelte.d.ts +5 -0
- package/dist/components/ui/drawer/drawer-header.svelte +20 -0
- package/dist/components/ui/drawer/drawer-header.svelte.d.ts +5 -0
- package/dist/components/ui/drawer/drawer-nested.svelte +12 -0
- package/dist/components/ui/drawer/drawer-nested.svelte.d.ts +3 -0
- package/dist/components/ui/drawer/drawer-overlay.svelte +16 -0
- package/dist/components/ui/drawer/drawer-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/drawer/drawer-title.svelte +16 -0
- package/dist/components/ui/drawer/drawer-title.svelte.d.ts +4 -0
- package/dist/components/ui/drawer/drawer.svelte +12 -0
- package/dist/components/ui/drawer/drawer.svelte.d.ts +3 -0
- package/dist/components/ui/drawer/index.d.ts +13 -0
- package/dist/components/ui/drawer/index.js +15 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +40 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +26 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +19 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +23 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +23 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +30 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +16 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +20 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +5 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +19 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +28 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -0
- package/dist/components/ui/dropdown-menu/index.d.ts +25 -0
- package/dist/components/ui/dropdown-menu/index.js +17 -0
- package/dist/components/ui/hover-card/hover-card-content.svelte +28 -0
- package/dist/components/ui/hover-card/hover-card-content.svelte.d.ts +7 -0
- package/dist/components/ui/hover-card/index.d.ts +5 -0
- package/dist/components/ui/hover-card/index.js +5 -0
- package/dist/components/ui/input/index.d.ts +2 -0
- package/dist/components/ui/input/index.js +4 -0
- package/dist/components/ui/input/input.svelte +22 -0
- package/dist/components/ui/input/input.svelte.d.ts +5 -0
- package/dist/components/ui/input-otp/index.d.ts +5 -0
- package/dist/components/ui/input-otp/index.js +7 -0
- package/dist/components/ui/input-otp/input-otp-group.svelte +16 -0
- package/dist/components/ui/input-otp/input-otp-group.svelte.d.ts +5 -0
- package/dist/components/ui/input-otp/input-otp-separator.svelte +19 -0
- package/dist/components/ui/input-otp/input-otp-separator.svelte.d.ts +5 -0
- package/dist/components/ui/input-otp/input-otp-slot.svelte +30 -0
- package/dist/components/ui/input-otp/input-otp-slot.svelte.d.ts +12 -0
- package/dist/components/ui/input-otp/input-otp.svelte +22 -0
- package/dist/components/ui/input-otp/input-otp.svelte.d.ts +3 -0
- package/dist/components/ui/label/index.d.ts +2 -0
- package/dist/components/ui/label/index.js +4 -0
- package/dist/components/ui/label/label.svelte +19 -0
- package/dist/components/ui/label/label.svelte.d.ts +4 -0
- package/dist/components/ui/popover/index.d.ts +6 -0
- package/dist/components/ui/popover/index.js +6 -0
- package/dist/components/ui/popover/popover-content.svelte +28 -0
- package/dist/components/ui/popover/popover-content.svelte.d.ts +7 -0
- package/dist/components/ui/progress/index.d.ts +2 -0
- package/dist/components/ui/progress/index.js +4 -0
- package/dist/components/ui/progress/progress.svelte +25 -0
- package/dist/components/ui/progress/progress.svelte.d.ts +4 -0
- package/dist/components/ui/radio-group/index.d.ts +3 -0
- package/dist/components/ui/radio-group/index.js +5 -0
- package/dist/components/ui/radio-group/radio-group-item.svelte +28 -0
- package/dist/components/ui/radio-group/radio-group-item.svelte.d.ts +4 -0
- package/dist/components/ui/radio-group/radio-group.svelte +13 -0
- package/dist/components/ui/radio-group/radio-group.svelte.d.ts +4 -0
- package/dist/components/ui/range-calendar/index.d.ts +15 -0
- package/dist/components/ui/range-calendar/index.js +17 -0
- package/dist/components/ui/range-calendar/range-calendar-cell.svelte +19 -0
- package/dist/components/ui/range-calendar/range-calendar-cell.svelte.d.ts +4 -0
- package/dist/components/ui/range-calendar/range-calendar-day.svelte +34 -0
- package/dist/components/ui/range-calendar/range-calendar-day.svelte.d.ts +4 -0
- package/dist/components/ui/range-calendar/range-calendar-grid-row.svelte +12 -0
- package/dist/components/ui/range-calendar/range-calendar-grid-row.svelte.d.ts +4 -0
- package/dist/components/ui/range-calendar/range-calendar-grid.svelte +16 -0
- package/dist/components/ui/range-calendar/range-calendar-grid.svelte.d.ts +4 -0
- package/dist/components/ui/range-calendar/range-calendar-head-cell.svelte +16 -0
- package/dist/components/ui/range-calendar/range-calendar-head-cell.svelte.d.ts +4 -0
- package/dist/components/ui/range-calendar/range-calendar-header.svelte +16 -0
- package/dist/components/ui/range-calendar/range-calendar-header.svelte.d.ts +4 -0
- package/dist/components/ui/range-calendar/range-calendar-heading.svelte +16 -0
- package/dist/components/ui/range-calendar/range-calendar-heading.svelte.d.ts +4 -0
- package/dist/components/ui/range-calendar/range-calendar-months.svelte +20 -0
- package/dist/components/ui/range-calendar/range-calendar-months.svelte.d.ts +5 -0
- package/dist/components/ui/range-calendar/range-calendar-next-button.svelte +28 -0
- package/dist/components/ui/range-calendar/range-calendar-next-button.svelte.d.ts +4 -0
- package/dist/components/ui/range-calendar/range-calendar-prev-button.svelte +28 -0
- package/dist/components/ui/range-calendar/range-calendar-prev-button.svelte.d.ts +4 -0
- package/dist/components/ui/range-calendar/range-calendar.svelte +57 -0
- package/dist/components/ui/range-calendar/range-calendar.svelte.d.ts +5 -0
- package/dist/components/ui/scroll-area/index.d.ts +3 -0
- package/dist/components/ui/scroll-area/index.js +6 -0
- package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +29 -0
- package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte.d.ts +4 -0
- package/dist/components/ui/scroll-area/scroll-area.svelte +32 -0
- package/dist/components/ui/scroll-area/scroll-area.svelte.d.ts +9 -0
- package/dist/components/ui/select/index.d.ts +11 -0
- package/dist/components/ui/select/index.js +13 -0
- package/dist/components/ui/select/select-content.svelte +39 -0
- package/dist/components/ui/select/select-content.svelte.d.ts +7 -0
- package/dist/components/ui/select/select-group-heading.svelte +16 -0
- package/dist/components/ui/select/select-group-heading.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-item.svelte +37 -0
- package/dist/components/ui/select/select-item.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-scroll-down-button.svelte +19 -0
- package/dist/components/ui/select/select-scroll-down-button.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-scroll-up-button.svelte +19 -0
- package/dist/components/ui/select/select-scroll-up-button.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-separator.svelte +13 -0
- package/dist/components/ui/select/select-separator.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-trigger.svelte +24 -0
- package/dist/components/ui/select/select-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/separator/index.d.ts +2 -0
- package/dist/components/ui/separator/index.js +4 -0
- package/dist/components/ui/separator/separator.svelte +22 -0
- package/dist/components/ui/separator/separator.svelte.d.ts +4 -0
- package/dist/components/ui/slider/index.d.ts +3 -0
- package/dist/components/ui/slider/index.js +5 -0
- package/dist/components/ui/slider/slider.svelte +34 -0
- package/dist/components/ui/slider/slider.svelte.d.ts +4 -0
- package/dist/components/ui/sonner/index.d.ts +2 -0
- package/dist/components/ui/sonner/index.js +2 -0
- package/dist/components/ui/sonner/sonner.svelte +20 -0
- package/dist/components/ui/sonner/sonner.svelte.d.ts +4 -0
- package/dist/components/ui/switch/index.d.ts +2 -0
- package/dist/components/ui/switch/index.js +4 -0
- package/dist/components/ui/switch/switch.svelte +27 -0
- package/dist/components/ui/switch/switch.svelte.d.ts +4 -0
- package/dist/components/ui/table/index.d.ts +9 -0
- package/dist/components/ui/table/index.js +11 -0
- package/dist/components/ui/table/table-body.svelte +16 -0
- package/dist/components/ui/table/table-body.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-caption.svelte +16 -0
- package/dist/components/ui/table/table-caption.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-cell.svelte +20 -0
- package/dist/components/ui/table/table-cell.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-footer.svelte +16 -0
- package/dist/components/ui/table/table-footer.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-head.svelte +23 -0
- package/dist/components/ui/table/table-head.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-header.svelte +16 -0
- package/dist/components/ui/table/table-header.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-row.svelte +23 -0
- package/dist/components/ui/table/table-row.svelte.d.ts +5 -0
- package/dist/components/ui/table/table.svelte +18 -0
- package/dist/components/ui/table/table.svelte.d.ts +5 -0
- package/dist/components/ui/tabs/index.d.ts +6 -0
- package/dist/components/ui/tabs/index.js +8 -0
- package/dist/components/ui/tabs/tabs-content.svelte +19 -0
- package/dist/components/ui/tabs/tabs-content.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-list.svelte +19 -0
- package/dist/components/ui/tabs/tabs-list.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte +19 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/textarea/index.d.ts +19 -0
- package/dist/components/ui/textarea/index.js +4 -0
- package/dist/components/ui/textarea/textarea.svelte +22 -0
- package/dist/components/ui/textarea/textarea.svelte.d.ts +5 -0
- package/dist/components/ui/toggle/index.d.ts +3 -0
- package/dist/components/ui/toggle/index.js +5 -0
- package/dist/components/ui/toggle/toggle.svelte +51 -0
- package/dist/components/ui/toggle/toggle.svelte.d.ts +83 -0
- package/dist/components/ui/toggle-group/index.d.ts +3 -0
- package/dist/components/ui/toggle-group/index.js +5 -0
- package/dist/components/ui/toggle-group/toggle-group-item.svelte +30 -0
- package/dist/components/ui/toggle-group/toggle-group-item.svelte.d.ts +6 -0
- package/dist/components/ui/toggle-group/toggle-group.svelte +41 -0
- package/dist/components/ui/toggle-group/toggle-group.svelte.d.ts +8 -0
- package/dist/components/ui/tooltip/index.d.ts +6 -0
- package/dist/components/ui/tooltip/index.js +8 -0
- package/dist/components/ui/tooltip/tooltip-content.svelte +21 -0
- package/dist/components/ui/tooltip/tooltip-content.svelte.d.ts +4 -0
- package/dist/components/widget-system/EditableWidget.svelte +106 -0
- package/dist/components/widget-system/EditableWidget.svelte.d.ts +44 -0
- package/dist/components/widget-system/Moveable.svelte +661 -0
- package/dist/components/widget-system/Moveable.svelte.d.ts +56 -0
- package/dist/components/widget-system/index.d.ts +2 -0
- package/dist/components/widget-system/index.js +3 -0
- package/dist/fonts/BLMelody/BLMelody-Bold.woff2 +0 -0
- package/dist/fonts/BLMelody/BLMelody-Medium.woff2 +0 -0
- package/dist/fonts/BLMelody/BLMelody-SemiBold.woff2 +0 -0
- package/dist/fonts/Riegla/Riegla-Bold Italic.otf +0 -0
- package/dist/fonts/Riegla/Riegla-Bold.otf +0 -0
- package/dist/fonts/Riegla/Riegla-Italic.otf +0 -0
- package/dist/fonts/Riegla/Riegla-Regular.otf +0 -0
- package/dist/fonts/Riegla/RieglaMedium-Regular.otf +0 -0
- package/dist/fonts/index.d.ts +0 -0
- package/dist/fonts/index.js +1 -0
- package/dist/hooks/is-mobile.svelte.d.ts +5 -0
- package/dist/hooks/is-mobile.svelte.js +23 -0
- package/dist/icons/Checked.svelte +19 -0
- package/dist/icons/Checked.svelte.d.ts +20 -0
- package/dist/icons/CheckerBoardBackground.svelte +16 -0
- package/dist/icons/CheckerBoardBackground.svelte.d.ts +3 -0
- package/dist/icons/Close.svelte +22 -0
- package/dist/icons/Close.svelte.d.ts +20 -0
- package/dist/icons/Close.svg +8 -0
- package/dist/icons/Error.svg +5 -0
- package/dist/icons/Exclamation.svelte +5 -0
- package/dist/icons/Exclamation.svelte.d.ts +26 -0
- package/dist/icons/FileBrowser.svelte +38 -0
- package/dist/icons/FileBrowser.svelte.d.ts +20 -0
- package/dist/icons/FileBrowser.svg +28 -0
- package/dist/icons/LogoWidgetic.svelte +24 -0
- package/dist/icons/LogoWidgetic.svelte.d.ts +20 -0
- package/dist/icons/LogoWidgeticType.svelte +12 -0
- package/dist/icons/LogoWidgeticType.svelte.d.ts +20 -0
- package/dist/icons/LogoWidgeticType.svg +4 -0
- package/dist/icons/OpacitySliderArrows.svelte +46 -0
- package/dist/icons/OpacitySliderArrows.svelte.d.ts +3 -0
- package/dist/icons/TestIcon.svelte +1 -0
- package/dist/icons/TestIcon.svelte.d.ts +26 -0
- package/dist/icons/checked.svg +4 -0
- package/dist/icons/index.d.ts +11 -0
- package/dist/icons/index.js +15 -0
- package/dist/icons/lucide.d.ts +1 -0
- package/dist/icons/lucide.js +1 -0
- package/dist/icons/tabler.d.ts +1 -0
- package/dist/icons/tabler.js +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +9 -0
- package/dist/stores/index.d.ts +1 -0
- package/dist/stores/index.js +1 -0
- package/dist/stores/pdfCache.d.ts +16 -0
- package/dist/stores/pdfCache.js +101 -0
- package/dist/styles/fonts.css +172 -0
- package/dist/styles/global.css +893 -0
- package/dist/utils/MediaManager.d.ts +35 -0
- package/dist/utils/MediaManager.js +59 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.js +5 -0
- package/package.json +183 -0
- package/tailwind.config.ts +97 -0
|
@@ -0,0 +1,608 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// Svelte imports
|
|
3
|
+
import { onMount, onDestroy, tick, afterUpdate, createEventDispatcher } from 'svelte';
|
|
4
|
+
|
|
5
|
+
// Sveltekit imports
|
|
6
|
+
import { browser } from '$app/environment';
|
|
7
|
+
import { base } from '$app/paths';
|
|
8
|
+
|
|
9
|
+
// Local components imports
|
|
10
|
+
import { WScrollArea } from '../../components';
|
|
11
|
+
|
|
12
|
+
// Import arrow icons for navigation
|
|
13
|
+
import { IconChevronLeft, IconChevronRight } from '../../icons';
|
|
14
|
+
|
|
15
|
+
// Whether to show log messages
|
|
16
|
+
let showLogs = false;
|
|
17
|
+
|
|
18
|
+
// import pdfjs library
|
|
19
|
+
import * as pdfjsLib from 'pdfjs-dist';
|
|
20
|
+
import { type PDFDocumentProxy } from 'pdfjs-dist';
|
|
21
|
+
|
|
22
|
+
// Set the worker source to use local worker file from pdfjs-dist package
|
|
23
|
+
if (browser) {
|
|
24
|
+
// Try to load worker using import.meta.url for correct path resolution
|
|
25
|
+
// This works better with bundlers like Vite and provides correct paths in both dev and prod
|
|
26
|
+
try {
|
|
27
|
+
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
|
|
28
|
+
'pdfjs-dist/build/pdf.worker.min.mjs',
|
|
29
|
+
import.meta.url
|
|
30
|
+
).toString();
|
|
31
|
+
|
|
32
|
+
if(showLogs) console.log('PDF Worker URL set to:', pdfjsLib.GlobalWorkerOptions.workerSrc);
|
|
33
|
+
} catch (error) {
|
|
34
|
+
if(showLogs) console.error('Error setting PDF worker path:', error);
|
|
35
|
+
// Fallback to CDN as a last resort
|
|
36
|
+
pdfjsLib.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.js`;
|
|
37
|
+
if(showLogs) console.log('PDF Worker URL fallback set to:', pdfjsLib.GlobalWorkerOptions.workerSrc);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Import PDF cache store
|
|
42
|
+
import { pdfCache } from '../../stores/pdfCache';
|
|
43
|
+
|
|
44
|
+
// Component props
|
|
45
|
+
// class and style props
|
|
46
|
+
let className = '';
|
|
47
|
+
export { className as class };
|
|
48
|
+
export let style: string = '';
|
|
49
|
+
// data props
|
|
50
|
+
export let url = '';
|
|
51
|
+
export let enableCacheClearing: boolean = true; // Flag to enable/disable cache clearing shortcut
|
|
52
|
+
|
|
53
|
+
// Consts
|
|
54
|
+
const initialContainerWidth = 500; // Default width during loading
|
|
55
|
+
const initialContainerHeight = 300; // Default height during loading
|
|
56
|
+
const scrolledAreaMaxHeight = 900;
|
|
57
|
+
|
|
58
|
+
// Local vars
|
|
59
|
+
let pdfDoc: PDFDocumentProxy | null = null;
|
|
60
|
+
let pageNum = 1;
|
|
61
|
+
let pageCount = 0;
|
|
62
|
+
let pageRendering = false;
|
|
63
|
+
let pageNumPending: number | null = null;
|
|
64
|
+
let scale = 1.5;
|
|
65
|
+
let loading = true;
|
|
66
|
+
let error: string | null = null;
|
|
67
|
+
let mounted = false;
|
|
68
|
+
let currentUrl = '';
|
|
69
|
+
let canvasWidth = initialContainerWidth; // Start with initial size
|
|
70
|
+
let canvasHeight = initialContainerHeight; // Start with initial size
|
|
71
|
+
let isCanvasReady = false;
|
|
72
|
+
let containerDiv: HTMLDivElement;
|
|
73
|
+
let canvasContainer: HTMLDivElement;
|
|
74
|
+
let renderStartTime = 0;
|
|
75
|
+
let pdfLoadStartTime = 0;
|
|
76
|
+
let renderingPhase = 'not_started'; // 'not_started', 'loading_pdf', 'calculating_dimensions', 'rendering', 'complete'
|
|
77
|
+
let showPdfContent = false; // Control visibility of PDF content
|
|
78
|
+
let loadedFromCache = false; // Track if the current PDF was loaded from cache
|
|
79
|
+
|
|
80
|
+
const dispatch = createEventDispatcher<{
|
|
81
|
+
error: { message: string };
|
|
82
|
+
pageChange: { page: number, totalPages: number };
|
|
83
|
+
cacheCleared: void;
|
|
84
|
+
}>();
|
|
85
|
+
|
|
86
|
+
// Debug reactive statement to track state changes
|
|
87
|
+
$: if (showLogs) {
|
|
88
|
+
console.log('State update:', {
|
|
89
|
+
loading,
|
|
90
|
+
isCanvasReady,
|
|
91
|
+
error,
|
|
92
|
+
mounted,
|
|
93
|
+
url,
|
|
94
|
+
renderingPhase,
|
|
95
|
+
pageRendering,
|
|
96
|
+
hasCanvasContainer: !!canvasContainer,
|
|
97
|
+
hasPdfDoc: !!pdfDoc,
|
|
98
|
+
pageCount,
|
|
99
|
+
showPdfContent,
|
|
100
|
+
elapsedTime: renderStartTime ? Math.round((Date.now() - renderStartTime) / 100) / 10 + 's' : 'N/A',
|
|
101
|
+
canvasWidth,
|
|
102
|
+
canvasHeight,
|
|
103
|
+
loadedFromCache
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Add afterUpdate to track when the UI updates
|
|
108
|
+
afterUpdate(() => {
|
|
109
|
+
if (showLogs) {
|
|
110
|
+
console.log('UI UPDATED:', {
|
|
111
|
+
loading,
|
|
112
|
+
isCanvasReady,
|
|
113
|
+
error,
|
|
114
|
+
mounted,
|
|
115
|
+
renderingPhase,
|
|
116
|
+
hasCanvasContainer: !!canvasContainer,
|
|
117
|
+
hasPdfDoc: !!pdfDoc,
|
|
118
|
+
canvasWidth,
|
|
119
|
+
canvasHeight,
|
|
120
|
+
containerWidth: containerDiv?.clientWidth,
|
|
121
|
+
pageCount,
|
|
122
|
+
showPdfContent,
|
|
123
|
+
loadedFromCache
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// Function to handle keyboard shortcuts
|
|
129
|
+
function handleKeyDown(event: KeyboardEvent) {
|
|
130
|
+
// Handle CMD/CTRL + SHIFT + P to clear PDF cache (hidden developer shortcut)
|
|
131
|
+
if (enableCacheClearing && (event.metaKey || event.ctrlKey) && event.shiftKey && event.key === 'p') {
|
|
132
|
+
event.preventDefault();
|
|
133
|
+
event.stopPropagation();
|
|
134
|
+
|
|
135
|
+
// Clear the PDF cache
|
|
136
|
+
pdfCache.clear();
|
|
137
|
+
if (showLogs) console.log('PDF cache cleared via keyboard shortcut');
|
|
138
|
+
dispatch('cacheCleared');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Initialize PDF.js with the bundled worker
|
|
143
|
+
onMount(async () => {
|
|
144
|
+
if (!browser) return;
|
|
145
|
+
|
|
146
|
+
try {
|
|
147
|
+
// Enable or disable logging in the PDF cache
|
|
148
|
+
pdfCache.setLogging(showLogs);
|
|
149
|
+
|
|
150
|
+
// Add keyboard event listener for cache clearing
|
|
151
|
+
if (enableCacheClearing) {
|
|
152
|
+
window.addEventListener('keydown', handleKeyDown);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
await tick();
|
|
156
|
+
mounted = true;
|
|
157
|
+
if (showLogs) console.log('Component mounted, container available:', !!containerDiv);
|
|
158
|
+
|
|
159
|
+
if (url) {
|
|
160
|
+
if (showLogs) console.log('Starting initial load with URL:', url);
|
|
161
|
+
await loadPDF();
|
|
162
|
+
}
|
|
163
|
+
} catch (err) {
|
|
164
|
+
console.error('Error in onMount:', err);
|
|
165
|
+
error = 'Failed to initialize PDF viewer';
|
|
166
|
+
dispatch('error', { message: 'Failed to initialize PDF viewer' });
|
|
167
|
+
} finally {
|
|
168
|
+
loading = false;
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// Watch for URL changes - only trigger load if URL actually changes
|
|
173
|
+
$: if (url && mounted && !loading && url !== currentUrl) {
|
|
174
|
+
if (showLogs) console.log('URL changed, loading PDF');
|
|
175
|
+
currentUrl = url;
|
|
176
|
+
loadPDF();
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Watch for canvasContainer binding to become available
|
|
180
|
+
$: if (canvasContainer && !canvasContainer.querySelector('canvas') && pdfDoc && renderingPhase === 'calculating_dimensions') {
|
|
181
|
+
if (showLogs) console.log('Canvas container now available, continuing with render');
|
|
182
|
+
renderPDF();
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
async function loadPDF() {
|
|
186
|
+
if (!url || !browser) {
|
|
187
|
+
console.error('Cannot load PDF: missing URL or not in browser');
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (!containerDiv) {
|
|
192
|
+
console.error('Container div not found');
|
|
193
|
+
error = 'Container not available';
|
|
194
|
+
dispatch('error', { message: 'Container not available' });
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
try {
|
|
199
|
+
// Reset state
|
|
200
|
+
loading = true;
|
|
201
|
+
error = null;
|
|
202
|
+
isCanvasReady = false;
|
|
203
|
+
showPdfContent = false;
|
|
204
|
+
loadedFromCache = false;
|
|
205
|
+
|
|
206
|
+
// Get absolute URL for cache key
|
|
207
|
+
const absoluteUrl = getAbsoluteUrl(url);
|
|
208
|
+
|
|
209
|
+
// Check if the PDF is in the cache
|
|
210
|
+
const cachedEntry = pdfCache.get(absoluteUrl);
|
|
211
|
+
|
|
212
|
+
// Use the cached PDF document
|
|
213
|
+
if (cachedEntry) {
|
|
214
|
+
if (showLogs) console.log('Using cached PDF document:', absoluteUrl);
|
|
215
|
+
pdfDoc = cachedEntry.document;
|
|
216
|
+
pageCount = pdfDoc.numPages;
|
|
217
|
+
pageNum = cachedEntry.pageNumber; // Restore the last viewed page
|
|
218
|
+
loadedFromCache = true;
|
|
219
|
+
renderingPhase = 'calculating_dimensions';
|
|
220
|
+
|
|
221
|
+
// Calculate dimensions but don't apply them yet
|
|
222
|
+
if (showLogs) console.log('Calculating dimensions for cached PDF, container width:', containerDiv.clientWidth);
|
|
223
|
+
|
|
224
|
+
const page = await pdfDoc.getPage(pageNum);
|
|
225
|
+
const containerWidth = containerDiv.clientWidth;
|
|
226
|
+
const viewport = page.getViewport({ scale: 1.0 });
|
|
227
|
+
scale = (containerWidth / viewport.width);
|
|
228
|
+
|
|
229
|
+
// Store calculated dimensions
|
|
230
|
+
canvasWidth = viewport.width * scale;
|
|
231
|
+
canvasHeight = viewport.height * scale;
|
|
232
|
+
|
|
233
|
+
if (showLogs) {
|
|
234
|
+
console.log('Dimensions calculated for cached PDF:', {
|
|
235
|
+
containerWidth,
|
|
236
|
+
originalWidth: viewport.width,
|
|
237
|
+
originalHeight: viewport.height,
|
|
238
|
+
scale,
|
|
239
|
+
canvasWidth,
|
|
240
|
+
canvasHeight,
|
|
241
|
+
pageNum
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Wait for the UI to update
|
|
246
|
+
await tick();
|
|
247
|
+
|
|
248
|
+
// If canvasContainer is already bound, proceed with rendering
|
|
249
|
+
if (canvasContainer) {
|
|
250
|
+
if (showLogs) console.log('Canvas container available, rendering cached PDF');
|
|
251
|
+
await renderPDF(canvasWidth, canvasHeight);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// Load the PDF from URL
|
|
255
|
+
else {
|
|
256
|
+
|
|
257
|
+
renderingPhase = 'loading_pdf';
|
|
258
|
+
pdfLoadStartTime = Date.now();
|
|
259
|
+
|
|
260
|
+
// Reset canvas size to initial dimensions during loading
|
|
261
|
+
canvasWidth = initialContainerWidth;
|
|
262
|
+
canvasHeight = initialContainerHeight;
|
|
263
|
+
|
|
264
|
+
if (showLogs) console.log('Loading PDF from URL:', { url: absoluteUrl });
|
|
265
|
+
|
|
266
|
+
// Load PDF directly with URL
|
|
267
|
+
const loadingTask = pdfjsLib.getDocument(absoluteUrl);
|
|
268
|
+
pdfDoc = await loadingTask.promise;
|
|
269
|
+
if (showLogs) console.log('PDF loaded successfully:', pdfDoc);
|
|
270
|
+
|
|
271
|
+
// Update the page count
|
|
272
|
+
pageCount = pdfDoc.numPages;
|
|
273
|
+
pageNum = 1; // Start at first page for newly loaded PDFs
|
|
274
|
+
|
|
275
|
+
// Cache the loaded PDF document
|
|
276
|
+
pdfCache.set(absoluteUrl, pdfDoc, pageNum);
|
|
277
|
+
|
|
278
|
+
if (showLogs) {
|
|
279
|
+
console.log('PDF loaded successfully and cached:', {
|
|
280
|
+
pageCount,
|
|
281
|
+
loadTime: Math.round((Date.now() - pdfLoadStartTime) / 100) / 10 + 's'
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Calculate dimensions but don't apply them yet
|
|
286
|
+
renderingPhase = 'calculating_dimensions';
|
|
287
|
+
if (showLogs) console.log('Calculating dimensions, container width:', containerDiv.clientWidth);
|
|
288
|
+
|
|
289
|
+
const page = await pdfDoc.getPage(1);
|
|
290
|
+
const containerWidth = containerDiv.clientWidth;
|
|
291
|
+
const viewport = page.getViewport({ scale: 1.0 });
|
|
292
|
+
scale = (containerWidth / viewport.width);
|
|
293
|
+
|
|
294
|
+
// Store calculated dimensions but don't apply them until rendering is complete
|
|
295
|
+
const calculatedWidth = viewport.width * scale;
|
|
296
|
+
const calculatedHeight = viewport.height * scale;
|
|
297
|
+
|
|
298
|
+
if (showLogs) {
|
|
299
|
+
console.log('Dimensions calculated:', {
|
|
300
|
+
containerWidth,
|
|
301
|
+
originalWidth: viewport.width,
|
|
302
|
+
originalHeight: viewport.height,
|
|
303
|
+
scale,
|
|
304
|
+
calculatedWidth,
|
|
305
|
+
calculatedHeight
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Wait for the UI to update
|
|
310
|
+
await tick();
|
|
311
|
+
|
|
312
|
+
// If canvasContainer is already bound, proceed with rendering
|
|
313
|
+
if (canvasContainer) {
|
|
314
|
+
if (showLogs) console.log('Canvas container available, rendering PDF');
|
|
315
|
+
await renderPDF(calculatedWidth, calculatedHeight);
|
|
316
|
+
} else {
|
|
317
|
+
if (showLogs) console.log('Canvas container not available yet, waiting for binding');
|
|
318
|
+
// Store dimensions for later use when container becomes available
|
|
319
|
+
canvasWidth = calculatedWidth;
|
|
320
|
+
canvasHeight = calculatedHeight;
|
|
321
|
+
// The reactive statement will catch when canvasContainer becomes available
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
} catch (err) {
|
|
325
|
+
if(showLogs) console.error('Error loading PDF:', err);
|
|
326
|
+
const errorMessage = err instanceof Error ? err.message : 'Failed to load PDF';
|
|
327
|
+
error = errorMessage;
|
|
328
|
+
dispatch('error', { message: errorMessage });
|
|
329
|
+
pdfDoc = null;
|
|
330
|
+
renderingPhase = 'error';
|
|
331
|
+
isCanvasReady = false;
|
|
332
|
+
} finally {
|
|
333
|
+
loading = false;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
async function renderPDF(width?: number, height?: number) {
|
|
338
|
+
if (!pdfDoc) {
|
|
339
|
+
console.error('Cannot render PDF: missing PDF');
|
|
340
|
+
error = 'PDF not available';
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
if (!canvasContainer) {
|
|
345
|
+
console.error('Cannot render PDF: canvas container not available');
|
|
346
|
+
error = 'Canvas container not available';
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
try {
|
|
351
|
+
renderingPhase = 'rendering';
|
|
352
|
+
renderStartTime = Date.now();
|
|
353
|
+
if (showLogs) console.log('Starting PDF render');
|
|
354
|
+
|
|
355
|
+
// Clear any existing canvas
|
|
356
|
+
canvasContainer.innerHTML = '';
|
|
357
|
+
|
|
358
|
+
// Apply final dimensions if provided
|
|
359
|
+
if (width && height) {
|
|
360
|
+
canvasWidth = width;
|
|
361
|
+
canvasHeight = height;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
if (showLogs) {
|
|
365
|
+
console.log('Using dimensions for rendering:', {
|
|
366
|
+
canvasWidth,
|
|
367
|
+
canvasHeight
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// Create a new canvas element
|
|
372
|
+
const canvas = document.createElement('canvas');
|
|
373
|
+
canvas.className = 'max-w-full h-auto mx-auto';
|
|
374
|
+
canvas.width = canvasWidth;
|
|
375
|
+
canvas.height = canvasHeight;
|
|
376
|
+
|
|
377
|
+
// Add the canvas to the container
|
|
378
|
+
canvasContainer.appendChild(canvas);
|
|
379
|
+
|
|
380
|
+
if (showLogs) {
|
|
381
|
+
console.log('Canvas created and added to DOM:', {
|
|
382
|
+
width: canvas.width,
|
|
383
|
+
height: canvas.height
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
// Render the current page (pageNum might be restored from cache)
|
|
388
|
+
await renderPage(pageNum, canvas);
|
|
389
|
+
|
|
390
|
+
if (showLogs) console.log('Render complete, setting isCanvasReady to true');
|
|
391
|
+
renderingPhase = 'complete';
|
|
392
|
+
|
|
393
|
+
// Now that rendering is complete, set isCanvasReady to true
|
|
394
|
+
// This will trigger the size change and content display
|
|
395
|
+
isCanvasReady = true;
|
|
396
|
+
|
|
397
|
+
// Show PDF content after a short delay to ensure everything is ready
|
|
398
|
+
setTimeout(() => {
|
|
399
|
+
showPdfContent = true;
|
|
400
|
+
}, 100);
|
|
401
|
+
} catch (err) {
|
|
402
|
+
console.error('Error in renderPDF:', err);
|
|
403
|
+
error = err instanceof Error ? err.message : 'Failed to render PDF';
|
|
404
|
+
renderingPhase = 'error';
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
function getAbsoluteUrl(relativeUrl: string): string {
|
|
409
|
+
if (relativeUrl.startsWith('http://') || relativeUrl.startsWith('https://')) {
|
|
410
|
+
return relativeUrl;
|
|
411
|
+
}
|
|
412
|
+
const baseUrl = window.location.origin + (base || '');
|
|
413
|
+
const cleanRelativeUrl = relativeUrl.startsWith('/') ? relativeUrl.slice(1) : relativeUrl;
|
|
414
|
+
const cleanBaseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
|
|
415
|
+
return `${cleanBaseUrl}/${cleanRelativeUrl}`;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
async function renderPage(num: number, canvas: HTMLCanvasElement) {
|
|
419
|
+
if (!pdfDoc) {
|
|
420
|
+
console.error('Cannot render: missing PDF');
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
if (!canvas) {
|
|
425
|
+
console.error('Cannot render: missing canvas');
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
pageRendering = true;
|
|
430
|
+
const pageRenderStart = Date.now();
|
|
431
|
+
try {
|
|
432
|
+
if (showLogs) console.log('Starting page render:', num);
|
|
433
|
+
const page = await pdfDoc.getPage(num);
|
|
434
|
+
const scaledViewport = page.getViewport({ scale });
|
|
435
|
+
|
|
436
|
+
const ctx = canvas.getContext('2d');
|
|
437
|
+
if (!ctx) throw new Error('Could not get canvas context');
|
|
438
|
+
|
|
439
|
+
if (showLogs) {
|
|
440
|
+
console.log('Rendering to canvas context:', {
|
|
441
|
+
canvasWidth: canvas.width,
|
|
442
|
+
canvasHeight: canvas.height,
|
|
443
|
+
viewportWidth: scaledViewport.width,
|
|
444
|
+
viewportHeight: scaledViewport.height
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
await page.render({
|
|
449
|
+
canvasContext: ctx,
|
|
450
|
+
viewport: scaledViewport
|
|
451
|
+
}).promise;
|
|
452
|
+
|
|
453
|
+
if (showLogs) {
|
|
454
|
+
console.log('Page rendered successfully', {
|
|
455
|
+
renderTime: Math.round((Date.now() - pageRenderStart) / 100) / 10 + 's',
|
|
456
|
+
totalTime: Math.round((Date.now() - renderStartTime) / 100) / 10 + 's'
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
pageRendering = false;
|
|
461
|
+
pageNum = num;
|
|
462
|
+
|
|
463
|
+
// Update the page number in the cache
|
|
464
|
+
if (pdfDoc && url) {
|
|
465
|
+
const absoluteUrl = getAbsoluteUrl(url);
|
|
466
|
+
pdfCache.updatePageNumber(absoluteUrl, pageNum);
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
if (pageNumPending !== null) {
|
|
470
|
+
renderPage(pageNumPending, canvas);
|
|
471
|
+
pageNumPending = null;
|
|
472
|
+
}
|
|
473
|
+
} catch (err) {
|
|
474
|
+
console.error('Error rendering page:', err);
|
|
475
|
+
error = err instanceof Error ? err.message : 'Failed to render page';
|
|
476
|
+
pageRendering = false;
|
|
477
|
+
renderingPhase = 'error';
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
function queueRenderPage(num: number) {
|
|
482
|
+
if (pageRendering) {
|
|
483
|
+
pageNumPending = num;
|
|
484
|
+
} else {
|
|
485
|
+
// Get the canvas from the container
|
|
486
|
+
const canvas = canvasContainer?.querySelector('canvas') as HTMLCanvasElement;
|
|
487
|
+
if (canvas) {
|
|
488
|
+
renderPage(num, canvas);
|
|
489
|
+
} else {
|
|
490
|
+
console.error('Cannot queue render: no canvas found');
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
function onPrevPage() {
|
|
496
|
+
if (pageNum <= 1) return;
|
|
497
|
+
queueRenderPage(pageNum - 1);
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
function onNextPage() {
|
|
501
|
+
if (pageNum >= pageCount) return;
|
|
502
|
+
queueRenderPage(pageNum + 1);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// Dispatch the pageChange event when the page changes
|
|
506
|
+
$: if (pdfDoc && pageNum > 0 && pageCount > 0) {
|
|
507
|
+
dispatch('pageChange', { page: pageNum, totalPages: pageCount });
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
onDestroy(() => {
|
|
511
|
+
if (enableCacheClearing) {
|
|
512
|
+
window.removeEventListener('keydown', handleKeyDown);
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
// Don't destroy the PDF document on component destroy
|
|
516
|
+
// as it's now cached in the store
|
|
517
|
+
// The store will handle proper cleanup when needed
|
|
518
|
+
|
|
519
|
+
// Just clear the local reference
|
|
520
|
+
pdfDoc = null;
|
|
521
|
+
});
|
|
522
|
+
</script>
|
|
523
|
+
|
|
524
|
+
<!-- PDF Viewer HTML template -->
|
|
525
|
+
|
|
526
|
+
<div class="{className ? className + ' ' : ''}pdf-viewer-container w-full h-full px-4 widgetic-colors relative" bind:this={containerDiv} style={style}>
|
|
527
|
+
<!-- Always render loading or error state on top of content -->
|
|
528
|
+
{#if !mounted || loading || (!isCanvasReady && !error)}
|
|
529
|
+
<div class="text-[hsl(var(--grey5))] p-6 absolute z-10 widgetic-colors flex items-center justify-center inset-0">
|
|
530
|
+
Loading PDF...
|
|
531
|
+
</div>
|
|
532
|
+
{:else if error}
|
|
533
|
+
<div class="pdf-error-overlay bg-[hsl(var(--grey1))] text-[hsl(var(--grey2))] inset-4 px-4 absolute z-10 flex flex-col items-center justify-center">
|
|
534
|
+
<p class="text-[hsl(var(--error))] mb-2">Failed to load PDF</p>
|
|
535
|
+
<p class="text-[hsl(var(--grey5))] text-sm">{error}</p>
|
|
536
|
+
</div>
|
|
537
|
+
{/if}
|
|
538
|
+
|
|
539
|
+
<!-- Always render the content area regardless of loading state -->
|
|
540
|
+
<div class="pdf-root-container flex flex-col w-full {!isCanvasReady ? 'opacity-0' : 'opacity-100'} rounded-large bg-[hsl(var(--grey1))] relative"
|
|
541
|
+
style="height: {isCanvasReady ? 'auto' : `${initialContainerHeight}px`};">
|
|
542
|
+
<!-- Page Navigation Bar -->
|
|
543
|
+
<div class="page-navigation-bar flex items-center justify-center h-[54px] widgetic-colors border-b border-[hsl(var(--grey2))] w-full">
|
|
544
|
+
<div class="flex items-center gap-3 w-full max-w-[200px] justify-between px-0">
|
|
545
|
+
<button
|
|
546
|
+
class="pdf-nav-button h-9 w-9 flex items-center justify-center rounded-small bg-white border border-[hsl(var(--grey2))] transition-colors group active:scale-95 disabled:opacity-50"
|
|
547
|
+
onclick={onPrevPage}
|
|
548
|
+
disabled={pageNum <= 1}
|
|
549
|
+
aria-label="Previous page"
|
|
550
|
+
>
|
|
551
|
+
<IconChevronLeft
|
|
552
|
+
class="!text-[hsl(var(--grey5))] group-hover:!text-[hsl(var(--grey7))]"
|
|
553
|
+
style="width: 20px !important; height: 20px !important; min-width: 20px !important; min-height: 20px !important; max-width: 20px !important; max-height: 20px !important;"
|
|
554
|
+
/>
|
|
555
|
+
</button>
|
|
556
|
+
|
|
557
|
+
<span class="subtext text-[hsl(var(--grey7))]">Page {pageNum} of {pageCount || '?'}</span>
|
|
558
|
+
|
|
559
|
+
<button
|
|
560
|
+
class="pdf-nav-button h-9 w-9 flex items-center justify-center rounded-small bg-white border border-[hsl(var(--grey2))] transition-colors group active:scale-95 disabled:opacity-50"
|
|
561
|
+
onclick={onNextPage}
|
|
562
|
+
disabled={pageNum >= pageCount}
|
|
563
|
+
aria-label="Next page"
|
|
564
|
+
>
|
|
565
|
+
<IconChevronRight
|
|
566
|
+
class="!text-[hsl(var(--grey5))] group-hover:!text-[hsl(var(--grey7))]"
|
|
567
|
+
style="width: 20px !important; height: 20px !important; min-width: 20px !important; min-height: 20px !important; max-width: 20px !important; max-height: 20px !important;"
|
|
568
|
+
/>
|
|
569
|
+
</button>
|
|
570
|
+
</div>
|
|
571
|
+
</div>
|
|
572
|
+
|
|
573
|
+
<!-- PDF Canvas Container - always rendered but initially hidden -->
|
|
574
|
+
<WScrollArea class="pdf-content-scroll-area" type="always" scrollOutside={true}>
|
|
575
|
+
<div class="canvas-container" bind:this={canvasContainer}
|
|
576
|
+
style="min-height: {initialContainerHeight}px; max-height: {scrolledAreaMaxHeight}px;"
|
|
577
|
+
>
|
|
578
|
+
<!-- Canvas will be inserted programmatically here -->
|
|
579
|
+
</div>
|
|
580
|
+
</WScrollArea>
|
|
581
|
+
</div>
|
|
582
|
+
</div>
|
|
583
|
+
|
|
584
|
+
<style>
|
|
585
|
+
:global(.canvas-container canvas) {
|
|
586
|
+
margin: 0;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
/* Ensure the loading container has a minimum size */
|
|
590
|
+
.pdf-viewer-container {
|
|
591
|
+
min-width: 300px;
|
|
592
|
+
min-height: 200px;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
/* Add pseudo-element border ::after that stays on top */
|
|
596
|
+
.pdf-root-container::after {
|
|
597
|
+
content: '';
|
|
598
|
+
position: absolute;
|
|
599
|
+
top: 0;
|
|
600
|
+
left: 0;
|
|
601
|
+
width: 100%;
|
|
602
|
+
height: 100%;
|
|
603
|
+
border: 1px solid hsl(var(--grey2));
|
|
604
|
+
border-radius: var(--radius-large); /* Matches rounded-large */
|
|
605
|
+
z-index: 20; /* Higher than any child */
|
|
606
|
+
pointer-events: none; /* Allows clicking through the border */
|
|
607
|
+
}
|
|
608
|
+
</style>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
+
$$bindings?: Bindings;
|
|
4
|
+
} & Exports;
|
|
5
|
+
(internal: unknown, props: Props & {
|
|
6
|
+
$$events?: Events;
|
|
7
|
+
$$slots?: Slots;
|
|
8
|
+
}): Exports & {
|
|
9
|
+
$set?: any;
|
|
10
|
+
$on?: any;
|
|
11
|
+
};
|
|
12
|
+
z_$$bindings?: Bindings;
|
|
13
|
+
}
|
|
14
|
+
declare const PdfViewer: $$__sveltets_2_IsomorphicComponent<{
|
|
15
|
+
class?: string;
|
|
16
|
+
style?: string;
|
|
17
|
+
url?: string;
|
|
18
|
+
enableCacheClearing?: boolean;
|
|
19
|
+
}, {
|
|
20
|
+
error: CustomEvent<{
|
|
21
|
+
message: string;
|
|
22
|
+
}>;
|
|
23
|
+
pageChange: CustomEvent<{
|
|
24
|
+
page: number;
|
|
25
|
+
totalPages: number;
|
|
26
|
+
}>;
|
|
27
|
+
cacheCleared: CustomEvent<void>;
|
|
28
|
+
} & {
|
|
29
|
+
[evt: string]: CustomEvent<any>;
|
|
30
|
+
}, {}, {}, string>;
|
|
31
|
+
type PdfViewer = InstanceType<typeof PdfViewer>;
|
|
32
|
+
export default PdfViewer;
|