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 {
|
||||
/* Solid, non-transparent panel aligned with site menus */
|
||||
background: var(--card-bg);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 1rem;
|
||||
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;
|
||||
/* Ne pas remettre de background ici: on s'appuie sur bg-card du HTML */
|
||||
position: relative; /* needed for ::before background layer */
|
||||
backdrop-filter: none !important;
|
||||
opacity: 1 !important;
|
||||
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 {
|
||||
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 {
|
||||
|
||||
@ -11,10 +11,14 @@
|
||||
<span class="text-xs opacity-70">▾</span>
|
||||
</button>
|
||||
|
||||
@if (showMenu()) {
|
||||
<div class="fixed z-[1000] w-80 move-menu-panel"
|
||||
[style.top.px]="menuTop()" [style.left.px]="menuLeft()">
|
||||
<div class="move-menu-header flex items-center justify-between">
|
||||
<ng-template #panelTpl>
|
||||
<div
|
||||
class="z-[2147483647] w-80 bg-card text-popover-foreground border border-border rounded-2xl shadow-2xl move-menu-panel animate-fadeIn"
|
||||
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>
|
||||
<button class="move-menu-link" (click)="openFolderInSidebar()">Open sidebar</button>
|
||||
</div>
|
||||
@ -32,6 +36,8 @@
|
||||
placeholder="Search folders"
|
||||
[value]="searchQuery()"
|
||||
(input)="onSearchChange($any($event.target).value)"
|
||||
(keydown.enter)="onSearchEnter($event)"
|
||||
cdkFocusInitial
|
||||
/>
|
||||
@if (searchQuery()) {
|
||||
<button type="button" class="move-menu-clear" (click)="clearSearch()">✕</button>
|
||||
@ -64,7 +70,7 @@
|
||||
>
|
||||
<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">
|
||||
<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>
|
||||
<span class="truncate">{{ folder.name }}</span>
|
||||
</span>
|
||||
@ -100,5 +106,5 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</ng-template>
|
||||
</div>
|
||||
|
||||
@ -7,11 +7,16 @@ import {
|
||||
Input,
|
||||
Output,
|
||||
ViewChild,
|
||||
TemplateRef,
|
||||
ViewContainerRef,
|
||||
computed,
|
||||
effect,
|
||||
inject,
|
||||
signal
|
||||
} 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 { ToastService } from '../../../../shared/toast/toast.service';
|
||||
import { VaultService } from '../../../../../services/vault.service';
|
||||
@ -32,7 +37,7 @@ interface FlattenedFolder {
|
||||
@Component({
|
||||
selector: 'app-move-note-to-folder',
|
||||
standalone: true,
|
||||
imports: [CommonModule],
|
||||
imports: [CommonModule, OverlayModule, PortalModule, A11yModule],
|
||||
templateUrl: './move-note-to-folder.component.html',
|
||||
styleUrls: ['./move-note-to-folder.component.css']
|
||||
})
|
||||
@ -49,6 +54,7 @@ export class MoveNoteToFolderComponent {
|
||||
|
||||
@ViewChild('searchField') searchField?: ElementRef<HTMLInputElement>;
|
||||
@ViewChild('trigger') trigger?: ElementRef<HTMLElement>;
|
||||
@ViewChild('panelTpl') panelTpl?: TemplateRef<any>;
|
||||
|
||||
readonly showMenu = signal(false);
|
||||
readonly searchQuery = signal('');
|
||||
@ -95,6 +101,9 @@ export class MoveNoteToFolderComponent {
|
||||
private readonly toast = inject(ToastService);
|
||||
private readonly destroyRef = inject(DestroyRef);
|
||||
private readonly host = inject(ElementRef<HTMLElement>);
|
||||
private readonly overlay = inject(Overlay);
|
||||
private readonly vcr = inject(ViewContainerRef);
|
||||
private overlayRef?: OverlayRef;
|
||||
|
||||
private listenersAttached = false;
|
||||
|
||||
@ -107,6 +116,15 @@ export class MoveNoteToFolderComponent {
|
||||
{ allowSignalWrites: true }
|
||||
);
|
||||
|
||||
this.destroyRef.onDestroy(() => {
|
||||
this.detachGlobalListeners();
|
||||
if (this.overlayRef) {
|
||||
try { this.overlayRef.detach(); } catch {}
|
||||
try { this.overlayRef.dispose(); } catch {}
|
||||
this.overlayRef = undefined;
|
||||
}
|
||||
});
|
||||
|
||||
effect(
|
||||
() => {
|
||||
const path = this.currentFolderPath();
|
||||
@ -132,7 +150,29 @@ export class MoveNoteToFolderComponent {
|
||||
this.attachGlobalListeners();
|
||||
|
||||
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);
|
||||
});
|
||||
}
|
||||
@ -303,6 +343,11 @@ export class MoveNoteToFolderComponent {
|
||||
|
||||
private closeMenu(): void {
|
||||
this.showMenu.set(false);
|
||||
if (this.overlayRef) {
|
||||
try { this.overlayRef.detach(); } catch {}
|
||||
try { this.overlayRef.dispose(); } catch {}
|
||||
this.overlayRef = undefined;
|
||||
}
|
||||
this.detachGlobalListeners();
|
||||
this.searchQuery.set('');
|
||||
this.processingPath.set(null);
|
||||
@ -319,18 +364,8 @@ export class MoveNoteToFolderComponent {
|
||||
}
|
||||
}
|
||||
|
||||
private computeMenuPosition(): void {
|
||||
const t = this.trigger?.nativeElement;
|
||||
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 computeMenuPosition(): void {}
|
||||
private repositionPanel(): void {}
|
||||
|
||||
private attachGlobalListeners(): void {
|
||||
if (typeof document === 'undefined' || this.listenersAttached) {
|
||||
@ -354,7 +389,10 @@ export class MoveNoteToFolderComponent {
|
||||
if (!this.showMenu()) {
|
||||
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();
|
||||
}
|
||||
};
|
||||
@ -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 {
|
||||
return (value ?? '')
|
||||
.replace(/\\/g, '/')
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<header class="note-header flex flex-col gap-2 min-w-0">
|
||||
<div class="flex items-center gap-2">
|
||||
<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"
|
||||
title="Copier le chemin"
|
||||
(click)="copyRequested.emit()">
|
||||
@ -10,7 +10,7 @@
|
||||
|
||||
<button #propsBtn
|
||||
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"
|
||||
title="Propriétés du document"
|
||||
aria-haspopup="dialog"
|
||||
|
||||
@ -70,3 +70,21 @@
|
||||
.note-header__action:hover {
|
||||
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 { debounceTime, Subject } from 'rxjs';
|
||||
import { splitPathKeepFilename } from '../../../../shared/utils/path';
|
||||
@ -23,6 +23,7 @@ export class NoteHeaderComponent implements AfterViewInit, OnDestroy, OnChanges
|
||||
@Input() fullPath = '';
|
||||
@Input() noteId = '';
|
||||
@Input() tags: string[] = [];
|
||||
@Input() noteColor?: string | null;
|
||||
|
||||
@Output() openDirectory = 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: '' };
|
||||
|
||||
@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
|
||||
isRenaming = false;
|
||||
originalFileName = '';
|
||||
@ -61,6 +66,9 @@ export class NoteHeaderComponent implements AfterViewInit, OnDestroy, OnChanges
|
||||
this.fitPath();
|
||||
}
|
||||
}
|
||||
if (changes['noteId'] || changes['fullPath'] || changes['noteColor']) {
|
||||
this.applyAccentColor();
|
||||
}
|
||||
}
|
||||
|
||||
onNoteMoved(newPath: string): void {
|
||||
@ -72,6 +80,7 @@ export class NoteHeaderComponent implements AfterViewInit, OnDestroy, OnChanges
|
||||
this.pathParts = splitPathKeepFilename(newPath);
|
||||
this.noteMoved.emit(newPath);
|
||||
this.urlState.openNote(newPath, { force: true });
|
||||
this.applyAccentColor();
|
||||
|
||||
queueMicrotask(() => {
|
||||
this.applyProgressiveCollapse();
|
||||
@ -81,6 +90,7 @@ export class NoteHeaderComponent implements AfterViewInit, OnDestroy, OnChanges
|
||||
|
||||
ngAfterViewInit(): void {
|
||||
this.pathParts = splitPathKeepFilename(this.fullPath);
|
||||
this.applyAccentColor();
|
||||
|
||||
this.ro = new ResizeObserver(() => this.resize$.next());
|
||||
this.ro.observe(this.host.nativeElement);
|
||||
@ -320,4 +330,46 @@ export class NoteHeaderComponent implements AfterViewInit, OnDestroy, OnChanges
|
||||
}
|
||||
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. */
|
||||
|
||||
/* 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">
|
||||
<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"
|
||||
[attr.aria-pressed]="isEditing()"
|
||||
(click)="toggleEditor()"
|
||||
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>
|
||||
|
||||
<!-- Mobile: show first two + '+N' button -->
|
||||
|
||||
@ -256,6 +256,16 @@ excalidraw-editor .excalidraw .layer-ui__wrapper {
|
||||
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 {
|
||||
font-family: "Cambria", "Times New Roman", serif;
|
||||
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: []
|
||||
status: en-cours
|
||||
publish: false
|
||||
favoris: false
|
||||
favoris: true
|
||||
template: false
|
||||
task: false
|
||||
archive: false
|
||||
|
||||
@ -18,3 +18,39 @@ tags:
|
||||
- accueil
|
||||
- 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
|
||||
creation_date: 2025-10-27T01:39:33.465Z
|
||||
modification_date: 2025-10-26T21:39:33-04:00
|
||||
creation_date: 2025-10-27T18:01:11.627Z
|
||||
modification_date: 2025-10-27T14:01:12-04:00
|
||||
catégorie: ""
|
||||
tags: []
|
||||
aliases: []
|
||||
@ -1,8 +1,8 @@
|
||||
---
|
||||
titre: "Nouvelle note 15"
|
||||
titre: "Nouvelle note 16"
|
||||
auteur: "Bruno Charest"
|
||||
creation_date: "2025-10-27T01:39:33.465Z"
|
||||
modification_date: "2025-10-27T01:39:33.465Z"
|
||||
creation_date: "2025-10-27T18:01:11.627Z"
|
||||
modification_date: "2025-10-27T18:01:11.627Z"
|
||||
status: "en-cours"
|
||||
publish: false
|
||||
favoris: false
|
||||
@ -13,7 +13,6 @@ draft: true
|
||||
private: true
|
||||
toto: "tata"
|
||||
readOnly: false
|
||||
color: "#A855F7"
|
||||
---
|
||||
Allo ceci est un tests
|
||||
toto
|
||||
|
||||
@ -13,6 +13,10 @@ archive: true
|
||||
draft: true
|
||||
private: true
|
||||
color: "#EF4444"
|
||||
tags:
|
||||
- configuration
|
||||
- tag4
|
||||
- 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