Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b97601a876 | |||
| 5ddeb8fe7c | |||
| 25f46162c5 | |||
| b84b0e7ce6 | |||
| 69840de3a6 | |||
| 85badfbd21 |
24
changelog.md
24
changelog.md
@@ -1,5 +1,29 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2026-01-28 - 3.41.2 - fix(dees-pdf-viewer)
|
||||||
|
account for devicePixelRatio when setting canvas dimensions and scale 2D context to render crisp PDF pages and thumbnails on high-DPI displays
|
||||||
|
|
||||||
|
- Multiply canvas.width and canvas.height by window.devicePixelRatio (dpr) and use Math.floor to set the actual pixel buffer size
|
||||||
|
- Call ctx.scale(dpr, dpr) so drawing is rendered at device pixels while keeping CSS display size unchanged
|
||||||
|
- Apply the same high-DPI adjustments to both main page rendering and thumbnail generation
|
||||||
|
- Keep canvas.style.width and canvas.style.height set to viewport dimensions to preserve layout
|
||||||
|
|
||||||
|
## 2026-01-27 - 3.41.1 - fix(dataview-codebox)
|
||||||
|
fix dees-dataview codebox layout to ensure full-height, proper flex behavior and scrolling; bump internal dependencies
|
||||||
|
|
||||||
|
- Updated CSS in ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.ts: added height:100%, box-sizing, display:flex and flex-direction:column on container, set flex-shrink on header elements, made code grid overflow:auto with flex:1 and min-height:0 to prevent overflow issues.
|
||||||
|
- Bumped dependencies in package.json: @design.estate/dees-domtools from ^2.3.7 to ^2.3.8 and @design.estate/dees-element from ^2.1.5 to ^2.1.6.
|
||||||
|
- Non-breaking visual/layout fix — suitable for a patch release.
|
||||||
|
|
||||||
|
## 2026-01-27 - 3.41.0 - feat(docs)
|
||||||
|
document new media & tile components and expand Workspace/IDE component docs; update component count to 90+
|
||||||
|
|
||||||
|
- Updated README component count from 70+ to 90+.
|
||||||
|
- Added Media & Tile components documentation (DeesTilePdf, DeesTileImage, DeesTileAudio, DeesTileVideo, DeesTileNote, DeesTileFolder, DeesPreview, DeesPdfViewer, DeesImageViewer, DeesAudioViewer, DeesVideoViewer).
|
||||||
|
- Expanded Workspace/IDE documentation and introduced workspace subcomponents (DeesWorkspace, DeesWorkspaceMonaco, DeesWorkspaceDiffEditor, DeesWorkspaceFiletree, DeesWorkspaceTerminal, DeesWorkspaceTerminalPreview, DeesWorkspaceMarkdown, DeesWorkspaceMarkdownoutlet, DeesWorkspaceBottombar).
|
||||||
|
- Enhanced Contextmenu docs to demonstrate nested submenus and programmatic API usage.
|
||||||
|
- Added ITileFolderItem interface example for tile folder items.
|
||||||
|
|
||||||
## 2026-01-27 - 3.40.0 - feat(dees-tile)
|
## 2026-01-27 - 3.40.0 - feat(dees-tile)
|
||||||
unify tile badge styling and markup; replace component-specific badge classes with shared tile-badge classes and update related imports/tests
|
unify tile badge styling and markup; replace component-specific badge classes with shared tile-badge classes and update related imports/tests
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@design.estate/dees-catalog",
|
"name": "@design.estate/dees-catalog",
|
||||||
"version": "3.40.0",
|
"version": "3.41.2",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
|
"description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
|
||||||
"main": "dist_ts_web/index.js",
|
"main": "dist_ts_web/index.js",
|
||||||
@@ -16,8 +16,8 @@
|
|||||||
"author": "Lossless GmbH",
|
"author": "Lossless GmbH",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@design.estate/dees-domtools": "^2.3.7",
|
"@design.estate/dees-domtools": "^2.3.8",
|
||||||
"@design.estate/dees-element": "^2.1.5",
|
"@design.estate/dees-element": "^2.1.6",
|
||||||
"@design.estate/dees-wcctools": "^3.8.0",
|
"@design.estate/dees-wcctools": "^3.8.0",
|
||||||
"@fortawesome/fontawesome-svg-core": "^7.1.0",
|
"@fortawesome/fontawesome-svg-core": "^7.1.0",
|
||||||
"@fortawesome/free-brands-svg-icons": "^7.1.0",
|
"@fortawesome/free-brands-svg-icons": "^7.1.0",
|
||||||
|
|||||||
34
pnpm-lock.yaml
generated
34
pnpm-lock.yaml
generated
@@ -9,11 +9,11 @@ importers:
|
|||||||
.:
|
.:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@design.estate/dees-domtools':
|
'@design.estate/dees-domtools':
|
||||||
specifier: ^2.3.7
|
specifier: ^2.3.8
|
||||||
version: 2.3.7
|
version: 2.3.8
|
||||||
'@design.estate/dees-element':
|
'@design.estate/dees-element':
|
||||||
specifier: ^2.1.5
|
specifier: ^2.1.6
|
||||||
version: 2.1.5
|
version: 2.1.6
|
||||||
'@design.estate/dees-wcctools':
|
'@design.estate/dees-wcctools':
|
||||||
specifier: ^3.8.0
|
specifier: ^3.8.0
|
||||||
version: 3.8.0
|
version: 3.8.0
|
||||||
@@ -352,11 +352,11 @@ packages:
|
|||||||
'@design.estate/dees-comms@1.0.30':
|
'@design.estate/dees-comms@1.0.30':
|
||||||
resolution: {integrity: sha512-KchMlklJfKAjQiJiR0xmofXtQ27VgZtBIxcMwPE9d+h3jJRv+lPZxzBQVOM0eyM0uS44S5vJMZ11IeV4uDXSHg==}
|
resolution: {integrity: sha512-KchMlklJfKAjQiJiR0xmofXtQ27VgZtBIxcMwPE9d+h3jJRv+lPZxzBQVOM0eyM0uS44S5vJMZ11IeV4uDXSHg==}
|
||||||
|
|
||||||
'@design.estate/dees-domtools@2.3.7':
|
'@design.estate/dees-domtools@2.3.8':
|
||||||
resolution: {integrity: sha512-MXoDBrP7JTOpni8b12aFXHJKnKBoQppM8cYBuL9cesRmCVGdB7p39XMRQ7dRyMhmmyr66L3cOczhiCV6febCwg==}
|
resolution: {integrity: sha512-jUG9GMvPxKMwmRIZ9oLTL3c8hHvHuiwIk8cTrYnuZzGO/uJJ5/czk9o6LRXUuCOOG7TRLtqgOpK8EEQgaadfZA==}
|
||||||
|
|
||||||
'@design.estate/dees-element@2.1.5':
|
'@design.estate/dees-element@2.1.6':
|
||||||
resolution: {integrity: sha512-czUOFvBiUKi34I+/keDRDc71fuORZS0NfbSuD2jJ4D1ODiTPjaZ6A6SkdQ2QqCEzVsx73XF99Pu8pxPnaOLnHg==}
|
resolution: {integrity: sha512-7zyHkUjB8UEQgT9VbB2IJtc/yuPt9CI5JGel3b6BxA1kecY64ceIjFvof1uIkc0QP8q2fMLLY45r1c+9zDTjzg==}
|
||||||
|
|
||||||
'@design.estate/dees-wcctools@3.8.0':
|
'@design.estate/dees-wcctools@3.8.0':
|
||||||
resolution: {integrity: sha512-CC14iVKUrguzD9jIrdPBd9fZ4egVJEZMxl5y8iy0l7WLumeoYvGsoXj5INVkRPLRVLqziIdi4Je1hXqHt2NU+g==}
|
resolution: {integrity: sha512-CC14iVKUrguzD9jIrdPBd9fZ4egVJEZMxl5y8iy0l7WLumeoYvGsoXj5INVkRPLRVLqziIdi4Je1hXqHt2NU+g==}
|
||||||
@@ -4730,8 +4730,8 @@ snapshots:
|
|||||||
|
|
||||||
'@design.estate/dees-catalog@3.37.0(@tiptap/pm@2.27.2)':
|
'@design.estate/dees-catalog@3.37.0(@tiptap/pm@2.27.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@design.estate/dees-domtools': 2.3.7
|
'@design.estate/dees-domtools': 2.3.8
|
||||||
'@design.estate/dees-element': 2.1.5
|
'@design.estate/dees-element': 2.1.6
|
||||||
'@design.estate/dees-wcctools': 3.8.0
|
'@design.estate/dees-wcctools': 3.8.0
|
||||||
'@fortawesome/fontawesome-svg-core': 7.1.0
|
'@fortawesome/fontawesome-svg-core': 7.1.0
|
||||||
'@fortawesome/free-brands-svg-icons': 7.1.0
|
'@fortawesome/free-brands-svg-icons': 7.1.0
|
||||||
@@ -4770,7 +4770,7 @@ snapshots:
|
|||||||
'@push.rocks/smartdelay': 3.0.5
|
'@push.rocks/smartdelay': 3.0.5
|
||||||
broadcast-channel: 7.3.0
|
broadcast-channel: 7.3.0
|
||||||
|
|
||||||
'@design.estate/dees-domtools@2.3.7':
|
'@design.estate/dees-domtools@2.3.8':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@api.global/typedrequest': 3.2.5
|
'@api.global/typedrequest': 3.2.5
|
||||||
'@design.estate/dees-comms': 1.0.30
|
'@design.estate/dees-comms': 1.0.30
|
||||||
@@ -4796,9 +4796,9 @@ snapshots:
|
|||||||
- supports-color
|
- supports-color
|
||||||
- vue
|
- vue
|
||||||
|
|
||||||
'@design.estate/dees-element@2.1.5':
|
'@design.estate/dees-element@2.1.6':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@design.estate/dees-domtools': 2.3.7
|
'@design.estate/dees-domtools': 2.3.8
|
||||||
'@push.rocks/isounique': 1.0.5
|
'@push.rocks/isounique': 1.0.5
|
||||||
'@push.rocks/smartrx': 3.0.10
|
'@push.rocks/smartrx': 3.0.10
|
||||||
lit: 3.3.2
|
lit: 3.3.2
|
||||||
@@ -4810,8 +4810,8 @@ snapshots:
|
|||||||
|
|
||||||
'@design.estate/dees-wcctools@3.8.0':
|
'@design.estate/dees-wcctools@3.8.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@design.estate/dees-domtools': 2.3.7
|
'@design.estate/dees-domtools': 2.3.8
|
||||||
'@design.estate/dees-element': 2.1.5
|
'@design.estate/dees-element': 2.1.6
|
||||||
'@push.rocks/smartdelay': 3.0.5
|
'@push.rocks/smartdelay': 3.0.5
|
||||||
lit: 3.3.2
|
lit: 3.3.2
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -5921,7 +5921,7 @@ snapshots:
|
|||||||
|
|
||||||
'@push.rocks/smartntml@2.0.8':
|
'@push.rocks/smartntml@2.0.8':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@design.estate/dees-element': 2.1.5
|
'@design.estate/dees-element': 2.1.6
|
||||||
'@happy-dom/global-registrator': 15.11.7
|
'@happy-dom/global-registrator': 15.11.7
|
||||||
'@push.rocks/smartpromise': 4.2.3
|
'@push.rocks/smartpromise': 4.2.3
|
||||||
fake-indexeddb: 6.2.5
|
fake-indexeddb: 6.2.5
|
||||||
@@ -6178,7 +6178,7 @@ snapshots:
|
|||||||
|
|
||||||
'@push.rocks/taskbuffer@3.5.0':
|
'@push.rocks/taskbuffer@3.5.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@design.estate/dees-element': 2.1.5
|
'@design.estate/dees-element': 2.1.6
|
||||||
'@push.rocks/lik': 6.2.2
|
'@push.rocks/lik': 6.2.2
|
||||||
'@push.rocks/smartdelay': 3.0.5
|
'@push.rocks/smartdelay': 3.0.5
|
||||||
'@push.rocks/smartlog': 3.1.10
|
'@push.rocks/smartlog': 3.1.10
|
||||||
|
|||||||
274
readme.md
274
readme.md
@@ -1,6 +1,6 @@
|
|||||||
# @design.estate/dees-catalog
|
# @design.estate/dees-catalog
|
||||||
|
|
||||||
A comprehensive web components library built with TypeScript and LitElement, providing **70+ production-ready UI components** for building modern web applications with consistent design and behavior. 🚀
|
A comprehensive web components library built with TypeScript and LitElement, providing **90+ production-ready UI components** for building modern web applications with consistent design and behavior. 🚀
|
||||||
|
|
||||||
[](https://www.typescriptlang.org/)
|
[](https://www.typescriptlang.org/)
|
||||||
[](https://lit.dev/)
|
[](https://lit.dev/)
|
||||||
@@ -18,6 +18,8 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community
|
|||||||
- 🔧 **TypeScript-First** — Fully typed APIs with excellent IDE support
|
- 🔧 **TypeScript-First** — Fully typed APIs with excellent IDE support
|
||||||
- 🧩 **Modular** — Use only what you need, tree-shakeable architecture
|
- 🧩 **Modular** — Use only what you need, tree-shakeable architecture
|
||||||
- 🏗️ **Full App Shell** — `dees-appui` provides a complete application framework with menus, routing, activity log, and bottom bar
|
- 🏗️ **Full App Shell** — `dees-appui` provides a complete application framework with menus, routing, activity log, and bottom bar
|
||||||
|
- 🎬 **Media Components** — Rich tile-based previews for PDFs, images, audio, video, notes, and folders
|
||||||
|
- 💻 **IDE Workspace** — Full workspace component with Monaco editor, file tree, terminal, and diff viewer
|
||||||
|
|
||||||
## 📦 Installation
|
## 📦 Installation
|
||||||
|
|
||||||
@@ -55,12 +57,13 @@ For developers working on this library, please refer to the [UI Components Playb
|
|||||||
|----------|------------|
|
|----------|------------|
|
||||||
| **Core UI** | [`DeesButton`](#deesbutton), [`DeesButtonExit`](#deesbuttonexit), [`DeesButtonGroup`](#deesbuttongroup), [`DeesBadge`](#deesbadge), [`DeesChips`](#deeschips), [`DeesHeading`](#deesheading), [`DeesHint`](#deeshint), [`DeesIcon`](#deesicon), [`DeesLabel`](#deeslabel), [`DeesPanel`](#deespanel), [`DeesSearchbar`](#deessearchbar), [`DeesSpinner`](#deesspinner), [`DeesToast`](#deestoast), [`DeesWindowcontrols`](#deeswindowcontrols), [`DeesActionbar`](#deesactionbar) |
|
| **Core UI** | [`DeesButton`](#deesbutton), [`DeesButtonExit`](#deesbuttonexit), [`DeesButtonGroup`](#deesbuttongroup), [`DeesBadge`](#deesbadge), [`DeesChips`](#deeschips), [`DeesHeading`](#deesheading), [`DeesHint`](#deeshint), [`DeesIcon`](#deesicon), [`DeesLabel`](#deeslabel), [`DeesPanel`](#deespanel), [`DeesSearchbar`](#deessearchbar), [`DeesSpinner`](#deesspinner), [`DeesToast`](#deestoast), [`DeesWindowcontrols`](#deeswindowcontrols), [`DeesActionbar`](#deesactionbar) |
|
||||||
| **Forms** | [`DeesForm`](#deesform), [`DeesInputText`](#deesinputtext), [`DeesInputCheckbox`](#deesinputcheckbox), [`DeesInputDropdown`](#deesinputdropdown), [`DeesInputRadiogroup`](#deesinputradiogroup), [`DeesInputFileupload`](#deesinputfileupload), [`DeesInputIban`](#deesinputiban), [`DeesInputPhone`](#deesinputphone), [`DeesInputQuantitySelector`](#deesinputquantityselector), [`DeesInputMultitoggle`](#deesinputmultitoggle), [`DeesInputToggle`](#deesinputtoggle), [`DeesInputTags`](#deesinputtags), [`DeesInputTypelist`](#deesinputtypelist), [`DeesInputList`](#deesinputlist), [`DeesInputProfilepicture`](#deesinputprofilepicture), [`DeesInputRichtext`](#deesinputrichtext), [`DeesInputWysiwyg`](#deesinputwysiwyg), [`DeesInputDatepicker`](#deesinputdatepicker), [`DeesInputSearchselect`](#deesinputsearchselect), [`DeesInputCode`](#deesinputcode), [`DeesFormSubmit`](#deesformsubmit) |
|
| **Forms** | [`DeesForm`](#deesform), [`DeesInputText`](#deesinputtext), [`DeesInputCheckbox`](#deesinputcheckbox), [`DeesInputDropdown`](#deesinputdropdown), [`DeesInputRadiogroup`](#deesinputradiogroup), [`DeesInputFileupload`](#deesinputfileupload), [`DeesInputIban`](#deesinputiban), [`DeesInputPhone`](#deesinputphone), [`DeesInputQuantitySelector`](#deesinputquantityselector), [`DeesInputMultitoggle`](#deesinputmultitoggle), [`DeesInputToggle`](#deesinputtoggle), [`DeesInputTags`](#deesinputtags), [`DeesInputTypelist`](#deesinputtypelist), [`DeesInputList`](#deesinputlist), [`DeesInputProfilepicture`](#deesinputprofilepicture), [`DeesInputRichtext`](#deesinputrichtext), [`DeesInputWysiwyg`](#deesinputwysiwyg), [`DeesInputDatepicker`](#deesinputdatepicker), [`DeesInputSearchselect`](#deesinputsearchselect), [`DeesInputCode`](#deesinputcode), [`DeesFormSubmit`](#deesformsubmit) |
|
||||||
| **App Shell (Layout)** | [`DeesAppui`](#deesappui-), [`DeesAppuiMainmenu`](#deesappuimainmenu), [`DeesAppuiSecondarymenu`](#deesappuisecondarymenu), [`DeesAppuiMaincontent`](#deesappuimaincontent), [`DeesAppuiAppbar`](#deesappuiappbar), [`DeesAppuiActivitylog`](#deesappuiactivitylog), [`DeesAppuiBottombar`](#deesappuibottombar), [`DeesAppuiProfiledropdown`](#deesappuiprofiledropdown), [`DeesAppuiTabs`](#deesappuitabs), [`DeesMobileNavigation`](#deesmobilenavigation), [`DeesDashboardGrid`](#deesdashboardgrid) |
|
| **App Shell (Layout)** | [`DeesAppui`](#deesappui-️), [`DeesAppuiMainmenu`](#deesappuimainmenu), [`DeesAppuiSecondarymenu`](#deesappuisecondarymenu), [`DeesAppuiMaincontent`](#deesappuimaincontent), [`DeesAppuiAppbar`](#deesappuiappbar), [`DeesAppuiActivitylog`](#deesappuiactivitylog), [`DeesAppuiBottombar`](#deesappuibottombar), [`DeesAppuiProfiledropdown`](#deesappuiprofiledropdown), [`DeesAppuiTabs`](#deesappuitabs), [`DeesMobileNavigation`](#deesmobilenavigation), [`DeesDashboardGrid`](#deesdashboardgrid) |
|
||||||
| **Data Display** | [`DeesTable`](#deestable), [`DeesDataviewCodebox`](#deesdataviewcodebox), [`DeesDataviewStatusobject`](#deesdataviewstatusobject), [`DeesPdf`](#deespdf), [`DeesStatsGrid`](#deesstatsgrid), [`DeesPagination`](#deespagination) |
|
| **Data Display** | [`DeesTable`](#deestable), [`DeesDataviewCodebox`](#deesdataviewcodebox), [`DeesDataviewStatusobject`](#deesdataviewstatusobject), [`DeesPdf`](#deespdf), [`DeesStatsGrid`](#deesstatsgrid), [`DeesPagination`](#deespagination) |
|
||||||
|
| **Media & Tiles** | [`DeesTilePdf`](#deestilepdf), [`DeesTileImage`](#deestileimage), [`DeesTileAudio`](#deestileaudio), [`DeesTileVideo`](#deestilevideo), [`DeesTileNote`](#deestilenote), [`DeesTileFolder`](#deestilefolder), [`DeesPreview`](#deespreview), [`DeesPdfViewer`](#deespdfviewer), [`DeesPdfPreview`](#deespdfpreview), [`DeesImageViewer`](#deesimageviewer), [`DeesAudioViewer`](#deesaudioviewer), [`DeesVideoViewer`](#deesvideoviewer) |
|
||||||
| **Visualization** | [`DeesChartArea`](#deeschartarea), [`DeesChartLog`](#deeschartlog) |
|
| **Visualization** | [`DeesChartArea`](#deeschartarea), [`DeesChartLog`](#deeschartlog) |
|
||||||
| **Dialogs & Overlays** | [`DeesModal`](#deesmodal), [`DeesContextmenu`](#deescontextmenu), [`DeesSpeechbubble`](#deesspeechbubble), [`DeesWindowlayer`](#deeswindowlayer) |
|
| **Dialogs & Overlays** | [`DeesModal`](#deesmodal), [`DeesContextmenu`](#deescontextmenu), [`DeesSpeechbubble`](#deesspeechbubble), [`DeesWindowlayer`](#deeswindowlayer) |
|
||||||
| **Navigation** | [`DeesStepper`](#deesstepper), [`DeesProgressbar`](#deesprogressbar) |
|
| **Navigation** | [`DeesStepper`](#deesstepper), [`DeesProgressbar`](#deesprogressbar) |
|
||||||
| **Workspace / IDE** | [`DeesEditor`](#deeseditor), [`DeesTerminal`](#deesterminal), [`DeesUpdater`](#deesupdater) |
|
| **Workspace / IDE** | [`DeesWorkspace`](#deesworkspace), [`DeesWorkspaceMonaco`](#deesworkspacemonaco), [`DeesWorkspaceDiffEditor`](#deesworkspacediffeditor), [`DeesWorkspaceFiletree`](#deesworkspacefiletree), [`DeesWorkspaceTerminal`](#deesworkspaceterminal), [`DeesWorkspaceTerminalPreview`](#deesworkspaceterminalpreview), [`DeesWorkspaceMarkdown`](#deesworkspacemarkdown), [`DeesWorkspaceMarkdownoutlet`](#deesworkspacemarkdownoutlet), [`DeesWorkspaceBottombar`](#deesworkspacebottombar) |
|
||||||
| **Theming** | [`DeesTheme`](#deestheme) |
|
| **Theming** | [`DeesTheme`](#deestheme) |
|
||||||
| **Pre-built Templates** | [`DeesSimpleAppdash`](#deessimpleappdash), [`DeesSimpleLogin`](#deessimplelogin) |
|
| **Pre-built Templates** | [`DeesSimpleAppdash`](#deessimpleappdash), [`DeesSimpleLogin`](#deessimplelogin) |
|
||||||
| **Shopping** | [`DeesShoppingProductcard`](#deesshoppingproductcard) |
|
| **Shopping** | [`DeesShoppingProductcard`](#deesshoppingproductcard) |
|
||||||
@@ -1234,6 +1237,146 @@ Pagination component for navigating through large datasets.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Media & Tile Components 🎬
|
||||||
|
|
||||||
|
A rich collection of tile-based preview components for displaying media files in grids. All tiles share a consistent base class (`DeesTileBase`) with lazy loading via `IntersectionObserver`, hover interactions, click events, context menus, and three size variants (`small`, `default`, `large`).
|
||||||
|
|
||||||
|
All tile badges use a unified styling system with label-awareness — when a `label` is set, bottom badges automatically shift up to avoid overlapping.
|
||||||
|
|
||||||
|
#### `DeesTilePdf`
|
||||||
|
PDF document tile with live page preview on hover.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
<dees-tile-pdf
|
||||||
|
pdfUrl="/documents/report.pdf"
|
||||||
|
label="Annual Report"
|
||||||
|
clickable
|
||||||
|
@tile-click=${handleClick}
|
||||||
|
></dees-tile-pdf>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key Features:**
|
||||||
|
- Renders first page as canvas preview
|
||||||
|
- Hover to scrub through pages (mouse X position maps to page number)
|
||||||
|
- Shows page count badge, hover page indicator
|
||||||
|
- Detects A4/Letter vs non-standard aspect ratios
|
||||||
|
|
||||||
|
#### `DeesTileImage`
|
||||||
|
Image tile with lazy loading and dimension display.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
<dees-tile-image
|
||||||
|
src="/photos/landscape.jpg"
|
||||||
|
alt="Mountain landscape"
|
||||||
|
label="landscape.jpg"
|
||||||
|
clickable
|
||||||
|
@tile-click=${handleClick}
|
||||||
|
></dees-tile-image>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key Features:**
|
||||||
|
- Lazy loads image on scroll into view
|
||||||
|
- Shows image dimensions on hover (e.g. "1920 × 1080")
|
||||||
|
- Checkerboard background for transparent images
|
||||||
|
|
||||||
|
#### `DeesTileAudio`
|
||||||
|
Audio file tile with waveform visualization.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
<dees-tile-audio
|
||||||
|
src="/music/track.mp3"
|
||||||
|
title="Summer Vibes"
|
||||||
|
artist="DJ Example"
|
||||||
|
clickable
|
||||||
|
@tile-click=${handleClick}
|
||||||
|
></dees-tile-audio>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key Features:**
|
||||||
|
- Generates waveform visualization from audio data
|
||||||
|
- Shows duration badge (e.g. "3:42")
|
||||||
|
- Displays title and artist metadata
|
||||||
|
- Play overlay on hover
|
||||||
|
|
||||||
|
#### `DeesTileVideo`
|
||||||
|
Video tile with thumbnail capture and hover preview.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
<dees-tile-video
|
||||||
|
src="/videos/intro.mp4"
|
||||||
|
poster="/thumbs/intro.jpg"
|
||||||
|
label="Introduction"
|
||||||
|
clickable
|
||||||
|
@tile-click=${handleClick}
|
||||||
|
></dees-tile-video>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key Features:**
|
||||||
|
- Auto-captures first frame as thumbnail (or uses provided `poster`)
|
||||||
|
- Plays video preview on hover
|
||||||
|
- Shows duration badge
|
||||||
|
- Play button overlay
|
||||||
|
|
||||||
|
#### `DeesTileNote`
|
||||||
|
Code/text snippet tile with syntax-aware display.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
<dees-tile-note
|
||||||
|
title="config.ts"
|
||||||
|
language="TypeScript"
|
||||||
|
.content=${codeString}
|
||||||
|
clickable
|
||||||
|
@tile-click=${handleClick}
|
||||||
|
></dees-tile-note>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key Features:**
|
||||||
|
- Monospace font with line numbers
|
||||||
|
- Language badge (top-right)
|
||||||
|
- Scrollable content on hover (mouse X position controls scroll)
|
||||||
|
- Line indicator badge while scrolling
|
||||||
|
- Gradient fade at bottom
|
||||||
|
|
||||||
|
#### `DeesTileFolder`
|
||||||
|
Folder tile with 2×2 content preview grid.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
<dees-tile-folder
|
||||||
|
name="Project Assets"
|
||||||
|
.items=${[
|
||||||
|
{ type: 'image', name: 'logo.png', thumbnailSrc: '/thumbs/logo.png' },
|
||||||
|
{ type: 'pdf', name: 'spec.pdf' },
|
||||||
|
{ type: 'audio', name: 'jingle.mp3' },
|
||||||
|
{ type: 'video', name: 'demo.mp4' },
|
||||||
|
]}
|
||||||
|
clickable
|
||||||
|
@tile-click=${handleClick}
|
||||||
|
></dees-tile-folder>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key Features:**
|
||||||
|
- 2×2 preview grid showing first 4 items (thumbnails or type icons)
|
||||||
|
- Item count badge (e.g. "12 items")
|
||||||
|
- Folder icon header with name
|
||||||
|
- Supports: `pdf`, `image`, `audio`, `video`, `note`, `folder`, `unknown` types
|
||||||
|
|
||||||
|
#### `DeesPreview`
|
||||||
|
Unified preview component that auto-selects the right tile type based on content.
|
||||||
|
|
||||||
|
#### `DeesPdfViewer` / `DeesPdfPreview`
|
||||||
|
Full PDF viewing components with navigation controls.
|
||||||
|
|
||||||
|
#### `DeesImageViewer`
|
||||||
|
Full-screen image viewer with zoom and pan.
|
||||||
|
|
||||||
|
#### `DeesAudioViewer`
|
||||||
|
Audio playback component with waveform and controls.
|
||||||
|
|
||||||
|
#### `DeesVideoViewer`
|
||||||
|
Video playback component with standard controls.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### Visualization Components
|
### Visualization Components
|
||||||
|
|
||||||
#### `DeesChartArea`
|
#### `DeesChartArea`
|
||||||
@@ -1294,16 +1437,41 @@ DeesModal.createAndShow({
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### `DeesContextmenu`
|
#### `DeesContextmenu`
|
||||||
Context menu component for right-click actions.
|
Context menu component for right-click actions with nested submenu support.
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
<dees-contextmenu
|
// Programmatic usage
|
||||||
.items=${[
|
DeesContextmenu.openContextMenuWithOptions(mouseEvent, [
|
||||||
{ label: 'Edit', icon: 'edit', action: () => handleEdit() },
|
{
|
||||||
{ label: 'Delete', icon: 'trash', action: () => handleDelete() }
|
name: 'Edit',
|
||||||
]}
|
iconName: 'lucide:edit',
|
||||||
position="right"
|
action: async () => handleEdit()
|
||||||
></dees-contextmenu>
|
},
|
||||||
|
{ divider: true },
|
||||||
|
{
|
||||||
|
name: 'More Options',
|
||||||
|
iconName: 'lucide:moreHorizontal',
|
||||||
|
submenu: [
|
||||||
|
{ name: 'Duplicate', iconName: 'lucide:copy', action: async () => handleDuplicate() },
|
||||||
|
{ name: 'Archive', iconName: 'lucide:archive', action: async () => handleArchive() },
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Delete',
|
||||||
|
iconName: 'lucide:trash2',
|
||||||
|
action: async () => handleDelete()
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Component-based (implement getContextMenuItems on any element)
|
||||||
|
class MyComponent extends DeesElement {
|
||||||
|
getContextMenuItems() {
|
||||||
|
return [
|
||||||
|
{ name: 'View Details', iconName: 'lucide:eye', action: async () => { ... } },
|
||||||
|
{ name: 'Edit', iconName: 'lucide:edit', action: async () => { ... } },
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `DeesSpeechbubble`
|
#### `DeesSpeechbubble`
|
||||||
@@ -1395,51 +1563,68 @@ Theme provider component that wraps children and provides CSS custom properties
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Workspace / IDE Components
|
### Workspace / IDE Components 💻
|
||||||
|
|
||||||
#### `DeesEditor`
|
A full-featured IDE workspace component suite for building browser-based code editors, terminal interfaces, and documentation viewers.
|
||||||
Code editor component with syntax highlighting and code completion, powered by Monaco Editor.
|
|
||||||
|
#### `DeesWorkspace`
|
||||||
|
Top-level workspace shell that composes editor, file tree, terminal, and bottom bar into an IDE-like layout.
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
<dees-editor
|
<dees-workspace></dees-workspace>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `DeesWorkspaceMonaco`
|
||||||
|
Monaco Editor integration for code editing with full IntelliSense, syntax highlighting, and language support.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
<dees-workspace-monaco
|
||||||
.value=${code}
|
.value=${code}
|
||||||
@change=${handleCodeChange}
|
|
||||||
.language=${'typescript'}
|
.language=${'typescript'}
|
||||||
.theme=${'vs-dark'}
|
@change=${handleCodeChange}
|
||||||
.options=${{
|
></dees-workspace-monaco>
|
||||||
lineNumbers: true,
|
|
||||||
minimap: { enabled: true },
|
|
||||||
autoClosingBrackets: 'always'
|
|
||||||
}}
|
|
||||||
></dees-editor>
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `DeesTerminal`
|
#### `DeesWorkspaceDiffEditor`
|
||||||
Terminal emulator component for command-line interface.
|
Side-by-side diff editor powered by Monaco for comparing file versions.
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
<dees-terminal
|
<dees-workspace-diff-editor
|
||||||
.commands=${{
|
.originalValue=${originalCode}
|
||||||
'echo': (args) => `Echo: ${args.join(' ')}`,
|
.modifiedValue=${modifiedCode}
|
||||||
'help': () => 'Available commands: echo, help'
|
.language=${'typescript'}
|
||||||
}}
|
></dees-workspace-diff-editor>
|
||||||
.prompt=${'$'}
|
|
||||||
.welcomeMessage=${'Welcome! Type "help" for available commands.'}
|
|
||||||
></dees-terminal>
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `DeesUpdater`
|
#### `DeesWorkspaceFiletree`
|
||||||
Component for managing application updates and version control.
|
File tree navigation component with expand/collapse, file icons, and selection.
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
<dees-updater
|
<dees-workspace-filetree
|
||||||
.currentVersion=${'1.5.2'}
|
.files=${fileTreeData}
|
||||||
.checkInterval=${3600000}
|
@file-select=${handleFileSelect}
|
||||||
.autoUpdate=${false}
|
></dees-workspace-filetree>
|
||||||
@update-available=${handleUpdateAvailable}
|
|
||||||
></dees-updater>
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### `DeesWorkspaceTerminal`
|
||||||
|
Terminal emulator component powered by xterm.js.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
<dees-workspace-terminal></dees-workspace-terminal>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `DeesWorkspaceTerminalPreview`
|
||||||
|
Terminal with integrated preview pane for output visualization.
|
||||||
|
|
||||||
|
#### `DeesWorkspaceMarkdown`
|
||||||
|
Markdown editor with live preview.
|
||||||
|
|
||||||
|
#### `DeesWorkspaceMarkdownoutlet`
|
||||||
|
Read-only markdown renderer for documentation display.
|
||||||
|
|
||||||
|
#### `DeesWorkspaceBottombar`
|
||||||
|
IDE-style bottom status bar for the workspace.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Pre-built Templates
|
### Pre-built Templates
|
||||||
@@ -1582,6 +1767,13 @@ interface IViewActivationContext {
|
|||||||
viewId: string;
|
viewId: string;
|
||||||
params?: Record<string, string>;
|
params?: Record<string, string>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tile folder item (for DeesTileFolder)
|
||||||
|
interface ITileFolderItem {
|
||||||
|
type: 'pdf' | 'image' | 'audio' | 'video' | 'note' | 'folder' | 'unknown';
|
||||||
|
thumbnailSrc?: string;
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@design.estate/dees-catalog',
|
name: '@design.estate/dees-catalog',
|
||||||
version: '3.40.0',
|
version: '3.41.2',
|
||||||
description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
|
description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,8 @@ export class DeesDataviewCodebox extends DeesElement {
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-family: ${cssGeistFontFamily};
|
font-family: ${cssGeistFontFamily};
|
||||||
|
height: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
.mainbox {
|
.mainbox {
|
||||||
position: relative;
|
position: relative;
|
||||||
@@ -61,6 +63,10 @@ export class DeesDataviewCodebox extends DeesElement {
|
|||||||
background: ${cssManager.bdTheme('#ffffff', '#09090b')};
|
background: ${cssManager.bdTheme('#ffffff', '#09090b')};
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.appbar {
|
.appbar {
|
||||||
@@ -74,6 +80,7 @@ export class DeesDataviewCodebox extends DeesElement {
|
|||||||
line-height: 32px;
|
line-height: 32px;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.appbar .fileName {
|
.appbar .fileName {
|
||||||
@@ -95,6 +102,7 @@ export class DeesDataviewCodebox extends DeesElement {
|
|||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.spacesLabel {
|
.spacesLabel {
|
||||||
@@ -121,7 +129,9 @@ export class DeesDataviewCodebox extends DeesElement {
|
|||||||
.codegrid {
|
.codegrid {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 50px auto;
|
grid-template-columns: 50px auto;
|
||||||
overflow: hidden;
|
overflow: auto;
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lineNumbers {
|
.lineNumbers {
|
||||||
|
|||||||
@@ -444,9 +444,10 @@ export class DeesPdfViewer extends DeesElement {
|
|||||||
const page = await this.pdfDocument.getPage(pageNum);
|
const page = await this.pdfDocument.getPage(pageNum);
|
||||||
const viewport = this.computeViewport(page);
|
const viewport = this.computeViewport(page);
|
||||||
|
|
||||||
// Set canvas dimensions
|
// Set canvas dimensions with device pixel ratio for sharp rendering
|
||||||
canvas.height = viewport.height;
|
const dpr = window.devicePixelRatio || 1;
|
||||||
canvas.width = viewport.width;
|
canvas.width = Math.floor(viewport.width * dpr);
|
||||||
|
canvas.height = Math.floor(viewport.height * dpr);
|
||||||
canvas.style.width = `${viewport.width}px`;
|
canvas.style.width = `${viewport.width}px`;
|
||||||
canvas.style.height = `${viewport.height}px`;
|
canvas.style.height = `${viewport.height}px`;
|
||||||
|
|
||||||
@@ -457,6 +458,9 @@ export class DeesPdfViewer extends DeesElement {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Scale context for high-DPI displays
|
||||||
|
ctx.scale(dpr, dpr);
|
||||||
|
|
||||||
const renderContext = {
|
const renderContext = {
|
||||||
canvasContext: ctx,
|
canvasContext: ctx,
|
||||||
viewport: viewport,
|
viewport: viewport,
|
||||||
@@ -652,9 +656,10 @@ export class DeesPdfViewer extends DeesElement {
|
|||||||
const scale = maxThumbnailWidth / initialViewport.width;
|
const scale = maxThumbnailWidth / initialViewport.width;
|
||||||
const viewport = page.getViewport({ scale });
|
const viewport = page.getViewport({ scale });
|
||||||
|
|
||||||
// Set canvas dimensions to actual render size
|
// Set canvas dimensions with device pixel ratio for sharp thumbnails
|
||||||
canvas.width = viewport.width;
|
const dpr = window.devicePixelRatio || 1;
|
||||||
canvas.height = viewport.height;
|
canvas.width = Math.floor(viewport.width * dpr);
|
||||||
|
canvas.height = Math.floor(viewport.height * dpr);
|
||||||
|
|
||||||
// Set the display size via style to ensure proper display
|
// Set the display size via style to ensure proper display
|
||||||
canvas.style.width = `${viewport.width}px`;
|
canvas.style.width = `${viewport.width}px`;
|
||||||
@@ -670,6 +675,9 @@ export class DeesPdfViewer extends DeesElement {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Scale context for high-DPI displays
|
||||||
|
context.scale(dpr, dpr);
|
||||||
|
|
||||||
const renderContext = {
|
const renderContext = {
|
||||||
canvasContext: context,
|
canvasContext: context,
|
||||||
viewport: viewport,
|
viewport: viewport,
|
||||||
|
|||||||
Reference in New Issue
Block a user