+
{pageNotes?.map(childNote => (
-
+
))}
@@ -139,39 +143,46 @@ function ListNoteCard({ note, parentNote, highlightedTokens, currentLevel, expan
showNotePath={parentNote.type === "search"}
highlightedTokens={highlightedTokens} />
-
openNoteMenu(notePath, e)}
- />
+
);
}
-function GridNoteCard({ note, parentNote, highlightedTokens, includeArchived }: { note: FNote, parentNote: FNote, highlightedTokens: string[] | null | undefined, includeArchived: boolean }) {
- const titleRef = useRef(null);
- const [ noteTitle, setNoteTitle ] = useState();
- const notePath = getNotePath(parentNote, note);
+interface GridNoteCardProps {
+ note: FNote;
+ parentNote: FNote;
+ highlightedTokens: string[] | null | undefined;
+ includeArchived: boolean;
+}
+
+function GridNoteCard(props: GridNoteCardProps) {
+ const notePath = getNotePath(props.parentNote, props.note);
return (
- link.goToLink(e)}
+ link.goToLink(e)}
>
-
-
-
-
+
+
+
+
-
-
+
);
}
@@ -252,6 +263,18 @@ function NoteChildren({ note, parentNote, highlightedTokens, currentLevel, expan
/>);
}
+function NoteMenuButton(props: {notePath: string}) {
+ const openMenu = useCallback((e: TargetedMouseEvent) => {
+ linkContextMenuService.openContextMenu(props.notePath, e);
+ e.stopPropagation()
+ }, [props.notePath]);
+
+ return
+}
+
function getNotePath(parentNote: FNote, childNote: FNote) {
if (parentNote.type === "search") {
// for search note parent, we want to display a non-search path
@@ -273,9 +296,4 @@ function useExpansionDepth(note: FNote) {
}
return parseInt(expandDepth, 10);
-}
-
-function openNoteMenu(notePath, e: TargetedMouseEvent) {
- linkContextMenuService.openContextMenu(notePath, e);
- e.stopPropagation()
-}
+}
\ No newline at end of file
diff --git a/apps/client/src/widgets/react/Card.css b/apps/client/src/widgets/react/Card.css
index cabc4a0889..b14279d2ad 100644
--- a/apps/client/src/widgets/react/Card.css
+++ b/apps/client/src/widgets/react/Card.css
@@ -1,4 +1,4 @@
-:where(.tn-card) {
+:where(.tn-card, .tn-card-frame) {
--card-border-radius: 8px;
--card-padding-block: 8px;
--card-padding-inline: 16px;
@@ -6,6 +6,22 @@
--card-nested-section-indent: 30px;
}
+.tn-card-frame,
+.tn-card-section {
+ padding: var(--card-padding-block) var(--card-padding-inline);
+ border: 1px solid var(--card-border-color, var(--main-border-color));
+ background: var(--card-background-color);
+
+ &.tn-card-highlight-on-hover:hover {
+ background-color: var(--card-background-hover-color);
+ transition: background-color .2s ease-out;
+ }
+}
+
+.tn-card-frame {
+ border-radius: var(--card-border-radius);
+}
+
.tn-card-heading {
margin-bottom: 10px;
font-size: .75rem;
@@ -20,10 +36,6 @@
gap: var(--card-section-gap);
.tn-card-section {
- padding: var(--card-padding-block) var(--card-padding-inline);
- border: 1px solid var(--card-border-color, var(--main-border-color));
- background: var(--card-background-color);
-
&:first-of-type {
border-top-left-radius: var(--card-border-radius);
border-top-right-radius: var(--card-border-radius);
@@ -38,10 +50,5 @@
padding-left: calc(var(--card-padding-inline) + var(--card-nested-section-indent) * var(--tn-card-section-nesting-level));
background-color: color-mix(in srgb, var(--card-background-color) calc(100% / (var(--tn-card-section-nesting-level) + 1)) , transparent);
}
-
- &.tn-card-section-highlight-on-hover:hover {
- background-color: var(--card-background-hover-color);
- transition: background-color .2s ease-out;
- }
}
}
\ No newline at end of file
diff --git a/apps/client/src/widgets/react/Card.tsx b/apps/client/src/widgets/react/Card.tsx
index 224a151504..1abd259f0c 100644
--- a/apps/client/src/widgets/react/Card.tsx
+++ b/apps/client/src/widgets/react/Card.tsx
@@ -1,9 +1,29 @@
import "./Card.css";
import { ComponentChildren, createContext } from "preact";
-import { JSX } from "preact";
+import { JSX, HTMLAttributes } from "preact";
import { useContext } from "preact/hooks";
import clsx from "clsx";
+// #region Card Frame
+
+export interface CardFrameProps extends HTMLAttributes {
+ className?: string;
+ highlightOnHover?: boolean;
+ children: ComponentChildren;
+}
+
+export function CardFrame({className, highlightOnHover, children, ...rest}: CardFrameProps) {
+ return
+
+ {children}
+
;
+}
+
+// #endregion
+
// #region Card
export interface CardProps {
@@ -45,7 +65,7 @@ export function CardSection(props: {children: ComponentChildren} & CardSectionPr
return <>
0,
- "tn-card-section-highlight-on-hover": props.highlightOnHover || props.onAction
+ "tn-card-highlight-on-hover": props.highlightOnHover || props.onAction
})}
style={{"--tn-card-section-nesting-level": (nestingLevel) ? nestingLevel : null}}
onClick={props.onAction}>