mirror of
https://github.com/dragonish/obsidian-heading-decorator.git
synced 2026-07-22 05:42:05 +00:00
151 lines
4.6 KiB
TypeScript
151 lines
4.6 KiB
TypeScript
import type { HeadingCache } from "obsidian";
|
|
import type * as Presets from "@jsamr/counter-style/presets";
|
|
|
|
type TupleOf<T, N extends number> = N extends N
|
|
? number extends N
|
|
? T[]
|
|
: _TupleOf<T, N, []>
|
|
: never;
|
|
type _TupleOf<T, N extends number, R extends unknown[]> = R["length"] extends N
|
|
? R
|
|
: _TupleOf<T, N, [T, ...R]>;
|
|
|
|
export type LevelTuple = TupleOf<number, 6>;
|
|
export type HeadingTuple = TupleOf<string, 6>;
|
|
|
|
export type OpacityOptions = 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100;
|
|
export type PostionOptions = "before" | "after";
|
|
|
|
type CounterStyleType = Exclude<
|
|
keyof typeof Presets,
|
|
"circle" | "disc" | "square"
|
|
>;
|
|
export type OrderedCounterStyleType =
|
|
| CounterStyleType
|
|
| "customIdent"
|
|
| "string";
|
|
|
|
export interface BaseDecoratorOptions {
|
|
ordered: boolean;
|
|
styleType?: OrderedCounterStyleType;
|
|
delimiter?: string;
|
|
trailingDelimiter?: boolean;
|
|
customIdents?: string[];
|
|
specifiedString?: string;
|
|
levelHeadings?: HeadingTuple;
|
|
}
|
|
|
|
interface OrderedDecoratorOptions {
|
|
ordered: true;
|
|
styleType: OrderedCounterStyleType;
|
|
delimiter?: string;
|
|
trailingDelimiter?: boolean;
|
|
customIdents?: string[];
|
|
specifiedString?: string;
|
|
}
|
|
|
|
interface UnorderedDecoratorOptions {
|
|
ordered: false;
|
|
levelHeadings: HeadingTuple;
|
|
}
|
|
|
|
export type DecoratorOptions =
|
|
| OrderedDecoratorOptions
|
|
| UnorderedDecoratorOptions;
|
|
|
|
export interface HeadingPluginSettings {
|
|
enabledInReading: boolean;
|
|
enabledInPreview: boolean;
|
|
enabledInSource: boolean;
|
|
|
|
ordered: boolean;
|
|
opacity: OpacityOptions;
|
|
position: PostionOptions;
|
|
|
|
orderedStyleType: OrderedCounterStyleType;
|
|
orderedDelimiter: string;
|
|
orderedTrailingDelimiter: boolean;
|
|
orderedCustomIdents: string;
|
|
orderedSpecifiedString: string;
|
|
|
|
unorderedLevelHeadings: string;
|
|
}
|
|
|
|
export interface HeadingPluginData
|
|
extends Omit<
|
|
HeadingPluginSettings,
|
|
"enabledInReading" | "orderedCustomIdents" | "unorderedLevelHeadings"
|
|
> {
|
|
orderedCustomIdents: string[];
|
|
unorderedLevelHeadings: HeadingTuple;
|
|
headingsCache: HeadingCache[];
|
|
}
|
|
|
|
export const readingHeadingDecoratorClassName =
|
|
"reading-custom-heading-decorator";
|
|
export const previewHeadingDecoratorClassName =
|
|
"preview-custom-heading-decorator";
|
|
export const sourceHeadingDecoratorClassName =
|
|
"source-custom-heading-decorator";
|
|
export const beforeDecoratorClassName = "before-heading-decorator";
|
|
export const afterDecoratorClassName = "after-heading-decorator";
|
|
export const headingsSelector =
|
|
".el-h1 h1, .el-h2 h2, .el-h3 h3, .el-h4 h4, .el-h5 h5, .el-h6 h6";
|
|
export const defaultHeadingTuple: HeadingTuple = [
|
|
"H1",
|
|
"H2",
|
|
"H3",
|
|
"H4",
|
|
"H5",
|
|
"H6",
|
|
];
|
|
|
|
export const orderedStyleTypeOptions: Record<OrderedCounterStyleType, string> =
|
|
{
|
|
decimal: "Decimal numbers",
|
|
lowerAlpha: "Lowercase ASCII letters",
|
|
upperAlpha: "Uppercase ASCII letters",
|
|
cjkDecimal: "Han decimal numbers",
|
|
decimalLeadingZero: "Decimal numbers (padded by initial zeros)",
|
|
lowerRoman: "Lowercase roman numerals",
|
|
upperRoman: "Uppercase roman numerals",
|
|
lowerGreek: "Lowercase classical Greek",
|
|
lowerLatin: "Lowercase Latin alphabet",
|
|
upperLatin: "Uppercase Latin alphabet",
|
|
arabicIndic: "Arabic-Indic numbers",
|
|
armenian: "Traditional Armenian numbering",
|
|
bengali: "Bengali numbering",
|
|
cambodian: "Cambodian numbering",
|
|
cjkEarthlyBranch: 'Han "Earthly Branch" ordinals',
|
|
cjkHeavenlyStem: 'Han "Heavenly Stem" ordinals',
|
|
devanagari: "Devanagari numbering",
|
|
georgian: "Traditional Georgian numbering",
|
|
gujarati: "Gujarati numbering",
|
|
gurmukhi: "Gurmukhi numbering",
|
|
hebrew: "Traditional Hebrew numbering",
|
|
hiragana: "Dictionary-order hiragana lettering",
|
|
hiraganaIroha: "Iroha-order hiragana lettering",
|
|
japaneseFormal: "Japanese formal numbering",
|
|
japaneseInformal: "Japanese informal numbering",
|
|
kannada: "Kannada numbering",
|
|
katana: "Dictionary-order katakana lettering",
|
|
katanaIroha: "Iroha-order katakana lettering",
|
|
khmer: "Khmer numbering",
|
|
koreanHangulFormal: "Korean hangul numbering",
|
|
koreanHanjaFormal: "Formal Korean Han numbering",
|
|
koreanHanjaInformal: "Korean hanja numbering",
|
|
lao: "Laotian numbering",
|
|
lowerArmenian: "Lowercase Armenian numbering",
|
|
malayalam: "Malayalam numbering",
|
|
mongolian: "Mongolian numbering",
|
|
myanmar: "Myanmar (Burmese) numbering",
|
|
oriya: "Oriya numbering",
|
|
persian: "Persian numbering",
|
|
tamil: "Tamil numbering",
|
|
telugu: "Telugu numbering",
|
|
thai: "Thai numbering",
|
|
tibetan: "Tibetan numbering",
|
|
upperArmenian: "Traditional uppercase Armenian numbering",
|
|
customIdent: "Custom list styles",
|
|
string: "Specified string",
|
|
};
|