diff --git a/main.ts b/main.ts index 007881c..97b14ee 100644 --- a/main.ts +++ b/main.ts @@ -3,8 +3,8 @@ import { Stream, StreamsSettings } from './src/shared/types'; import { sliceContainer, serviceRegistry, DEFAULT_SETTINGS, ServiceLoader } from './src/shared'; import { StreamsAPI } from './src/slices/api'; import { CreateFileView, CREATE_FILE_VIEW_TYPE } from './src/slices/file-operations/CreateFileView'; -import { EncryptedFileView, ENCRYPTED_FILE_VIEW_TYPE } from './src/slices/file-operations/EncryptedFileView'; -import { EncryptedCreateFileView, ENCRYPTED_CREATE_FILE_VIEW_TYPE } from './src/slices/file-operations/EncryptedCreateFileView'; +import { InstallMeldView, INSTALL_MELD_VIEW_TYPE } from './src/slices/file-operations/InstallMeldView'; +import { CreateFileViewEncrypted, CREATE_FILE_VIEW_ENCRYPTED_TYPE } from './src/slices/file-operations/CreateFileViewEncrypted'; export default class StreamsPlugin extends Plugin implements StreamsAPI { @@ -31,8 +31,8 @@ export default class StreamsPlugin extends Plugin implements StreamsAPI { ); this.registerView( - ENCRYPTED_FILE_VIEW_TYPE, - (leaf) => new EncryptedFileView(leaf, this.app, '', { + INSTALL_MELD_VIEW_TYPE, + (leaf) => new InstallMeldView(leaf, this.app, '', { id: '', name: '', folder: '', @@ -44,8 +44,8 @@ export default class StreamsPlugin extends Plugin implements StreamsAPI { ); this.registerView( - ENCRYPTED_CREATE_FILE_VIEW_TYPE, - (leaf) => new EncryptedCreateFileView(leaf, this.app, '', { + CREATE_FILE_VIEW_ENCRYPTED_TYPE, + (leaf) => new CreateFileViewEncrypted(leaf, this.app, '', { id: '', name: '', folder: '', diff --git a/src/slices/calendar-navigation/CalendarNavigationService.ts b/src/slices/calendar-navigation/CalendarNavigationService.ts index c07081d..7994875 100644 --- a/src/slices/calendar-navigation/CalendarNavigationService.ts +++ b/src/slices/calendar-navigation/CalendarNavigationService.ts @@ -117,6 +117,20 @@ export class CalendarNavigationService extends SettingsAwareSliceService { this.updateStreamsBarComponent(event.data); } }); + + // Update calendar when install meld view is opened + eventBus.subscribe('install-meld-view-opened', (event) => { + if (event.data) { + this.updateStreamsBarComponent(event.data); + } + }); + + // Update calendar when create file view encrypted is opened + eventBus.subscribe('create-file-view-encrypted-opened', (event) => { + if (event.data) { + this.updateStreamsBarComponent(event.data); + } + }); } private registerPluginViews(): void { diff --git a/src/slices/file-operations/EncryptedCreateFileView.ts b/src/slices/file-operations/CreateFileViewEncrypted.ts similarity index 89% rename from src/slices/file-operations/EncryptedCreateFileView.ts rename to src/slices/file-operations/CreateFileViewEncrypted.ts index 3f4d631..26ab359 100644 --- a/src/slices/file-operations/EncryptedCreateFileView.ts +++ b/src/slices/file-operations/CreateFileViewEncrypted.ts @@ -17,9 +17,9 @@ interface AppWithPlugins extends App { }; } -export const ENCRYPTED_CREATE_FILE_VIEW_TYPE = 'streams-encrypted-create-file-view'; +export const CREATE_FILE_VIEW_ENCRYPTED_TYPE = 'streams-create-file-view-encrypted'; -export class EncryptedCreateFileView extends ItemView { +export class CreateFileViewEncrypted extends ItemView { private filePath: string; private stream: Stream; private dateStateManager: DateStateManager; @@ -39,7 +39,7 @@ export class EncryptedCreateFileView extends ItemView { } getViewType(): string { - return ENCRYPTED_CREATE_FILE_VIEW_TYPE; + return CREATE_FILE_VIEW_ENCRYPTED_TYPE; } getDisplayText(): string { @@ -97,12 +97,12 @@ export class EncryptedCreateFileView extends ItemView { // Refresh the view with new state if (this.contentEl) { this.contentEl.empty(); - this.contentEl.addClass('streams-encrypted-create-file-container'); - this.createEncryptedFileViewContent(this.contentEl); + this.contentEl.addClass('streams-create-file-encrypted-container'); + this.createFileViewEncryptedContent(this.contentEl); } } } catch (error) { - centralizedLogger.error(`Error in EncryptedCreateFileView setState:`, error); + centralizedLogger.error(`Error in CreateFileViewEncrypted setState:`, error); // Don't rethrow - just log and continue } } @@ -116,8 +116,8 @@ export class EncryptedCreateFileView extends ItemView { // Refresh the view content if (this.contentEl) { this.contentEl.empty(); - this.contentEl.addClass('streams-encrypted-create-file-container'); - this.createEncryptedFileViewContent(this.contentEl); + this.contentEl.addClass('streams-create-file-encrypted-container'); + this.createFileViewEncryptedContent(this.contentEl); } } @@ -142,7 +142,7 @@ export class EncryptedCreateFileView extends ItemView { // Prepare our content element this.contentEl.empty(); - this.contentEl.addClass('streams-encrypted-create-file-container'); + this.contentEl.addClass('streams-create-file-encrypted-container'); // Set up the content element styling this.contentEl.style.height = '100%'; @@ -181,8 +181,8 @@ export class EncryptedCreateFileView extends ItemView { // Store observer for cleanup (this as any).emptyStateObserver = observer; - // Create our encrypted create file view content - this.createEncryptedFileViewContent(this.contentEl); + // Create our create file view encrypted content + this.createFileViewEncryptedContent(this.contentEl); } async onClose(): Promise { @@ -208,37 +208,37 @@ export class EncryptedCreateFileView extends ItemView { this.leaf = null as any; } - private createEncryptedFileViewContent(container: HTMLElement): void { + private createFileViewEncryptedContent(container: HTMLElement): void { // Create the content box - const contentBox = container.createDiv('streams-encrypted-create-file-content'); + const contentBox = container.createDiv('streams-create-file-encrypted-content'); // Add icon - const iconContainer = contentBox.createDiv('streams-encrypted-create-file-icon'); + const iconContainer = contentBox.createDiv('streams-create-file-encrypted-icon'); setIcon(iconContainer, 'lock'); // Stream info display - const streamContainer = contentBox.createDiv('streams-encrypted-create-file-stream-container'); - const streamIcon = streamContainer.createSpan('streams-encrypted-create-file-stream-icon'); + const streamContainer = contentBox.createDiv('streams-create-file-encrypted-stream-container'); + const streamIcon = streamContainer.createSpan('streams-create-file-encrypted-stream-icon'); setIcon(streamIcon, this.stream.icon || 'book'); - const streamName = streamContainer.createSpan('streams-encrypted-create-file-stream'); + const streamName = streamContainer.createSpan('streams-create-file-encrypted-stream'); streamName.setText(this.stream.name); // Encryption indicator - const encryptionIndicator = contentBox.createDiv('streams-encrypted-create-file-encryption-indicator'); + const encryptionIndicator = contentBox.createDiv('streams-create-file-encrypted-encryption-indicator'); encryptionIndicator.setText('This stream is encrypted'); // Date display - const dateEl = contentBox.createDiv('streams-encrypted-create-file-date'); + const dateEl = contentBox.createDiv('streams-create-file-encrypted-date'); const state = this.dateStateManager.getState(); const formattedDate = this.formatDate(state.currentDate); dateEl.setText(formattedDate); // Create button - const buttonContainer = contentBox.createDiv('streams-encrypted-create-file-button-container'); + const buttonContainer = contentBox.createDiv('streams-create-file-encrypted-button-container'); const createButton = buttonContainer.createEl('button', { - cls: 'mod-cta streams-encrypted-create-file-button', + cls: 'mod-cta streams-create-file-encrypted-button', text: 'Create Encrypted File' }); @@ -251,7 +251,7 @@ export class EncryptedCreateFileView extends ItemView { // Trigger the streams bar component to be added to this view try { import('../../shared/event-bus').then(({ eventBus }) => { - eventBus.emit('encrypted-create-file-view-opened', this.leaf); + eventBus.emit('create-file-view-encrypted-opened', this.leaf); }); } catch (error) { // Calendar component trigger failed - not critical @@ -303,7 +303,7 @@ export class EncryptedCreateFileView extends ItemView { const file = await this.createFileNormally(); if (file instanceof TFile) { - // Open the file in the current leaf (this will replace EncryptedCreateFileView) + // Open the file in the current leaf (this will replace CreateFileViewEncrypted) await this.leaf.openFile(file); // Trigger encryption after the file is opened @@ -405,4 +405,3 @@ export class EncryptedCreateFileView extends ItemView { } } } - diff --git a/src/slices/file-operations/FileOperationsService.ts b/src/slices/file-operations/FileOperationsService.ts index ee562e8..b8ddf4d 100644 --- a/src/slices/file-operations/FileOperationsService.ts +++ b/src/slices/file-operations/FileOperationsService.ts @@ -5,7 +5,7 @@ import { OpenStreamDateCommand } from './OpenStreamDateCommand'; import { OpenTodayStreamCommand } from './OpenTodayStreamCommand'; import { OpenTodayCurrentStreamCommand } from './OpenTodayCurrentStreamCommand'; import { CreateFileView, CREATE_FILE_VIEW_TYPE } from './CreateFileView'; -import { EncryptedFileView, ENCRYPTED_FILE_VIEW_TYPE } from './EncryptedFileView'; +import { InstallMeldView, INSTALL_MELD_VIEW_TYPE } from './InstallMeldView'; import { FileCreationInterface, NormalFileStrategy, MeldEncryptedFileStrategy } from './file-creation-strategies'; import { MeldDetectionService } from '../meld-integration'; import { centralizedLogger } from '../../shared/centralized-logger'; diff --git a/src/slices/file-operations/EncryptedFileView.ts b/src/slices/file-operations/InstallMeldView.ts similarity index 83% rename from src/slices/file-operations/EncryptedFileView.ts rename to src/slices/file-operations/InstallMeldView.ts index 206b62a..fcbb5de 100644 --- a/src/slices/file-operations/EncryptedFileView.ts +++ b/src/slices/file-operations/InstallMeldView.ts @@ -3,9 +3,9 @@ import { Stream } from '../../shared/types'; import { centralizedLogger } from '../../shared/centralized-logger'; import { DateStateManager } from '../../shared/date-state-manager'; -export const ENCRYPTED_FILE_VIEW_TYPE = 'streams-encrypted-file-view'; +export const INSTALL_MELD_VIEW_TYPE = 'streams-install-meld-view'; -export class EncryptedFileView extends ItemView { +export class InstallMeldView extends ItemView { private filePath: string; private stream: Stream; private date: Date; @@ -28,16 +28,16 @@ export class EncryptedFileView extends ItemView { } getViewType(): string { - return ENCRYPTED_FILE_VIEW_TYPE; + return INSTALL_MELD_VIEW_TYPE; } getDisplayText(): string { try { const dateString = this.formatTitleDate(this.date); - return `${dateString} (Encrypted)`; + return `${dateString} (Install Meld)`; } catch (error) { centralizedLogger.error('Error formatting display text:', error); - return 'Encrypted File'; + return 'Install Meld Plugin'; } } @@ -76,12 +76,12 @@ export class EncryptedFileView extends ItemView { // Refresh the view with new state if (this.contentEl) { this.contentEl.empty(); - this.contentEl.addClass('streams-encrypted-file-container'); - this.createEncryptedFileViewContent(this.contentEl); + this.contentEl.addClass('streams-install-meld-container'); + this.createInstallMeldViewContent(this.contentEl); } } } catch (error) { - centralizedLogger.error(`Error in EncryptedFileView setState:`, error); + centralizedLogger.error(`Error in InstallMeldView setState:`, error); } } @@ -96,7 +96,7 @@ export class EncryptedFileView extends ItemView { // Prepare our content element this.contentEl.empty(); - this.contentEl.addClass('streams-encrypted-file-container'); + this.contentEl.addClass('streams-install-meld-container'); // Set up the content element styling this.contentEl.style.height = '100%'; @@ -108,8 +108,8 @@ export class EncryptedFileView extends ItemView { // Hide any empty-state elements that might still be present this.hideEmptyStates(); - // Create our encrypted file view content - this.createEncryptedFileViewContent(this.contentEl); + // Create our install meld view content + this.createInstallMeldViewContent(this.contentEl); } async onClose(): Promise { @@ -129,31 +129,31 @@ export class EncryptedFileView extends ItemView { this.leaf = null as any; } - private createEncryptedFileViewContent(container: HTMLElement): void { + private createInstallMeldViewContent(container: HTMLElement): void { // Create the content box - const contentBox = container.createDiv('streams-encrypted-file-content'); + const contentBox = container.createDiv('streams-install-meld-content'); // Add icon - const iconContainer = contentBox.createDiv('streams-encrypted-file-icon'); + const iconContainer = contentBox.createDiv('streams-install-meld-icon'); setIcon(iconContainer, 'lock'); // Stream info display - const streamContainer = contentBox.createDiv('streams-encrypted-file-stream-container'); - const streamIcon = streamContainer.createSpan('streams-encrypted-file-stream-icon'); + const streamContainer = contentBox.createDiv('streams-install-meld-stream-container'); + const streamIcon = streamContainer.createSpan('streams-install-meld-stream-icon'); setIcon(streamIcon, this.stream.icon || 'book'); - const streamName = streamContainer.createSpan('streams-encrypted-file-stream'); + const streamName = streamContainer.createSpan('streams-install-meld-stream'); streamName.setText(this.stream.name); // Date display - const dateEl = contentBox.createDiv('streams-encrypted-file-date'); + const dateEl = contentBox.createDiv('streams-install-meld-date'); const formattedDate = this.formatDate(this.date); dateEl.setText(formattedDate); // Create button - const buttonContainer = contentBox.createDiv('streams-encrypted-file-button-container'); + const buttonContainer = contentBox.createDiv('streams-install-meld-button-container'); const createButton = buttonContainer.createEl('button', { - cls: 'mod-cta streams-encrypted-file-button', + cls: 'mod-cta streams-install-meld-button', text: 'Install Meld Encrypt Plugin' }); @@ -167,7 +167,7 @@ export class EncryptedFileView extends ItemView { // Trigger the streams bar component to be added to this view try { import('../../shared/event-bus').then(({ eventBus }) => { - eventBus.emit('encrypted-file-view-opened', this.leaf); + eventBus.emit('install-meld-view-opened', this.leaf); }); } catch (error) { // Calendar component trigger failed - not critical @@ -232,8 +232,8 @@ export class EncryptedFileView extends ItemView { // Refresh the view content if (this.contentEl) { this.contentEl.empty(); - this.contentEl.addClass('streams-encrypted-file-container'); - this.createEncryptedFileViewContent(this.contentEl); + this.contentEl.addClass('streams-install-meld-container'); + this.createInstallMeldViewContent(this.contentEl); } } diff --git a/src/slices/file-operations/streamUtils.ts b/src/slices/file-operations/streamUtils.ts index 4f8f479..9a32b45 100644 --- a/src/slices/file-operations/streamUtils.ts +++ b/src/slices/file-operations/streamUtils.ts @@ -2,8 +2,8 @@ import { App, TFolder, TFile, MarkdownView, WorkspaceLeaf, normalizePath } from import { Stream } from '../../shared/types'; import { centralizedLogger } from '../../shared/centralized-logger'; import { CreateFileView, CREATE_FILE_VIEW_TYPE } from './CreateFileView'; -import { EncryptedFileView, ENCRYPTED_FILE_VIEW_TYPE } from './EncryptedFileView'; -import { EncryptedCreateFileView, ENCRYPTED_CREATE_FILE_VIEW_TYPE } from './EncryptedCreateFileView'; +import { InstallMeldView, INSTALL_MELD_VIEW_TYPE } from './InstallMeldView'; +import { CreateFileViewEncrypted, CREATE_FILE_VIEW_ENCRYPTED_TYPE } from './CreateFileViewEncrypted'; import { DateStateManager } from '../../shared/date-state-manager'; /** @@ -47,9 +47,9 @@ function isMeldPluginAvailable(app: App): boolean { } /** - * Show the EncryptedFileView when Meld is not available + * Show the InstallMeldView when Meld is not available */ -async function showEncryptedFileView(app: App, file: TFile, stream: Stream, date: Date, reuseCurrentTab: boolean): Promise { +async function showInstallMeldView(app: App, file: TFile, stream: Stream, date: Date, reuseCurrentTab: boolean): Promise { try { // Handle leaf selection based on reuseCurrentTab setting let leaf: WorkspaceLeaf | null = null; @@ -86,7 +86,7 @@ async function showEncryptedFileView(app: App, file: TFile, stream: Stream, date // Check if leaf is null before proceeding if (!leaf) { - centralizedLogger.error('Failed to create or find a workspace leaf for EncryptedFileView'); + centralizedLogger.error('Failed to create or find a workspace leaf for InstallMeldView'); return; } @@ -104,7 +104,7 @@ async function showEncryptedFileView(app: App, file: TFile, stream: Stream, date // Use the proper Obsidian view system instead of direct DOM manipulation try { await leaf.setViewState({ - type: ENCRYPTED_FILE_VIEW_TYPE, + type: INSTALL_MELD_VIEW_TYPE, state: { stream: stream, date: date.toISOString(), @@ -112,7 +112,7 @@ async function showEncryptedFileView(app: App, file: TFile, stream: Stream, date } }); } catch (error) { - centralizedLogger.error(`Error setting view state for EncryptedFileView:`, error); + centralizedLogger.error(`Error setting view state for InstallMeldView:`, error); // If setViewState fails, we can't proceed return; } @@ -121,7 +121,7 @@ async function showEncryptedFileView(app: App, file: TFile, stream: Stream, date app.workspace.setActiveLeaf(leaf, { focus: true }); } catch (error) { - centralizedLogger.error('Error setting up EncryptedFileView:', error); + centralizedLogger.error('Error setting up InstallMeldView:', error); return; } } catch (error) { @@ -304,7 +304,7 @@ export async function openStreamDate(app: App, stream: Stream, date: Date = new // Use the proper Obsidian view system instead of direct DOM manipulation // Choose the appropriate view type based on whether the stream is encrypted - const viewType = stream.encryptThisStream ? ENCRYPTED_CREATE_FILE_VIEW_TYPE : CREATE_FILE_VIEW_TYPE; + const viewType = stream.encryptThisStream ? CREATE_FILE_VIEW_ENCRYPTED_TYPE : CREATE_FILE_VIEW_TYPE; try { await leaf.setViewState({ @@ -340,8 +340,8 @@ export async function openStreamDate(app: App, stream: Stream, date: Date = new if (isMdencFile) { // For .mdenc files, check if Meld is available first if (!isMeldPluginAvailable(app)) { - // Show the EncryptedFileView instead of just an error - await showEncryptedFileView(app, file, stream, date, reuseCurrentTab); + // Show the InstallMeldView instead of just an error + await showInstallMeldView(app, file, stream, date, reuseCurrentTab); return; } diff --git a/styles.css b/styles.css index feda78a..b3ec943 100644 --- a/styles.css +++ b/styles.css @@ -1457,7 +1457,7 @@ /********************************************************* * ENCRYPTED FILE VIEW STYLES *********************************************************/ -.streams-encrypted-file-container { +.streams-install-meld-container { display: flex; justify-content: center; align-items: center; @@ -1470,7 +1470,7 @@ position: relative; } -.streams-encrypted-file-content { +.streams-install-meld-content { display: flex; flex-direction: column; align-items: center; @@ -1485,7 +1485,7 @@ position: relative; } -.streams-encrypted-file-content::before { +.streams-install-meld-content::before { content: '🔒 ENCRYPTED'; position: absolute; top: -8px; @@ -1502,11 +1502,11 @@ letter-spacing: 0.5px; } -.streams-encrypted-file-icon { +.streams-install-meld-icon { margin-bottom: 24px; } -.streams-encrypted-file-icon svg { +.streams-install-meld-icon svg { width: 48px; height: 48px; color: var(--text-accent); @@ -1515,7 +1515,7 @@ } -.streams-encrypted-file-title { +.streams-install-meld-title { font-size: 1.2em; font-weight: 600; color: var(--text-muted); @@ -1523,7 +1523,7 @@ line-height: 1.2; } -.streams-encrypted-file-description { +.streams-install-meld-description { font-size: 0.9em; color: var(--text-muted); margin-bottom: 20px; @@ -1531,31 +1531,31 @@ opacity: 0.8; } -.streams-encrypted-file-stream-container { +.streams-install-meld-stream-container { display: flex; align-items: center; margin-bottom: 12px; } -.streams-encrypted-file-stream-icon { +.streams-install-meld-stream-icon { margin-right: 8px; display: flex; align-items: center; } -.streams-encrypted-file-stream-icon svg { +.streams-install-meld-stream-icon svg { width: 18px; height: 18px; color: var(--text-muted); } -.streams-encrypted-file-stream { +.streams-install-meld-stream { font-size: 1em; font-weight: 600; color: var(--text-muted); } -.streams-encrypted-file-date { +.streams-install-meld-date { font-size: 1.4em; font-weight: 700; color: var(--text-normal); @@ -1563,7 +1563,7 @@ line-height: 1.2; } -.streams-encrypted-file-path { +.streams-install-meld-path { font-family: var(--font-monospace); font-size: 0.8em; color: var(--text-muted); @@ -1575,11 +1575,11 @@ border: 1px solid rgba(var(--background-modifier-border-rgb), 0.3); } -.streams-encrypted-file-button-container { +.streams-install-meld-button-container { margin-top: 16px; } -.streams-encrypted-file-button { +.streams-install-meld-button { padding: 12px 28px; font-size: 1em; border-radius: 8px; @@ -1598,60 +1598,60 @@ box-shadow: 0 4px 12px rgba(var(--interactive-accent-rgb), 0.3); } -.streams-encrypted-file-button::before { +.streams-install-meld-button::before { content: '🔓'; font-size: 14px; } -.streams-encrypted-file-button:hover { +.streams-install-meld-button:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(var(--interactive-accent-rgb), 0.4); background: linear-gradient(135deg, var(--interactive-accent-hover) 0%, var(--interactive-accent) 100%); } -.streams-encrypted-file-button:active { +.streams-install-meld-button:active { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(var(--interactive-accent-rgb), 0.3); } -.streams-encrypted-file-button-text { +.streams-install-meld-button-text { margin-left: 4px; } -.streams-encrypted-file-button svg { +.streams-install-meld-button svg { width: 18px; height: 18px; } /* Mobile responsiveness */ -.is-mobile .streams-encrypted-file-content { +.is-mobile .streams-install-meld-content { width: 100%; max-width: none; padding: 30px 20px; border-radius: 8px; } -.is-mobile .streams-encrypted-file-container { +.is-mobile .streams-install-meld-container { padding: 20px; } -.is-phone .streams-encrypted-file-date { +.is-phone .streams-install-meld-date { font-size: 1.2em; } /********************************************************* * ENCRYPTED CREATE FILE VIEW STYLES *********************************************************/ -.workspace-leaf-content:has(.streams-encrypted-create-file-container) { +.workspace-leaf-content:has(.streams-create-file-encrypted-container) { width: 100%; } /* Prevent scrollbars on EncryptedCreateFileView */ -.workspace-leaf-content:has(.streams-encrypted-create-file-container) .view-content { +.workspace-leaf-content:has(.streams-create-file-encrypted-container) .view-content { overflow: hidden; } -.streams-encrypted-create-file-container { +.streams-create-file-encrypted-container { display: flex; justify-content: center; align-items: center; @@ -1665,7 +1665,7 @@ z-index: 1; } -.streams-encrypted-create-file-content { +.streams-create-file-encrypted-content { display: flex; flex-direction: column; align-items: center; @@ -1684,18 +1684,18 @@ border: 1px solid var(--background-modifier-border); } -.streams-encrypted-create-file-icon { +.streams-create-file-encrypted-icon { margin-bottom: 32px; } -.streams-encrypted-create-file-icon svg { +.streams-create-file-encrypted-icon svg { width: 48px; height: 48px; color: var(--text-accent); opacity: 0.9; } -.streams-encrypted-create-file-stream-container { +.streams-create-file-encrypted-stream-container { display: flex; align-items: center; justify-content: center; @@ -1706,25 +1706,25 @@ border: 1px solid var(--background-modifier-border); } -.streams-encrypted-create-file-stream-icon { +.streams-create-file-encrypted-stream-icon { margin-right: 8px; display: flex; align-items: center; } -.streams-encrypted-create-file-stream-icon svg { +.streams-create-file-encrypted-stream-icon svg { width: 18px; height: 18px; color: var(--text-muted); } -.streams-encrypted-create-file-stream { +.streams-create-file-encrypted-stream { font-size: 1em; font-weight: 600; color: var(--text-normal); } -.streams-encrypted-create-file-encryption-indicator { +.streams-create-file-encrypted-encryption-indicator { font-size: 0.9em; font-weight: 500; color: var(--text-accent); @@ -1740,12 +1740,12 @@ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } -.streams-encrypted-create-file-encryption-indicator::before { +.streams-create-file-encrypted-encryption-indicator::before { content: "🔒"; font-size: 16px; } -.streams-encrypted-create-file-date { +.streams-create-file-encrypted-date { font-size: 1.4em; font-weight: 700; color: var(--text-normal); @@ -1753,11 +1753,11 @@ line-height: 1.2; } -.streams-encrypted-create-file-button-container { +.streams-create-file-encrypted-button-container { margin-top: 16px; } -.streams-encrypted-create-file-button { +.streams-create-file-encrypted-button { padding: 12px 28px; font-size: 1em; border-radius: 8px; @@ -1770,26 +1770,26 @@ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } -.streams-encrypted-create-file-button:hover { +.streams-create-file-encrypted-button:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.2); background-color: var(--interactive-accent-hover); border-color: var(--interactive-accent-hover); } -.streams-encrypted-create-file-button:active { +.streams-create-file-encrypted-button:active { transform: translateY(0); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } -.streams-encrypted-create-file-button svg { +.streams-create-file-encrypted-button svg { width: 18px; height: 18px; margin-right: 8px; } /* Mobile responsiveness for encrypted create file view */ -.is-mobile .streams-encrypted-create-file-content { +.is-mobile .streams-create-file-encrypted-content { width: 100%; max-width: none; padding: 36px 24px; @@ -1797,25 +1797,25 @@ margin: 16px; } -.is-mobile .streams-encrypted-create-file-container { +.is-mobile .streams-create-file-encrypted-container { padding: 16px; } -.is-phone .streams-encrypted-create-file-content { +.is-phone .streams-create-file-encrypted-content { padding: 32px 20px; margin: 12px; } -.is-phone .streams-encrypted-create-file-date { +.is-phone .streams-create-file-encrypted-date { font-size: 1.2em; } -.is-phone .streams-encrypted-create-file-encryption-indicator { +.is-phone .streams-create-file-encrypted-encryption-indicator { font-size: 0.85em; padding: 6px 12px; } -.is-phone .streams-encrypted-create-file-button { +.is-phone .streams-create-file-encrypted-button { padding: 10px 24px; font-size: 0.95em; } \ No newline at end of file