feat: improve note management UI and accessibility
- Replaced fixed positioning with CDK Overlay for "Move to Folder" dialog with improved accessibility and focus management - Added visual accent color support to note header buttons based on note color metadata - Enhanced move dialog with keyboard navigation and Enter key support for quick folder selection - Improved dialog backdrop with themed blur effect and proper z-indexing - Fixed folder icon SVG path in move dialog - Added max height constraint an
This commit is contained in:
parent
11a58426d0
commit
2a82ea2f2b
@ -27,22 +27,31 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.move-menu-panel {
|
.move-menu-panel {
|
||||||
/* Solid, non-transparent panel aligned with site menus */
|
/* Ne pas remettre de background ici: on s'appuie sur bg-card du HTML */
|
||||||
background: var(--card-bg);
|
position: relative; /* needed for ::before background layer */
|
||||||
border: 1px solid var(--border);
|
backdrop-filter: none !important;
|
||||||
border-radius: 1rem;
|
opacity: 1 !important;
|
||||||
box-shadow:
|
|
||||||
0 16px 42px var(--shadow-color),
|
|
||||||
0 4px 10px color-mix(in srgb, var(--shadow-color) 55%, transparent);
|
|
||||||
overflow: hidden;
|
|
||||||
backdrop-filter: none;
|
|
||||||
opacity: 1;
|
|
||||||
isolation: isolate;
|
isolation: isolate;
|
||||||
|
mix-blend-mode: normal !important;
|
||||||
|
max-height: min(80vh, 560px);
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Solid background layer to guarantee full opacity regardless of ancestors */
|
||||||
|
.move-menu-panel::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
background: var(--card);
|
||||||
|
border-radius: inherit;
|
||||||
|
z-index: -1; /* sit behind content but inside panel */
|
||||||
|
opacity: 1 !important;
|
||||||
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.move-menu-header {
|
.move-menu-header {
|
||||||
padding: 1rem 1.1rem 0.7rem;
|
padding: 1rem 1.1rem 0.7rem;
|
||||||
border-bottom: 1px solid color-mix(in srgb, var(--border) 60%, transparent);
|
border-bottom: 1px solid color-mix(in srgb, var(--border) 60%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.move-menu-title {
|
.move-menu-title {
|
||||||
|
|||||||
@ -11,10 +11,14 @@
|
|||||||
<span class="text-xs opacity-70">▾</span>
|
<span class="text-xs opacity-70">▾</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
@if (showMenu()) {
|
<ng-template #panelTpl>
|
||||||
<div class="fixed z-[1000] w-80 move-menu-panel"
|
<div
|
||||||
[style.top.px]="menuTop()" [style.left.px]="menuLeft()">
|
class="z-[2147483647] w-80 bg-card text-popover-foreground border border-border rounded-2xl shadow-2xl move-menu-panel animate-fadeIn"
|
||||||
<div class="move-menu-header flex items-center justify-between">
|
role="dialog"
|
||||||
|
aria-label="Move note to folder"
|
||||||
|
aria-modal="true"
|
||||||
|
cdkTrapFocus>
|
||||||
|
<div class="move-menu-header flex items-center justify-between ">
|
||||||
<div class="move-menu-title">Move note to folder</div>
|
<div class="move-menu-title">Move note to folder</div>
|
||||||
<button class="move-menu-link" (click)="openFolderInSidebar()">Open sidebar</button>
|
<button class="move-menu-link" (click)="openFolderInSidebar()">Open sidebar</button>
|
||||||
</div>
|
</div>
|
||||||
@ -32,6 +36,8 @@
|
|||||||
placeholder="Search folders"
|
placeholder="Search folders"
|
||||||
[value]="searchQuery()"
|
[value]="searchQuery()"
|
||||||
(input)="onSearchChange($any($event.target).value)"
|
(input)="onSearchChange($any($event.target).value)"
|
||||||
|
(keydown.enter)="onSearchEnter($event)"
|
||||||
|
cdkFocusInitial
|
||||||
/>
|
/>
|
||||||
@if (searchQuery()) {
|
@if (searchQuery()) {
|
||||||
<button type="button" class="move-menu-clear" (click)="clearSearch()">✕</button>
|
<button type="button" class="move-menu-clear" (click)="clearSearch()">✕</button>
|
||||||
@ -64,7 +70,7 @@
|
|||||||
>
|
>
|
||||||
<span class="flex items-center gap-2">
|
<span class="flex items-center gap-2">
|
||||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||||
<path d="M3 7v10a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-6l-2-2H5a2 2 0 0 0-2 2z"></path>
|
<path d="M3 7v10a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V9a2 2 0 0 0 2-2h-6l-2-2H5a2 2 0 0 0-2 2z"></path>
|
||||||
</svg>
|
</svg>
|
||||||
<span class="truncate">{{ folder.name }}</span>
|
<span class="truncate">{{ folder.name }}</span>
|
||||||
</span>
|
</span>
|
||||||
@ -100,5 +106,5 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
</ng-template>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -7,11 +7,16 @@ import {
|
|||||||
Input,
|
Input,
|
||||||
Output,
|
Output,
|
||||||
ViewChild,
|
ViewChild,
|
||||||
|
TemplateRef,
|
||||||
|
ViewContainerRef,
|
||||||
computed,
|
computed,
|
||||||
effect,
|
effect,
|
||||||
inject,
|
inject,
|
||||||
signal
|
signal
|
||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
|
import { Overlay, OverlayModule, OverlayRef, ConnectedPosition } from '@angular/cdk/overlay';
|
||||||
|
import { TemplatePortal, PortalModule } from '@angular/cdk/portal';
|
||||||
|
import { A11yModule } from '@angular/cdk/a11y';
|
||||||
import { splitPathKeepFilename } from '../../../../shared/utils/path';
|
import { splitPathKeepFilename } from '../../../../shared/utils/path';
|
||||||
import { ToastService } from '../../../../shared/toast/toast.service';
|
import { ToastService } from '../../../../shared/toast/toast.service';
|
||||||
import { VaultService } from '../../../../../services/vault.service';
|
import { VaultService } from '../../../../../services/vault.service';
|
||||||
@ -32,7 +37,7 @@ interface FlattenedFolder {
|
|||||||
@Component({
|
@Component({
|
||||||
selector: 'app-move-note-to-folder',
|
selector: 'app-move-note-to-folder',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [CommonModule],
|
imports: [CommonModule, OverlayModule, PortalModule, A11yModule],
|
||||||
templateUrl: './move-note-to-folder.component.html',
|
templateUrl: './move-note-to-folder.component.html',
|
||||||
styleUrls: ['./move-note-to-folder.component.css']
|
styleUrls: ['./move-note-to-folder.component.css']
|
||||||
})
|
})
|
||||||
@ -49,6 +54,7 @@ export class MoveNoteToFolderComponent {
|
|||||||
|
|
||||||
@ViewChild('searchField') searchField?: ElementRef<HTMLInputElement>;
|
@ViewChild('searchField') searchField?: ElementRef<HTMLInputElement>;
|
||||||
@ViewChild('trigger') trigger?: ElementRef<HTMLElement>;
|
@ViewChild('trigger') trigger?: ElementRef<HTMLElement>;
|
||||||
|
@ViewChild('panelTpl') panelTpl?: TemplateRef<any>;
|
||||||
|
|
||||||
readonly showMenu = signal(false);
|
readonly showMenu = signal(false);
|
||||||
readonly searchQuery = signal('');
|
readonly searchQuery = signal('');
|
||||||
@ -95,6 +101,9 @@ export class MoveNoteToFolderComponent {
|
|||||||
private readonly toast = inject(ToastService);
|
private readonly toast = inject(ToastService);
|
||||||
private readonly destroyRef = inject(DestroyRef);
|
private readonly destroyRef = inject(DestroyRef);
|
||||||
private readonly host = inject(ElementRef<HTMLElement>);
|
private readonly host = inject(ElementRef<HTMLElement>);
|
||||||
|
private readonly overlay = inject(Overlay);
|
||||||
|
private readonly vcr = inject(ViewContainerRef);
|
||||||
|
private overlayRef?: OverlayRef;
|
||||||
|
|
||||||
private listenersAttached = false;
|
private listenersAttached = false;
|
||||||
|
|
||||||
@ -107,6 +116,15 @@ export class MoveNoteToFolderComponent {
|
|||||||
{ allowSignalWrites: true }
|
{ allowSignalWrites: true }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
this.destroyRef.onDestroy(() => {
|
||||||
|
this.detachGlobalListeners();
|
||||||
|
if (this.overlayRef) {
|
||||||
|
try { this.overlayRef.detach(); } catch {}
|
||||||
|
try { this.overlayRef.dispose(); } catch {}
|
||||||
|
this.overlayRef = undefined;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
effect(
|
effect(
|
||||||
() => {
|
() => {
|
||||||
const path = this.currentFolderPath();
|
const path = this.currentFolderPath();
|
||||||
@ -132,7 +150,29 @@ export class MoveNoteToFolderComponent {
|
|||||||
this.attachGlobalListeners();
|
this.attachGlobalListeners();
|
||||||
|
|
||||||
queueMicrotask(() => {
|
queueMicrotask(() => {
|
||||||
this.computeMenuPosition();
|
const tpl = this.panelTpl;
|
||||||
|
if (!tpl) return;
|
||||||
|
|
||||||
|
const positionStrategy = this.overlay
|
||||||
|
.position()
|
||||||
|
.global()
|
||||||
|
.centerHorizontally()
|
||||||
|
.centerVertically();
|
||||||
|
|
||||||
|
this.overlayRef = this.overlay.create({
|
||||||
|
hasBackdrop: true,
|
||||||
|
backdropClass: 'ov-blur-backdrop',
|
||||||
|
positionStrategy,
|
||||||
|
scrollStrategy: this.overlay.scrollStrategies.reposition()
|
||||||
|
});
|
||||||
|
|
||||||
|
this.overlayRef.backdropClick().subscribe(() => this.closeMenu());
|
||||||
|
this.overlayRef.keydownEvents().subscribe((e) => {
|
||||||
|
if (e.key === 'Escape') this.closeMenu();
|
||||||
|
});
|
||||||
|
|
||||||
|
const portal = new TemplatePortal(tpl, this.vcr);
|
||||||
|
this.overlayRef.attach(portal);
|
||||||
setTimeout(() => this.focusSearchField(), 0);
|
setTimeout(() => this.focusSearchField(), 0);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -303,6 +343,11 @@ export class MoveNoteToFolderComponent {
|
|||||||
|
|
||||||
private closeMenu(): void {
|
private closeMenu(): void {
|
||||||
this.showMenu.set(false);
|
this.showMenu.set(false);
|
||||||
|
if (this.overlayRef) {
|
||||||
|
try { this.overlayRef.detach(); } catch {}
|
||||||
|
try { this.overlayRef.dispose(); } catch {}
|
||||||
|
this.overlayRef = undefined;
|
||||||
|
}
|
||||||
this.detachGlobalListeners();
|
this.detachGlobalListeners();
|
||||||
this.searchQuery.set('');
|
this.searchQuery.set('');
|
||||||
this.processingPath.set(null);
|
this.processingPath.set(null);
|
||||||
@ -319,18 +364,8 @@ export class MoveNoteToFolderComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private computeMenuPosition(): void {
|
private computeMenuPosition(): void {}
|
||||||
const t = this.trigger?.nativeElement;
|
private repositionPanel(): void {}
|
||||||
if (!t) return;
|
|
||||||
const rect = t.getBoundingClientRect();
|
|
||||||
// Place menu just under the trigger (fixed panel -> viewport coords)
|
|
||||||
this.menuTop.set(Math.round(rect.bottom + 8));
|
|
||||||
// Align left edge; clamp to viewport
|
|
||||||
const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);
|
|
||||||
const desiredLeft = Math.round(rect.left);
|
|
||||||
const clampedLeft = Math.min(Math.max(8, desiredLeft), vw - 8 - 320); // ~w-80
|
|
||||||
this.menuLeft.set(clampedLeft);
|
|
||||||
}
|
|
||||||
|
|
||||||
private attachGlobalListeners(): void {
|
private attachGlobalListeners(): void {
|
||||||
if (typeof document === 'undefined' || this.listenersAttached) {
|
if (typeof document === 'undefined' || this.listenersAttached) {
|
||||||
@ -354,7 +389,10 @@ export class MoveNoteToFolderComponent {
|
|||||||
if (!this.showMenu()) {
|
if (!this.showMenu()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!this.host.nativeElement.contains(event.target as Node)) {
|
const target = event.target as Node;
|
||||||
|
const hostContains = this.host.nativeElement.contains(target);
|
||||||
|
const overlayContains = this.overlayRef?.overlayElement.contains(target) ?? false;
|
||||||
|
if (!hostContains && !overlayContains) {
|
||||||
this.closeMenu();
|
this.closeMenu();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -365,6 +403,16 @@ export class MoveNoteToFolderComponent {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
onSearchEnter(event: KeyboardEvent): void {
|
||||||
|
event.preventDefault();
|
||||||
|
if (this.isSearching() && this.searchResults().length > 0) {
|
||||||
|
const first = this.searchResults()[0];
|
||||||
|
this.onSearchResultSelected(first);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.moveToCurrentFolder();
|
||||||
|
}
|
||||||
|
|
||||||
private normalizeFolderPath(value: string | null | undefined): string {
|
private normalizeFolderPath(value: string | null | undefined): string {
|
||||||
return (value ?? '')
|
return (value ?? '')
|
||||||
.replace(/\\/g, '/')
|
.replace(/\\/g, '/')
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<header class="note-header flex flex-col gap-2 min-w-0">
|
<header class="note-header flex flex-col gap-2 min-w-0">
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<button type="button"
|
<button type="button"
|
||||||
class="flex-shrink-0 inline-flex items-center justify-center w-8 h-8 rounded-lg border border-border dark:border-border bg-card dark:bg-card text-muted dark:text-muted hover:bg-surface1 dark:hover:bg-surface2 hover:text-main dark:hover:text-main transition-all duration-150 shadow-sm"
|
class="flex-shrink-0 inline-flex items-center justify-center w-8 h-8 rounded-lg border border-border dark:border-border bg-card dark:bg-card text-muted dark:text-muted hover:bg-surface1 dark:hover:bg-surface2 hover:text-main dark:hover:text-main transition-all duration-150 shadow-sm accented-action"
|
||||||
aria-label="Copier le chemin"
|
aria-label="Copier le chemin"
|
||||||
title="Copier le chemin"
|
title="Copier le chemin"
|
||||||
(click)="copyRequested.emit()">
|
(click)="copyRequested.emit()">
|
||||||
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<button #propsBtn
|
<button #propsBtn
|
||||||
type="button"
|
type="button"
|
||||||
class="flex-shrink-0 inline-flex items-center justify-center w-8 h-8 rounded-lg border border-border dark:border-border bg-card dark:bg-card text-muted dark:text-muted hover:bg-surface1 dark:hover:bg-surface2 hover:text-main dark:hover:text-main transition-all duration-150 shadow-sm"
|
class="flex-shrink-0 inline-flex items-center justify-center w-8 h-8 rounded-lg border border-border dark:border-border bg-card dark:bg-card text-muted dark:text-muted hover:bg-surface1 dark:hover:bg-surface2 hover:text-main dark:hover:text-main transition-all duration-150 shadow-sm accented-action"
|
||||||
aria-label="Afficher les propriétés du document"
|
aria-label="Afficher les propriétés du document"
|
||||||
title="Propriétés du document"
|
title="Propriétés du document"
|
||||||
aria-haspopup="dialog"
|
aria-haspopup="dialog"
|
||||||
|
|||||||
@ -70,3 +70,21 @@
|
|||||||
.note-header__action:hover {
|
.note-header__action:hover {
|
||||||
background-color: rgba(148, 163, 184, 0.15);
|
background-color: rgba(148, 163, 184, 0.15);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Accent the small round action buttons when a note color is present */
|
||||||
|
:host.has-note-color .accented-action {
|
||||||
|
border-color: color-mix(in oklab, var(--note-accent-color) 45%, var(--border));
|
||||||
|
background: color-mix(in oklab, var(--note-accent-color) 16%, var(--card));
|
||||||
|
color: color-mix(in oklab, var(--note-accent-text-color, #e2e8f0) 90%, var(--text-muted));
|
||||||
|
}
|
||||||
|
|
||||||
|
:host.has-note-color .accented-action:hover,
|
||||||
|
:host.has-note-color .accented-action:focus-visible {
|
||||||
|
background: color-mix(in oklab, var(--note-accent-color) 22%, var(--card));
|
||||||
|
color: var(--note-accent-text-color, #e2e8f0);
|
||||||
|
box-shadow: 0 0 0 2px color-mix(in oklab, var(--note-accent-color) 25%, transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
:host.has-note-color .accented-action svg {
|
||||||
|
stroke: currentColor;
|
||||||
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { AfterViewInit, Component, ElementRef, Input, OnDestroy, Output, EventEmitter, ViewContainerRef, inject, OnChanges, SimpleChanges, ViewChild } from '@angular/core';
|
import { AfterViewInit, Component, ElementRef, Input, OnDestroy, Output, EventEmitter, ViewContainerRef, inject, OnChanges, SimpleChanges, ViewChild, HostBinding } from '@angular/core';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { debounceTime, Subject } from 'rxjs';
|
import { debounceTime, Subject } from 'rxjs';
|
||||||
import { splitPathKeepFilename } from '../../../../shared/utils/path';
|
import { splitPathKeepFilename } from '../../../../shared/utils/path';
|
||||||
@ -23,6 +23,7 @@ export class NoteHeaderComponent implements AfterViewInit, OnDestroy, OnChanges
|
|||||||
@Input() fullPath = '';
|
@Input() fullPath = '';
|
||||||
@Input() noteId = '';
|
@Input() noteId = '';
|
||||||
@Input() tags: string[] = [];
|
@Input() tags: string[] = [];
|
||||||
|
@Input() noteColor?: string | null;
|
||||||
|
|
||||||
@Output() openDirectory = new EventEmitter<void>();
|
@Output() openDirectory = new EventEmitter<void>();
|
||||||
@Output() copyRequested = new EventEmitter<void>();
|
@Output() copyRequested = new EventEmitter<void>();
|
||||||
@ -32,6 +33,10 @@ export class NoteHeaderComponent implements AfterViewInit, OnDestroy, OnChanges
|
|||||||
|
|
||||||
pathParts: { prefix: string; filename: string } = { prefix: '', filename: '' };
|
pathParts: { prefix: string; filename: string } = { prefix: '', filename: '' };
|
||||||
|
|
||||||
|
@HostBinding('style.--note-accent-color') accentColorCss: string | null = null;
|
||||||
|
@HostBinding('style.--note-accent-text-color') accentTextColor: string | null = null;
|
||||||
|
@HostBinding('class.has-note-color') hasAccentColor = false;
|
||||||
|
|
||||||
// Inline rename state
|
// Inline rename state
|
||||||
isRenaming = false;
|
isRenaming = false;
|
||||||
originalFileName = '';
|
originalFileName = '';
|
||||||
@ -61,6 +66,9 @@ export class NoteHeaderComponent implements AfterViewInit, OnDestroy, OnChanges
|
|||||||
this.fitPath();
|
this.fitPath();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (changes['noteId'] || changes['fullPath'] || changes['noteColor']) {
|
||||||
|
this.applyAccentColor();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onNoteMoved(newPath: string): void {
|
onNoteMoved(newPath: string): void {
|
||||||
@ -72,6 +80,7 @@ export class NoteHeaderComponent implements AfterViewInit, OnDestroy, OnChanges
|
|||||||
this.pathParts = splitPathKeepFilename(newPath);
|
this.pathParts = splitPathKeepFilename(newPath);
|
||||||
this.noteMoved.emit(newPath);
|
this.noteMoved.emit(newPath);
|
||||||
this.urlState.openNote(newPath, { force: true });
|
this.urlState.openNote(newPath, { force: true });
|
||||||
|
this.applyAccentColor();
|
||||||
|
|
||||||
queueMicrotask(() => {
|
queueMicrotask(() => {
|
||||||
this.applyProgressiveCollapse();
|
this.applyProgressiveCollapse();
|
||||||
@ -81,6 +90,7 @@ export class NoteHeaderComponent implements AfterViewInit, OnDestroy, OnChanges
|
|||||||
|
|
||||||
ngAfterViewInit(): void {
|
ngAfterViewInit(): void {
|
||||||
this.pathParts = splitPathKeepFilename(this.fullPath);
|
this.pathParts = splitPathKeepFilename(this.fullPath);
|
||||||
|
this.applyAccentColor();
|
||||||
|
|
||||||
this.ro = new ResizeObserver(() => this.resize$.next());
|
this.ro = new ResizeObserver(() => this.resize$.next());
|
||||||
this.ro.observe(this.host.nativeElement);
|
this.ro.observe(this.host.nativeElement);
|
||||||
@ -320,4 +330,46 @@ export class NoteHeaderComponent implements AfterViewInit, OnDestroy, OnChanges
|
|||||||
}
|
}
|
||||||
this.popoverOpen = false;
|
this.popoverOpen = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private applyAccentColor(): void {
|
||||||
|
const color = this.resolveAccentColor();
|
||||||
|
this.accentColorCss = color;
|
||||||
|
this.accentTextColor = color ? this.computeReadableTextColor(color) : null;
|
||||||
|
this.hasAccentColor = !!color;
|
||||||
|
}
|
||||||
|
|
||||||
|
private resolveAccentColor(): string | null {
|
||||||
|
if (this.noteColor) {
|
||||||
|
return this.noteColor;
|
||||||
|
}
|
||||||
|
const note = this.vaultService.getNoteById(this.noteId);
|
||||||
|
return note?.frontmatter?.color ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private computeReadableTextColor(color: string): string {
|
||||||
|
const parsed = this.parseHexColor(color.trim());
|
||||||
|
if (!parsed) {
|
||||||
|
return '#0f172a';
|
||||||
|
}
|
||||||
|
const { r, g, b } = parsed;
|
||||||
|
const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
||||||
|
return luminance > 0.55 ? '#0f172a' : '#f8fafc';
|
||||||
|
}
|
||||||
|
|
||||||
|
private parseHexColor(color: string): { r: number; g: number; b: number } | null {
|
||||||
|
const normalized = color.startsWith('#') ? color.slice(1) : color;
|
||||||
|
if (normalized.length === 3) {
|
||||||
|
const r = parseInt(normalized[0] + normalized[0], 16);
|
||||||
|
const g = parseInt(normalized[1] + normalized[1], 16);
|
||||||
|
const b = parseInt(normalized[2] + normalized[2], 16);
|
||||||
|
return Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b) ? null : { r, g, b };
|
||||||
|
}
|
||||||
|
if (normalized.length === 6) {
|
||||||
|
const r = parseInt(normalized.slice(0, 2), 16);
|
||||||
|
const g = parseInt(normalized.slice(2, 4), 16);
|
||||||
|
const b = parseInt(normalized.slice(4, 6), 16);
|
||||||
|
return Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b) ? null : { r, g, b };
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1 +1,19 @@
|
|||||||
/* Styles are provided via Tailwind utility classes directly in templates. */
|
/* Styles are provided via Tailwind utility classes directly in templates. */
|
||||||
|
|
||||||
|
/* Inherit accent color from ancestor NoteHeader when available */
|
||||||
|
:host-context(.has-note-color) .accented-action {
|
||||||
|
border-color: color-mix(in oklab, var(--note-accent-color) 45%, var(--border));
|
||||||
|
background: color-mix(in oklab, var(--note-accent-color) 16%, var(--card));
|
||||||
|
color: color-mix(in oklab, var(--note-accent-text-color, #e2e8f0) 90%, var(--text-muted));
|
||||||
|
}
|
||||||
|
|
||||||
|
:host-context(.has-note-color) .accented-action:hover,
|
||||||
|
:host-context(.has-note-color) .accented-action:focus-visible {
|
||||||
|
background: color-mix(in oklab, var(--note-accent-color) 22%, var(--card));
|
||||||
|
color: var(--note-accent-text-color, #e2e8f0);
|
||||||
|
box-shadow: 0 0 0 2px color-mix(in oklab, var(--note-accent-color) 25%, transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
:host-context(.has-note-color) .accented-action svg {
|
||||||
|
stroke: currentColor;
|
||||||
|
}
|
||||||
|
|||||||
@ -1,12 +1,15 @@
|
|||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="inline-flex items-center justify-center w-9 h-9 md:w-9 md:h-9 sm:w-8 sm:h-8 rounded-full hover:bg-slate-500/10 dark:hover:bg-surface2/10"
|
class="flex-shrink-0 inline-flex items-center justify-center w-8 h-8 rounded-lg border border-border dark:border-border bg-card dark:bg-card text-muted dark:text-muted hover:bg-surface1 dark:hover:bg-surface2 hover:text-main dark:hover:text-main transition-all duration-150 shadow-sm accented-action"
|
||||||
aria-label="Modifier les tags"
|
aria-label="Modifier les tags"
|
||||||
[attr.aria-pressed]="isEditing()"
|
[attr.aria-pressed]="isEditing()"
|
||||||
(click)="toggleEditor()"
|
(click)="toggleEditor()"
|
||||||
title="Modifier les tags">
|
title="Modifier les tags">
|
||||||
<svg class="text-xl" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7 7h.01"/><path d="M3 7h5a2 2 0 0 1 1.414.586l7 7a2 2 0 0 1 0 2.828l-3.172 3.172a2 2 0 0 1-2.828 0l-7-7A2 2 0 0 1 3 12V7Z"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<path d="M7 7h.01"/>
|
||||||
|
<path d="M3 7h5a2 2 0 0 1 1.414.586l7 7a2 2 0 0 1 0 2.828l-3.172 3.172a2 2 0 0 1-2.828 0l-7-7A2 2 0 0 1 3 12V7Z"/>
|
||||||
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<!-- Mobile: show first two + '+N' button -->
|
<!-- Mobile: show first two + '+N' button -->
|
||||||
|
|||||||
@ -256,6 +256,16 @@ excalidraw-editor .excalidraw .layer-ui__wrapper {
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Themed blurred backdrop for contextual dialogs (Move Note to Folder, etc.) */
|
||||||
|
.ov-blur-backdrop {
|
||||||
|
background-color: color-mix(in oklab, var(--bg-main, #0f172a) 25%, rgba(0,0,0,0.55));
|
||||||
|
-webkit-backdrop-filter: blur(8px);
|
||||||
|
backdrop-filter: blur(8px);
|
||||||
|
opacity: 1;
|
||||||
|
transition: opacity 160ms ease;
|
||||||
|
}
|
||||||
|
.ov-blur-backdrop.cdk-overlay-backdrop-showing { opacity: 1; }
|
||||||
|
|
||||||
.md-math-inline {
|
.md-math-inline {
|
||||||
font-family: "Cambria", "Times New Roman", serif;
|
font-family: "Cambria", "Times New Roman", serif;
|
||||||
background-color: rgba(148, 163, 184, 0.2);
|
background-color: rgba(148, 163, 184, 0.2);
|
||||||
|
|||||||
23
vault/Allo-3/Nouvelle note 13.md
Normal file
23
vault/Allo-3/Nouvelle note 13.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
titre: Nouvelle note 13
|
||||||
|
auteur: Bruno Charest
|
||||||
|
creation_date: 2025-10-26T14:56:06.375Z
|
||||||
|
modification_date: 2025-10-27T15:43:42-04:00
|
||||||
|
catégorie: ""
|
||||||
|
tags:
|
||||||
|
- configuration
|
||||||
|
- tag2
|
||||||
|
- bruno
|
||||||
|
- accueil
|
||||||
|
aliases:
|
||||||
|
- ""
|
||||||
|
status: en-cours
|
||||||
|
publish: false
|
||||||
|
favoris: true
|
||||||
|
template: false
|
||||||
|
task: false
|
||||||
|
archive: false
|
||||||
|
draft: false
|
||||||
|
private: false
|
||||||
|
color: "#F59E0B"
|
||||||
|
---
|
||||||
@ -10,7 +10,7 @@ tags:
|
|||||||
aliases: []
|
aliases: []
|
||||||
status: en-cours
|
status: en-cours
|
||||||
publish: false
|
publish: false
|
||||||
favoris: false
|
favoris: true
|
||||||
template: false
|
template: false
|
||||||
task: false
|
task: false
|
||||||
archive: false
|
archive: false
|
||||||
|
|||||||
@ -18,3 +18,39 @@ tags:
|
|||||||
- accueil
|
- accueil
|
||||||
- tag3
|
- tag3
|
||||||
---
|
---
|
||||||
|
Allo ceci est un tests
|
||||||
|
toto
|
||||||
|
|
||||||
|
# Test 1 Markdown
|
||||||
|
|
||||||
|
## Titres
|
||||||
|
|
||||||
|
# Niveau 1
|
||||||
|
#tag1 #tag2 #test #test2
|
||||||
|
|
||||||
|
|
||||||
|
# Nouveau-markdown
|
||||||
|
|
||||||
|
## sous-titre
|
||||||
|
- [ ] allo
|
||||||
|
- [ ] toto
|
||||||
|
- [ ] tata
|
||||||
|
|
||||||
|
## sous-titre 2
|
||||||
|
|
||||||
|
#tag1 #tag2 #tag3 #tag4
|
||||||
|
|
||||||
|
## sous-titre 3
|
||||||
|
|
||||||
|
## sous-titre 4
|
||||||
|
|
||||||
|
## sous-titre 5
|
||||||
|
test
|
||||||
|
|
||||||
|
## sous-titre 6
|
||||||
|
test
|
||||||
|
|
||||||
|
## sous-titre 7
|
||||||
|
test
|
||||||
|
|
||||||
|
## sous-titre 8
|
||||||
@ -1,8 +1,8 @@
|
|||||||
---
|
---
|
||||||
titre: Nouvelle note 15
|
titre: Nouvelle note 16
|
||||||
auteur: Bruno Charest
|
auteur: Bruno Charest
|
||||||
creation_date: 2025-10-27T01:39:33.465Z
|
creation_date: 2025-10-27T18:01:11.627Z
|
||||||
modification_date: 2025-10-26T21:39:33-04:00
|
modification_date: 2025-10-27T14:01:12-04:00
|
||||||
catégorie: ""
|
catégorie: ""
|
||||||
tags: []
|
tags: []
|
||||||
aliases: []
|
aliases: []
|
||||||
@ -1,8 +1,8 @@
|
|||||||
---
|
---
|
||||||
titre: "Nouvelle note 15"
|
titre: "Nouvelle note 16"
|
||||||
auteur: "Bruno Charest"
|
auteur: "Bruno Charest"
|
||||||
creation_date: "2025-10-27T01:39:33.465Z"
|
creation_date: "2025-10-27T18:01:11.627Z"
|
||||||
modification_date: "2025-10-27T01:39:33.465Z"
|
modification_date: "2025-10-27T18:01:11.627Z"
|
||||||
status: "en-cours"
|
status: "en-cours"
|
||||||
publish: false
|
publish: false
|
||||||
favoris: false
|
favoris: false
|
||||||
@ -13,7 +13,6 @@ draft: true
|
|||||||
private: true
|
private: true
|
||||||
toto: "tata"
|
toto: "tata"
|
||||||
readOnly: false
|
readOnly: false
|
||||||
color: "#A855F7"
|
|
||||||
---
|
---
|
||||||
Allo ceci est un tests
|
Allo ceci est un tests
|
||||||
toto
|
toto
|
||||||
|
|||||||
@ -13,6 +13,10 @@ archive: true
|
|||||||
draft: true
|
draft: true
|
||||||
private: true
|
private: true
|
||||||
color: "#EF4444"
|
color: "#EF4444"
|
||||||
|
tags:
|
||||||
|
- configuration
|
||||||
|
- tag4
|
||||||
|
- test
|
||||||
---
|
---
|
||||||
# TEST
|
# TEST
|
||||||
|
|
||||||
|
|||||||
@ -1,21 +0,0 @@
|
|||||||
---
|
|
||||||
titre: "Nouvelle note 13"
|
|
||||||
auteur: "Bruno Charest"
|
|
||||||
creation_date: "2025-10-26T14:56:06.375Z"
|
|
||||||
modification_date: "2025-10-26T10:56:06-04:00"
|
|
||||||
aliases: [""]
|
|
||||||
status: "en-cours"
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
color: "#F59E0B"
|
|
||||||
tags:
|
|
||||||
- configuration
|
|
||||||
- tag2
|
|
||||||
- bruno
|
|
||||||
- accueil
|
|
||||||
---
|
|
||||||
54
vault/folder-4/test-add-properties.md
Normal file
54
vault/folder-4/test-add-properties.md
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
titre: test-add-properties
|
||||||
|
auteur: Bruno Charest
|
||||||
|
creation_date: 2025-10-23T13:11:50-04:00
|
||||||
|
modification_date: 2025-10-27T16:20:34-04:00
|
||||||
|
catégorie: ""
|
||||||
|
tags:
|
||||||
|
- tagtag
|
||||||
|
aliases: []
|
||||||
|
status: en-cours
|
||||||
|
publish: false
|
||||||
|
favoris: true
|
||||||
|
template: false
|
||||||
|
task: true
|
||||||
|
archive: false
|
||||||
|
draft: false
|
||||||
|
private: true
|
||||||
|
---
|
||||||
|
Allo ceci est un tests
|
||||||
|
toto
|
||||||
|
|
||||||
|
# Test 1 Markdown
|
||||||
|
|
||||||
|
## Titres
|
||||||
|
|
||||||
|
# Niveau 1
|
||||||
|
#tag1 #tag2 #test #test2
|
||||||
|
|
||||||
|
|
||||||
|
# Nouveau-markdown
|
||||||
|
|
||||||
|
## sous-titre
|
||||||
|
- [ ] allo
|
||||||
|
- [ ] toto
|
||||||
|
- [ ] tata
|
||||||
|
|
||||||
|
## sous-titre 2
|
||||||
|
|
||||||
|
#tag1 #tag2 #tag3 #tag4
|
||||||
|
|
||||||
|
## sous-titre 3
|
||||||
|
|
||||||
|
## sous-titre 4
|
||||||
|
|
||||||
|
## sous-titre 5
|
||||||
|
test
|
||||||
|
|
||||||
|
## sous-titre 6
|
||||||
|
test
|
||||||
|
|
||||||
|
## sous-titre 7
|
||||||
|
test
|
||||||
|
|
||||||
|
## sous-titre 8
|
||||||
52
vault/folder-4/test-add-properties.md.bak
Normal file
52
vault/folder-4/test-add-properties.md.bak
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
---
|
||||||
|
titre: "test-add-properties"
|
||||||
|
auteur: "Bruno Charest"
|
||||||
|
creation_date: "2025-10-23T13:11:50-04:00"
|
||||||
|
modification_date: "2025-10-27T15:13:08-04:00"
|
||||||
|
status: "en-cours"
|
||||||
|
publish: false
|
||||||
|
favoris: true
|
||||||
|
template: false
|
||||||
|
task: true
|
||||||
|
archive: false
|
||||||
|
draft: false
|
||||||
|
private: true
|
||||||
|
tags:
|
||||||
|
- tagtag
|
||||||
|
---
|
||||||
|
Allo ceci est un tests
|
||||||
|
toto
|
||||||
|
|
||||||
|
# Test 1 Markdown
|
||||||
|
|
||||||
|
## Titres
|
||||||
|
|
||||||
|
# Niveau 1
|
||||||
|
#tag1 #tag2 #test #test2
|
||||||
|
|
||||||
|
|
||||||
|
# Nouveau-markdown
|
||||||
|
|
||||||
|
## sous-titre
|
||||||
|
- [ ] allo
|
||||||
|
- [ ] toto
|
||||||
|
- [ ] tata
|
||||||
|
|
||||||
|
## sous-titre 2
|
||||||
|
|
||||||
|
#tag1 #tag2 #tag3 #tag4
|
||||||
|
|
||||||
|
## sous-titre 3
|
||||||
|
|
||||||
|
## sous-titre 4
|
||||||
|
|
||||||
|
## sous-titre 5
|
||||||
|
test
|
||||||
|
|
||||||
|
## sous-titre 6
|
||||||
|
test
|
||||||
|
|
||||||
|
## sous-titre 7
|
||||||
|
test
|
||||||
|
|
||||||
|
## sous-titre 8
|
||||||
@ -1,17 +0,0 @@
|
|||||||
---
|
|
||||||
titre: Nouvelle note 10
|
|
||||||
auteur: Bruno Charest
|
|
||||||
creation_date: 2025-10-27T01:39:29.029Z
|
|
||||||
modification_date: 2025-10-26T21:39:29-04:00
|
|
||||||
catégorie: ""
|
|
||||||
tags: []
|
|
||||||
aliases: []
|
|
||||||
status: en-cours
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
---
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
---
|
|
||||||
titre: "Nouvelle note 10"
|
|
||||||
auteur: "Bruno Charest"
|
|
||||||
creation_date: "2025-10-27T01:39:29.029Z"
|
|
||||||
modification_date: "2025-10-27T01:39:29.029Z"
|
|
||||||
status: "en-cours"
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
---
|
|
||||||
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
---
|
|
||||||
titre: Nouvelle note 11
|
|
||||||
auteur: Bruno Charest
|
|
||||||
creation_date: 2025-10-27T01:39:30.678Z
|
|
||||||
modification_date: 2025-10-26T21:39:31-04:00
|
|
||||||
catégorie: ""
|
|
||||||
tags: []
|
|
||||||
aliases: []
|
|
||||||
status: en-cours
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
---
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
---
|
|
||||||
titre: "Nouvelle note 11"
|
|
||||||
auteur: "Bruno Charest"
|
|
||||||
creation_date: "2025-10-27T01:39:30.678Z"
|
|
||||||
modification_date: "2025-10-27T01:39:30.678Z"
|
|
||||||
status: "en-cours"
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
---
|
|
||||||
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
---
|
|
||||||
titre: "Nouvelle note 14"
|
|
||||||
auteur: "Bruno Charest"
|
|
||||||
creation_date: "2025-10-27T01:39:31.961Z"
|
|
||||||
modification_date: "2025-10-27T01:39:31.961Z"
|
|
||||||
status: "en-cours"
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
---
|
|
||||||
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
---
|
|
||||||
titre: Nouvelle note 3
|
|
||||||
auteur: Bruno Charest
|
|
||||||
creation_date: 2025-10-26T02:24:37.457Z
|
|
||||||
modification_date: 2025-10-25T22:24:37-04:00
|
|
||||||
catégorie: ""
|
|
||||||
tags: []
|
|
||||||
aliases: []
|
|
||||||
status: en-cours
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
---
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
---
|
|
||||||
titre: "Nouvelle note 3"
|
|
||||||
auteur: "Bruno Charest"
|
|
||||||
creation_date: "2025-10-26T02:24:37.457Z"
|
|
||||||
modification_date: "2025-10-26T02:24:37.457Z"
|
|
||||||
status: "en-cours"
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
---
|
|
||||||
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
---
|
|
||||||
titre: Nouvelle note 4
|
|
||||||
auteur: Bruno Charest
|
|
||||||
creation_date: 2025-10-25T02:07:16.534Z
|
|
||||||
modification_date: 2025-10-24T22:07:16-04:00
|
|
||||||
catégorie: ""
|
|
||||||
tags: []
|
|
||||||
aliases: []
|
|
||||||
status: en-cours
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
---
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
---
|
|
||||||
titre: "Nouvelle note 4"
|
|
||||||
auteur: "Bruno Charest"
|
|
||||||
creation_date: "2025-10-25T02:07:16.534Z"
|
|
||||||
modification_date: "2025-10-25T02:07:16.534Z"
|
|
||||||
status: "en-cours"
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
---
|
|
||||||
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
---
|
|
||||||
titre: Nouvelle note 5
|
|
||||||
auteur: Bruno Charest
|
|
||||||
creation_date: 2025-10-26T02:40:02.515Z
|
|
||||||
modification_date: 2025-10-25T22:40:02-04:00
|
|
||||||
catégorie: ""
|
|
||||||
tags: []
|
|
||||||
aliases: []
|
|
||||||
status: en-cours
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
---
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
---
|
|
||||||
titre: "Nouvelle note 5"
|
|
||||||
auteur: "Bruno Charest"
|
|
||||||
creation_date: "2025-10-26T02:40:02.515Z"
|
|
||||||
modification_date: "2025-10-26T02:40:02.515Z"
|
|
||||||
status: "en-cours"
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
---
|
|
||||||
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
---
|
|
||||||
titre: Nouvelle note 6
|
|
||||||
auteur: Bruno Charest
|
|
||||||
creation_date: 2025-10-26T02:41:08.391Z
|
|
||||||
modification_date: 2025-10-25T22:41:08-04:00
|
|
||||||
catégorie: ""
|
|
||||||
tags: []
|
|
||||||
aliases: []
|
|
||||||
status: en-cours
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
---
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
---
|
|
||||||
titre: "Nouvelle note 6"
|
|
||||||
auteur: "Bruno Charest"
|
|
||||||
creation_date: "2025-10-26T02:41:08.391Z"
|
|
||||||
modification_date: "2025-10-26T02:41:08.391Z"
|
|
||||||
status: "en-cours"
|
|
||||||
publish: false
|
|
||||||
favoris: false
|
|
||||||
template: false
|
|
||||||
task: false
|
|
||||||
archive: false
|
|
||||||
draft: false
|
|
||||||
private: false
|
|
||||||
---
|
|
||||||
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
---
|
|
||||||
titre: archived-note
|
|
||||||
auteur: Bruno Charest
|
|
||||||
creation_date: 2025-10-19T11:13:12-04:00
|
|
||||||
modification_date: 2025-10-19T12:09:46-04:00
|
|
||||||
catégorie: ""
|
|
||||||
tags:
|
|
||||||
- bruno
|
|
||||||
- configuration
|
|
||||||
aliases: []
|
|
||||||
status: en-cours
|
|
||||||
publish: true
|
|
||||||
favoris: true
|
|
||||||
template: true
|
|
||||||
task: true
|
|
||||||
archive: true
|
|
||||||
draft: true
|
|
||||||
private: true
|
|
||||||
---
|
|
||||||
# Archived Note
|
|
||||||
|
|
||||||
#bruno
|
|
||||||
|
|
||||||
|
|
||||||
This note was archived and moved to trash.
|
|
||||||
Loading…
x
Reference in New Issue
Block a user