mirror of
https://github.com/immich-app/immich.git
synced 2025-01-01 08:31:59 +00:00
docs(web): JSDoc comments for svelte actions (#12963)
* Web: JSDoc comments for Actions * Remove comment
This commit is contained in:
parent
42ad3e6bb0
commit
c86fa81e47
7 changed files with 37 additions and 0 deletions
|
@ -6,6 +6,12 @@ interface Options {
|
||||||
onEscape?: () => void;
|
onEscape?: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls a function when a click occurs outside of the element, or when the escape key is pressed.
|
||||||
|
* @param node
|
||||||
|
* @param options Object containing onOutclick and onEscape functions
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
export function clickOutside(node: HTMLElement, options: Options = {}): ActionReturn {
|
export function clickOutside(node: HTMLElement, options: Options = {}): ActionReturn {
|
||||||
const { onOutclick, onEscape } = options;
|
const { onOutclick, onEscape } = options;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,11 @@ interface Options {
|
||||||
onFocusOut?: (event: FocusEvent) => void;
|
onFocusOut?: (event: FocusEvent) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls a function when focus leaves the element.
|
||||||
|
* @param node
|
||||||
|
* @param options Object containing onFocusOut function
|
||||||
|
*/
|
||||||
export function focusOutside(node: HTMLElement, options: Options = {}) {
|
export function focusOutside(node: HTMLElement, options: Options = {}) {
|
||||||
const { onFocusOut } = options;
|
const { onFocusOut } = options;
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
/** Focus the given element when it is mounted. */
|
||||||
export const initInput = (element: HTMLInputElement) => {
|
export const initInput = (element: HTMLInputElement) => {
|
||||||
element.focus();
|
element.focus();
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,7 +13,9 @@ type OnIntersectCallback = (entryOrElement: IntersectionObserverEntry | HTMLElem
|
||||||
type OnSeparateCallback = (element: HTMLElement) => unknown;
|
type OnSeparateCallback = (element: HTMLElement) => unknown;
|
||||||
type IntersectionObserverActionProperties = {
|
type IntersectionObserverActionProperties = {
|
||||||
key?: string;
|
key?: string;
|
||||||
|
/** Function to execute when the element leaves the viewport */
|
||||||
onSeparate?: OnSeparateCallback;
|
onSeparate?: OnSeparateCallback;
|
||||||
|
/** Function to execute when the element enters the viewport */
|
||||||
onIntersect?: OnIntersectCallback;
|
onIntersect?: OnIntersectCallback;
|
||||||
|
|
||||||
root?: Element | Document | null;
|
root?: Element | Document | null;
|
||||||
|
@ -112,6 +114,12 @@ function _intersectionObserver(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Monitors an element's visibility in the viewport and calls functions when it enters or leaves (based on a threshold).
|
||||||
|
* @param element
|
||||||
|
* @param properties One or multiple configurations for the IntersectionObserver(s)
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
export function intersectionObserver(
|
export function intersectionObserver(
|
||||||
element: HTMLElement,
|
element: HTMLElement,
|
||||||
properties: IntersectionObserverActionProperties | IntersectionObserverActionProperties[],
|
properties: IntersectionObserverActionProperties | IntersectionObserverActionProperties[],
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
import { shortcuts } from '$lib/actions/shortcut';
|
import { shortcuts } from '$lib/actions/shortcut';
|
||||||
import type { Action } from 'svelte/action';
|
import type { Action } from 'svelte/action';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables keyboard navigation (up and down arrows) for a list of elements.
|
||||||
|
* @param node Element which listens for keyboard events
|
||||||
|
* @param container Element containing the list of elements
|
||||||
|
*/
|
||||||
export const listNavigation: Action<HTMLElement, HTMLElement> = (node, container: HTMLElement) => {
|
export const listNavigation: Action<HTMLElement, HTMLElement> = (node, container: HTMLElement) => {
|
||||||
const moveFocus = (direction: 'up' | 'down') => {
|
const moveFocus = (direction: 'up' | 'down') => {
|
||||||
const children = Array.from(container?.children);
|
const children = Array.from(container?.children);
|
||||||
|
|
|
@ -10,11 +10,16 @@ export type Shortcut = {
|
||||||
|
|
||||||
export type ShortcutOptions<T = HTMLElement> = {
|
export type ShortcutOptions<T = HTMLElement> = {
|
||||||
shortcut: Shortcut;
|
shortcut: Shortcut;
|
||||||
|
/** If true, the event handler will not execute if the event comes from an input field */
|
||||||
ignoreInputFields?: boolean;
|
ignoreInputFields?: boolean;
|
||||||
onShortcut: (event: KeyboardEvent & { currentTarget: T }) => unknown;
|
onShortcut: (event: KeyboardEvent & { currentTarget: T }) => unknown;
|
||||||
preventDefault?: boolean;
|
preventDefault?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** Determines whether an event should be ignored. The event will be ignored if:
|
||||||
|
* - The element dispatching the event is not the same as the element which the event listener is attached to
|
||||||
|
* - The element dispatching the event is an input field
|
||||||
|
*/
|
||||||
export const shouldIgnoreEvent = (event: KeyboardEvent | ClipboardEvent): boolean => {
|
export const shouldIgnoreEvent = (event: KeyboardEvent | ClipboardEvent): boolean => {
|
||||||
if (event.target === event.currentTarget) {
|
if (event.target === event.currentTarget) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -33,6 +38,7 @@ export const matchesShortcut = (event: KeyboardEvent, shortcut: Shortcut) => {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** Bind a single keyboard shortcut to node. */
|
||||||
export const shortcut = <T extends HTMLElement>(
|
export const shortcut = <T extends HTMLElement>(
|
||||||
node: T,
|
node: T,
|
||||||
option: ShortcutOptions<T>,
|
option: ShortcutOptions<T>,
|
||||||
|
@ -47,6 +53,7 @@ export const shortcut = <T extends HTMLElement>(
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** Binds multiple keyboard shortcuts to node */
|
||||||
export const shortcuts = <T extends HTMLElement>(
|
export const shortcuts = <T extends HTMLElement>(
|
||||||
node: T,
|
node: T,
|
||||||
options: ShortcutOptions<T>[],
|
options: ShortcutOptions<T>[],
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
import { decodeBase64 } from '$lib/utils';
|
import { decodeBase64 } from '$lib/utils';
|
||||||
import { thumbHashToRGBA } from 'thumbhash';
|
import { thumbHashToRGBA } from 'thumbhash';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders a thumbnail onto a canvas from a base64 encoded hash.
|
||||||
|
* @param canvas
|
||||||
|
* @param param1 object containing the base64 encoded hash (base64Thumbhash: yourString)
|
||||||
|
*/
|
||||||
export function thumbhash(canvas: HTMLCanvasElement, { base64ThumbHash }: { base64ThumbHash: string }) {
|
export function thumbhash(canvas: HTMLCanvasElement, { base64ThumbHash }: { base64ThumbHash: string }) {
|
||||||
const ctx = canvas.getContext('2d');
|
const ctx = canvas.getContext('2d');
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
|
|
Loading…
Reference in a new issue