304 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			304 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import { css, cssManager } from '@design.estate/dees-element'; | ||
|  | import { DeesInputBase } from '../dees-input-base.js'; | ||
|  | 
 | ||
|  | export const richtextStyles = [ | ||
|  |     ...DeesInputBase.baseStyles, | ||
|  |     cssManager.defaultStyles, | ||
|  |     css`
 | ||
|  |       :host { | ||
|  |         display: block; | ||
|  |         position: relative; | ||
|  |         font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; | ||
|  |       } | ||
|  | 
 | ||
|  |       .input-wrapper { | ||
|  |         position: relative; | ||
|  |       } | ||
|  | 
 | ||
|  |       .label { | ||
|  |         display: block; | ||
|  |         margin-bottom: 8px; | ||
|  |         font-size: 14px; | ||
|  |         font-weight: 500; | ||
|  |         color: ${cssManager.bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 93.9%)')}; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-container { | ||
|  |         display: flex; | ||
|  |         flex-direction: column; | ||
|  |         min-height: ${cssManager.bdTheme('200px', '200px')}; | ||
|  |         border: 1px solid ${cssManager.bdTheme('hsl(0 0% 89.8%)', 'hsl(0 0% 14.9%)')}; | ||
|  |         border-radius: 6px; | ||
|  |         background: ${cssManager.bdTheme('hsl(0 0% 100%)', 'hsl(0 0% 9%)')}; | ||
|  |         overflow: hidden; | ||
|  |         transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-container:hover { | ||
|  |         border-color: ${cssManager.bdTheme('hsl(0 0% 79.8%)', 'hsl(0 0% 20.9%)')}; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-container.focused { | ||
|  |         border-color: ${cssManager.bdTheme('hsl(0 0% 9%)', 'hsl(0 0% 98%)')}; | ||
|  |         box-shadow: 0 0 0 2px ${cssManager.bdTheme('hsl(0 0% 9% / 0.05)', 'hsl(0 0% 98% / 0.05)')}; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-toolbar { | ||
|  |         display: flex; | ||
|  |         flex-wrap: wrap; | ||
|  |         gap: 4px; | ||
|  |         padding: 8px 12px; | ||
|  |         background: ${cssManager.bdTheme('hsl(210 40% 96.1%)', 'hsl(0 0% 14.9%)')}; | ||
|  |         border-bottom: 1px solid ${cssManager.bdTheme('hsl(0 0% 89.8%)', 'hsl(0 0% 14.9%)')}; | ||
|  |         align-items: center; | ||
|  |         position: relative; | ||
|  |       } | ||
|  | 
 | ||
|  |       .toolbar-button { | ||
|  |         display: flex; | ||
|  |         align-items: center; | ||
|  |         justify-content: center; | ||
|  |         width: 32px; | ||
|  |         height: 32px; | ||
|  |         border: none; | ||
|  |         border-radius: 4px; | ||
|  |         background: transparent; | ||
|  |         cursor: pointer; | ||
|  |         font-size: 14px; | ||
|  |         font-weight: 500; | ||
|  |         color: ${cssManager.bdTheme('hsl(215.4 16.3% 46.9%)', 'hsl(215 20.2% 65.1%)')}; | ||
|  |         transition: all 0.15s ease; | ||
|  |         user-select: none; | ||
|  |       } | ||
|  | 
 | ||
|  |       .toolbar-button dees-icon { | ||
|  |         width: 16px; | ||
|  |         height: 16px; | ||
|  |       } | ||
|  | 
 | ||
|  |       .toolbar-button:hover { | ||
|  |         background: ${cssManager.bdTheme('hsl(0 0% 95.1%)', 'hsl(0 0% 14.9%)')}; | ||
|  |         color: ${cssManager.bdTheme('hsl(0 0% 9%)', 'hsl(0 0% 95%)')}; | ||
|  |       } | ||
|  | 
 | ||
|  |       .toolbar-button.active { | ||
|  |         background: ${cssManager.bdTheme('hsl(0 0% 9%)', 'hsl(0 0% 98%)')}; | ||
|  |         color: ${cssManager.bdTheme('hsl(0 0% 100%)', 'hsl(0 0% 3.9%)')}; | ||
|  |       } | ||
|  | 
 | ||
|  |       .toolbar-button:disabled { | ||
|  |         opacity: 0.5; | ||
|  |         cursor: not-allowed; | ||
|  |       } | ||
|  | 
 | ||
|  |       .toolbar-divider { | ||
|  |         width: 1px; | ||
|  |         height: 24px; | ||
|  |         background: ${cssManager.bdTheme('hsl(0 0% 89.8%)', 'hsl(0 0% 14.9%)')}; | ||
|  |         margin: 0 4px; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content { | ||
|  |         flex: 1; | ||
|  |         padding: 16px; | ||
|  |         overflow-y: auto; | ||
|  |         min-height: var(--min-height, 200px); | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror { | ||
|  |         outline: none; | ||
|  |         line-height: 1.6; | ||
|  |         color: ${cssManager.bdTheme('hsl(0 0% 3.9%)', 'hsl(0 0% 98%)')}; | ||
|  |         min-height: 100%; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror p { | ||
|  |         margin: 0.5em 0; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror p:first-child { | ||
|  |         margin-top: 0; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror p:last-child { | ||
|  |         margin-bottom: 0; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror h1 { | ||
|  |         font-size: 2em; | ||
|  |         font-weight: bold; | ||
|  |         margin: 1em 0 0.5em 0; | ||
|  |         line-height: 1.2; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror h2 { | ||
|  |         font-size: 1.5em; | ||
|  |         font-weight: bold; | ||
|  |         margin: 1em 0 0.5em 0; | ||
|  |         line-height: 1.3; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror h3 { | ||
|  |         font-size: 1.25em; | ||
|  |         font-weight: bold; | ||
|  |         margin: 1em 0 0.5em 0; | ||
|  |         line-height: 1.4; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror ul, | ||
|  |       .editor-content .ProseMirror ol { | ||
|  |         padding-left: 1.5em; | ||
|  |         margin: 0.5em 0; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror li { | ||
|  |         margin: 0.25em 0; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror blockquote { | ||
|  |         border-left: 4px solid ${cssManager.bdTheme('hsl(0 0% 89.8%)', 'hsl(0 0% 14.9%)')}; | ||
|  |         margin: 1em 0; | ||
|  |         padding-left: 1em; | ||
|  |         color: ${cssManager.bdTheme('hsl(215.4 16.3% 46.9%)', 'hsl(215 20.2% 65.1%)')}; | ||
|  |         font-style: italic; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror code { | ||
|  |         background: ${cssManager.bdTheme('hsl(0 0% 95.1%)', 'hsl(0 0% 14.9%)')}; | ||
|  |         border-radius: 3px; | ||
|  |         padding: 0.2em 0.4em; | ||
|  |         font-family: 'Intel One Mono', 'Fira Code', 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace; | ||
|  |         font-size: 0.9em; | ||
|  |         color: ${cssManager.bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 93.9%)')}; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror pre { | ||
|  |         background: ${cssManager.bdTheme('hsl(0 0% 3.9%)', 'hsl(0 0% 98%)')}; | ||
|  |         color: ${cssManager.bdTheme('hsl(0 0% 98%)', 'hsl(0 0% 3.9%)')}; | ||
|  |         border-radius: 6px; | ||
|  |         padding: 1em; | ||
|  |         margin: 1em 0; | ||
|  |         overflow-x: auto; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror pre code { | ||
|  |         background: none; | ||
|  |         color: inherit; | ||
|  |         padding: 0; | ||
|  |         border-radius: 0; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror a { | ||
|  |         color: ${cssManager.bdTheme('hsl(222.2 47.4% 51.2%)', 'hsl(217.2 91.2% 59.8%)')}; | ||
|  |         text-decoration: underline; | ||
|  |         cursor: pointer; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-content .ProseMirror a:hover { | ||
|  |         color: ${cssManager.bdTheme('hsl(222.2 47.4% 41.2%)', 'hsl(217.2 91.2% 69.8%)')}; | ||
|  |       } | ||
|  | 
 | ||
|  |       .editor-footer { | ||
|  |         padding: 8px 12px; | ||
|  |         background: ${cssManager.bdTheme('hsl(210 40% 96.1%)', 'hsl(0 0% 14.9%)')}; | ||
|  |         border-top: 1px solid ${cssManager.bdTheme('hsl(0 0% 89.8%)', 'hsl(0 0% 14.9%)')}; | ||
|  |         font-size: 12px; | ||
|  |         color: ${cssManager.bdTheme('hsl(215.4 16.3% 46.9%)', 'hsl(215 20.2% 65.1%)')}; | ||
|  |         display: flex; | ||
|  |         justify-content: space-between; | ||
|  |         align-items: center; | ||
|  |       } | ||
|  | 
 | ||
|  |       .word-count { | ||
|  |         font-weight: 500; | ||
|  |       } | ||
|  | 
 | ||
|  |       .link-input { | ||
|  |         display: none; | ||
|  |         position: absolute; | ||
|  |         top: 100%; | ||
|  |         left: 0; | ||
|  |         right: 0; | ||
|  |         background: ${cssManager.bdTheme('hsl(0 0% 100%)', 'hsl(0 0% 9%)')}; | ||
|  |         border: 1px solid ${cssManager.bdTheme('hsl(0 0% 89.8%)', 'hsl(0 0% 14.9%)')}; | ||
|  |         border-radius: 6px; | ||
|  |         box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); | ||
|  |         padding: 12px; | ||
|  |         z-index: 1000; | ||
|  |       } | ||
|  | 
 | ||
|  |       .link-input.show { | ||
|  |         display: block; | ||
|  |       } | ||
|  | 
 | ||
|  |       .link-input input { | ||
|  |         width: 100%; | ||
|  |         padding: 8px 12px; | ||
|  |         border: 1px solid ${cssManager.bdTheme('hsl(0 0% 89.8%)', 'hsl(0 0% 14.9%)')}; | ||
|  |         border-radius: 6px; | ||
|  |         outline: none; | ||
|  |         font-size: 14px; | ||
|  |         background: ${cssManager.bdTheme('hsl(0 0% 100%)', 'hsl(0 0% 9%)')}; | ||
|  |         color: ${cssManager.bdTheme('hsl(0 0% 3.9%)', 'hsl(0 0% 98%)')}; | ||
|  |         transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); | ||
|  |       } | ||
|  | 
 | ||
|  |       .link-input input:focus { | ||
|  |         border-color: ${cssManager.bdTheme('hsl(0 0% 9%)', 'hsl(0 0% 98%)')}; | ||
|  |         box-shadow: 0 0 0 2px ${cssManager.bdTheme('hsl(0 0% 9% / 0.05)', 'hsl(0 0% 98% / 0.05)')}; | ||
|  |       } | ||
|  | 
 | ||
|  |       .link-input-buttons { | ||
|  |         display: flex; | ||
|  |         gap: 8px; | ||
|  |         margin-top: 8px; | ||
|  |       } | ||
|  | 
 | ||
|  |       .link-input-buttons button { | ||
|  |         padding: 6px 12px; | ||
|  |         border: 1px solid ${cssManager.bdTheme('hsl(0 0% 89.8%)', 'hsl(0 0% 14.9%)')}; | ||
|  |         border-radius: 4px; | ||
|  |         background: ${cssManager.bdTheme('hsl(0 0% 100%)', 'hsl(0 0% 9%)')}; | ||
|  |         cursor: pointer; | ||
|  |         font-size: 12px; | ||
|  |         color: ${cssManager.bdTheme('hsl(0 0% 45.1%)', 'hsl(0 0% 63.9%)')}; | ||
|  |         transition: all 0.15s ease; | ||
|  |         font-weight: 500; | ||
|  |       } | ||
|  | 
 | ||
|  |       .link-input-buttons button:hover { | ||
|  |         background: ${cssManager.bdTheme('hsl(0 0% 95.1%)', 'hsl(0 0% 14.9%)')}; | ||
|  |         color: ${cssManager.bdTheme('hsl(0 0% 9%)', 'hsl(0 0% 95%)')}; | ||
|  |       } | ||
|  | 
 | ||
|  |       .link-input-buttons button.primary { | ||
|  |         background: ${cssManager.bdTheme('hsl(0 0% 9%)', 'hsl(0 0% 98%)')}; | ||
|  |         color: ${cssManager.bdTheme('hsl(0 0% 100%)', 'hsl(0 0% 3.9%)')}; | ||
|  |         border-color: ${cssManager.bdTheme('hsl(0 0% 9%)', 'hsl(0 0% 98%)')}; | ||
|  |       } | ||
|  | 
 | ||
|  |       .link-input-buttons button.primary:hover { | ||
|  |         background: ${cssManager.bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 93.9%)')}; | ||
|  |         border-color: ${cssManager.bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 93.9%)')}; | ||
|  |       } | ||
|  | 
 | ||
|  |       .description { | ||
|  |         margin-top: 8px; | ||
|  |         font-size: 12px; | ||
|  |         color: ${cssManager.bdTheme('hsl(215.4 16.3% 46.9%)', 'hsl(215 20.2% 65.1%)')}; | ||
|  |         line-height: 1.4; | ||
|  |       } | ||
|  | 
 | ||
|  |       :host([disabled]) .editor-container { | ||
|  |         opacity: 0.6; | ||
|  |         cursor: not-allowed; | ||
|  |       } | ||
|  | 
 | ||
|  |       :host([disabled]) .toolbar-button, | ||
|  |       :host([disabled]) .editor-content { | ||
|  |         pointer-events: none; | ||
|  |       } | ||
|  |     `,
 | ||
|  |   ]; | ||
|  | 
 |