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:
Bruno Charest 2025-10-27 16:37:31 -04:00
parent 11a58426d0
commit 2a82ea2f2b
33 changed files with 377 additions and 298 deletions

View File

@ -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 {

View File

@ -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>

View File

@ -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, '/')

View File

@ -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"

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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 -->

View File

@ -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);

View 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"
---

View File

@ -10,7 +10,7 @@ tags:
aliases: []
status: en-cours
publish: false
favoris: false
favoris: true
template: false
task: false
archive: false

View File

@ -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

View File

@ -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: []

View File

@ -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

View File

@ -13,7 +13,6 @@ draft: true
private: true
toto: "tata"
readOnly: false
color: "#A855F7"
---
Allo ceci est un tests
toto

View File

@ -13,6 +13,10 @@ archive: true
draft: true
private: true
color: "#EF4444"
tags:
- configuration
- tag4
- test
---
# TEST

View File

@ -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
---

View 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

View 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

View File

@ -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
---

View File

@ -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
---

View File

@ -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
---

View File

@ -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
---

View File

@ -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
---

View File

@ -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
---

View File

@ -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
---

View File

@ -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
---

View File

@ -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
---

View File

@ -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
---

View File

@ -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
---

View File

@ -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
---

View File

@ -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
---

View File

@ -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.