@cryptlex/web-components 6.7.8 → 6.7.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/alert.d.ts +2 -2
- package/dist/components/alert.js +2 -2
- package/dist/components/alert.js.map +1 -1
- package/dist/components/autocomplete.js +2 -2
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/avatar.d.ts +1 -1
- package/dist/components/avatar.js +2 -2
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/badge.d.ts +2 -2
- package/dist/components/badge.js +2 -2
- package/dist/components/badge.js.map +1 -1
- package/dist/components/breadcrumbs.d.ts +5 -5
- package/dist/components/breadcrumbs.js +2 -2
- package/dist/components/breadcrumbs.js.map +1 -1
- package/dist/components/button.d.ts +3 -3
- package/dist/components/button.js +2 -2
- package/dist/components/button.js.map +1 -1
- package/dist/components/calendar.d.ts +7 -7
- package/dist/components/calendar.js +2 -2
- package/dist/components/calendar.js.map +1 -1
- package/dist/components/card.d.ts +6 -6
- package/dist/components/card.js +2 -2
- package/dist/components/card.js.map +1 -1
- package/dist/components/charts.d.ts +8 -8
- package/dist/components/charts.js +2 -2
- package/dist/components/charts.js.map +1 -1
- package/dist/components/checkbox.d.ts +2 -2
- package/dist/components/checkbox.js +2 -2
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/code-block.d.ts +1 -1
- package/dist/components/code-block.js +2 -2
- package/dist/components/code-block.js.map +1 -1
- package/dist/components/copy-button.d.ts +1 -1
- package/dist/components/copy-button.js +2 -2
- package/dist/components/copy-button.js.map +1 -1
- package/dist/components/data-table-filter.d.ts +1 -1
- package/dist/components/data-table-filter.js +1 -2
- package/dist/components/data-table.d.ts +12 -87
- package/dist/components/data-table.js +1 -2
- package/dist/components/date-picker.d.ts +3 -3
- package/dist/components/date-picker.js +2 -2
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/datefield.d.ts +4 -4
- package/dist/components/datefield.js +2 -2
- package/dist/components/datefield.js.map +1 -1
- package/dist/components/dialog.d.ts +8 -8
- package/dist/components/dialog.js +2 -2
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/disclosure.d.ts +4 -4
- package/dist/components/disclosure.js +2 -2
- package/dist/components/disclosure.js.map +1 -1
- package/dist/components/divider.d.ts +2 -2
- package/dist/components/divider.js +2 -2
- package/dist/components/divider.js.map +1 -1
- package/dist/components/duration-field.d.ts +2 -2
- package/dist/components/duration-field.js +2 -2
- package/dist/components/duration-field.js.map +1 -1
- package/dist/components/file-trigger.d.ts +1 -1
- package/dist/components/file-trigger.js +2 -2
- package/dist/components/file-trigger.js.map +1 -1
- package/dist/components/form.d.ts +11 -11
- package/dist/components/form.js +2 -2
- package/dist/components/form.js.map +1 -1
- package/dist/components/icons.js +1 -2
- package/dist/components/id-search.d.ts +5 -5
- package/dist/components/id-search.js +2 -2
- package/dist/components/id-search.js.map +1 -1
- package/dist/components/kbd.d.ts +1 -1
- package/dist/components/kbd.js +2 -2
- package/dist/components/kbd.js.map +1 -1
- package/dist/components/list-box.d.ts +3 -3
- package/dist/components/list-box.js +2 -2
- package/dist/components/list-box.js.map +1 -1
- package/dist/components/loader.d.ts +1 -1
- package/dist/components/loader.js +2 -2
- package/dist/components/loader.js.map +1 -1
- package/dist/components/menu.d.ts +7 -7
- package/dist/components/menu.js +2 -2
- package/dist/components/menu.js.map +1 -1
- package/dist/components/multi-select.d.ts +2 -2
- package/dist/components/multi-select.js +2 -2
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/numberfield.d.ts +5 -5
- package/dist/components/numberfield.js +2 -2
- package/dist/components/numberfield.js.map +1 -1
- package/dist/components/object-table.d.ts +1 -1
- package/dist/components/object-table.js +2 -2
- package/dist/components/object-table.js.map +1 -1
- package/dist/components/offline-request-file-input.d.ts +2 -2
- package/dist/components/offline-request-file-input.js +2 -2
- package/dist/components/offline-request-file-input.js.map +1 -1
- package/dist/components/otpfield.d.ts +1 -1
- package/dist/components/otpfield.js +2 -2
- package/dist/components/otpfield.js.map +1 -1
- package/dist/components/popover.d.ts +2 -2
- package/dist/components/popover.js +2 -2
- package/dist/components/popover.js.map +1 -1
- package/dist/components/progress-bar.d.ts +1 -1
- package/dist/components/progress-bar.js +2 -2
- package/dist/components/progress-bar.js.map +1 -1
- package/dist/components/searchfield.d.ts +1 -1
- package/dist/components/searchfield.js +2 -2
- package/dist/components/searchfield.js.map +1 -1
- package/dist/components/select-options.js +2 -2
- package/dist/components/select-options.js.map +1 -1
- package/dist/components/select.d.ts +5 -5
- package/dist/components/select.js +2 -2
- package/dist/components/select.js.map +1 -1
- package/dist/components/sidebar.d.ts +20 -20
- package/dist/components/sidebar.js +2 -2
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/skeleton.d.ts +1 -1
- package/dist/components/skeleton.js +2 -2
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/steps.d.ts +1 -1
- package/dist/components/steps.js +2 -2
- package/dist/components/steps.js.map +1 -1
- package/dist/components/table-of-contents.d.ts +1 -1
- package/dist/components/table-of-contents.js +2 -2
- package/dist/components/table-of-contents.js.map +1 -1
- package/dist/components/table.d.ts +8 -8
- package/dist/components/table.js +2 -2
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.d.ts +4 -4
- package/dist/components/tabs.js +2 -2
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/tag-group.d.ts +2 -2
- package/dist/components/tag-group.js +2 -2
- package/dist/components/tag-group.js.map +1 -1
- package/dist/components/textfield.d.ts +2 -2
- package/dist/components/textfield.js +2 -2
- package/dist/components/textfield.js.map +1 -1
- package/dist/components/timeline.d.ts +6 -6
- package/dist/components/timeline.js +2 -2
- package/dist/components/timeline.js.map +1 -1
- package/dist/components/toast.d.ts +1 -1
- package/dist/components/toast.js +2 -2
- package/dist/components/toast.js.map +1 -1
- package/dist/components/tooltip.d.ts +2 -2
- package/dist/components/tooltip.js +2 -2
- package/dist/components/tooltip.js.map +1 -1
- package/dist/data-table-filter.js +2 -0
- package/dist/data-table-filter.js.map +1 -0
- package/dist/icons.js +2 -0
- package/dist/icons.js.map +1 -0
- package/dist/stories/atoms/color.stories.d.ts +11 -0
- package/dist/stories/atoms/icons.stories.d.ts +11 -0
- package/dist/stories/atoms/type.stories.d.ts +13 -0
- package/dist/stories/components/alert.stories.d.ts +11 -0
- package/dist/stories/components/avatar.stories.d.ts +6 -0
- package/dist/stories/components/badge.stories.d.ts +6 -0
- package/dist/stories/components/breadcrumbs.stories.d.ts +5 -0
- package/dist/stories/components/button.stories.d.ts +6 -0
- package/dist/stories/components/calendar.stories.d.ts +10 -0
- package/dist/stories/components/card.stories.d.ts +9 -0
- package/dist/stories/components/code-block.stories.d.ts +12 -0
- package/dist/stories/components/copy-button.stories.d.ts +6 -0
- package/dist/stories/components/date-range-picker.stories.d.ts +23 -0
- package/dist/stories/components/datepicker.stories.d.ts +23 -0
- package/dist/stories/components/dialog.stories.d.ts +5 -0
- package/dist/stories/components/divider.stories.d.ts +13 -0
- package/dist/stories/components/file-trigger.stories.d.ts +10 -0
- package/dist/stories/components/kbd.stories.d.ts +49 -0
- package/dist/stories/components/loader.stories.d.ts +12 -0
- package/dist/stories/components/offline-request-file-upload.stories.d.ts +10 -0
- package/dist/stories/components/progress-bar.stories.d.ts +15 -0
- package/dist/stories/components/sheet.stories.d.ts +15 -0
- package/dist/stories/components/skeleton.stories.d.ts +10 -0
- package/dist/stories/components/tabs.stories.d.ts +12 -0
- package/dist/stories/components/tag-group.stories.d.ts +8 -0
- package/dist/stories/components/timeline.stories.d.ts +6 -0
- package/dist/stories/components/timepicker.stories.d.ts +23 -0
- package/dist/stories/components/toast.stories.d.ts +12 -0
- package/dist/stories/components/tooltip.stories.d.ts +9 -0
- package/dist/stories/examples/autocomplete.stories.d.ts +11 -0
- package/dist/stories/examples/charts.stories.d.ts +11 -0
- package/dist/stories/examples/data-table.stories.d.ts +9 -0
- package/dist/stories/examples/key-value-card.stories.d.ts +42 -0
- package/dist/stories/examples/sidebar.stories.d.ts +32 -0
- package/dist/stories/examples/table-of-contents.stories.d.ts +6 -0
- package/dist/stories/inputs/form.stories.d.ts +6 -0
- package/dist/stories/inputs/id-search.stories.d.ts +8 -0
- package/dist/stories/inputs/otp-field.stories.d.ts +6 -0
- package/dist/stories/inputs/textfield.stories.d.ts +8 -0
- package/dist/stories/story-commons.d.ts +3 -0
- package/dist/stories/utilities/resource-formatter.stories.d.ts +7 -0
- package/dist/utilities/auth.js +2 -2
- package/dist/utilities/auth.js.map +1 -1
- package/dist/utilities/countries.d.ts +1 -1
- package/dist/utilities/countries.js +2 -2
- package/dist/utilities/countries.js.map +1 -1
- package/dist/utilities/ctx-client.d.ts +1 -1
- package/dist/utilities/ctx-client.js +2 -2
- package/dist/utilities/ctx-client.js.map +1 -1
- package/dist/utilities/date.js +2 -2
- package/dist/utilities/date.js.map +1 -1
- package/dist/utilities/duration.js +2 -2
- package/dist/utilities/duration.js.map +1 -1
- package/dist/utilities/empty-option.js +2 -2
- package/dist/utilities/empty-option.js.map +1 -1
- package/dist/utilities/errors.js +2 -2
- package/dist/utilities/errors.js.map +1 -1
- package/dist/utilities/form-context.js +2 -2
- package/dist/utilities/form-context.js.map +1 -1
- package/dist/utilities/form-hook.js +2 -2
- package/dist/utilities/form-hook.js.map +1 -1
- package/dist/utilities/form.js +2 -2
- package/dist/utilities/form.js.map +1 -1
- package/dist/utilities/highlight-code.js +2 -2
- package/dist/utilities/highlight-code.js.map +1 -1
- package/dist/utilities/normalize-arrays.js +2 -2
- package/dist/utilities/normalize-arrays.js.map +1 -1
- package/dist/utilities/numbers.js +2 -2
- package/dist/utilities/numbers.js.map +1 -1
- package/dist/utilities/resources.d.ts +1 -1
- package/dist/utilities/resources.js +2 -2
- package/dist/utilities/resources.js.map +1 -1
- package/dist/utilities/shiki.js +2 -2
- package/dist/utilities/shiki.js.map +1 -1
- package/dist/utilities/string.js +2 -2
- package/dist/utilities/string.js.map +1 -1
- package/dist/utilities/theme.js +2 -2
- package/dist/utilities/theme.js.map +1 -1
- package/dist/utilities/use-code-highlight.js +2 -2
- package/dist/utilities/use-code-highlight.js.map +1 -1
- package/dist/utilities/use-mobile.js +2 -2
- package/dist/utilities/use-mobile.js.map +1 -1
- package/dist/utilities/validators.js +2 -2
- package/dist/utilities/validators.js.map +1 -1
- package/package.json +40 -40
- package/dist/components/data-table-filter.js.map +0 -1
- package/dist/components/data-table.js.map +0 -1
- package/dist/components/icons.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.js","sources":["../../lib/utilities/form.tsx"],"sourcesContent":["import { type AnyFieldMeta, type FieldApi, type FormApi } from '@tanstack/react-form';\n\n/** Utility type to simplify FormApi usage */\nexport type AppFormApi<TValues> = FormApi<TValues, any, any, any, any, any, any, any, any, any, any, any>;\n\n/**\n * Utility function to submit a form with a handler that receives the values and the formApi.\n * @param onSubmit - The async handler function to call with the values and the formApi.\n * @returns A function that can be used to submit the form. It will filter out disabled fields from the values.\n */\nexport function tfOnSubmit<TValues>(\n onSubmit: ({ values, formApi }: { values: TValues; formApi: AppFormApi<TValues> }) => Promise<any> | any\n) {\n return async ({ formApi }: { formApi: AppFormApi<TValues> }): Promise<any> => {\n const values = pickEnabledFields(formApi.state.values, formApi);\n\n await onSubmit({ values, formApi });\n };\n}\n\n/**\n * Internal helper used by `tfOnSubmit`. It filters out any fields that are\n * marked as disabled in the field meta before sending the values to submit\n * handlers.\n */\nfunction pickEnabledFields<TValues>(rawValues: TValues, formApi: AppFormApi<TValues>): TValues {\n const result: TValues = {} as TValues;\n\n //TODO: Nested objects are not supported yet\n for (const key in rawValues) {\n const meta = formApi.getFieldMeta(key) as AnyFieldMeta & {\n disabled?: boolean;\n };\n if (!meta?.disabled) {\n result[key] = rawValues[key];\n }\n }\n\n return result;\n}\n\n/**\n * Small utility to create a single string from a field's validation errors.\n * Useful for rendering a concise error message in a form UI.\n * @returns a comma-separated string of error messages (or empty string).\n */\nexport function getFieldErrorMessage(\n field: FieldApi<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n): string {\n return field?.state.meta.errors.map(e => e?.message).join(',');\n}\n"],"
|
|
1
|
+
{"version":3,"file":"form.js","names":[],"sources":["../../lib/utilities/form.tsx"],"sourcesContent":["import { type AnyFieldMeta, type FieldApi, type FormApi } from '@tanstack/react-form';\n\n/** Utility type to simplify FormApi usage */\nexport type AppFormApi<TValues> = FormApi<TValues, any, any, any, any, any, any, any, any, any, any, any>;\n\n/**\n * Utility function to submit a form with a handler that receives the values and the formApi.\n * @param onSubmit - The async handler function to call with the values and the formApi.\n * @returns A function that can be used to submit the form. It will filter out disabled fields from the values.\n */\nexport function tfOnSubmit<TValues>(\n onSubmit: ({ values, formApi }: { values: TValues; formApi: AppFormApi<TValues> }) => Promise<any> | any\n) {\n return async ({ formApi }: { formApi: AppFormApi<TValues> }): Promise<any> => {\n const values = pickEnabledFields(formApi.state.values, formApi);\n\n await onSubmit({ values, formApi });\n };\n}\n\n/**\n * Internal helper used by `tfOnSubmit`. It filters out any fields that are\n * marked as disabled in the field meta before sending the values to submit\n * handlers.\n */\nfunction pickEnabledFields<TValues>(rawValues: TValues, formApi: AppFormApi<TValues>): TValues {\n const result: TValues = {} as TValues;\n\n //TODO: Nested objects are not supported yet\n for (const key in rawValues) {\n const meta = formApi.getFieldMeta(key) as AnyFieldMeta & {\n disabled?: boolean;\n };\n if (!meta?.disabled) {\n result[key] = rawValues[key];\n }\n }\n\n return result;\n}\n\n/**\n * Small utility to create a single string from a field's validation errors.\n * Useful for rendering a concise error message in a form UI.\n * @returns a comma-separated string of error messages (or empty string).\n */\nexport function getFieldErrorMessage(\n field: FieldApi<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n): string {\n return field?.state.meta.errors.map(e => e?.message).join(',');\n}\n"],"mappings":"AAUA,SAAgB,EACZ,EACF,CACE,OAAO,MAAO,CAAE,aAA8D,CAG1E,MAAM,EAAS,CAAE,OAFF,EAAkB,EAAQ,MAAM,OAAQ,CAEtC,EAAQ,SAAQ,CAAC,CACtC,CACJ,CAOA,SAAS,EAA2B,EAAoB,EAAuC,CAC3F,IAAM,EAAkB,CAAC,EAGzB,IAAK,IAAM,KAAO,EACD,EAAQ,aAAa,CAG7B,CAAA,EAAM,WACP,EAAO,GAAO,EAAU,IAIhC,OAAO,CACX,CAOA,SAAgB,EACZ,EAyBM,CACN,OAAO,GAAO,MAAM,KAAK,OAAO,IAAI,GAAK,GAAG,OAAO,CAAC,CAAC,KAAK,GAAG,CACjE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=highlight-code.js.map
|
|
1
|
+
import{shikiTheme as e}from"./shiki.js";import{transformerColorizedBrackets as t}from"@shikijs/colorized-brackets";import{codeToHtml as n}from"shiki";async function r({code:r,lang:i}){return n(r,{lang:i,theme:e,structure:`inline`,transformers:[t()]})}export{r as highlightCode};
|
|
2
|
+
//# sourceMappingURL=highlight-code.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highlight-code.js","sources":["../../lib/utilities/highlight-code.ts"],"sourcesContent":["import { transformerColorizedBrackets } from '@shikijs/colorized-brackets';\nimport { codeToHtml, type BundledLanguage } from 'shiki';\nimport { shikiTheme } from './shiki';\n\nexport interface HighlightOptions {\n code: string;\n lang: BundledLanguage;\n}\n\nexport async function highlightCode({ code, lang }: HighlightOptions) {\n // structure: 'inline' emits only the highlighted spans (line breaks as <br>), no\n // wrapping <pre>/<code>. CodeBlock provides its own <pre><code>, so a 'classic'\n // structure here would nest a second <pre> inside it and double up padding.\n return codeToHtml(code, {\n lang,\n theme: shikiTheme,\n structure: 'inline',\n transformers: [transformerColorizedBrackets()],\n });\n}\n\nexport type { BundledLanguage } from 'shiki';\n"],"
|
|
1
|
+
{"version":3,"file":"highlight-code.js","names":[],"sources":["../../lib/utilities/highlight-code.ts"],"sourcesContent":["import { transformerColorizedBrackets } from '@shikijs/colorized-brackets';\nimport { codeToHtml, type BundledLanguage } from 'shiki';\nimport { shikiTheme } from './shiki';\n\nexport interface HighlightOptions {\n code: string;\n lang: BundledLanguage;\n}\n\nexport async function highlightCode({ code, lang }: HighlightOptions) {\n // structure: 'inline' emits only the highlighted spans (line breaks as <br>), no\n // wrapping <pre>/<code>. CodeBlock provides its own <pre><code>, so a 'classic'\n // structure here would nest a second <pre> inside it and double up padding.\n return codeToHtml(code, {\n lang,\n theme: shikiTheme,\n structure: 'inline',\n transformers: [transformerColorizedBrackets()],\n });\n}\n\nexport type { BundledLanguage } from 'shiki';\n"],"mappings":"sJASA,eAAsB,EAAc,CAAE,OAAM,QAA0B,CAIlE,OAAO,EAAW,EAAM,CACpB,OACA,MAAO,EACP,UAAW,SACX,aAAc,CAAC,EAA6B,CAAC,CACjD,CAAC,CACL"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function
|
|
2
|
-
//# sourceMappingURL=normalize-arrays.js.map
|
|
1
|
+
function e(e,t){return{...e,...Object.fromEntries(t.map(t=>[t,e[t]??[]]))}}export{e as normalizeArrays};
|
|
2
|
+
//# sourceMappingURL=normalize-arrays.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-arrays.js","sources":["../../lib/utilities/normalize-arrays.tsx"],"sourcesContent":["export function normalizeArrays<T extends object, K extends readonly (keyof T)[]>(\n obj: T,\n keys: K\n): T & { [P in K[number]]: NonNullable<T[P]> } {\n return {\n ...obj,\n ...Object.fromEntries(keys.map(k => [k, obj[k] ?? []])),\n } as any;\n}\n"],"
|
|
1
|
+
{"version":3,"file":"normalize-arrays.js","names":[],"sources":["../../lib/utilities/normalize-arrays.tsx"],"sourcesContent":["export function normalizeArrays<T extends object, K extends readonly (keyof T)[]>(\n obj: T,\n keys: K\n): T & { [P in K[number]]: NonNullable<T[P]> } {\n return {\n ...obj,\n ...Object.fromEntries(keys.map(k => [k, obj[k] ?? []])),\n } as any;\n}\n"],"mappings":"AAAA,SAAgB,EACZ,EACA,EAC2C,CAC3C,MAAO,CACH,GAAG,EACH,GAAG,OAAO,YAAY,EAAK,IAAI,GAAK,CAAC,EAAG,EAAI,IAAM,CAAC,CAAC,CAAC,CAAC,CAC1D,CACJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function
|
|
2
|
-
//# sourceMappingURL=numbers.js.map
|
|
1
|
+
function e(e){return`${Math.floor(e/86400)} days`}function t(e,t){return Intl.NumberFormat(navigator.language,t).format(e)}function n(e){return e<1024?`${e} B`:e<1048576?`${parseFloat((e/1024).toFixed(1))} KB`:e<1073741824?`${parseFloat((e/1048576).toFixed(2))} MB`:`${parseFloat((e/1073741824).toFixed(2))} GB`}export{e as formatDays,n as formatFilesize,t as formatNumber};
|
|
2
|
+
//# sourceMappingURL=numbers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numbers.js","sources":["../../lib/utilities/numbers.ts"],"sourcesContent":["const SECONDS_PER_DAY = 86400;\n\nexport function formatDays(seconds: number): string {\n return `${Math.floor(seconds / SECONDS_PER_DAY)} days`;\n}\n\nexport function formatNumber(num: number | bigint, options?: Intl.NumberFormatOptions) {\n return Intl.NumberFormat(navigator.language, options).format(num);\n}\n\n/**\n * @returns A formatted string for the number of bytes\n */\nexport function formatFilesize(bytes: number): string {\n if (bytes < 1024) {\n return `${bytes} B`;\n } else if (bytes < 1024 * 1024) {\n return `${parseFloat((bytes / 1024).toFixed(1))} KB`;\n } else if (bytes < 1024 * 1024 * 1024) {\n return `${parseFloat((bytes / (1024 * 1024)).toFixed(2))} MB`;\n } else {\n return `${parseFloat((bytes / (1024 * 1024 * 1024)).toFixed(2))} GB`;\n }\n}\n"],"
|
|
1
|
+
{"version":3,"file":"numbers.js","names":[],"sources":["../../lib/utilities/numbers.ts"],"sourcesContent":["const SECONDS_PER_DAY = 86400;\n\nexport function formatDays(seconds: number): string {\n return `${Math.floor(seconds / SECONDS_PER_DAY)} days`;\n}\n\nexport function formatNumber(num: number | bigint, options?: Intl.NumberFormatOptions) {\n return Intl.NumberFormat(navigator.language, options).format(num);\n}\n\n/**\n * @returns A formatted string for the number of bytes\n */\nexport function formatFilesize(bytes: number): string {\n if (bytes < 1024) {\n return `${bytes} B`;\n } else if (bytes < 1024 * 1024) {\n return `${parseFloat((bytes / 1024).toFixed(1))} KB`;\n } else if (bytes < 1024 * 1024 * 1024) {\n return `${parseFloat((bytes / (1024 * 1024)).toFixed(2))} MB`;\n } else {\n return `${parseFloat((bytes / (1024 * 1024 * 1024)).toFixed(2))} GB`;\n }\n}\n"],"mappings":"AAEA,SAAgB,EAAW,EAAyB,CAChD,MAAO,GAAG,KAAK,MAAM,EAAU,KAAe,EAAE,MACpD,CAEA,SAAgB,EAAa,EAAsB,EAAoC,CACnF,OAAO,KAAK,aAAa,UAAU,SAAU,CAAO,CAAC,CAAC,OAAO,CAAG,CACpE,CAKA,SAAgB,EAAe,EAAuB,CAQ9C,OAPA,EAAQ,KACD,GAAG,EAAM,IACT,EAAQ,QACR,GAAG,YAAY,EAAQ,KAAA,CAAM,QAAQ,CAAC,CAAC,EAAE,KACzC,EAAQ,WACR,GAAG,YAAY,EAAS,QAAA,CAAc,QAAQ,CAAC,CAAC,EAAE,KAElD,GAAG,YAAY,EAAS,WAAA,CAAqB,QAAQ,CAAC,CAAC,EAAE,IAExE"}
|
|
@@ -20,7 +20,7 @@ export type CtxResourceName = (typeof RESOURCE_NAMES)[number];
|
|
|
20
20
|
export declare function ProjectProvider({ projectName, children }: {
|
|
21
21
|
projectName: CtxPortals;
|
|
22
22
|
children: React.ReactNode;
|
|
23
|
-
}): import("react
|
|
23
|
+
}): import("react").JSX.Element;
|
|
24
24
|
export declare function useProjectName(): CtxPortals;
|
|
25
25
|
export declare function useResourceFormatter(): (resourceName: string) => string;
|
|
26
26
|
/**
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=resources.js.map
|
|
1
|
+
import{toTitleCase as e}from"./string.js";import{createContext as t,use as n}from"react";import{jsx as r}from"react/jsx-runtime";var i={"product.displayName":`Product`,planId:`Plan`,tenantDatabaseClusterId:`Tenant Database Cluster`,product_displayName:`Product`},a=`access-token.account.activation.activation-log.address.admin-role.audit-log.automated-email.automated-email-event-log.card.entitlement-set.event-log.feature-entitlement.feature-flag.feature.invoice.license.license-template.maintenance-policy.organization.plan.product.product-version.profile.release.release-channel.release-file.release-platform.role.role-claim.saml-configuration.segment.sending-domain.stat.tag.trial.trial-activation.trial-policy.user.user-group.webhook.webhook-event-log.webhook-event.reseller.oidc-configuration.tenant-database-cluster.team-member`.split(`.`),o={id:`ID`,createdAt:`Creation Date`,scopes:`Permissions`,updatedAt:`Last Updated`,expiresAt:`Expiration Date`,lastSeenAt:`Last Seen`,os:`OS`,osVersion:`OS Version`,key:`License Key`,vmName:`VM Name`,container:`Container`,allowedIpRange:`Allowed IP Range`,allowedIpRanges:`Allowed IP Ranges`,allowedIpAddresses:`Allowed IP Addresses`,disallowedIpAddresses:`Disallowed IP Addresses`,allowVmActivation:`Allow VM Activation`,disableGeoLocation:`Disable Geolocation`,"user.id":`User ID`,userId:`User`,userGroupId:`User Group`,productId:`Product`,downloads:`Total Downloads`,claims:`Permissions`,googleSsoEnabled:`Google Login Enabled`,lastAttemptedAt:`Last Attempt Date`,url:`URL`,"trialPolicy.name":`Trial Policy Name`,"licensePolicy.name":`License Template Name`,licensePolicy:`License Template`,eventLog:`Audit Log`,cc:`CC Recepients`,bcc:`BCC Recepients`,ipAddress:`IP Address`,resellerId:`Reseller`,productVersionId:`Product Version`,releaseId:`Release`,maintenancePolicyId:`Maintenance Policy`,webhookId:`Webhook`,automatedEmailId:`Automated Email`,"location.countryName":`Country`,"location.ipAddress":`IP Address`,"location.countryCode":`Country`,organizationId:`Organization`,"address.country":`Country`,"address.addressLine1":`Address Line 1`,"address.addressLine2":`Address Line 2`,responseStatusCode:`HTTP Status Code`,resourceId:`Resource ID`,Sso:`SAML SSO 2.0`,"reseller.name":`Reseller`,sendingDomain:`Email Sending Domain`,teamMember:`Team Member`};function s(t,n){return n!==`admin-portal`&&t in i?i[t]:t in o?o[t]:e(t)}var c=t(`admin-portal`);function l({projectName:e,children:t}){return r(c.Provider,{value:e,children:t})}function u(){return n(c)}function d(){let e=u();return t=>s(t,e)}function f(e){let t=e.expiresAt&&new Date(e.expiresAt)<new Date;switch(!0){case e.revoked&&e.suspended&&t:return`Revoked, Suspended, Expired`;case e.revoked&&e.suspended:return`Revoked, Suspended`;case e.revoked&&t:return`Revoked, Expired`;case e.suspended&&t:return`Suspended, Expired`;case e.suspended:return`Suspended`;case e.revoked:return`Revoked`;case t:return`Expired`;default:return`Active`}}var p={windows:`Windows`,macos:`macOS`,linux:`Linux`,ios:`iOS`,android:`Android`};export{p as ALL_OS,l as ProjectProvider,a as RESOURCE_NAMES,f as getLicenseStatus,u as useProjectName,d as useResourceFormatter};
|
|
2
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sources":["../../lib/utilities/resources.tsx"],"sourcesContent":["import type { components, operations } from '@cryptlex/web-api-types/develop';\nimport { createContext, use } from 'react';\nimport { toTitleCase } from './string';\n\nexport type ApiSchema<T extends keyof components['schemas']> = components['schemas'][T];\nexport type ApiResponseBody<T extends keyof operations> = operations[T] extends {\n responses: { 200: { content: { 'application/json': infer R } } };\n}\n ? R extends Array<infer U>\n ? U\n : R\n : never;\nexport type ApiQuery<T extends keyof operations> = NonNullable<operations[T]['parameters']['query']>;\nexport type ApiPathParameters<T extends keyof operations> = operations[T]['parameters']['path'];\nexport type ApiFilter<T extends keyof operations> = Omit<ApiQuery<T>, 'page' | 'limit' | 'sort' | 'search'>;\nexport type ApiFilters<T extends keyof operations> = NonNullable<ApiFilter<T>>;\nexport type CtxPortals = 'customer-portal' | 'system-portal' | 'reseller-portal' | 'admin-portal';\n// Display names specific to customer and reseller portal\nconst OTHER_PORTALS_DISPLAY_NAME: Record<string, string> = {\n 'product.displayName': 'Product',\n // TanStack Table converts . -> _ TODO\n planId: 'Plan',\n tenantDatabaseClusterId: 'Tenant Database Cluster',\n product_displayName: 'Product',\n};\n\n// TODO, delegate to openapi.json\n// TODO, this drifts quite a lot from the API, should be updated\n/** Resource Name should ALWAYS be in singular form */\nexport const RESOURCE_NAMES = [\n 'access-token',\n 'account',\n 'activation',\n 'activation-log',\n 'address',\n 'admin-role',\n 'audit-log',\n 'automated-email',\n 'automated-email-event-log',\n 'card',\n 'entitlement-set',\n 'event-log',\n 'feature-entitlement',\n 'feature-flag',\n 'feature',\n 'invoice',\n 'license',\n 'license-template',\n 'maintenance-policy',\n 'organization',\n 'plan',\n 'product',\n 'product-version',\n 'profile',\n 'release',\n 'release-channel',\n 'release-file',\n 'release-platform',\n 'role',\n 'role-claim',\n 'saml-configuration',\n 'segment',\n 'sending-domain',\n 'stat',\n 'tag',\n 'trial',\n 'trial-activation',\n 'trial-policy',\n 'user',\n 'user-group',\n 'webhook',\n 'webhook-event-log',\n 'webhook-event',\n 'reseller',\n 'oidc-configuration',\n 'tenant-database-cluster',\n 'team-member',\n] as const;\nexport type CtxResourceName = (typeof RESOURCE_NAMES)[number];\n\n// TODO, use OpenAPI spec for resource definitions\n\nconst RESOURCE_DISPLAY_NAMES: Record<string, string> = {\n id: 'ID',\n createdAt: 'Creation Date',\n scopes: 'Permissions',\n updatedAt: 'Last Updated',\n expiresAt: 'Expiration Date',\n lastSeenAt: 'Last Seen',\n os: 'OS',\n osVersion: 'OS Version',\n key: 'License Key',\n vmName: 'VM Name',\n container: 'Container',\n allowedIpRange: 'Allowed IP Range',\n allowedIpRanges: 'Allowed IP Ranges',\n allowedIpAddresses: 'Allowed IP Addresses',\n disallowedIpAddresses: 'Disallowed IP Addresses',\n allowVmActivation: 'Allow VM Activation',\n disableGeoLocation: 'Disable Geolocation',\n 'user.id': 'User ID',\n userId: 'User',\n userGroupId: 'User Group',\n productId: 'Product',\n downloads: 'Total Downloads',\n claims: 'Permissions',\n googleSsoEnabled: 'Google Login Enabled',\n lastAttemptedAt: 'Last Attempt Date',\n url: 'URL',\n 'trialPolicy.name': 'Trial Policy Name',\n 'licensePolicy.name': 'License Template Name',\n licensePolicy: 'License Template',\n eventLog: 'Audit Log',\n cc: 'CC Recepients',\n bcc: 'BCC Recepients',\n ipAddress: 'IP Address',\n resellerId: 'Reseller',\n productVersionId: 'Product Version',\n releaseId: 'Release',\n maintenancePolicyId: 'Maintenance Policy',\n webhookId: 'Webhook',\n automatedEmailId: 'Automated Email',\n 'location.countryName': 'Country',\n 'location.ipAddress': 'IP Address',\n 'location.countryCode': 'Country',\n organizationId: 'Organization',\n 'address.country': 'Country',\n 'address.addressLine1': 'Address Line 1',\n 'address.addressLine2': 'Address Line 2',\n responseStatusCode: 'HTTP Status Code',\n resourceId: 'Resource ID',\n Sso: 'SAML SSO 2.0',\n 'reseller.name': 'Reseller',\n sendingDomain: 'Email Sending Domain',\n teamMember: 'Team Member',\n};\n\nfunction getResourceDisplayName(resourceName: string, portal: CtxPortals) {\n if (portal !== 'admin-portal' && resourceName in OTHER_PORTALS_DISPLAY_NAME) {\n return OTHER_PORTALS_DISPLAY_NAME[resourceName];\n } else if (resourceName in RESOURCE_DISPLAY_NAMES) {\n return RESOURCE_DISPLAY_NAMES[resourceName];\n } else {\n return toTitleCase(resourceName);\n }\n}\n\nconst ProjectContext = createContext<CtxPortals>('admin-portal');\n\nexport function ProjectProvider({ projectName, children }: { projectName: CtxPortals; children: React.ReactNode }) {\n return <ProjectContext.Provider value={projectName}>{children}</ProjectContext.Provider>;\n}\n\nexport function useProjectName(): CtxPortals {\n const projectName = use(ProjectContext);\n return projectName;\n}\n\nexport function useResourceFormatter(): (resourceName: string) => string {\n const portal = useProjectName();\n return (resourceName: string) => getResourceDisplayName(resourceName, portal);\n}\n\n/**\n * Format multiple license parameters (expired, suspended, revoked) into a single status\n */\nexport function getLicenseStatus(license: any): string {\n const licenseExpired = license.expiresAt && new Date(license.expiresAt) < new Date();\n // Status Column\n switch (true) {\n case license.revoked && license.suspended && licenseExpired:\n return 'Revoked, Suspended, Expired';\n case license.revoked && license.suspended:\n return 'Revoked, Suspended';\n case license.revoked && licenseExpired:\n return 'Revoked, Expired';\n case license.suspended && licenseExpired:\n return 'Suspended, Expired';\n case license.suspended:\n return 'Suspended';\n case license.revoked:\n return 'Revoked';\n case licenseExpired:\n return 'Expired';\n default:\n return 'Active';\n }\n}\ntype OsType = ApiSchema<'ActivationCreateRequestModel'>['os'];\nexport const ALL_OS: Record<OsType, string> = {\n windows: 'Windows',\n macos: 'macOS',\n linux: 'Linux',\n ios: 'iOS',\n android: 'Android',\n};\n"],"
|
|
1
|
+
{"version":3,"file":"resources.js","names":[],"sources":["../../lib/utilities/resources.tsx"],"sourcesContent":["import type { components, operations } from '@cryptlex/web-api-types/develop';\nimport { createContext, use } from 'react';\nimport { toTitleCase } from './string';\n\nexport type ApiSchema<T extends keyof components['schemas']> = components['schemas'][T];\nexport type ApiResponseBody<T extends keyof operations> = operations[T] extends {\n responses: { 200: { content: { 'application/json': infer R } } };\n}\n ? R extends Array<infer U>\n ? U\n : R\n : never;\nexport type ApiQuery<T extends keyof operations> = NonNullable<operations[T]['parameters']['query']>;\nexport type ApiPathParameters<T extends keyof operations> = operations[T]['parameters']['path'];\nexport type ApiFilter<T extends keyof operations> = Omit<ApiQuery<T>, 'page' | 'limit' | 'sort' | 'search'>;\nexport type ApiFilters<T extends keyof operations> = NonNullable<ApiFilter<T>>;\nexport type CtxPortals = 'customer-portal' | 'system-portal' | 'reseller-portal' | 'admin-portal';\n// Display names specific to customer and reseller portal\nconst OTHER_PORTALS_DISPLAY_NAME: Record<string, string> = {\n 'product.displayName': 'Product',\n // TanStack Table converts . -> _ TODO\n planId: 'Plan',\n tenantDatabaseClusterId: 'Tenant Database Cluster',\n product_displayName: 'Product',\n};\n\n// TODO, delegate to openapi.json\n// TODO, this drifts quite a lot from the API, should be updated\n/** Resource Name should ALWAYS be in singular form */\nexport const RESOURCE_NAMES = [\n 'access-token',\n 'account',\n 'activation',\n 'activation-log',\n 'address',\n 'admin-role',\n 'audit-log',\n 'automated-email',\n 'automated-email-event-log',\n 'card',\n 'entitlement-set',\n 'event-log',\n 'feature-entitlement',\n 'feature-flag',\n 'feature',\n 'invoice',\n 'license',\n 'license-template',\n 'maintenance-policy',\n 'organization',\n 'plan',\n 'product',\n 'product-version',\n 'profile',\n 'release',\n 'release-channel',\n 'release-file',\n 'release-platform',\n 'role',\n 'role-claim',\n 'saml-configuration',\n 'segment',\n 'sending-domain',\n 'stat',\n 'tag',\n 'trial',\n 'trial-activation',\n 'trial-policy',\n 'user',\n 'user-group',\n 'webhook',\n 'webhook-event-log',\n 'webhook-event',\n 'reseller',\n 'oidc-configuration',\n 'tenant-database-cluster',\n 'team-member',\n] as const;\nexport type CtxResourceName = (typeof RESOURCE_NAMES)[number];\n\n// TODO, use OpenAPI spec for resource definitions\n\nconst RESOURCE_DISPLAY_NAMES: Record<string, string> = {\n id: 'ID',\n createdAt: 'Creation Date',\n scopes: 'Permissions',\n updatedAt: 'Last Updated',\n expiresAt: 'Expiration Date',\n lastSeenAt: 'Last Seen',\n os: 'OS',\n osVersion: 'OS Version',\n key: 'License Key',\n vmName: 'VM Name',\n container: 'Container',\n allowedIpRange: 'Allowed IP Range',\n allowedIpRanges: 'Allowed IP Ranges',\n allowedIpAddresses: 'Allowed IP Addresses',\n disallowedIpAddresses: 'Disallowed IP Addresses',\n allowVmActivation: 'Allow VM Activation',\n disableGeoLocation: 'Disable Geolocation',\n 'user.id': 'User ID',\n userId: 'User',\n userGroupId: 'User Group',\n productId: 'Product',\n downloads: 'Total Downloads',\n claims: 'Permissions',\n googleSsoEnabled: 'Google Login Enabled',\n lastAttemptedAt: 'Last Attempt Date',\n url: 'URL',\n 'trialPolicy.name': 'Trial Policy Name',\n 'licensePolicy.name': 'License Template Name',\n licensePolicy: 'License Template',\n eventLog: 'Audit Log',\n cc: 'CC Recepients',\n bcc: 'BCC Recepients',\n ipAddress: 'IP Address',\n resellerId: 'Reseller',\n productVersionId: 'Product Version',\n releaseId: 'Release',\n maintenancePolicyId: 'Maintenance Policy',\n webhookId: 'Webhook',\n automatedEmailId: 'Automated Email',\n 'location.countryName': 'Country',\n 'location.ipAddress': 'IP Address',\n 'location.countryCode': 'Country',\n organizationId: 'Organization',\n 'address.country': 'Country',\n 'address.addressLine1': 'Address Line 1',\n 'address.addressLine2': 'Address Line 2',\n responseStatusCode: 'HTTP Status Code',\n resourceId: 'Resource ID',\n Sso: 'SAML SSO 2.0',\n 'reseller.name': 'Reseller',\n sendingDomain: 'Email Sending Domain',\n teamMember: 'Team Member',\n};\n\nfunction getResourceDisplayName(resourceName: string, portal: CtxPortals) {\n if (portal !== 'admin-portal' && resourceName in OTHER_PORTALS_DISPLAY_NAME) {\n return OTHER_PORTALS_DISPLAY_NAME[resourceName];\n } else if (resourceName in RESOURCE_DISPLAY_NAMES) {\n return RESOURCE_DISPLAY_NAMES[resourceName];\n } else {\n return toTitleCase(resourceName);\n }\n}\n\nconst ProjectContext = createContext<CtxPortals>('admin-portal');\n\nexport function ProjectProvider({ projectName, children }: { projectName: CtxPortals; children: React.ReactNode }) {\n return <ProjectContext.Provider value={projectName}>{children}</ProjectContext.Provider>;\n}\n\nexport function useProjectName(): CtxPortals {\n const projectName = use(ProjectContext);\n return projectName;\n}\n\nexport function useResourceFormatter(): (resourceName: string) => string {\n const portal = useProjectName();\n return (resourceName: string) => getResourceDisplayName(resourceName, portal);\n}\n\n/**\n * Format multiple license parameters (expired, suspended, revoked) into a single status\n */\nexport function getLicenseStatus(license: any): string {\n const licenseExpired = license.expiresAt && new Date(license.expiresAt) < new Date();\n // Status Column\n switch (true) {\n case license.revoked && license.suspended && licenseExpired:\n return 'Revoked, Suspended, Expired';\n case license.revoked && license.suspended:\n return 'Revoked, Suspended';\n case license.revoked && licenseExpired:\n return 'Revoked, Expired';\n case license.suspended && licenseExpired:\n return 'Suspended, Expired';\n case license.suspended:\n return 'Suspended';\n case license.revoked:\n return 'Revoked';\n case licenseExpired:\n return 'Expired';\n default:\n return 'Active';\n }\n}\ntype OsType = ApiSchema<'ActivationCreateRequestModel'>['os'];\nexport const ALL_OS: Record<OsType, string> = {\n windows: 'Windows',\n macos: 'macOS',\n linux: 'Linux',\n ios: 'iOS',\n android: 'Android',\n};\n"],"mappings":"iIAkBA,IAAM,EAAqD,CACvD,sBAAuB,UAEvB,OAAQ,OACR,wBAAyB,0BACzB,oBAAqB,SACzB,EAKa,EAAiB,okBAgD9B,EAKM,EAAiD,CACnD,GAAI,KACJ,UAAW,gBACX,OAAQ,cACR,UAAW,eACX,UAAW,kBACX,WAAY,YACZ,GAAI,KACJ,UAAW,aACX,IAAK,cACL,OAAQ,UACR,UAAW,YACX,eAAgB,mBAChB,gBAAiB,oBACjB,mBAAoB,uBACpB,sBAAuB,0BACvB,kBAAmB,sBACnB,mBAAoB,sBACpB,UAAW,UACX,OAAQ,OACR,YAAa,aACb,UAAW,UACX,UAAW,kBACX,OAAQ,cACR,iBAAkB,uBAClB,gBAAiB,oBACjB,IAAK,MACL,mBAAoB,oBACpB,qBAAsB,wBACtB,cAAe,mBACf,SAAU,YACV,GAAI,gBACJ,IAAK,iBACL,UAAW,aACX,WAAY,WACZ,iBAAkB,kBAClB,UAAW,UACX,oBAAqB,qBACrB,UAAW,UACX,iBAAkB,kBAClB,uBAAwB,UACxB,qBAAsB,aACtB,uBAAwB,UACxB,eAAgB,eAChB,kBAAmB,UACnB,uBAAwB,iBACxB,uBAAwB,iBACxB,mBAAoB,mBACpB,WAAY,cACZ,IAAK,eACL,gBAAiB,WACjB,cAAe,uBACf,WAAY,aAChB,EAEA,SAAS,EAAuB,EAAsB,EAAoB,CAMlE,OALA,IAAW,gBAAkB,KAAgB,EACtC,EAA2B,GAC3B,KAAgB,EAChB,EAAuB,GAEvB,EAAY,CAAY,CAEvC,CAEA,IAAM,EAAiB,EAA0B,cAAc,EAE/D,SAAgB,EAAgB,CAAE,cAAa,YAAoE,CAC/G,OAAO,EAAC,EAAe,SAAhB,CAAyB,MAAO,EAAc,UAAkC,CAAA,CAC3F,CAEA,SAAgB,GAA6B,CAEzC,OADoB,EAAI,CACjB,CACX,CAEA,SAAgB,GAAyD,CACrE,IAAM,EAAS,EAAe,EAC9B,MAAQ,IAAyB,EAAuB,EAAc,CAAM,CAChF,CAKA,SAAgB,EAAiB,EAAsB,CACnD,IAAM,EAAiB,EAAQ,WAAa,IAAI,KAAK,EAAQ,SAAS,EAAI,IAAI,KAE9E,OAAQ,GAAR,CACI,KAAK,EAAQ,SAAW,EAAQ,WAAa,EACzC,MAAO,8BACX,KAAK,EAAQ,SAAW,EAAQ,UAC5B,MAAO,qBACX,KAAK,EAAQ,SAAW,EACpB,MAAO,mBACX,KAAK,EAAQ,WAAa,EACtB,MAAO,qBACX,KAAK,EAAQ,UACT,MAAO,YACX,KAAK,EAAQ,QACT,MAAO,UACX,KAAK,EACD,MAAO,UACX,QACI,MAAO,QACf,CACJ,CAEA,IAAa,EAAiC,CAC1C,QAAS,UACT,MAAO,QACP,MAAO,QACP,IAAK,MACL,QAAS,SACb"}
|
package/dist/utilities/shiki.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=o=>`var(--color-${o})`,t={bg:e("surface-primary"),fg:e("text-primary"),comment:e("text-tertiary"),keyword:e("primary"),importExport:e("primary"),typeClass:e("primary"),typeAnnotation:e("primary"),typeParam:e("primary"),namespace:e("primary"),function:e("primary"),functionCall:e("primary"),builtinFunction:e("primary"),property:e("text-primary"),jsonKey:e("primary"),yamlKey:e("primary"),thisSuper:e("primary"),string:e("warning"),stringTemplate:e("warning"),stringQuote:e("warning"),templateExprDelim:e("warning"),number:e("success"),constant:e("success"),enumMember:e("success"),punctuationLight:e("text-secondary"),colon:e("text-secondary"),arrow:e("text-secondary"),spreadRest:e("text-secondary"),hash:e("text-secondary"),variable:e("text-primary"),parameter:e("text-secondary"),decorator:e("destructive"),computedKey:e("destructive"),regex:e("destructive"),regexCharClass:e("destructive"),regexQuantifier:e("destructive"),regexFlag:e("destructive")},n=[{settings:{background:t.bg,foreground:t.fg}},{scope:["comment","punctuation.definition.comment","string.comment","comment.block","comment.line","comment.block.documentation"],settings:{foreground:t.comment}},{scope:["keyword","keyword.control","keyword.control.flow","keyword.control.conditional","keyword.control.loop","keyword.control.trycatch","keyword.control.switch","keyword.control.return","keyword.control.throw","keyword.control.await","keyword.control.async","keyword.other","storage.type","storage.modifier"],settings:{foreground:t.keyword,fontStyle:"bold"}},{scope:["keyword.control.import","keyword.control.export","keyword.control.from","keyword.control.as","keyword.control.default","keyword.control.module"],settings:{foreground:t.importExport,fontStyle:"bold"}},{scope:["keyword.operator","keyword.operator.assignment","keyword.operator.assignment.compound","keyword.operator.comparison","keyword.operator.logical","keyword.operator.bitwise","keyword.operator.arithmetic","keyword.operator.ternary","keyword.operator.optional","keyword.operator.nullcoalescing","keyword.operator.type","keyword.operator.expression","keyword.operator.pipe"],settings:{foreground:t.punctuationLight}},{scope:["keyword.operator.arrow","keyword.operator.scope-resolution","punctuation.separator.arrow","punctuation.definition.arrow"],settings:{foreground:t.arrow}},{scope:["keyword.operator.spread","keyword.operator.rest","keyword.operator.optional-chaining","punctuation.accessor.optional"],settings:{foreground:t.spreadRest}},{scope:["keyword.operator.new","keyword.operator.delete","keyword.operator.typeof","keyword.operator.instanceof","keyword.operator.void","keyword.operator.in","keyword.operator.of"],settings:{foreground:t.keyword,fontStyle:"bold"}},{scope:["variable.language.this","variable.language.super","variable.language.self","variable.language.cls","variable.language.special"],settings:{foreground:t.thisSuper,fontStyle:"bold"}},{scope:["string","string.quoted.single","string.quoted.double","string.quoted.other","string.interpolated","string.other"],settings:{foreground:t.string}},{scope:["string.quoted.backtick","string.template","string.template.ts","string.template.js"],settings:{foreground:t.stringTemplate}},{scope:["punctuation.definition.string.begin","punctuation.definition.string.end","punctuation.definition.template.begin","punctuation.definition.template.end","storage.type.string","punctuation.definition.string.begin.css","punctuation.definition.string.end.css"],settings:{foreground:t.stringQuote}},{scope:["punctuation.definition.template-expression.begin","punctuation.definition.template-expression.end","meta.template.expression punctuation.definition.block"],settings:{foreground:t.templateExprDelim,fontStyle:"bold"}},{scope:["string.regexp","constant.regexp"],settings:{foreground:t.regex}},{scope:["string.regexp punctuation.definition.character-class","string.regexp meta.character-class","string.regexp constant.character.escape"],settings:{foreground:t.regexCharClass}},{scope:["string.regexp keyword.operator.quantifier","keyword.operator.quantifier.regexp"],settings:{foreground:t.regexQuantifier,fontStyle:"bold"}},{scope:["string.regexp keyword.other.regex.flags","punctuation.definition.regex.flags","keyword.other.regex.flags"],settings:{foreground:t.regexFlag}},{scope:["constant.numeric","constant.numeric.integer","constant.numeric.float","constant.numeric.hex","constant.numeric.binary","constant.numeric.octal","constant.numeric.decimal","constant.numeric.scientific","constant.numeric.css"],settings:{foreground:t.number}},{scope:["constant.language","constant.language.boolean","constant.language.boolean.true","constant.language.boolean.false","constant.language.null","constant.language.undefined","constant.language.infinity","constant.language.nan","constant.language.nil","constant.language.none","constant.other.boolean"],settings:{foreground:t.constant}},{scope:["constant.character","constant.character.escape","constant.character.unicode","constant.other","constant.other.symbol","constant.other.key","constant.other.color"],settings:{foreground:t.constant}},{scope:["entity.name.function","meta.function entity.name.function","meta.method entity.name.function","meta.function.declaration entity.name.function"],settings:{foreground:t.function}},{scope:["meta.function-call entity.name.function","meta.function-call.generic entity.name.function","support.function","support.function.dom","support.function.console"],settings:{foreground:t.functionCall}},{scope:["support.function.builtin","support.function.string","support.function.array","support.function.math","support.function.date","support.function.object","support.function.json","support.function.promise"],settings:{foreground:t.builtinFunction}},{scope:["entity.name.type","entity.name.type.interface","entity.name.type.alias","entity.name.type.enum","entity.name.class","entity.name.class.forward-decl","support.type","support.class","support.type.object","support.class.builtin","entity.other.inherited-class"],settings:{foreground:t.typeClass}},{scope:["meta.type.annotation","meta.return.type","support.type.primitive","support.type.builtin","entity.name.type.primitive","keyword.type"],settings:{foreground:t.typeAnnotation}},{scope:["keyword.operator.expression.typeof","keyword.operator.expression.keyof","keyword.operator.expression.infer","keyword.operator.expression.satisfies","keyword.operator.expression.is","keyword.operator.type.annotation"],settings:{foreground:t.typeClass,fontStyle:"bold"}},{scope:["entity.name.type.type-parameter","variable.type.type-parameter","meta.type.parameters entity.name.type"],settings:{foreground:t.typeParam}},{scope:["variable.other.enummember","constant.other.enum","meta.enum variable"],settings:{foreground:t.enumMember}},{scope:["entity.name.namespace","entity.name.module","entity.name.section","storage.type.namespace","storage.type.module"],settings:{foreground:t.namespace}},{scope:["meta.decorator","meta.decorator punctuation.decorator","entity.name.function.decorator","punctuation.decorator","storage.type.annotation"],settings:{foreground:t.decorator,fontStyle:"bold"}},{scope:["variable","variable.other","variable.other.readwrite","variable.other.constant","variable.other.global","variable.other.local"],settings:{foreground:t.variable}},{scope:["variable.parameter","variable.parameter.function","meta.function.parameters variable.parameter","meta.arrow.parameters variable.parameter"],settings:{foreground:t.parameter}},{scope:["variable.other.property","variable.other.object.property","support.type.property-name","meta.object-literal.key","meta.object.key"],settings:{foreground:t.property}},{scope:["support.type.property-name.json","meta.mapping.key.json string","meta.structure.dictionary.key.json string"],settings:{foreground:t.jsonKey}},{scope:["entity.name.tag.yaml","meta.mapping.key.yaml"],settings:{foreground:t.yamlKey,fontStyle:"bold"}},{scope:["meta.computed.key","meta.objectliteral meta.template.expression"],settings:{foreground:t.computedKey}},{scope:["punctuation.terminator","punctuation.terminator.statement","punctuation.separator","punctuation.separator.comma","punctuation.separator.period","punctuation.separator.dot","punctuation.separator.namespace","punctuation.separator.continuation","punctuation.accessor","punctuation.accessor.dot","meta.delimiter.object.comma","meta.delimiter.array.comma"],settings:{foreground:t.punctuationLight}},{scope:["punctuation.separator.key-value","punctuation.separator.colon","punctuation.separator.type-annotation","punctuation.separator.dictionary.key-value","punctuation.definition.binding-pattern.object","punctuation.separator.case-statements"],settings:{foreground:t.colon}},{scope:["punctuation.definition.id.css","punctuation.definition.entity.css","punctuation.definition.hash","entity.other.attribute-name.id.css punctuation","punctuation.definition.interpolation.begin","punctuation.definition.interpolation.end","punctuation.definition.directive","punctuation.definition.preprocessor","comment.line.number-sign punctuation.definition.comment"],settings:{foreground:t.hash}}],r={name:"shiki",settings:n};export{r as shikiTheme};
|
|
2
|
-
//# sourceMappingURL=shiki.js.map
|
|
1
|
+
var e=e=>`var(--color-${e})`,t={bg:e(`surface-primary`),fg:e(`text-primary`),comment:e(`text-tertiary`),keyword:e(`primary`),importExport:e(`primary`),typeClass:e(`primary`),typeAnnotation:e(`primary`),typeParam:e(`primary`),namespace:e(`primary`),function:e(`primary`),functionCall:e(`primary`),builtinFunction:e(`primary`),property:e(`text-primary`),jsonKey:e(`primary`),yamlKey:e(`primary`),tag:e(`primary`),thisSuper:e(`primary`),shellBuiltin:e(`primary`),pythonMagic:e(`primary`),goBuiltin:e(`primary`),scssMixin:e(`primary`),cssProperty:e(`primary`),cssAtRule:e(`primary`),cssSelector:e(`primary`),cssIdSelector:e(`primary`),cssPseudo:e(`primary`),mdHeading:e(`primary`),mdLink:e(`primary`),mdBullet:e(`primary`),attribute:e(`primary`),string:e(`warning`),stringTemplate:e(`warning`),stringQuote:e(`warning`),templateExprDelim:e(`warning`),cssValue:e(`warning`),pythonFStr:e(`warning`),shellVar:e(`warning`),yamlTag:e(`warning`),number:e(`success`),constant:e(`success`),enumMember:e(`success`),cssVariable:e(`success`),cssUnit:e(`success`),punctuationLight:e(`text-secondary`),tagBracket:e(`text-secondary`),colon:e(`text-secondary`),arrow:e(`text-secondary`),spreadRest:e(`text-secondary`),hash:e(`text-secondary`),jsxExprDelim:e(`text-secondary`),variable:e(`text-primary`),parameter:e(`text-secondary`),mdBold:e(`text-primary`),mdCode:e(`warning`),mdBlockquote:e(`text-tertiary`),mdHr:e(`stroke-primary`),decorator:e(`destructive`),computedKey:e(`destructive`),shellFlag:e(`destructive`),rustLifetime:e(`destructive`),rustMacro:e(`destructive`),rustAttr:e(`destructive`),yamlAnchor:e(`destructive`),yamlAlias:e(`destructive`),cssImportant:e(`destructive`),regex:e(`destructive`),regexCharClass:e(`destructive`),regexQuantifier:e(`destructive`),regexFlag:e(`destructive`),deprecated:e(`destructive`)},n={name:`shiki`,settings:[{settings:{background:t.bg,foreground:t.fg}},{scope:[`comment`,`punctuation.definition.comment`,`string.comment`,`comment.block`,`comment.line`,`comment.block.documentation`],settings:{foreground:t.comment}},{scope:[`keyword`,`keyword.control`,`keyword.control.flow`,`keyword.control.conditional`,`keyword.control.loop`,`keyword.control.trycatch`,`keyword.control.switch`,`keyword.control.return`,`keyword.control.throw`,`keyword.control.await`,`keyword.control.async`,`keyword.other`,`storage.type`,`storage.modifier`],settings:{foreground:t.keyword,fontStyle:`bold`}},{scope:[`keyword.control.import`,`keyword.control.export`,`keyword.control.from`,`keyword.control.as`,`keyword.control.default`,`keyword.control.module`],settings:{foreground:t.importExport,fontStyle:`bold`}},{scope:[`keyword.operator`,`keyword.operator.assignment`,`keyword.operator.assignment.compound`,`keyword.operator.comparison`,`keyword.operator.logical`,`keyword.operator.bitwise`,`keyword.operator.arithmetic`,`keyword.operator.ternary`,`keyword.operator.optional`,`keyword.operator.nullcoalescing`,`keyword.operator.type`,`keyword.operator.expression`,`keyword.operator.pipe`],settings:{foreground:t.punctuationLight}},{scope:[`keyword.operator.arrow`,`keyword.operator.scope-resolution`,`punctuation.separator.arrow`,`punctuation.definition.arrow`],settings:{foreground:t.arrow}},{scope:[`keyword.operator.spread`,`keyword.operator.rest`,`keyword.operator.optional-chaining`,`punctuation.accessor.optional`],settings:{foreground:t.spreadRest}},{scope:[`keyword.operator.new`,`keyword.operator.delete`,`keyword.operator.typeof`,`keyword.operator.instanceof`,`keyword.operator.void`,`keyword.operator.in`,`keyword.operator.of`],settings:{foreground:t.keyword,fontStyle:`bold`}},{scope:[`variable.language.this`,`variable.language.super`,`variable.language.self`,`variable.language.cls`,`variable.language.special`],settings:{foreground:t.thisSuper,fontStyle:`bold`}},{scope:[`string`,`string.quoted.single`,`string.quoted.double`,`string.quoted.other`,`string.interpolated`,`string.other`],settings:{foreground:t.string}},{scope:[`string.quoted.backtick`,`string.template`,`string.template.ts`,`string.template.js`],settings:{foreground:t.stringTemplate}},{scope:[`punctuation.definition.string.begin`,`punctuation.definition.string.end`,`punctuation.definition.template.begin`,`punctuation.definition.template.end`,`storage.type.string`,`punctuation.definition.string.begin.css`,`punctuation.definition.string.end.css`],settings:{foreground:t.stringQuote}},{scope:[`punctuation.definition.template-expression.begin`,`punctuation.definition.template-expression.end`,`meta.template.expression punctuation.definition.block`],settings:{foreground:t.templateExprDelim,fontStyle:`bold`}},{scope:[`string.regexp`,`constant.regexp`],settings:{foreground:t.regex}},{scope:[`string.regexp punctuation.definition.character-class`,`string.regexp meta.character-class`,`string.regexp constant.character.escape`],settings:{foreground:t.regexCharClass}},{scope:[`string.regexp keyword.operator.quantifier`,`keyword.operator.quantifier.regexp`],settings:{foreground:t.regexQuantifier,fontStyle:`bold`}},{scope:[`string.regexp keyword.other.regex.flags`,`punctuation.definition.regex.flags`,`keyword.other.regex.flags`],settings:{foreground:t.regexFlag}},{scope:[`constant.numeric`,`constant.numeric.integer`,`constant.numeric.float`,`constant.numeric.hex`,`constant.numeric.binary`,`constant.numeric.octal`,`constant.numeric.decimal`,`constant.numeric.scientific`,`constant.numeric.css`],settings:{foreground:t.number}},{scope:[`constant.language`,`constant.language.boolean`,`constant.language.boolean.true`,`constant.language.boolean.false`,`constant.language.null`,`constant.language.undefined`,`constant.language.infinity`,`constant.language.nan`,`constant.language.nil`,`constant.language.none`,`constant.other.boolean`],settings:{foreground:t.constant}},{scope:[`constant.character`,`constant.character.escape`,`constant.character.unicode`,`constant.other`,`constant.other.symbol`,`constant.other.key`,`constant.other.color`],settings:{foreground:t.constant}},{scope:[`entity.name.function`,`meta.function entity.name.function`,`meta.method entity.name.function`,`meta.function.declaration entity.name.function`],settings:{foreground:t.function}},{scope:[`meta.function-call entity.name.function`,`meta.function-call.generic entity.name.function`,`support.function`,`support.function.dom`,`support.function.console`],settings:{foreground:t.functionCall}},{scope:[`support.function.builtin`,`support.function.string`,`support.function.array`,`support.function.math`,`support.function.date`,`support.function.object`,`support.function.json`,`support.function.promise`],settings:{foreground:t.builtinFunction}},{scope:[`entity.name.type`,`entity.name.type.interface`,`entity.name.type.alias`,`entity.name.type.enum`,`entity.name.class`,`entity.name.class.forward-decl`,`support.type`,`support.class`,`support.type.object`,`support.class.builtin`,`entity.other.inherited-class`],settings:{foreground:t.typeClass}},{scope:[`meta.type.annotation`,`meta.return.type`,`support.type.primitive`,`support.type.builtin`,`entity.name.type.primitive`,`keyword.type`],settings:{foreground:t.typeAnnotation}},{scope:[`keyword.operator.expression.typeof`,`keyword.operator.expression.keyof`,`keyword.operator.expression.infer`,`keyword.operator.expression.satisfies`,`keyword.operator.expression.is`,`keyword.operator.type.annotation`],settings:{foreground:t.typeClass,fontStyle:`bold`}},{scope:[`entity.name.type.type-parameter`,`variable.type.type-parameter`,`meta.type.parameters entity.name.type`],settings:{foreground:t.typeParam}},{scope:[`variable.other.enummember`,`constant.other.enum`,`meta.enum variable`],settings:{foreground:t.enumMember}},{scope:[`entity.name.namespace`,`entity.name.module`,`entity.name.section`,`storage.type.namespace`,`storage.type.module`],settings:{foreground:t.namespace}},{scope:[`meta.decorator`,`meta.decorator punctuation.decorator`,`entity.name.function.decorator`,`punctuation.decorator`,`storage.type.annotation`],settings:{foreground:t.decorator,fontStyle:`bold`}},{scope:[`variable`,`variable.other`,`variable.other.readwrite`,`variable.other.constant`,`variable.other.global`,`variable.other.local`],settings:{foreground:t.variable}},{scope:[`variable.parameter`,`variable.parameter.function`,`meta.function.parameters variable.parameter`,`meta.arrow.parameters variable.parameter`],settings:{foreground:t.parameter}},{scope:[`variable.other.property`,`variable.other.object.property`,`support.type.property-name`,`meta.object-literal.key`,`meta.object.key`],settings:{foreground:t.property}},{scope:[`support.type.property-name.json`,`meta.mapping.key.json string`,`meta.structure.dictionary.key.json string`],settings:{foreground:t.jsonKey}},{scope:[`entity.name.tag.yaml`,`meta.mapping.key.yaml`],settings:{foreground:t.yamlKey,fontStyle:`bold`}},{scope:[`meta.computed.key`,`meta.objectliteral meta.template.expression`],settings:{foreground:t.computedKey}},{scope:[`punctuation.terminator`,`punctuation.terminator.statement`,`punctuation.separator`,`punctuation.separator.comma`,`punctuation.separator.period`,`punctuation.separator.dot`,`punctuation.separator.namespace`,`punctuation.separator.continuation`,`punctuation.accessor`,`punctuation.accessor.dot`,`meta.delimiter.object.comma`,`meta.delimiter.array.comma`],settings:{foreground:t.punctuationLight}},{scope:[`punctuation.separator.key-value`,`punctuation.separator.colon`,`punctuation.separator.type-annotation`,`punctuation.separator.dictionary.key-value`,`punctuation.definition.binding-pattern.object`,`punctuation.separator.case-statements`],settings:{foreground:t.colon}},{scope:[`punctuation.definition.id.css`,`punctuation.definition.entity.css`,`punctuation.definition.hash`,`entity.other.attribute-name.id.css punctuation`,`punctuation.definition.interpolation.begin`,`punctuation.definition.interpolation.end`,`punctuation.definition.directive`,`punctuation.definition.preprocessor`,`comment.line.number-sign punctuation.definition.comment`],settings:{foreground:t.hash}}]};export{n as shikiTheme};
|
|
2
|
+
//# sourceMappingURL=shiki.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shiki.js","sources":["../../lib/utilities/shiki.ts"],"sourcesContent":["import type { ThemeRegistration } from 'shiki';\n\nconst v = (token: string) => `var(--color-${token})`;\n\nconst palette = {\n bg: v('surface-primary'),\n fg: v('text-primary'),\n comment: v('text-tertiary'),\n keyword: v('primary'),\n importExport: v('primary'),\n typeClass: v('primary'),\n typeAnnotation: v('primary'),\n typeParam: v('primary'),\n namespace: v('primary'),\n function: v('primary'),\n functionCall: v('primary'),\n builtinFunction: v('primary'),\n property: v('text-primary'),\n jsonKey: v('primary'),\n yamlKey: v('primary'),\n tag: v('primary'),\n thisSuper: v('primary'),\n shellBuiltin: v('primary'),\n pythonMagic: v('primary'),\n goBuiltin: v('primary'),\n scssMixin: v('primary'),\n cssProperty: v('primary'),\n cssAtRule: v('primary'),\n cssSelector: v('primary'),\n cssIdSelector: v('primary'),\n cssPseudo: v('primary'),\n mdHeading: v('primary'),\n mdLink: v('primary'),\n mdBullet: v('primary'),\n attribute: v('primary'),\n string: v('warning'),\n stringTemplate: v('warning'),\n stringQuote: v('warning'),\n templateExprDelim: v('warning'),\n cssValue: v('warning'),\n pythonFStr: v('warning'),\n shellVar: v('warning'),\n yamlTag: v('warning'),\n number: v('success'),\n constant: v('success'),\n enumMember: v('success'),\n cssVariable: v('success'),\n cssUnit: v('success'),\n punctuationLight: v('text-secondary'),\n tagBracket: v('text-secondary'),\n colon: v('text-secondary'),\n arrow: v('text-secondary'),\n spreadRest: v('text-secondary'),\n hash: v('text-secondary'),\n jsxExprDelim: v('text-secondary'),\n variable: v('text-primary'),\n parameter: v('text-secondary'),\n mdBold: v('text-primary'),\n mdCode: v('warning'),\n mdBlockquote: v('text-tertiary'),\n mdHr: v('stroke-primary'),\n decorator: v('destructive'),\n computedKey: v('destructive'),\n shellFlag: v('destructive'),\n rustLifetime: v('destructive'),\n rustMacro: v('destructive'),\n rustAttr: v('destructive'),\n yamlAnchor: v('destructive'),\n yamlAlias: v('destructive'),\n cssImportant: v('destructive'),\n regex: v('destructive'),\n regexCharClass: v('destructive'),\n regexQuantifier: v('destructive'),\n regexFlag: v('destructive'),\n deprecated: v('destructive'),\n} as const;\n\nconst settings: ThemeRegistration['settings'] = [\n { settings: { background: palette.bg, foreground: palette.fg } },\n\n // Comments\n {\n scope: [\n 'comment',\n 'punctuation.definition.comment',\n 'string.comment',\n 'comment.block',\n 'comment.line',\n 'comment.block.documentation',\n ],\n settings: { foreground: palette.comment },\n },\n\n // Keywords — control / storage\n {\n scope: [\n 'keyword',\n 'keyword.control',\n 'keyword.control.flow',\n 'keyword.control.conditional',\n 'keyword.control.loop',\n 'keyword.control.trycatch',\n 'keyword.control.switch',\n 'keyword.control.return',\n 'keyword.control.throw',\n 'keyword.control.await',\n 'keyword.control.async',\n 'keyword.other',\n 'storage.type',\n 'storage.modifier',\n ],\n settings: { foreground: palette.keyword, fontStyle: 'bold' },\n },\n\n // import / export / from / as / default\n {\n scope: [\n 'keyword.control.import',\n 'keyword.control.export',\n 'keyword.control.from',\n 'keyword.control.as',\n 'keyword.control.default',\n 'keyword.control.module',\n ],\n settings: { foreground: palette.importExport, fontStyle: 'bold' },\n },\n\n // Operators\n {\n scope: [\n 'keyword.operator',\n 'keyword.operator.assignment',\n 'keyword.operator.assignment.compound',\n 'keyword.operator.comparison',\n 'keyword.operator.logical',\n 'keyword.operator.bitwise',\n 'keyword.operator.arithmetic',\n 'keyword.operator.ternary',\n 'keyword.operator.optional',\n 'keyword.operator.nullcoalescing',\n 'keyword.operator.type',\n 'keyword.operator.expression',\n 'keyword.operator.pipe',\n ],\n settings: { foreground: palette.punctuationLight },\n },\n\n // => ::\n {\n scope: [\n 'keyword.operator.arrow',\n 'keyword.operator.scope-resolution',\n 'punctuation.separator.arrow',\n 'punctuation.definition.arrow',\n ],\n settings: { foreground: palette.arrow },\n },\n\n // ... ?.\n {\n scope: [\n 'keyword.operator.spread',\n 'keyword.operator.rest',\n 'keyword.operator.optional-chaining',\n 'punctuation.accessor.optional',\n ],\n settings: { foreground: palette.spreadRest },\n },\n\n // new delete typeof instanceof void in of\n {\n scope: [\n 'keyword.operator.new',\n 'keyword.operator.delete',\n 'keyword.operator.typeof',\n 'keyword.operator.instanceof',\n 'keyword.operator.void',\n 'keyword.operator.in',\n 'keyword.operator.of',\n ],\n settings: { foreground: palette.keyword, fontStyle: 'bold' },\n },\n\n // this / super / self / cls\n {\n scope: [\n 'variable.language.this',\n 'variable.language.super',\n 'variable.language.self',\n 'variable.language.cls',\n 'variable.language.special',\n ],\n settings: { foreground: palette.thisSuper, fontStyle: 'bold' },\n },\n\n // Strings — single / double\n {\n scope: [\n 'string',\n 'string.quoted.single',\n 'string.quoted.double',\n 'string.quoted.other',\n 'string.interpolated',\n 'string.other',\n ],\n settings: { foreground: palette.string },\n },\n\n // Template literals — backtick body\n {\n scope: ['string.quoted.backtick', 'string.template', 'string.template.ts', 'string.template.js'],\n settings: { foreground: palette.stringTemplate },\n },\n\n // Quote delimiters \" ' `\n {\n scope: [\n 'punctuation.definition.string.begin',\n 'punctuation.definition.string.end',\n 'punctuation.definition.template.begin',\n 'punctuation.definition.template.end',\n 'storage.type.string',\n 'punctuation.definition.string.begin.css',\n 'punctuation.definition.string.end.css',\n ],\n settings: { foreground: palette.stringQuote },\n },\n\n // Template ${ } delimiters\n {\n scope: [\n 'punctuation.definition.template-expression.begin',\n 'punctuation.definition.template-expression.end',\n 'meta.template.expression punctuation.definition.block',\n ],\n settings: { foreground: palette.templateExprDelim, fontStyle: 'bold' },\n },\n\n // RegExp\n {\n scope: ['string.regexp', 'constant.regexp'],\n settings: { foreground: palette.regex },\n },\n {\n scope: [\n 'string.regexp punctuation.definition.character-class',\n 'string.regexp meta.character-class',\n 'string.regexp constant.character.escape',\n ],\n settings: { foreground: palette.regexCharClass },\n },\n {\n scope: ['string.regexp keyword.operator.quantifier', 'keyword.operator.quantifier.regexp'],\n settings: { foreground: palette.regexQuantifier, fontStyle: 'bold' },\n },\n {\n scope: [\n 'string.regexp keyword.other.regex.flags',\n 'punctuation.definition.regex.flags',\n 'keyword.other.regex.flags',\n ],\n settings: { foreground: palette.regexFlag },\n },\n\n // Numbers\n {\n scope: [\n 'constant.numeric',\n 'constant.numeric.integer',\n 'constant.numeric.float',\n 'constant.numeric.hex',\n 'constant.numeric.binary',\n 'constant.numeric.octal',\n 'constant.numeric.decimal',\n 'constant.numeric.scientific',\n 'constant.numeric.css',\n ],\n settings: { foreground: palette.number },\n },\n\n // Boolean / null / undefined / Infinity / NaN\n {\n scope: [\n 'constant.language',\n 'constant.language.boolean',\n 'constant.language.boolean.true',\n 'constant.language.boolean.false',\n 'constant.language.null',\n 'constant.language.undefined',\n 'constant.language.infinity',\n 'constant.language.nan',\n 'constant.language.nil',\n 'constant.language.none',\n 'constant.other.boolean',\n ],\n settings: { foreground: palette.constant },\n },\n\n // Other constants — escapes, symbols\n {\n scope: [\n 'constant.character',\n 'constant.character.escape',\n 'constant.character.unicode',\n 'constant.other',\n 'constant.other.symbol',\n 'constant.other.key',\n 'constant.other.color',\n ],\n settings: { foreground: palette.constant },\n },\n\n // Function declarations\n {\n scope: [\n 'entity.name.function',\n 'meta.function entity.name.function',\n 'meta.method entity.name.function',\n 'meta.function.declaration entity.name.function',\n ],\n settings: { foreground: palette.function },\n },\n\n // Function calls\n {\n scope: [\n 'meta.function-call entity.name.function',\n 'meta.function-call.generic entity.name.function',\n 'support.function',\n 'support.function.dom',\n 'support.function.console',\n ],\n settings: { foreground: palette.functionCall },\n },\n\n // Built-in functions\n {\n scope: [\n 'support.function.builtin',\n 'support.function.string',\n 'support.function.array',\n 'support.function.math',\n 'support.function.date',\n 'support.function.object',\n 'support.function.json',\n 'support.function.promise',\n ],\n settings: { foreground: palette.builtinFunction },\n },\n\n // Types / classes / interfaces\n {\n scope: [\n 'entity.name.type',\n 'entity.name.type.interface',\n 'entity.name.type.alias',\n 'entity.name.type.enum',\n 'entity.name.class',\n 'entity.name.class.forward-decl',\n 'support.type',\n 'support.class',\n 'support.type.object',\n 'support.class.builtin',\n 'entity.other.inherited-class',\n ],\n settings: { foreground: palette.typeClass },\n },\n\n // Type annotations / return types\n {\n scope: [\n 'meta.type.annotation',\n 'meta.return.type',\n 'support.type.primitive',\n 'support.type.builtin',\n 'entity.name.type.primitive',\n 'keyword.type',\n ],\n settings: { foreground: palette.typeAnnotation },\n },\n\n // typeof keyof infer satisfies is\n {\n scope: [\n 'keyword.operator.expression.typeof',\n 'keyword.operator.expression.keyof',\n 'keyword.operator.expression.infer',\n 'keyword.operator.expression.satisfies',\n 'keyword.operator.expression.is',\n 'keyword.operator.type.annotation',\n ],\n settings: { foreground: palette.typeClass, fontStyle: 'bold' },\n },\n\n // Generic type params <T>\n {\n scope: [\n 'entity.name.type.type-parameter',\n 'variable.type.type-parameter',\n 'meta.type.parameters entity.name.type',\n ],\n settings: { foreground: palette.typeParam },\n },\n\n // Enum members\n {\n scope: ['variable.other.enummember', 'constant.other.enum', 'meta.enum variable'],\n settings: { foreground: palette.enumMember },\n },\n\n // Namespaces / modules\n {\n scope: [\n 'entity.name.namespace',\n 'entity.name.module',\n 'entity.name.section',\n 'storage.type.namespace',\n 'storage.type.module',\n ],\n settings: { foreground: palette.namespace },\n },\n\n // Decorators (all languages)\n {\n scope: [\n 'meta.decorator',\n 'meta.decorator punctuation.decorator',\n 'entity.name.function.decorator',\n 'punctuation.decorator',\n 'storage.type.annotation',\n ],\n settings: { foreground: palette.decorator, fontStyle: 'bold' },\n },\n\n // Variables\n {\n scope: [\n 'variable',\n 'variable.other',\n 'variable.other.readwrite',\n 'variable.other.constant',\n 'variable.other.global',\n 'variable.other.local',\n ],\n settings: { foreground: palette.variable },\n },\n\n // Parameters\n {\n scope: [\n 'variable.parameter',\n 'variable.parameter.function',\n 'meta.function.parameters variable.parameter',\n 'meta.arrow.parameters variable.parameter',\n ],\n settings: { foreground: palette.parameter },\n },\n\n // Object properties\n {\n scope: [\n 'variable.other.property',\n 'variable.other.object.property',\n 'support.type.property-name',\n 'meta.object-literal.key',\n 'meta.object.key',\n ],\n settings: { foreground: palette.property },\n },\n\n // JSON keys\n {\n scope: [\n 'support.type.property-name.json',\n 'meta.mapping.key.json string',\n 'meta.structure.dictionary.key.json string',\n ],\n settings: { foreground: palette.jsonKey },\n },\n\n // YAML keys\n {\n scope: ['entity.name.tag.yaml', 'meta.mapping.key.yaml'],\n settings: { foreground: palette.yamlKey, fontStyle: 'bold' },\n },\n\n // Computed keys [key]\n {\n scope: ['meta.computed.key', 'meta.objectliteral meta.template.expression'],\n settings: { foreground: palette.computedKey },\n },\n\n // Commas , semicolons ; dots .\n {\n scope: [\n 'punctuation.terminator',\n 'punctuation.terminator.statement',\n 'punctuation.separator',\n 'punctuation.separator.comma',\n 'punctuation.separator.period',\n 'punctuation.separator.dot',\n 'punctuation.separator.namespace',\n 'punctuation.separator.continuation',\n 'punctuation.accessor',\n 'punctuation.accessor.dot',\n 'meta.delimiter.object.comma',\n 'meta.delimiter.array.comma',\n ],\n settings: { foreground: palette.punctuationLight },\n },\n\n // Colons :\n {\n scope: [\n 'punctuation.separator.key-value',\n 'punctuation.separator.colon',\n 'punctuation.separator.type-annotation',\n 'punctuation.separator.dictionary.key-value',\n 'punctuation.definition.binding-pattern.object',\n 'punctuation.separator.case-statements',\n ],\n settings: { foreground: palette.colon },\n },\n\n // Hash #\n {\n scope: [\n 'punctuation.definition.id.css',\n 'punctuation.definition.entity.css',\n 'punctuation.definition.hash',\n 'entity.other.attribute-name.id.css punctuation',\n 'punctuation.definition.interpolation.begin',\n 'punctuation.definition.interpolation.end',\n 'punctuation.definition.directive',\n 'punctuation.definition.preprocessor',\n 'comment.line.number-sign punctuation.definition.comment',\n ],\n settings: { foreground: palette.hash },\n },\n];\n\nexport const shikiTheme: ThemeRegistration = {\n name: 'shiki',\n settings,\n};\n"],"names":["v","token","palette","settings","shikiTheme"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shiki.js","names":[],"sources":["../../lib/utilities/shiki.ts"],"sourcesContent":["import type { ThemeRegistration } from 'shiki';\n\nconst v = (token: string) => `var(--color-${token})`;\n\nconst palette = {\n bg: v('surface-primary'),\n fg: v('text-primary'),\n comment: v('text-tertiary'),\n keyword: v('primary'),\n importExport: v('primary'),\n typeClass: v('primary'),\n typeAnnotation: v('primary'),\n typeParam: v('primary'),\n namespace: v('primary'),\n function: v('primary'),\n functionCall: v('primary'),\n builtinFunction: v('primary'),\n property: v('text-primary'),\n jsonKey: v('primary'),\n yamlKey: v('primary'),\n tag: v('primary'),\n thisSuper: v('primary'),\n shellBuiltin: v('primary'),\n pythonMagic: v('primary'),\n goBuiltin: v('primary'),\n scssMixin: v('primary'),\n cssProperty: v('primary'),\n cssAtRule: v('primary'),\n cssSelector: v('primary'),\n cssIdSelector: v('primary'),\n cssPseudo: v('primary'),\n mdHeading: v('primary'),\n mdLink: v('primary'),\n mdBullet: v('primary'),\n attribute: v('primary'),\n string: v('warning'),\n stringTemplate: v('warning'),\n stringQuote: v('warning'),\n templateExprDelim: v('warning'),\n cssValue: v('warning'),\n pythonFStr: v('warning'),\n shellVar: v('warning'),\n yamlTag: v('warning'),\n number: v('success'),\n constant: v('success'),\n enumMember: v('success'),\n cssVariable: v('success'),\n cssUnit: v('success'),\n punctuationLight: v('text-secondary'),\n tagBracket: v('text-secondary'),\n colon: v('text-secondary'),\n arrow: v('text-secondary'),\n spreadRest: v('text-secondary'),\n hash: v('text-secondary'),\n jsxExprDelim: v('text-secondary'),\n variable: v('text-primary'),\n parameter: v('text-secondary'),\n mdBold: v('text-primary'),\n mdCode: v('warning'),\n mdBlockquote: v('text-tertiary'),\n mdHr: v('stroke-primary'),\n decorator: v('destructive'),\n computedKey: v('destructive'),\n shellFlag: v('destructive'),\n rustLifetime: v('destructive'),\n rustMacro: v('destructive'),\n rustAttr: v('destructive'),\n yamlAnchor: v('destructive'),\n yamlAlias: v('destructive'),\n cssImportant: v('destructive'),\n regex: v('destructive'),\n regexCharClass: v('destructive'),\n regexQuantifier: v('destructive'),\n regexFlag: v('destructive'),\n deprecated: v('destructive'),\n} as const;\n\nconst settings: ThemeRegistration['settings'] = [\n { settings: { background: palette.bg, foreground: palette.fg } },\n\n // Comments\n {\n scope: [\n 'comment',\n 'punctuation.definition.comment',\n 'string.comment',\n 'comment.block',\n 'comment.line',\n 'comment.block.documentation',\n ],\n settings: { foreground: palette.comment },\n },\n\n // Keywords — control / storage\n {\n scope: [\n 'keyword',\n 'keyword.control',\n 'keyword.control.flow',\n 'keyword.control.conditional',\n 'keyword.control.loop',\n 'keyword.control.trycatch',\n 'keyword.control.switch',\n 'keyword.control.return',\n 'keyword.control.throw',\n 'keyword.control.await',\n 'keyword.control.async',\n 'keyword.other',\n 'storage.type',\n 'storage.modifier',\n ],\n settings: { foreground: palette.keyword, fontStyle: 'bold' },\n },\n\n // import / export / from / as / default\n {\n scope: [\n 'keyword.control.import',\n 'keyword.control.export',\n 'keyword.control.from',\n 'keyword.control.as',\n 'keyword.control.default',\n 'keyword.control.module',\n ],\n settings: { foreground: palette.importExport, fontStyle: 'bold' },\n },\n\n // Operators\n {\n scope: [\n 'keyword.operator',\n 'keyword.operator.assignment',\n 'keyword.operator.assignment.compound',\n 'keyword.operator.comparison',\n 'keyword.operator.logical',\n 'keyword.operator.bitwise',\n 'keyword.operator.arithmetic',\n 'keyword.operator.ternary',\n 'keyword.operator.optional',\n 'keyword.operator.nullcoalescing',\n 'keyword.operator.type',\n 'keyword.operator.expression',\n 'keyword.operator.pipe',\n ],\n settings: { foreground: palette.punctuationLight },\n },\n\n // => ::\n {\n scope: [\n 'keyword.operator.arrow',\n 'keyword.operator.scope-resolution',\n 'punctuation.separator.arrow',\n 'punctuation.definition.arrow',\n ],\n settings: { foreground: palette.arrow },\n },\n\n // ... ?.\n {\n scope: [\n 'keyword.operator.spread',\n 'keyword.operator.rest',\n 'keyword.operator.optional-chaining',\n 'punctuation.accessor.optional',\n ],\n settings: { foreground: palette.spreadRest },\n },\n\n // new delete typeof instanceof void in of\n {\n scope: [\n 'keyword.operator.new',\n 'keyword.operator.delete',\n 'keyword.operator.typeof',\n 'keyword.operator.instanceof',\n 'keyword.operator.void',\n 'keyword.operator.in',\n 'keyword.operator.of',\n ],\n settings: { foreground: palette.keyword, fontStyle: 'bold' },\n },\n\n // this / super / self / cls\n {\n scope: [\n 'variable.language.this',\n 'variable.language.super',\n 'variable.language.self',\n 'variable.language.cls',\n 'variable.language.special',\n ],\n settings: { foreground: palette.thisSuper, fontStyle: 'bold' },\n },\n\n // Strings — single / double\n {\n scope: [\n 'string',\n 'string.quoted.single',\n 'string.quoted.double',\n 'string.quoted.other',\n 'string.interpolated',\n 'string.other',\n ],\n settings: { foreground: palette.string },\n },\n\n // Template literals — backtick body\n {\n scope: ['string.quoted.backtick', 'string.template', 'string.template.ts', 'string.template.js'],\n settings: { foreground: palette.stringTemplate },\n },\n\n // Quote delimiters \" ' `\n {\n scope: [\n 'punctuation.definition.string.begin',\n 'punctuation.definition.string.end',\n 'punctuation.definition.template.begin',\n 'punctuation.definition.template.end',\n 'storage.type.string',\n 'punctuation.definition.string.begin.css',\n 'punctuation.definition.string.end.css',\n ],\n settings: { foreground: palette.stringQuote },\n },\n\n // Template ${ } delimiters\n {\n scope: [\n 'punctuation.definition.template-expression.begin',\n 'punctuation.definition.template-expression.end',\n 'meta.template.expression punctuation.definition.block',\n ],\n settings: { foreground: palette.templateExprDelim, fontStyle: 'bold' },\n },\n\n // RegExp\n {\n scope: ['string.regexp', 'constant.regexp'],\n settings: { foreground: palette.regex },\n },\n {\n scope: [\n 'string.regexp punctuation.definition.character-class',\n 'string.regexp meta.character-class',\n 'string.regexp constant.character.escape',\n ],\n settings: { foreground: palette.regexCharClass },\n },\n {\n scope: ['string.regexp keyword.operator.quantifier', 'keyword.operator.quantifier.regexp'],\n settings: { foreground: palette.regexQuantifier, fontStyle: 'bold' },\n },\n {\n scope: [\n 'string.regexp keyword.other.regex.flags',\n 'punctuation.definition.regex.flags',\n 'keyword.other.regex.flags',\n ],\n settings: { foreground: palette.regexFlag },\n },\n\n // Numbers\n {\n scope: [\n 'constant.numeric',\n 'constant.numeric.integer',\n 'constant.numeric.float',\n 'constant.numeric.hex',\n 'constant.numeric.binary',\n 'constant.numeric.octal',\n 'constant.numeric.decimal',\n 'constant.numeric.scientific',\n 'constant.numeric.css',\n ],\n settings: { foreground: palette.number },\n },\n\n // Boolean / null / undefined / Infinity / NaN\n {\n scope: [\n 'constant.language',\n 'constant.language.boolean',\n 'constant.language.boolean.true',\n 'constant.language.boolean.false',\n 'constant.language.null',\n 'constant.language.undefined',\n 'constant.language.infinity',\n 'constant.language.nan',\n 'constant.language.nil',\n 'constant.language.none',\n 'constant.other.boolean',\n ],\n settings: { foreground: palette.constant },\n },\n\n // Other constants — escapes, symbols\n {\n scope: [\n 'constant.character',\n 'constant.character.escape',\n 'constant.character.unicode',\n 'constant.other',\n 'constant.other.symbol',\n 'constant.other.key',\n 'constant.other.color',\n ],\n settings: { foreground: palette.constant },\n },\n\n // Function declarations\n {\n scope: [\n 'entity.name.function',\n 'meta.function entity.name.function',\n 'meta.method entity.name.function',\n 'meta.function.declaration entity.name.function',\n ],\n settings: { foreground: palette.function },\n },\n\n // Function calls\n {\n scope: [\n 'meta.function-call entity.name.function',\n 'meta.function-call.generic entity.name.function',\n 'support.function',\n 'support.function.dom',\n 'support.function.console',\n ],\n settings: { foreground: palette.functionCall },\n },\n\n // Built-in functions\n {\n scope: [\n 'support.function.builtin',\n 'support.function.string',\n 'support.function.array',\n 'support.function.math',\n 'support.function.date',\n 'support.function.object',\n 'support.function.json',\n 'support.function.promise',\n ],\n settings: { foreground: palette.builtinFunction },\n },\n\n // Types / classes / interfaces\n {\n scope: [\n 'entity.name.type',\n 'entity.name.type.interface',\n 'entity.name.type.alias',\n 'entity.name.type.enum',\n 'entity.name.class',\n 'entity.name.class.forward-decl',\n 'support.type',\n 'support.class',\n 'support.type.object',\n 'support.class.builtin',\n 'entity.other.inherited-class',\n ],\n settings: { foreground: palette.typeClass },\n },\n\n // Type annotations / return types\n {\n scope: [\n 'meta.type.annotation',\n 'meta.return.type',\n 'support.type.primitive',\n 'support.type.builtin',\n 'entity.name.type.primitive',\n 'keyword.type',\n ],\n settings: { foreground: palette.typeAnnotation },\n },\n\n // typeof keyof infer satisfies is\n {\n scope: [\n 'keyword.operator.expression.typeof',\n 'keyword.operator.expression.keyof',\n 'keyword.operator.expression.infer',\n 'keyword.operator.expression.satisfies',\n 'keyword.operator.expression.is',\n 'keyword.operator.type.annotation',\n ],\n settings: { foreground: palette.typeClass, fontStyle: 'bold' },\n },\n\n // Generic type params <T>\n {\n scope: [\n 'entity.name.type.type-parameter',\n 'variable.type.type-parameter',\n 'meta.type.parameters entity.name.type',\n ],\n settings: { foreground: palette.typeParam },\n },\n\n // Enum members\n {\n scope: ['variable.other.enummember', 'constant.other.enum', 'meta.enum variable'],\n settings: { foreground: palette.enumMember },\n },\n\n // Namespaces / modules\n {\n scope: [\n 'entity.name.namespace',\n 'entity.name.module',\n 'entity.name.section',\n 'storage.type.namespace',\n 'storage.type.module',\n ],\n settings: { foreground: palette.namespace },\n },\n\n // Decorators (all languages)\n {\n scope: [\n 'meta.decorator',\n 'meta.decorator punctuation.decorator',\n 'entity.name.function.decorator',\n 'punctuation.decorator',\n 'storage.type.annotation',\n ],\n settings: { foreground: palette.decorator, fontStyle: 'bold' },\n },\n\n // Variables\n {\n scope: [\n 'variable',\n 'variable.other',\n 'variable.other.readwrite',\n 'variable.other.constant',\n 'variable.other.global',\n 'variable.other.local',\n ],\n settings: { foreground: palette.variable },\n },\n\n // Parameters\n {\n scope: [\n 'variable.parameter',\n 'variable.parameter.function',\n 'meta.function.parameters variable.parameter',\n 'meta.arrow.parameters variable.parameter',\n ],\n settings: { foreground: palette.parameter },\n },\n\n // Object properties\n {\n scope: [\n 'variable.other.property',\n 'variable.other.object.property',\n 'support.type.property-name',\n 'meta.object-literal.key',\n 'meta.object.key',\n ],\n settings: { foreground: palette.property },\n },\n\n // JSON keys\n {\n scope: [\n 'support.type.property-name.json',\n 'meta.mapping.key.json string',\n 'meta.structure.dictionary.key.json string',\n ],\n settings: { foreground: palette.jsonKey },\n },\n\n // YAML keys\n {\n scope: ['entity.name.tag.yaml', 'meta.mapping.key.yaml'],\n settings: { foreground: palette.yamlKey, fontStyle: 'bold' },\n },\n\n // Computed keys [key]\n {\n scope: ['meta.computed.key', 'meta.objectliteral meta.template.expression'],\n settings: { foreground: palette.computedKey },\n },\n\n // Commas , semicolons ; dots .\n {\n scope: [\n 'punctuation.terminator',\n 'punctuation.terminator.statement',\n 'punctuation.separator',\n 'punctuation.separator.comma',\n 'punctuation.separator.period',\n 'punctuation.separator.dot',\n 'punctuation.separator.namespace',\n 'punctuation.separator.continuation',\n 'punctuation.accessor',\n 'punctuation.accessor.dot',\n 'meta.delimiter.object.comma',\n 'meta.delimiter.array.comma',\n ],\n settings: { foreground: palette.punctuationLight },\n },\n\n // Colons :\n {\n scope: [\n 'punctuation.separator.key-value',\n 'punctuation.separator.colon',\n 'punctuation.separator.type-annotation',\n 'punctuation.separator.dictionary.key-value',\n 'punctuation.definition.binding-pattern.object',\n 'punctuation.separator.case-statements',\n ],\n settings: { foreground: palette.colon },\n },\n\n // Hash #\n {\n scope: [\n 'punctuation.definition.id.css',\n 'punctuation.definition.entity.css',\n 'punctuation.definition.hash',\n 'entity.other.attribute-name.id.css punctuation',\n 'punctuation.definition.interpolation.begin',\n 'punctuation.definition.interpolation.end',\n 'punctuation.definition.directive',\n 'punctuation.definition.preprocessor',\n 'comment.line.number-sign punctuation.definition.comment',\n ],\n settings: { foreground: palette.hash },\n },\n];\n\nexport const shikiTheme: ThemeRegistration = {\n name: 'shiki',\n settings,\n};\n"],"mappings":"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"}
|
package/dist/utilities/string.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{startCase as
|
|
2
|
-
//# sourceMappingURL=string.js.map
|
|
1
|
+
import{startCase as e}from"lodash-es";function t(t){return e(t)}function n(e,t){return t>1?/y$/.test(e)?e===`Day`?`Days`:e.replace(/y$/,`ies`):/(s|x|z|ch|sh)$/.test(e)?e.concat(`es`):e.concat(`s`):e}export{n as pluralizeTimes,t as toTitleCase};
|
|
2
|
+
//# sourceMappingURL=string.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string.js","sources":["../../lib/utilities/string.ts"],"sourcesContent":["import { startCase } from 'lodash-es';\n\n/**\n *\n */\nexport function toTitleCase(input?: string): string {\n return startCase(input);\n}\n\nexport function pluralizeTimes(resourceName: string, count: number) {\n if (count > 1) {\n if (/y$/.test(resourceName)) {\n if (resourceName === 'Day') return 'Days';\n return resourceName.replace(/y$/, 'ies');\n }\n if (/(s|x|z|ch|sh)$/.test(resourceName)) {\n return resourceName.concat('es');\n }\n return resourceName.concat('s');\n }\n return resourceName;\n}\n"],"
|
|
1
|
+
{"version":3,"file":"string.js","names":[],"sources":["../../lib/utilities/string.ts"],"sourcesContent":["import { startCase } from 'lodash-es';\n\n/**\n *\n */\nexport function toTitleCase(input?: string): string {\n return startCase(input);\n}\n\nexport function pluralizeTimes(resourceName: string, count: number) {\n if (count > 1) {\n if (/y$/.test(resourceName)) {\n if (resourceName === 'Day') return 'Days';\n return resourceName.replace(/y$/, 'ies');\n }\n if (/(s|x|z|ch|sh)$/.test(resourceName)) {\n return resourceName.concat('es');\n }\n return resourceName.concat('s');\n }\n return resourceName;\n}\n"],"mappings":"sCAKA,SAAgB,EAAY,EAAwB,CAChD,OAAO,EAAU,CAAK,CAC1B,CAEA,SAAgB,EAAe,EAAsB,EAAe,CAWhE,OAVI,EAAQ,EACJ,KAAK,KAAK,CAAY,EAClB,IAAiB,MAAc,OAC5B,EAAa,QAAQ,KAAM,KAAK,EAEvC,iBAAiB,KAAK,CAAY,EAC3B,EAAa,OAAO,IAAI,EAE5B,EAAa,OAAO,GAAG,EAE3B,CACX"}
|
package/dist/utilities/theme.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{clsx as
|
|
2
|
-
//# sourceMappingURL=theme.js.map
|
|
1
|
+
import{clsx as e}from"clsx";function t(...t){return e(t)}var n=`--primary-hue`;function r(){return document.documentElement.style.getPropertyValue(n)}function i(e){document.documentElement.style.setProperty(n,e)}export{t as classNames,r as getThemeHue,i as setThemeHue};
|
|
2
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sources":["../../lib/utilities/theme.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\n\n/** Classnames */\nexport function classNames(...inputs: ClassValue[]) {\n return clsx(inputs);\n}\n\n/**\n * This is the variable name representing the primary hue.\n * Referenced in tokens.css\n */\nconst PRIMARY_HUE_PROPERTY = '--primary-hue';\n\n/**\n *\n * @returns\n */\nexport function getThemeHue() {\n return document.documentElement.style.getPropertyValue(PRIMARY_HUE_PROPERTY);\n}\n\n/**\n * @param hue the hue value to set in the document style\n */\nexport function setThemeHue(hue: number) {\n document.documentElement.style.setProperty(\n PRIMARY_HUE_PROPERTY,\n // In this case, it must be a number.\n hue as unknown as string\n );\n}\n"],"
|
|
1
|
+
{"version":3,"file":"theme.js","names":[],"sources":["../../lib/utilities/theme.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\n\n/** Classnames */\nexport function classNames(...inputs: ClassValue[]) {\n return clsx(inputs);\n}\n\n/**\n * This is the variable name representing the primary hue.\n * Referenced in tokens.css\n */\nconst PRIMARY_HUE_PROPERTY = '--primary-hue';\n\n/**\n *\n * @returns\n */\nexport function getThemeHue() {\n return document.documentElement.style.getPropertyValue(PRIMARY_HUE_PROPERTY);\n}\n\n/**\n * @param hue the hue value to set in the document style\n */\nexport function setThemeHue(hue: number) {\n document.documentElement.style.setProperty(\n PRIMARY_HUE_PROPERTY,\n // In this case, it must be a number.\n hue as unknown as string\n );\n}\n"],"mappings":"4BAGA,SAAgB,EAAW,GAAG,EAAsB,CAChD,OAAO,EAAK,CAAM,CACtB,CAMA,IAAM,EAAuB,gBAM7B,SAAgB,GAAc,CAC1B,OAAO,SAAS,gBAAgB,MAAM,iBAAiB,CAAoB,CAC/E,CAKA,SAAgB,EAAY,EAAa,CACrC,SAAS,gBAAgB,MAAM,YAC3B,EAEA,CACJ,CACJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{
|
|
2
|
-
//# sourceMappingURL=use-code-highlight.js.map
|
|
1
|
+
"use client";import{highlightCode as e}from"./highlight-code.js";import{useEffect as t,useState as n}from"react";function r(r){let[i,a]=n(``);return t(()=>{let t=!1;async function n(){let n=await e(r);t||a(n)}return n(),()=>{t=!0}},[r.code,r.lang]),i}export{r as useCodeHighlight};
|
|
2
|
+
//# sourceMappingURL=use-code-highlight.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-code-highlight.js","sources":["../../lib/utilities/use-code-highlight.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\nimport type { HighlightOptions } from './highlight-code';\nimport { highlightCode } from './highlight-code';\n\nexport function useCodeHighlight(options: HighlightOptions) {\n const [html, setHtml] = useState('');\n\n useEffect(() => {\n let cancelled = false;\n\n async function run() {\n const result = await highlightCode(options);\n if (!cancelled) setHtml(result);\n }\n\n void run();\n return () => {\n cancelled = true;\n };\n }, [options.code, options.lang]);\n\n return html;\n}\n"],"
|
|
1
|
+
{"version":3,"file":"use-code-highlight.js","names":[],"sources":["../../lib/utilities/use-code-highlight.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\nimport type { HighlightOptions } from './highlight-code';\nimport { highlightCode } from './highlight-code';\n\nexport function useCodeHighlight(options: HighlightOptions) {\n const [html, setHtml] = useState('');\n\n useEffect(() => {\n let cancelled = false;\n\n async function run() {\n const result = await highlightCode(options);\n if (!cancelled) setHtml(result);\n }\n\n void run();\n return () => {\n cancelled = true;\n };\n }, [options.code, options.lang]);\n\n return html;\n}\n"],"mappings":"iHAMA,SAAgB,EAAiB,EAA2B,CACxD,GAAM,CAAC,EAAM,GAAW,EAAS,EAAE,EAgBnC,OAdA,MAAgB,CACZ,IAAI,EAAY,GAEhB,eAAe,GAAM,CACjB,IAAM,EAAS,MAAM,EAAc,CAAO,EACrC,GAAW,EAAQ,CAAM,CAClC,CAGA,OADA,EAAS,MACI,CACT,EAAY,EAChB,CACJ,EAAG,CAAC,EAAQ,KAAM,EAAQ,IAAI,CAAC,EAExB,CACX"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useSyncExternalStore as
|
|
2
|
-
//# sourceMappingURL=use-mobile.js.map
|
|
1
|
+
import{useSyncExternalStore as e}from"react";var t=`(max-width: 767px)`;function n(e){let n=window.matchMedia(t);return n.addEventListener(`change`,e),()=>n.removeEventListener(`change`,e)}function r(){return window.matchMedia(t).matches}function i(){return!1}function a(){return e(n,r,i)}export{a as useIsMobile};
|
|
2
|
+
//# sourceMappingURL=use-mobile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-mobile.js","sources":["../../lib/utilities/use-mobile.tsx"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\nconst MOBILE_BREAKPOINT = 768;\nconst MEDIA_QUERY = `(max-width: ${MOBILE_BREAKPOINT - 1}px)`;\n\nfunction subscribe(onChange: () => void) {\n const mql = window.matchMedia(MEDIA_QUERY);\n mql.addEventListener('change', onChange);\n return () => mql.removeEventListener('change', onChange);\n}\n\nfunction getSnapshot(): boolean {\n return window.matchMedia(MEDIA_QUERY).matches;\n}\n\nfunction getServerSnapshot(): boolean {\n return false;\n}\n\nexport function useIsMobile() {\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n"],"
|
|
1
|
+
{"version":3,"file":"use-mobile.js","names":[],"sources":["../../lib/utilities/use-mobile.tsx"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\nconst MOBILE_BREAKPOINT = 768;\nconst MEDIA_QUERY = `(max-width: ${MOBILE_BREAKPOINT - 1}px)`;\n\nfunction subscribe(onChange: () => void) {\n const mql = window.matchMedia(MEDIA_QUERY);\n mql.addEventListener('change', onChange);\n return () => mql.removeEventListener('change', onChange);\n}\n\nfunction getSnapshot(): boolean {\n return window.matchMedia(MEDIA_QUERY).matches;\n}\n\nfunction getServerSnapshot(): boolean {\n return false;\n}\n\nexport function useIsMobile() {\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n"],"mappings":"6CAGA,IAAM,EAAc,qBAEpB,SAAS,EAAU,EAAsB,CACrC,IAAM,EAAM,OAAO,WAAW,CAAW,EAEzC,OADA,EAAI,iBAAiB,SAAU,CAAQ,MAC1B,EAAI,oBAAoB,SAAU,CAAQ,CAC3D,CAEA,SAAS,GAAuB,CAC5B,OAAO,OAAO,WAAW,CAAW,CAAC,CAAC,OAC1C,CAEA,SAAS,GAA6B,CAClC,MAAO,EACX,CAEA,SAAgB,GAAc,CAC1B,OAAO,EAAqB,EAAW,EAAa,CAAiB,CACzE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=validators.js.map
|
|
1
|
+
import{Duration as e}from"./duration.js";import{ER_ALREADY_EXISTS as t,ER_DAYS_MAX as n,ER_DAYS_MIN as r,ER_DURATION_MAX as i,ER_DURATION_NONZERO as a,ER_ENTER_EMAIL as o,ER_ENTER_URL as s,ER_MAX_CHARS as c,ER_MIN_CHARS as l,ER_NUMBER_MAX as u,ER_NUMBER_MIN as d,ER_PASSWORD_MIN as f,ER_REQUIRED as p}from"./errors.js";import{formatNumber as m}from"./numbers.js";import{z as h}from"zod";var g=2147483647,_=86400,v=Math.floor(g/_),y=-2147483648,b=Math.ceil(y/_),x=256,S=4096,C=8,w=16,T=64,E=1024,D=16384,O=180,k=6;function A(e,n,r){return({value:i,fieldApi:a})=>{let o=a.form.state.values[e],s=e=>{if(!Array.isArray(o))return!0;let t=e.toLowerCase(),i=null;for(let e=0;e<o.length;e++){let a=o[e]?.[r];if(typeof a==`string`&&a.toLowerCase()===t){if(i===null)i=e;else if(e===n)return!1}}return!0},c=h.string().min(1,{error:p}).refine(e=>s(e),{message:t(i)}).safeParse(i);if(!c.success)return{message:c.error.issues[0]?.message}}}function j(e,t){return h.number().min(e,{error:d(m(e))}).max(t,{error:u(m(t))})}function M(e){let t=e*_,i=v*_;return h.number().min(t,{error:r(m(e))}).max(i,{error:n(m(v))})}function N(t=10){let n=365*t,r=t=>{try{let n=e.parse(t);return{years:n.years??0,months:n.months??0,days:(n.days??0)+(n.weeks??0)*7,hours:n.hours??0,minutes:n.minutes??0,seconds:n.seconds??0}}catch{return{years:0,months:0,days:0,hours:0,minutes:0,seconds:0}}};return h.string().refine(e=>{let t=r(e);return Object.values(t).some(e=>e>0)},{message:a}).refine(e=>{let t=r(e),i=(t.hours*3600+t.minutes*60+t.seconds)/_;return t.years*365+t.months*30+t.days+i<=n},{message:i(t)})}var P=h.string().min(1,{error:p}).max(256,{error:c(256)}),F=P.nullable().optional(),I=h.string().max(256,{error:c(256)}).nullable().optional(),L=h.string().max(S,{error:c(S)}).nullable().optional(),R=h.email({error:o}),z=h.url({error:s}),B=h.string().min(8,{error:f}).max(256,{error:c(256)}),V=h.boolean(),H=j(-1,g),U=j(0,g),W=j(1,g),G=h.number(),K=j(180,g),q=h.array(h.string()),J=q.nullable().optional(),Y=h.string().min(16,{error:l(16)}).max(256,{error:c(256)}).nullable().optional(),X=h.string().min(64,{error:l(64)}).max(E,{error:c(E)}),Z=h.string().min(1,{error:p}).max(D,{error:c(D)}),Q=h.string().min(6,{error:l(6)}).max(6,{error:c(6)}).nullable().optional();export{E as MAX_FINGERPRINT,g as MAX_INT32,v as MAX_INT32_DAYS,S as MAX_NOTES,D as MAX_OFFLINE_REQUEST,x as MAX_SHORT_TEXT,T as MIN_FINGERPRINT,y as MIN_INT32,b as MIN_INT32_DAYS,w as MIN_LICENSE_KEY,C as MIN_PASSWORD,O as MIN_SERVER_SYNC,_ as SECONDS_PER_DAY,k as TWO_FACTOR_LENGTH,A as V_ARRAY_UNIQUE_KEY,V as V_BOOLEAN_REQUIRED,M as V_DAYS,R as V_EMAIL,X as V_FINGERPRINT,H as V_INT32_WITH_UNLIMITED,N as V_ISO8601_DURATION,U as V_NON_NEGATIVE_INT32,L as V_NOTES_OPTIONAL,G as V_NUMBER,j as V_NUMBER_RANGE,Z as V_OFFLINE_REQUEST,Y as V_OPTIONAL_LICENSE_KEY,J as V_OPTIONAL_STRING_ARRAY,B as V_PASSWORD,W as V_POSITIVE_INT32,q as V_REQUIRED_STRING_ARRAY,K as V_SERVER_SYNC_INTERVAL,I as V_STRING_OPTIONAL,F as V_STRING_OPTIONAL_REQUIRED,P as V_STRING_REQUIRED,Q as V_TWO_FACTOR_CODE,z as V_URL};
|
|
2
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sources":["../../lib/utilities/validators.ts"],"sourcesContent":["import type { FieldApi as FieldApiType } from '@tanstack/react-form';\nimport { z } from 'zod';\nimport { Duration } from './duration';\nimport {\n ER_ALREADY_EXISTS,\n ER_DAYS_MAX,\n ER_DAYS_MIN,\n ER_DURATION_MAX,\n ER_DURATION_NONZERO,\n ER_ENTER_EMAIL,\n ER_ENTER_URL,\n ER_MAX_CHARS,\n ER_MIN_CHARS,\n ER_NUMBER_MAX,\n ER_NUMBER_MIN,\n ER_PASSWORD_MIN,\n ER_REQUIRED,\n} from './errors';\nimport { formatNumber } from './numbers';\n\ntype FieldApi = FieldApiType<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>;\n\nexport const MAX_INT32 = 2147483647;\nexport const SECONDS_PER_DAY = 86400;\nexport const MAX_INT32_DAYS = Math.floor(MAX_INT32 / SECONDS_PER_DAY);\nexport const MIN_INT32 = -2147483648;\nexport const MIN_INT32_DAYS = Math.ceil(MIN_INT32 / SECONDS_PER_DAY);\nexport const MAX_SHORT_TEXT = 256;\nexport const MAX_NOTES = 4096;\nexport const MIN_PASSWORD = 8;\nexport const MIN_LICENSE_KEY = 16;\nexport const MIN_FINGERPRINT = 64;\nexport const MAX_FINGERPRINT = 1024;\nexport const MAX_OFFLINE_REQUEST = 16384;\nexport const MIN_SERVER_SYNC = 180;\nexport const TWO_FACTOR_LENGTH = 6;\n\n/**\n * Validates that the value of an array item is unique.\n * @param arrayFieldName - The field name of the array.\n * @param currentIndex - The current index of the array item.\n * @param key - The property name of the item.\n * @returns A validator function.\n */\nexport function V_ARRAY_UNIQUE_KEY(arrayFieldName: string, currentIndex: number, key: string) {\n return ({ value, fieldApi }: { value: any; fieldApi: FieldApi }): { message: string } | undefined => {\n const arrayValue = fieldApi.form.state.values[arrayFieldName];\n const checkUniqueness = (stringValue: string): boolean => {\n if (!Array.isArray(arrayValue)) return true;\n\n const target = stringValue.toLowerCase();\n let firstIndex: number | null = null;\n\n for (let i = 0; i < arrayValue.length; i++) {\n const v = arrayValue[i]?.[key];\n if (typeof v !== 'string') continue;\n\n if (v.toLowerCase() === target) {\n if (firstIndex === null) {\n firstIndex = i; // first match\n } else if (i === currentIndex) {\n // this is the second+ occurrence → invalid\n return false;\n }\n }\n }\n\n // Valid if it's the first match or no match\n return true;\n };\n\n const result = z\n .string()\n .min(1, { error: ER_REQUIRED })\n .refine(value => checkUniqueness(value), {\n message: ER_ALREADY_EXISTS(value),\n })\n .safeParse(value);\n\n if (result.success) {\n return undefined;\n }\n\n const firstIssue = result.error.issues[0];\n return {\n message: firstIssue?.message,\n };\n };\n}\n\n/**\n * Creates a number validator with min/max constraints.\n * @param min - Minimum allowed value.\n * @param max - Maximum allowed value.\n */\nexport function V_NUMBER_RANGE(min: number, max: number) {\n return z\n .number()\n .min(min, { error: ER_NUMBER_MIN(formatNumber(min)) })\n .max(max, { error: ER_NUMBER_MAX(formatNumber(max)) });\n}\n\n/**\n * Creates a validator for day values (stored as seconds).\n * @param min - Minimum allowed days.\n */\nexport function V_DAYS(min: number) {\n const minSeconds = min * SECONDS_PER_DAY;\n const maxSeconds = MAX_INT32_DAYS * SECONDS_PER_DAY;\n\n return z\n .number()\n .min(minSeconds, { error: ER_DAYS_MIN(formatNumber(min)) })\n .max(maxSeconds, { error: ER_DAYS_MAX(formatNumber(MAX_INT32_DAYS)) });\n}\n\n/**\n * Creates a validator for ISO8601 duration strings.\n * @param maxYears - Maximum allowed years (default: 10).\n */\nexport function V_ISO8601_DURATION(maxYears: number = 10) {\n const MAX_DURATION_DAYS = 365 * maxYears;\n\n const getParts = (value: string) => {\n try {\n const parsed = Duration.parse(value);\n return {\n years: parsed.years ?? 0,\n months: parsed.months ?? 0,\n days: (parsed.days ?? 0) + (parsed.weeks ?? 0) * 7,\n hours: parsed.hours ?? 0,\n minutes: parsed.minutes ?? 0,\n seconds: parsed.seconds ?? 0,\n };\n } catch {\n return { years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0 };\n }\n };\n\n return z\n .string()\n .refine(\n value => {\n const parts = getParts(value);\n return Object.values(parts).some(v => v > 0);\n },\n { message: ER_DURATION_NONZERO }\n )\n .refine(\n value => {\n const parts = getParts(value);\n const timeInDays = (parts.hours * 3600 + parts.minutes * 60 + parts.seconds) / SECONDS_PER_DAY;\n return parts.years * 365 + parts.months * 30 + parts.days + timeInDays <= MAX_DURATION_DAYS;\n },\n { message: ER_DURATION_MAX(maxYears) }\n );\n}\n\n/** Required name/short text field (1-256 chars) */\nexport const V_STRING_REQUIRED = z\n .string()\n .min(1, { error: ER_REQUIRED })\n .max(MAX_SHORT_TEXT, { error: ER_MAX_CHARS(MAX_SHORT_TEXT) });\n/** Optional name field for update forms (1-256 chars when provided) */\nexport const V_STRING_OPTIONAL_REQUIRED = V_STRING_REQUIRED.nullable().optional();\n/** Optional short text field (0-256 chars) */\nexport const V_STRING_OPTIONAL = z\n .string()\n .max(MAX_SHORT_TEXT, { error: ER_MAX_CHARS(MAX_SHORT_TEXT) })\n .nullable()\n .optional();\n/** Optional notes/long text field (0-4096 chars) */\nexport const V_NOTES_OPTIONAL = z\n .string()\n .max(MAX_NOTES, { error: ER_MAX_CHARS(MAX_NOTES) })\n .nullable()\n .optional();\n/** Email address validation */\nexport const V_EMAIL = z.email({ error: ER_ENTER_EMAIL });\n/** URL validation */\nexport const V_URL = z.url({ error: ER_ENTER_URL });\n/** Password field (8-256 chars) */\nexport const V_PASSWORD = z\n .string()\n .min(MIN_PASSWORD, { error: ER_PASSWORD_MIN })\n .max(MAX_SHORT_TEXT, { error: ER_MAX_CHARS(MAX_SHORT_TEXT) });\nexport const V_BOOLEAN_REQUIRED = z.boolean();\nexport const V_INT32_WITH_UNLIMITED = V_NUMBER_RANGE(-1, MAX_INT32);\nexport const V_NON_NEGATIVE_INT32 = V_NUMBER_RANGE(0, MAX_INT32);\nexport const V_POSITIVE_INT32 = V_NUMBER_RANGE(1, MAX_INT32);\nexport const V_NUMBER = z.number();\nexport const V_SERVER_SYNC_INTERVAL = V_NUMBER_RANGE(MIN_SERVER_SYNC, MAX_INT32);\nexport const V_REQUIRED_STRING_ARRAY = z.array(z.string());\nexport const V_OPTIONAL_STRING_ARRAY = V_REQUIRED_STRING_ARRAY.nullable().optional();\n\nexport const V_OPTIONAL_LICENSE_KEY = z\n .string()\n .min(MIN_LICENSE_KEY, { error: ER_MIN_CHARS(MIN_LICENSE_KEY) })\n .max(MAX_SHORT_TEXT, { error: ER_MAX_CHARS(MAX_SHORT_TEXT) })\n .nullable()\n .optional();\n\n/** Fingerprint field (64-1024 chars) */\nexport const V_FINGERPRINT = z\n .string()\n .min(MIN_FINGERPRINT, { error: ER_MIN_CHARS(MIN_FINGERPRINT) })\n .max(MAX_FINGERPRINT, { error: ER_MAX_CHARS(MAX_FINGERPRINT) });\n\n/** Offline request (1-16384 chars) */\nexport const V_OFFLINE_REQUEST = z\n .string()\n .min(1, { error: ER_REQUIRED })\n .max(MAX_OFFLINE_REQUEST, { error: ER_MAX_CHARS(MAX_OFFLINE_REQUEST) });\n\n/** 2FA code (exactly 6 chars) */\nexport const V_TWO_FACTOR_CODE = z\n .string()\n .min(TWO_FACTOR_LENGTH, { error: ER_MIN_CHARS(TWO_FACTOR_LENGTH) })\n .max(TWO_FACTOR_LENGTH, { error: ER_MAX_CHARS(TWO_FACTOR_LENGTH) })\n .nullable()\n .optional();\n"],"names":["MAX_INT32","SECONDS_PER_DAY","MAX_INT32_DAYS","MIN_INT32","MIN_INT32_DAYS","MAX_SHORT_TEXT","MAX_NOTES","MIN_PASSWORD","MIN_LICENSE_KEY","MIN_FINGERPRINT","MAX_FINGERPRINT","MAX_OFFLINE_REQUEST","MIN_SERVER_SYNC","TWO_FACTOR_LENGTH","V_ARRAY_UNIQUE_KEY","arrayFieldName","currentIndex","key","value","fieldApi","arrayValue","checkUniqueness","stringValue","target","firstIndex","i","v","result","z","ER_REQUIRED","ER_ALREADY_EXISTS","V_NUMBER_RANGE","min","max","ER_NUMBER_MIN","formatNumber","ER_NUMBER_MAX","V_DAYS","minSeconds","maxSeconds","ER_DAYS_MIN","ER_DAYS_MAX","V_ISO8601_DURATION","maxYears","MAX_DURATION_DAYS","getParts","parsed","Duration","parts","ER_DURATION_NONZERO","timeInDays","ER_DURATION_MAX","V_STRING_REQUIRED","ER_MAX_CHARS","V_STRING_OPTIONAL_REQUIRED","V_STRING_OPTIONAL","V_NOTES_OPTIONAL","V_EMAIL","ER_ENTER_EMAIL","V_URL","ER_ENTER_URL","V_PASSWORD","ER_PASSWORD_MIN","V_BOOLEAN_REQUIRED","V_INT32_WITH_UNLIMITED","V_NON_NEGATIVE_INT32","V_POSITIVE_INT32","V_NUMBER","V_SERVER_SYNC_INTERVAL","V_REQUIRED_STRING_ARRAY","V_OPTIONAL_STRING_ARRAY","V_OPTIONAL_LICENSE_KEY","ER_MIN_CHARS","V_FINGERPRINT","V_OFFLINE_REQUEST","V_TWO_FACTOR_CODE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validators.js","names":[],"sources":["../../lib/utilities/validators.ts"],"sourcesContent":["import type { FieldApi as FieldApiType } from '@tanstack/react-form';\nimport { z } from 'zod';\nimport { Duration } from './duration';\nimport {\n ER_ALREADY_EXISTS,\n ER_DAYS_MAX,\n ER_DAYS_MIN,\n ER_DURATION_MAX,\n ER_DURATION_NONZERO,\n ER_ENTER_EMAIL,\n ER_ENTER_URL,\n ER_MAX_CHARS,\n ER_MIN_CHARS,\n ER_NUMBER_MAX,\n ER_NUMBER_MIN,\n ER_PASSWORD_MIN,\n ER_REQUIRED,\n} from './errors';\nimport { formatNumber } from './numbers';\n\ntype FieldApi = FieldApiType<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>;\n\nexport const MAX_INT32 = 2147483647;\nexport const SECONDS_PER_DAY = 86400;\nexport const MAX_INT32_DAYS = Math.floor(MAX_INT32 / SECONDS_PER_DAY);\nexport const MIN_INT32 = -2147483648;\nexport const MIN_INT32_DAYS = Math.ceil(MIN_INT32 / SECONDS_PER_DAY);\nexport const MAX_SHORT_TEXT = 256;\nexport const MAX_NOTES = 4096;\nexport const MIN_PASSWORD = 8;\nexport const MIN_LICENSE_KEY = 16;\nexport const MIN_FINGERPRINT = 64;\nexport const MAX_FINGERPRINT = 1024;\nexport const MAX_OFFLINE_REQUEST = 16384;\nexport const MIN_SERVER_SYNC = 180;\nexport const TWO_FACTOR_LENGTH = 6;\n\n/**\n * Validates that the value of an array item is unique.\n * @param arrayFieldName - The field name of the array.\n * @param currentIndex - The current index of the array item.\n * @param key - The property name of the item.\n * @returns A validator function.\n */\nexport function V_ARRAY_UNIQUE_KEY(arrayFieldName: string, currentIndex: number, key: string) {\n return ({ value, fieldApi }: { value: any; fieldApi: FieldApi }): { message: string } | undefined => {\n const arrayValue = fieldApi.form.state.values[arrayFieldName];\n const checkUniqueness = (stringValue: string): boolean => {\n if (!Array.isArray(arrayValue)) return true;\n\n const target = stringValue.toLowerCase();\n let firstIndex: number | null = null;\n\n for (let i = 0; i < arrayValue.length; i++) {\n const v = arrayValue[i]?.[key];\n if (typeof v !== 'string') continue;\n\n if (v.toLowerCase() === target) {\n if (firstIndex === null) {\n firstIndex = i; // first match\n } else if (i === currentIndex) {\n // this is the second+ occurrence → invalid\n return false;\n }\n }\n }\n\n // Valid if it's the first match or no match\n return true;\n };\n\n const result = z\n .string()\n .min(1, { error: ER_REQUIRED })\n .refine(value => checkUniqueness(value), {\n message: ER_ALREADY_EXISTS(value),\n })\n .safeParse(value);\n\n if (result.success) {\n return undefined;\n }\n\n const firstIssue = result.error.issues[0];\n return {\n message: firstIssue?.message,\n };\n };\n}\n\n/**\n * Creates a number validator with min/max constraints.\n * @param min - Minimum allowed value.\n * @param max - Maximum allowed value.\n */\nexport function V_NUMBER_RANGE(min: number, max: number) {\n return z\n .number()\n .min(min, { error: ER_NUMBER_MIN(formatNumber(min)) })\n .max(max, { error: ER_NUMBER_MAX(formatNumber(max)) });\n}\n\n/**\n * Creates a validator for day values (stored as seconds).\n * @param min - Minimum allowed days.\n */\nexport function V_DAYS(min: number) {\n const minSeconds = min * SECONDS_PER_DAY;\n const maxSeconds = MAX_INT32_DAYS * SECONDS_PER_DAY;\n\n return z\n .number()\n .min(minSeconds, { error: ER_DAYS_MIN(formatNumber(min)) })\n .max(maxSeconds, { error: ER_DAYS_MAX(formatNumber(MAX_INT32_DAYS)) });\n}\n\n/**\n * Creates a validator for ISO8601 duration strings.\n * @param maxYears - Maximum allowed years (default: 10).\n */\nexport function V_ISO8601_DURATION(maxYears: number = 10) {\n const MAX_DURATION_DAYS = 365 * maxYears;\n\n const getParts = (value: string) => {\n try {\n const parsed = Duration.parse(value);\n return {\n years: parsed.years ?? 0,\n months: parsed.months ?? 0,\n days: (parsed.days ?? 0) + (parsed.weeks ?? 0) * 7,\n hours: parsed.hours ?? 0,\n minutes: parsed.minutes ?? 0,\n seconds: parsed.seconds ?? 0,\n };\n } catch {\n return { years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0 };\n }\n };\n\n return z\n .string()\n .refine(\n value => {\n const parts = getParts(value);\n return Object.values(parts).some(v => v > 0);\n },\n { message: ER_DURATION_NONZERO }\n )\n .refine(\n value => {\n const parts = getParts(value);\n const timeInDays = (parts.hours * 3600 + parts.minutes * 60 + parts.seconds) / SECONDS_PER_DAY;\n return parts.years * 365 + parts.months * 30 + parts.days + timeInDays <= MAX_DURATION_DAYS;\n },\n { message: ER_DURATION_MAX(maxYears) }\n );\n}\n\n/** Required name/short text field (1-256 chars) */\nexport const V_STRING_REQUIRED = z\n .string()\n .min(1, { error: ER_REQUIRED })\n .max(MAX_SHORT_TEXT, { error: ER_MAX_CHARS(MAX_SHORT_TEXT) });\n/** Optional name field for update forms (1-256 chars when provided) */\nexport const V_STRING_OPTIONAL_REQUIRED = V_STRING_REQUIRED.nullable().optional();\n/** Optional short text field (0-256 chars) */\nexport const V_STRING_OPTIONAL = z\n .string()\n .max(MAX_SHORT_TEXT, { error: ER_MAX_CHARS(MAX_SHORT_TEXT) })\n .nullable()\n .optional();\n/** Optional notes/long text field (0-4096 chars) */\nexport const V_NOTES_OPTIONAL = z\n .string()\n .max(MAX_NOTES, { error: ER_MAX_CHARS(MAX_NOTES) })\n .nullable()\n .optional();\n/** Email address validation */\nexport const V_EMAIL = z.email({ error: ER_ENTER_EMAIL });\n/** URL validation */\nexport const V_URL = z.url({ error: ER_ENTER_URL });\n/** Password field (8-256 chars) */\nexport const V_PASSWORD = z\n .string()\n .min(MIN_PASSWORD, { error: ER_PASSWORD_MIN })\n .max(MAX_SHORT_TEXT, { error: ER_MAX_CHARS(MAX_SHORT_TEXT) });\nexport const V_BOOLEAN_REQUIRED = z.boolean();\nexport const V_INT32_WITH_UNLIMITED = V_NUMBER_RANGE(-1, MAX_INT32);\nexport const V_NON_NEGATIVE_INT32 = V_NUMBER_RANGE(0, MAX_INT32);\nexport const V_POSITIVE_INT32 = V_NUMBER_RANGE(1, MAX_INT32);\nexport const V_NUMBER = z.number();\nexport const V_SERVER_SYNC_INTERVAL = V_NUMBER_RANGE(MIN_SERVER_SYNC, MAX_INT32);\nexport const V_REQUIRED_STRING_ARRAY = z.array(z.string());\nexport const V_OPTIONAL_STRING_ARRAY = V_REQUIRED_STRING_ARRAY.nullable().optional();\n\nexport const V_OPTIONAL_LICENSE_KEY = z\n .string()\n .min(MIN_LICENSE_KEY, { error: ER_MIN_CHARS(MIN_LICENSE_KEY) })\n .max(MAX_SHORT_TEXT, { error: ER_MAX_CHARS(MAX_SHORT_TEXT) })\n .nullable()\n .optional();\n\n/** Fingerprint field (64-1024 chars) */\nexport const V_FINGERPRINT = z\n .string()\n .min(MIN_FINGERPRINT, { error: ER_MIN_CHARS(MIN_FINGERPRINT) })\n .max(MAX_FINGERPRINT, { error: ER_MAX_CHARS(MAX_FINGERPRINT) });\n\n/** Offline request (1-16384 chars) */\nexport const V_OFFLINE_REQUEST = z\n .string()\n .min(1, { error: ER_REQUIRED })\n .max(MAX_OFFLINE_REQUEST, { error: ER_MAX_CHARS(MAX_OFFLINE_REQUEST) });\n\n/** 2FA code (exactly 6 chars) */\nexport const V_TWO_FACTOR_CODE = z\n .string()\n .min(TWO_FACTOR_LENGTH, { error: ER_MIN_CHARS(TWO_FACTOR_LENGTH) })\n .max(TWO_FACTOR_LENGTH, { error: ER_MAX_CHARS(TWO_FACTOR_LENGTH) })\n .nullable()\n .optional();\n"],"mappings":"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"}
|