@flanksource/clicky-ui 0.3.5 → 0.3.7
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/README.md +42 -0
- package/dist/ai.cjs +15 -0
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +15 -0
- package/dist/ai.js.map +1 -1
- package/dist/components/DateField.d.ts +1 -1
- package/dist/components/DatePicker.d.ts +1 -1
- package/dist/components/DateTimePicker.d.ts +1 -1
- package/dist/components/FormLookupProvider.cjs +12 -0
- package/dist/components/FormLookupProvider.cjs.map +1 -0
- package/dist/components/FormLookupProvider.d.ts +7 -0
- package/dist/components/FormLookupProvider.d.ts.map +1 -0
- package/dist/components/FormLookupProvider.js +12 -0
- package/dist/components/FormLookupProvider.js.map +1 -0
- package/dist/components/JsonSchemaForm.cjs +2 -2
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.js +1 -1
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/ListMenu.cjs +145 -0
- package/dist/components/ListMenu.cjs.map +1 -0
- package/dist/components/ListMenu.d.ts +54 -0
- package/dist/components/ListMenu.d.ts.map +1 -0
- package/dist/components/ListMenu.js +145 -0
- package/dist/components/ListMenu.js.map +1 -0
- package/dist/components/MdxEditorField.cjs +128 -0
- package/dist/components/MdxEditorField.cjs.map +1 -0
- package/dist/components/MdxEditorField.d.ts +4 -0
- package/dist/components/MdxEditorField.d.ts.map +1 -0
- package/dist/components/MdxEditorField.js +106 -0
- package/dist/components/MdxEditorField.js.map +1 -0
- package/dist/components/MdxEditorToolbar.cjs +76 -0
- package/dist/components/MdxEditorToolbar.cjs.map +1 -0
- package/dist/components/MdxEditorToolbar.d.ts +8 -0
- package/dist/components/MdxEditorToolbar.d.ts.map +1 -0
- package/dist/components/MdxEditorToolbar.js +76 -0
- package/dist/components/MdxEditorToolbar.js.map +1 -0
- package/dist/components/button-variants.d.ts +1 -1
- package/dist/components/button.d.ts +1 -1
- package/dist/components/form-lookup-context.cjs +1 -8
- package/dist/components/form-lookup-context.cjs.map +1 -1
- package/dist/components/form-lookup-context.d.ts +1 -5
- package/dist/components/form-lookup-context.d.ts.map +1 -1
- package/dist/components/form-lookup-context.js +1 -8
- package/dist/components/form-lookup-context.js.map +1 -1
- package/dist/components/jotai-bindings-core.cjs +197 -0
- package/dist/components/jotai-bindings-core.cjs.map +1 -0
- package/dist/components/jotai-bindings-core.d.ts +45 -0
- package/dist/components/jotai-bindings-core.d.ts.map +1 -0
- package/dist/components/jotai-bindings-core.js +197 -0
- package/dist/components/jotai-bindings-core.js.map +1 -0
- package/dist/components/jotai-bindings.cjs +17 -0
- package/dist/components/jotai-bindings.cjs.map +1 -0
- package/dist/components/jotai-bindings.d.ts +4 -0
- package/dist/components/jotai-bindings.d.ts.map +1 -0
- package/dist/components/jotai-bindings.js +17 -0
- package/dist/components/jotai-bindings.js.map +1 -0
- package/dist/components/json-schema-form-fields.cjs +37 -0
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts +6 -0
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +38 -1
- package/dist/components/json-schema-form-fields.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +3 -1
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +4 -2
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +9 -0
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +9 -0
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +4 -1
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/mdx-editor-field-plugins.cjs +124 -0
- package/dist/components/mdx-editor-field-plugins.cjs.map +1 -0
- package/dist/components/mdx-editor-field-plugins.d.ts +6 -0
- package/dist/components/mdx-editor-field-plugins.d.ts.map +1 -0
- package/dist/components/mdx-editor-field-plugins.js +124 -0
- package/dist/components/mdx-editor-field-plugins.js.map +1 -0
- package/dist/components/mdx-editor-options.d.ts +77 -0
- package/dist/components/mdx-editor-options.d.ts.map +1 -0
- package/dist/components/use-list-menu-selection.cjs +77 -0
- package/dist/components/use-list-menu-selection.cjs.map +1 -0
- package/dist/components/use-list-menu-selection.d.ts +40 -0
- package/dist/components/use-list-menu-selection.d.ts.map +1 -0
- package/dist/components/use-list-menu-selection.js +77 -0
- package/dist/components/use-list-menu-selection.js.map +1 -0
- package/dist/components.cjs +10 -1
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +4 -1
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +10 -1
- package/dist/components.js.map +1 -1
- package/dist/data/MarkdownEditor.model.d.ts +1 -1
- package/dist/data/ProgressBars.cjs +194 -0
- package/dist/data/ProgressBars.cjs.map +1 -0
- package/dist/data/ProgressBars.d.ts +85 -0
- package/dist/data/ProgressBars.d.ts.map +1 -0
- package/dist/data/ProgressBars.js +194 -0
- package/dist/data/ProgressBars.js.map +1 -0
- package/dist/data/ProgressBars.model.cjs +27 -0
- package/dist/data/ProgressBars.model.cjs.map +1 -0
- package/dist/data/ProgressBars.model.d.ts +20 -0
- package/dist/data/ProgressBars.model.d.ts.map +1 -0
- package/dist/data/ProgressBars.model.js +27 -0
- package/dist/data/ProgressBars.model.js.map +1 -0
- package/dist/data/PromptBanner.cjs +199 -0
- package/dist/data/PromptBanner.cjs.map +1 -0
- package/dist/data/PromptBanner.d.ts +17 -0
- package/dist/data/PromptBanner.d.ts.map +1 -0
- package/dist/data/PromptBanner.js +199 -0
- package/dist/data/PromptBanner.js.map +1 -0
- package/dist/data/PromptBanner.model.cjs +132 -0
- package/dist/data/PromptBanner.model.cjs.map +1 -0
- package/dist/data/PromptBanner.model.d.ts +23 -0
- package/dist/data/PromptBanner.model.d.ts.map +1 -0
- package/dist/data/PromptBanner.model.js +132 -0
- package/dist/data/PromptBanner.model.js.map +1 -0
- package/dist/data/PromptDialog.cjs +43 -0
- package/dist/data/PromptDialog.cjs.map +1 -0
- package/dist/data/PromptDialog.d.ts +14 -0
- package/dist/data/PromptDialog.d.ts.map +1 -0
- package/dist/data/PromptDialog.js +43 -0
- package/dist/data/PromptDialog.js.map +1 -0
- package/dist/data/TaskManager.cjs +8 -1
- package/dist/data/TaskManager.cjs.map +1 -1
- package/dist/data/TaskManager.d.ts.map +1 -1
- package/dist/data/TaskManager.js +8 -1
- package/dist/data/TaskManager.js.map +1 -1
- package/dist/data/TaskProgress.cjs +15 -2
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +0 -10
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +15 -2
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TimeseriesCoreBars.cjs +19 -173
- package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.d.ts +9 -26
- package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.js +20 -174
- package/dist/data/TimeseriesCoreBars.js.map +1 -1
- package/dist/data/WorkloadCard.model.cjs.map +1 -1
- package/dist/data/WorkloadCard.model.d.ts +2 -2
- package/dist/data/WorkloadCard.model.d.ts.map +1 -1
- package/dist/data/WorkloadCard.model.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +53 -9
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +53 -9
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/SessionViewer.cjs +275 -0
- package/dist/data/ai/SessionViewer.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.d.ts +33 -0
- package/dist/data/ai/SessionViewer.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.fixtures.d.ts +4 -0
- package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.js +275 -0
- package/dist/data/ai/SessionViewer.js.map +1 -0
- package/dist/data/ai/SessionViewer.model.cjs +275 -0
- package/dist/data/ai/SessionViewer.model.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.model.d.ts +87 -0
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.model.js +275 -0
- package/dist/data/ai/SessionViewer.model.js.map +1 -0
- package/dist/data/ai/SessionViewerMenu.cjs +190 -0
- package/dist/data/ai/SessionViewerMenu.cjs.map +1 -0
- package/dist/data/ai/SessionViewerMenu.d.ts +24 -0
- package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -0
- package/dist/data/ai/SessionViewerMenu.js +190 -0
- package/dist/data/ai/SessionViewerMenu.js.map +1 -0
- package/dist/data/ai/ToolPreferences.cjs +232 -39
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +4 -7
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +234 -41
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/index.d.ts +3 -0
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/session-categories.cjs +219 -0
- package/dist/data/ai/session-categories.cjs.map +1 -0
- package/dist/data/ai/session-categories.d.ts +36 -0
- package/dist/data/ai/session-categories.d.ts.map +1 -0
- package/dist/data/ai/session-categories.js +219 -0
- package/dist/data/ai/session-categories.js.map +1 -0
- package/dist/data/chat/clickyOperationsToTools.cjs +89 -3
- package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.d.ts +1 -1
- package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.js +89 -3
- package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +7 -1
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/task-status.cjs +19 -12
- package/dist/data/task-status.cjs.map +1 -1
- package/dist/data/task-status.d.ts +2 -1
- package/dist/data/task-status.d.ts.map +1 -1
- package/dist/data/task-status.js +19 -12
- package/dist/data/task-status.js.map +1 -1
- package/dist/data/test-runner/TestRunner.fixtures.d.ts +11 -4
- package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.cjs.map +1 -1
- package/dist/data/version-info.js +3 -3
- package/dist/data/version-info.js.map +1 -1
- package/dist/data.cjs +11 -2
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +6 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +11 -2
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-prompts.cjs +83 -0
- package/dist/hooks/use-prompts.cjs.map +1 -0
- package/dist/hooks/use-prompts.d.ts +43 -0
- package/dist/hooks/use-prompts.d.ts.map +1 -0
- package/dist/hooks/use-prompts.js +83 -0
- package/dist/hooks/use-prompts.js.map +1 -0
- package/dist/hooks.cjs +3 -0
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.ts +1 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +3 -0
- package/dist/hooks.js.map +1 -1
- package/dist/index.cjs +21 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +21 -3
- package/dist/index.js.map +1 -1
- package/dist/jotai.cjs +9 -0
- package/dist/jotai.cjs.map +1 -0
- package/dist/jotai.d.ts +4 -0
- package/dist/jotai.d.ts.map +1 -0
- package/dist/jotai.js +9 -0
- package/dist/jotai.js.map +1 -0
- package/dist/lib/utils.cjs +18 -1
- package/dist/lib/utils.cjs.map +1 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +18 -1
- package/dist/lib/utils.js.map +1 -1
- package/dist/mdx-editor.cjs +5 -0
- package/dist/mdx-editor.cjs.map +1 -0
- package/dist/mdx-editor.css +2 -0
- package/dist/mdx-editor.d.ts +2 -0
- package/dist/mdx-editor.d.ts.map +1 -0
- package/dist/mdx-editor.js +5 -0
- package/dist/mdx-editor.js.map +1 -0
- package/dist/rpc/apiClient.cjs +1 -1
- package/dist/rpc/apiClient.cjs.map +1 -1
- package/dist/rpc/apiClient.js +1 -1
- package/dist/rpc/apiClient.js.map +1 -1
- package/dist/rpc/surfaceIconMap.cjs +12 -1
- package/dist/rpc/surfaceIconMap.cjs.map +1 -1
- package/dist/rpc/surfaceIconMap.d.ts.map +1 -1
- package/dist/rpc/surfaceIconMap.js +12 -1
- package/dist/rpc/surfaceIconMap.js.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +1 -0
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/styles.css +1 -1
- package/oxlint-plugins/README.md +148 -0
- package/oxlint-plugins/clicky-ui-no-adhoc-overlay.js +88 -0
- package/oxlint-plugins/clicky-ui-prefer-components.js +46 -0
- package/oxlint-plugins/clicky-ui-prefer-icons.js +121 -0
- package/oxlint-plugins/clicky-ui-prefer-tailwind.js +98 -0
- package/oxlint-plugins/clicky-ui-prefer-theme.js +134 -0
- package/oxlint-plugins/clicky-ui-shared.js +132 -0
- package/oxlint-plugins/clicky-ui.js +34 -0
- package/oxlint-plugins/no-iconify-names.js +37 -0
- package/package.json +21 -1
- package/dist/data/TimeseriesCoreBars.model.cjs +0 -27
- package/dist/data/TimeseriesCoreBars.model.cjs.map +0 -1
- package/dist/data/TimeseriesCoreBars.model.d.ts +0 -20
- package/dist/data/TimeseriesCoreBars.model.d.ts.map +0 -1
- package/dist/data/TimeseriesCoreBars.model.js +0 -27
- package/dist/data/TimeseriesCoreBars.model.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-form-resolve.js","sources":["../../src/components/json-schema-form-resolve.ts"],"sourcesContent":["import type {\n EnumDisplay,\n FieldControl,\n FieldOption,\n JsonSchemaObject,\n JsonSchemaProperty,\n LookupDescriptor,\n} from \"./json-schema-form-types\";\n\n// isOpenStringMap reports whether a property is an object whose entries are\n// described by a sub-schema in `additionalProperties` (a typed key/value map) or\n// by `patternProperties` (a per-key-pattern value map). Either makes it an\n// editable key/value control rather than a fixed-property sub-form.\nexport function isOpenStringMap(prop: JsonSchemaProperty): boolean {\n if (!schemaHasType(prop, \"object\")) return false;\n if (typeof prop.additionalProperties === \"object\" && prop.additionalProperties !== null) {\n return true;\n }\n return !!prop.patternProperties && Object.keys(prop.patternProperties).length > 0;\n}\n\n// patternSchemasOf compiles a schema's `patternProperties` into the ordered\n// {pattern, schema} list the string-map control matches keys against.\nfunction patternSchemasOf(prop: JsonSchemaProperty): { pattern: string; schema: JsonSchemaProperty }[] | undefined {\n const pp = prop.patternProperties;\n if (!pp || Object.keys(pp).length === 0) return undefined;\n return Object.entries(pp).map(([pattern, schema]) => ({ pattern, schema }));\n}\n\nfunction schemaHasType(prop: JsonSchemaProperty, type: string): boolean {\n if (Array.isArray(prop.type)) return prop.type.includes(type as never);\n return prop.type === type;\n}\n\nfunction enumOptions(prop: JsonSchemaProperty): FieldOption[] {\n const labels = prop[\"x-enum-labels\"];\n const icons = prop[\"x-enum-icons\"];\n return (prop.enum ?? []).map((v) => {\n const value = String(v);\n const desc = labels?.[value];\n const icon = icons?.[value];\n return {\n value,\n label: typeof desc === \"string\" && desc && desc !== value ? `${desc} (${value})` : value,\n ...(typeof icon === \"string\" && icon ? { icon } : {}),\n };\n });\n}\n\n// enumDisplay resolves how an enum should render: an explicit `x-enum-display`\n// wins; otherwise an enum carrying `x-enum-icons` defaults to the icon grid.\n// Returns undefined to keep the combobox default.\nfunction enumDisplay(prop: JsonSchemaProperty): EnumDisplay | undefined {\n const d = prop[\"x-enum-display\"];\n if (d === \"combobox\" || d === \"radio\" || d === \"grid\") return d;\n const icons = prop[\"x-enum-icons\"];\n if (icons && Object.keys(icons).length > 0) return \"grid\";\n return undefined;\n}\n\n// enumBranch returns the first anyOf/oneOf member carrying a non-empty `enum`,\n// for a union of \"an enum value OR a free-form string\" (e.g. a value-or-token\n// field). It lets such a union render as a dropdown. Returns undefined when no\n// branch enumerates values.\nexport function enumBranch(prop: JsonSchemaProperty): JsonSchemaProperty | undefined {\n for (const branch of [...(prop.anyOf ?? []), ...(prop.oneOf ?? [])]) {\n if (Array.isArray(branch.enum) && branch.enum.length > 0) return branch;\n }\n return undefined;\n}\n\n// lookupDescriptor reads the `x-clicky-lookup` extension into a LookupDescriptor,\n// returning undefined when the keyword is absent or lacks its required url/filter.\nfunction lookupDescriptor(prop: JsonSchemaProperty): LookupDescriptor | undefined {\n const raw = prop[\"x-clicky-lookup\"];\n if (!raw || typeof raw !== \"object\") return undefined;\n const d = raw as Record<string, unknown>;\n if (typeof d.url !== \"string\" || typeof d.filter !== \"string\") return undefined;\n return raw as LookupDescriptor;\n}\n\nexport interface ResolveControlArgs {\n key: string;\n prop: JsonSchemaProperty;\n required: boolean;\n value: unknown;\n onChange: (next: unknown) => void;\n}\n\n// resolveControl infers a base, render-ready FieldControl from a property\n// schema. It keys off schema keywords only — never the field name: ascode/token\n// heuristics are layered on by consumer pre-extensions. The one exception is the\n// standard `format: date`/`date-time` keyword, which is a schema-declared signal\n// (not a name guess) and so drives a date control directly. First match wins.\nexport function resolveControl(args: ResolveControlArgs): FieldControl {\n const { key, prop, required, value, onChange } = args;\n const labelIcon = prop[\"x-icon\"];\n const xLayout = prop[\"x-layout\"];\n const layout =\n xLayout === \"inline\" || xLayout === \"stack\" || xLayout === \"table\" ? xLayout : undefined;\n const keyOptions = keyOptionsFor(prop);\n const base: FieldControl = {\n key,\n kind: \"string\",\n label: typeof prop.title === \"string\" && prop.title ? prop.title : key,\n required,\n schema: prop,\n value,\n onChange,\n ...(prop.readOnly === true ? { readOnly: true } : {}),\n ...(typeof prop.description === \"string\" ? { description: prop.description } : {}),\n ...(labelIcon != null && labelIcon !== \"\" ? { labelIcon: labelIcon as FieldControl[\"labelIcon\"] } : {}),\n };\n\n // An `x-clicky-lookup` field is an async entity-reference picker: options load\n // lazily from another entity's list endpoint. Single-select also allows\n // free-form entry so a typed value outside the option set still commits.\n const lookup = lookupDescriptor(prop);\n if (lookup) {\n return { ...base, kind: \"lookup\", lookup, options: [], allowCustomValue: lookup.multi !== true };\n }\n if (Array.isArray(prop.enum) && prop.enum.length > 0) {\n const display = enumDisplay(prop);\n return { ...base, kind: \"enum\", options: enumOptions(prop), ...(display ? { display } : {}) };\n }\n // A value-or-template union: the enum lives in an anyOf/oneOf branch alongside\n // free-form branches. Render it as a dropdown using that branch's enum; the\n // free-form branches are honoured via a consumer's allowCustomValue pre-ext.\n const branch = enumBranch(prop);\n if (branch) {\n return { ...base, kind: \"enum\", options: enumOptions(branch) };\n }\n // A schema-declared date/date-time string renders as a date control.\n if (prop.format === \"date\" || prop.format === \"date-time\") {\n return { ...base, kind: \"date\", dateFormat: prop.format };\n }\n // A long-form string declares `format: textarea` to render a multi-line box.\n if (prop.format === \"textarea\" && schemaHasType(prop, \"string\")) {\n return { ...base, kind: \"textarea\" };\n }\n if (schemaHasType(prop, \"boolean\")) {\n return { ...base, kind: \"boolean\" };\n }\n if (schemaHasType(prop, \"integer\") || schemaHasType(prop, \"number\")) {\n return {\n ...base,\n kind: \"number\",\n coerceNumber: true,\n // A percent number carries a static \"%\" unit shown inside the input.\n ...(prop.format === \"percent\" ? { unit: \"%\" } : {}),\n ...(typeof prop.minimum === \"number\" ? { minimum: prop.minimum } : {}),\n };\n }\n if (schemaHasType(prop, \"array\")) {\n return {\n ...base,\n kind: \"array\",\n ...(prop.items ? { itemSchema: prop.items } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n // An open map: object whose entries are described by an additionalProperties\n // sub-schema and/or per-key patternProperties. Renders as editable key/value\n // rows (+ any known properties), with the value form resolved per key.\n if (isOpenStringMap(prop)) {\n const addl =\n typeof prop.additionalProperties === \"object\" && prop.additionalProperties !== null\n ? (prop.additionalProperties as JsonSchemaProperty)\n : undefined;\n const patterns = patternSchemasOf(prop);\n // A constrained picker (propertyNames enum) or patternProperties still lets\n // the author ADD keys — the additions are limited to the allowed set, not\n // free-form — so `additionalProperties: false` doesn't disable \"Add field\"\n // in that case. It only closes a plain open map with no key constraints.\n const allowExtraKeys = keyOptions || patterns ? true : prop.additionalProperties !== false;\n return {\n ...base,\n kind: \"string-map\",\n ...(addl ? { valueSchema: addl } : {}),\n ...(patterns ? { valuePatternSchemas: patterns } : {}),\n ...(prop.properties ? { knownProperties: prop.properties } : {}),\n allowExtraKeys,\n ...(keyOptions ? { keyOptions } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n // A structured object: fixed `properties`, not an open map. Renders as a\n // nested sub-form (labels, required, if/then) — recursed into by the renderer.\n if (schemaHasType(prop, \"object\") && prop.properties) {\n return {\n ...base,\n kind: \"object\",\n objectProperties: prop.properties,\n ...(prop.required ? { objectRequired: prop.required } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n // A bare object with neither properties nor an additionalProperties schema:\n // treat as an open string map unless explicitly closed.\n if (schemaHasType(prop, \"object\")) {\n return {\n ...base,\n kind: \"string-map\",\n allowExtraKeys: prop.additionalProperties !== false,\n ...(keyOptions ? { keyOptions } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n return base;\n}\n\n// keyOptionsFor resolves the strict map-key picker options from a map schema's\n// `propertyNames.enum` (e.g. an AsCode-constrained key set). Returns undefined\n// when the keys are unconstrained, so the key stays free-text.\nfunction keyOptionsFor(prop: JsonSchemaProperty): FieldOption[] | undefined {\n const pn = prop.propertyNames as JsonSchemaProperty | undefined;\n if (!pn || !Array.isArray(pn.enum) || pn.enum.length === 0) return undefined;\n return enumOptions(pn);\n}\n\n// isScalarStringItems reports whether an array's item schema is a plain string\n// with no richer shape — the case the array control renders as compact tags.\n// Anything with an enum/const/properties/items/additionalProperties/allOf needs\n// a real per-item control instead.\nexport function isScalarStringItems(items: JsonSchemaProperty | undefined): boolean {\n if (!items) return true; // untyped items default to string tags\n if (items.type !== undefined && !schemaHasType(items, \"string\")) return false;\n return (\n items.enum === undefined &&\n items.const === undefined &&\n items.properties === undefined &&\n items.items === undefined &&\n items.additionalProperties === undefined &&\n items.allOf === undefined\n );\n}\n\n// matchesIf reports whether the `if` sub-schema holds for the current value:\n// every `if.required` key is present AND every `if.properties[k].const` equals\n// value[k].\nexport function matchesIf(\n ifSchema: JsonSchemaProperty | undefined,\n value: Record<string, unknown>,\n): boolean {\n if (!ifSchema) return false;\n for (const k of ifSchema.required ?? []) {\n if (!(k in value)) return false;\n }\n for (const [k, sub] of Object.entries(ifSchema.properties ?? {})) {\n if (\"const\" in sub && value[k] !== sub.const) return false;\n }\n return true;\n}\n\nexport interface EffectiveProperties {\n properties: Record<string, JsonSchemaProperty>;\n required: string[];\n}\n\n// effectiveProperties merges the schema's base `properties` with each `allOf`\n// member's contribution. An `if`/`then` member contributes `then.properties`\n// only when its `if` matches the current value; an unconditional member (e.g.\n// an inlined `$ref` composition, which carries its own `properties` and no\n// `if`) always contributes. Later members win on key collision; required is the\n// union. Pure and idempotent.\nexport function effectiveProperties(\n schema: JsonSchemaObject,\n value: Record<string, unknown>,\n): EffectiveProperties {\n const properties: Record<string, JsonSchemaProperty> = { ...schema.properties };\n const required = new Set(schema.required ?? []);\n for (const clause of schema.allOf ?? []) {\n // Unconditional composition member: merge its own properties/required.\n if (clause.if === undefined && clause.then === undefined) {\n for (const [k, sub] of Object.entries(clause.properties ?? {})) {\n properties[k] = sub;\n }\n for (const k of clause.required ?? []) required.add(k);\n continue;\n }\n if (!matchesIf(clause.if, value)) continue;\n const then = clause.then ?? {};\n for (const [k, sub] of Object.entries(then.properties ?? {})) {\n properties[k] = sub;\n }\n for (const k of then.required ?? []) required.add(k);\n }\n return { properties, required: [...required] };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"json-schema-form-resolve.js","sources":["../../src/components/json-schema-form-resolve.ts"],"sourcesContent":["import type {\n EnumDisplay,\n FieldControl,\n FieldOption,\n JsonSchemaObject,\n JsonSchemaProperty,\n LookupDescriptor,\n} from \"./json-schema-form-types\";\nimport { isPlainObject } from \"./json-schema-form-utils\";\n\n// isOpenStringMap reports whether a property is an object whose entries are\n// described by a sub-schema in `additionalProperties` (a typed key/value map) or\n// by `patternProperties` (a per-key-pattern value map). Either makes it an\n// editable key/value control rather than a fixed-property sub-form.\nexport function isOpenStringMap(prop: JsonSchemaProperty): boolean {\n if (!schemaHasType(prop, \"object\")) return false;\n if (typeof prop.additionalProperties === \"object\" && prop.additionalProperties !== null) {\n return true;\n }\n return !!prop.patternProperties && Object.keys(prop.patternProperties).length > 0;\n}\n\n// patternSchemasOf compiles a schema's `patternProperties` into the ordered\n// {pattern, schema} list the string-map control matches keys against.\nfunction patternSchemasOf(prop: JsonSchemaProperty): { pattern: string; schema: JsonSchemaProperty }[] | undefined {\n const pp = prop.patternProperties;\n if (!pp || Object.keys(pp).length === 0) return undefined;\n return Object.entries(pp).map(([pattern, schema]) => ({ pattern, schema }));\n}\n\nfunction schemaHasType(prop: JsonSchemaProperty, type: string): boolean {\n if (Array.isArray(prop.type)) return prop.type.includes(type as never);\n return prop.type === type;\n}\n\nfunction enumOptions(prop: JsonSchemaProperty): FieldOption[] {\n const labels = prop[\"x-enum-labels\"];\n const icons = prop[\"x-enum-icons\"];\n return (prop.enum ?? []).map((v) => {\n const value = String(v);\n const desc = labels?.[value];\n const icon = icons?.[value];\n return {\n value,\n label: typeof desc === \"string\" && desc && desc !== value ? `${desc} (${value})` : value,\n ...(typeof icon === \"string\" && icon ? { icon } : {}),\n };\n });\n}\n\n// enumDisplay resolves how an enum should render: an explicit `x-enum-display`\n// wins; otherwise an enum carrying `x-enum-icons` defaults to the icon grid.\n// Returns undefined to keep the combobox default.\nfunction enumDisplay(prop: JsonSchemaProperty): EnumDisplay | undefined {\n const d = prop[\"x-enum-display\"];\n if (d === \"combobox\" || d === \"radio\" || d === \"grid\") return d;\n const icons = prop[\"x-enum-icons\"];\n if (icons && Object.keys(icons).length > 0) return \"grid\";\n return undefined;\n}\n\n// enumBranch returns the first anyOf/oneOf member carrying a non-empty `enum`,\n// for a union of \"an enum value OR a free-form string\" (e.g. a value-or-token\n// field). It lets such a union render as a dropdown. Returns undefined when no\n// branch enumerates values.\nexport function enumBranch(prop: JsonSchemaProperty): JsonSchemaProperty | undefined {\n for (const branch of [...(prop.anyOf ?? []), ...(prop.oneOf ?? [])]) {\n if (Array.isArray(branch.enum) && branch.enum.length > 0) return branch;\n }\n return undefined;\n}\n\n// lookupDescriptor reads the `x-clicky-lookup` extension into a LookupDescriptor,\n// returning undefined when the keyword is absent or lacks its required url/filter.\nfunction lookupDescriptor(prop: JsonSchemaProperty): LookupDescriptor | undefined {\n const raw = prop[\"x-clicky-lookup\"];\n if (!raw || typeof raw !== \"object\") return undefined;\n const d = raw as Record<string, unknown>;\n if (typeof d.url !== \"string\" || typeof d.filter !== \"string\") return undefined;\n return raw as LookupDescriptor;\n}\n\nexport interface ResolveControlArgs {\n key: string;\n prop: JsonSchemaProperty;\n required: boolean;\n value: unknown;\n onChange: (next: unknown) => void;\n}\n\n// resolveControl infers a base, render-ready FieldControl from a property\n// schema. It keys off schema keywords only — never the field name: ascode/token\n// heuristics are layered on by consumer pre-extensions. The one exception is the\n// standard `format: date`/`date-time` keyword, which is a schema-declared signal\n// (not a name guess) and so drives a date control directly. First match wins.\nexport function resolveControl(args: ResolveControlArgs): FieldControl {\n const { key, prop, required, value, onChange } = args;\n const labelIcon = prop[\"x-icon\"];\n const xLayout = prop[\"x-layout\"];\n const layout =\n xLayout === \"inline\" || xLayout === \"stack\" || xLayout === \"table\" ? xLayout : undefined;\n const keyOptions = keyOptionsFor(prop);\n const base: FieldControl = {\n key,\n kind: \"string\",\n label: typeof prop.title === \"string\" && prop.title ? prop.title : key,\n required,\n schema: prop,\n value,\n onChange,\n ...(prop.readOnly === true ? { readOnly: true } : {}),\n ...(typeof prop.description === \"string\" ? { description: prop.description } : {}),\n ...(labelIcon != null && labelIcon !== \"\" ? { labelIcon: labelIcon as FieldControl[\"labelIcon\"] } : {}),\n };\n\n // An `x-clicky-lookup` field is an async entity-reference picker: options load\n // lazily from another entity's list endpoint. Single-select also allows\n // free-form entry so a typed value outside the option set still commits.\n const lookup = lookupDescriptor(prop);\n if (lookup) {\n return { ...base, kind: \"lookup\", lookup, options: [], allowCustomValue: lookup.multi !== true };\n }\n if (Array.isArray(prop.enum) && prop.enum.length > 0) {\n const display = enumDisplay(prop);\n return { ...base, kind: \"enum\", options: enumOptions(prop), ...(display ? { display } : {}) };\n }\n // A value-or-template union: the enum lives in an anyOf/oneOf branch alongside\n // free-form branches. Render it as a dropdown using that branch's enum; the\n // free-form branches are honoured via a consumer's allowCustomValue pre-ext.\n const branch = enumBranch(prop);\n if (branch) {\n return { ...base, kind: \"enum\", options: enumOptions(branch) };\n }\n // A schema-declared date/date-time string renders as a date control.\n if (prop.format === \"date\" || prop.format === \"date-time\") {\n return { ...base, kind: \"date\", dateFormat: prop.format };\n }\n // A long-form string declares `format: textarea` to render a multi-line box.\n if (prop.format === \"textarea\" && schemaHasType(prop, \"string\")) {\n return { ...base, kind: \"textarea\" };\n }\n // A markdown string declares `format: md` to render the MDXEditor-backed\n // editor. Plugin toggles live under `x-md-editor` so schema authors can keep\n // the format signal standard-sized and the editor behavior explicit.\n if (prop.format === \"md\" && schemaHasType(prop, \"string\")) {\n const markdownOptions = prop[\"x-md-editor\"];\n return {\n ...base,\n kind: \"markdown\",\n ...(isPlainObject(markdownOptions) ? { markdownOptions } : {}),\n };\n }\n if (schemaHasType(prop, \"boolean\")) {\n return { ...base, kind: \"boolean\" };\n }\n if (schemaHasType(prop, \"integer\") || schemaHasType(prop, \"number\")) {\n return {\n ...base,\n kind: \"number\",\n coerceNumber: true,\n // A percent number carries a static \"%\" unit shown inside the input.\n ...(prop.format === \"percent\" ? { unit: \"%\" } : {}),\n ...(typeof prop.minimum === \"number\" ? { minimum: prop.minimum } : {}),\n };\n }\n if (schemaHasType(prop, \"array\")) {\n return {\n ...base,\n kind: \"array\",\n ...(prop.items ? { itemSchema: prop.items } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n // An open map: object whose entries are described by an additionalProperties\n // sub-schema and/or per-key patternProperties. Renders as editable key/value\n // rows (+ any known properties), with the value form resolved per key.\n if (isOpenStringMap(prop)) {\n const addl =\n typeof prop.additionalProperties === \"object\" && prop.additionalProperties !== null\n ? (prop.additionalProperties as JsonSchemaProperty)\n : undefined;\n const patterns = patternSchemasOf(prop);\n // A constrained picker (propertyNames enum) or patternProperties still lets\n // the author ADD keys — the additions are limited to the allowed set, not\n // free-form — so `additionalProperties: false` doesn't disable \"Add field\"\n // in that case. It only closes a plain open map with no key constraints.\n const allowExtraKeys = keyOptions || patterns ? true : prop.additionalProperties !== false;\n return {\n ...base,\n kind: \"string-map\",\n ...(addl ? { valueSchema: addl } : {}),\n ...(patterns ? { valuePatternSchemas: patterns } : {}),\n ...(prop.properties ? { knownProperties: prop.properties } : {}),\n allowExtraKeys,\n ...(keyOptions ? { keyOptions } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n // A structured object: fixed `properties`, not an open map. Renders as a\n // nested sub-form (labels, required, if/then) — recursed into by the renderer.\n if (schemaHasType(prop, \"object\") && prop.properties) {\n return {\n ...base,\n kind: \"object\",\n objectProperties: prop.properties,\n ...(prop.required ? { objectRequired: prop.required } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n // A bare object with neither properties nor an additionalProperties schema:\n // treat as an open string map unless explicitly closed.\n if (schemaHasType(prop, \"object\")) {\n return {\n ...base,\n kind: \"string-map\",\n allowExtraKeys: prop.additionalProperties !== false,\n ...(keyOptions ? { keyOptions } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n return base;\n}\n\n// keyOptionsFor resolves the strict map-key picker options from a map schema's\n// `propertyNames.enum` (e.g. an AsCode-constrained key set). Returns undefined\n// when the keys are unconstrained, so the key stays free-text.\nfunction keyOptionsFor(prop: JsonSchemaProperty): FieldOption[] | undefined {\n const pn = prop.propertyNames as JsonSchemaProperty | undefined;\n if (!pn || !Array.isArray(pn.enum) || pn.enum.length === 0) return undefined;\n return enumOptions(pn);\n}\n\n// isScalarStringItems reports whether an array's item schema is a plain string\n// with no richer shape — the case the array control renders as compact tags.\n// Anything with an enum/const/properties/items/additionalProperties/allOf needs\n// a real per-item control instead.\nexport function isScalarStringItems(items: JsonSchemaProperty | undefined): boolean {\n if (!items) return true; // untyped items default to string tags\n if (items.type !== undefined && !schemaHasType(items, \"string\")) return false;\n return (\n items.enum === undefined &&\n items.const === undefined &&\n items.properties === undefined &&\n items.items === undefined &&\n items.additionalProperties === undefined &&\n items.allOf === undefined\n );\n}\n\n// matchesIf reports whether the `if` sub-schema holds for the current value:\n// every `if.required` key is present AND every `if.properties[k].const` equals\n// value[k].\nexport function matchesIf(\n ifSchema: JsonSchemaProperty | undefined,\n value: Record<string, unknown>,\n): boolean {\n if (!ifSchema) return false;\n for (const k of ifSchema.required ?? []) {\n if (!(k in value)) return false;\n }\n for (const [k, sub] of Object.entries(ifSchema.properties ?? {})) {\n if (\"const\" in sub && value[k] !== sub.const) return false;\n }\n return true;\n}\n\nexport interface EffectiveProperties {\n properties: Record<string, JsonSchemaProperty>;\n required: string[];\n}\n\n// effectiveProperties merges the schema's base `properties` with each `allOf`\n// member's contribution. An `if`/`then` member contributes `then.properties`\n// only when its `if` matches the current value; an unconditional member (e.g.\n// an inlined `$ref` composition, which carries its own `properties` and no\n// `if`) always contributes. Later members win on key collision; required is the\n// union. Pure and idempotent.\nexport function effectiveProperties(\n schema: JsonSchemaObject,\n value: Record<string, unknown>,\n): EffectiveProperties {\n const properties: Record<string, JsonSchemaProperty> = { ...schema.properties };\n const required = new Set(schema.required ?? []);\n for (const clause of schema.allOf ?? []) {\n // Unconditional composition member: merge its own properties/required.\n if (clause.if === undefined && clause.then === undefined) {\n for (const [k, sub] of Object.entries(clause.properties ?? {})) {\n properties[k] = sub;\n }\n for (const k of clause.required ?? []) required.add(k);\n continue;\n }\n if (!matchesIf(clause.if, value)) continue;\n const then = clause.then ?? {};\n for (const [k, sub] of Object.entries(then.properties ?? {})) {\n properties[k] = sub;\n }\n for (const k of then.required ?? []) required.add(k);\n }\n return { properties, required: [...required] };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { ReactNode } from 'react';
|
|
|
2
2
|
import { LabelIconSpec } from '../data/Icon';
|
|
3
3
|
import { FormSize } from './json-schema-form-size';
|
|
4
4
|
import { SortMode } from './json-schema-form-preferences';
|
|
5
|
+
import { MdxEditorPluginOptions } from './mdx-editor-options';
|
|
5
6
|
export interface JsonSchemaProperty {
|
|
6
7
|
type?: JsonSchemaType | JsonSchemaType[];
|
|
7
8
|
description?: string;
|
|
@@ -29,6 +30,7 @@ export interface JsonSchemaProperty {
|
|
|
29
30
|
"x-enum-icons"?: Record<string, string>;
|
|
30
31
|
"x-enum-display"?: EnumDisplay;
|
|
31
32
|
"x-clicky-order"?: number;
|
|
33
|
+
"x-md-editor"?: MdxEditorPluginOptions;
|
|
32
34
|
[key: string]: unknown;
|
|
33
35
|
}
|
|
34
36
|
export type JsonSchemaType = "object" | "array" | "string" | "integer" | "number" | "boolean" | "null";
|
|
@@ -48,7 +50,7 @@ export interface JsonSchemaObject extends JsonSchemaProperty {
|
|
|
48
50
|
allOf?: JsonSchemaConditional[];
|
|
49
51
|
"x-discriminator"?: string;
|
|
50
52
|
}
|
|
51
|
-
export type FieldControlKind = "string" | "number" | "boolean" | "enum" | "lookup" | "date" | "string-map" | "array" | "object" | "textarea" | "display" | "link";
|
|
53
|
+
export type FieldControlKind = "string" | "number" | "boolean" | "enum" | "lookup" | "date" | "string-map" | "array" | "object" | "textarea" | "markdown" | "display" | "link";
|
|
52
54
|
export type DisplayVariant = "heading" | "text" | "divider" | "spacer";
|
|
53
55
|
export type EnumDisplay = "combobox" | "radio" | "grid";
|
|
54
56
|
export interface FieldControl {
|
|
@@ -77,6 +79,7 @@ export interface FieldControl {
|
|
|
77
79
|
displayVariant?: DisplayVariant;
|
|
78
80
|
href?: string;
|
|
79
81
|
dateFormat?: "date" | "date-time";
|
|
82
|
+
markdownOptions?: MdxEditorPluginOptions;
|
|
80
83
|
valueSchema?: JsonSchemaProperty;
|
|
81
84
|
valuePatternSchemas?: {
|
|
82
85
|
pattern: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-form-types.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"json-schema-form-types.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
const MdxEditorToolbar = require("./MdxEditorToolbar.cjs");
|
|
5
|
+
const DEFAULT_CODE_BLOCK_LANGUAGES = {
|
|
6
|
+
bash: "Bash",
|
|
7
|
+
css: "CSS",
|
|
8
|
+
go: "Go",
|
|
9
|
+
html: "HTML",
|
|
10
|
+
javascript: "JavaScript",
|
|
11
|
+
js: "JavaScript",
|
|
12
|
+
json: "JSON",
|
|
13
|
+
jsx: "JSX",
|
|
14
|
+
markdown: "Markdown",
|
|
15
|
+
python: "Python",
|
|
16
|
+
shell: "Shell",
|
|
17
|
+
sql: "SQL",
|
|
18
|
+
ts: "TypeScript",
|
|
19
|
+
tsx: "TSX",
|
|
20
|
+
typescript: "TypeScript",
|
|
21
|
+
yaml: "YAML"
|
|
22
|
+
};
|
|
23
|
+
function isEnabled(value, defaultValue = true) {
|
|
24
|
+
return value === void 0 ? defaultValue : value !== false;
|
|
25
|
+
}
|
|
26
|
+
function optionObject(value) {
|
|
27
|
+
return typeof value === "object" && value !== null ? value : void 0;
|
|
28
|
+
}
|
|
29
|
+
function diffModeOptions(diffMode) {
|
|
30
|
+
if (!diffMode) return void 0;
|
|
31
|
+
if (diffMode === true) return {};
|
|
32
|
+
if (typeof diffMode === "string") return { viewMode: diffMode };
|
|
33
|
+
return diffMode;
|
|
34
|
+
}
|
|
35
|
+
function createToolbar(mdx, options) {
|
|
36
|
+
return () => react.createElement(MdxEditorToolbar.MdxEditorToolbar, { mdx, options });
|
|
37
|
+
}
|
|
38
|
+
function createMdxEditorPlugins(mdx, options = {}) {
|
|
39
|
+
var _a;
|
|
40
|
+
const plugins = [];
|
|
41
|
+
if (isEnabled(options.toolbar)) {
|
|
42
|
+
const toolbar = optionObject(options.toolbar);
|
|
43
|
+
plugins.push(
|
|
44
|
+
mdx.toolbarPlugin({
|
|
45
|
+
toolbarContents: createToolbar(mdx, options),
|
|
46
|
+
...(toolbar == null ? void 0 : toolbar.className) ? { toolbarClassName: toolbar.className } : {},
|
|
47
|
+
...(toolbar == null ? void 0 : toolbar.position) ? { toolbarPosition: toolbar.position } : {}
|
|
48
|
+
})
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
if (isEnabled(options.headings)) {
|
|
52
|
+
const headings = optionObject(options.headings);
|
|
53
|
+
plugins.push(mdx.headingsPlugin(headings));
|
|
54
|
+
}
|
|
55
|
+
if (isEnabled(options.lists)) plugins.push(mdx.listsPlugin());
|
|
56
|
+
if (isEnabled(options.quote)) plugins.push(mdx.quotePlugin());
|
|
57
|
+
if (isEnabled(options.links)) {
|
|
58
|
+
const links = optionObject(options.links);
|
|
59
|
+
plugins.push(
|
|
60
|
+
mdx.linkPlugin((links == null ? void 0 : links.disableAutoLink) !== void 0 ? { disableAutoLink: links.disableAutoLink } : void 0),
|
|
61
|
+
mdx.linkDialogPlugin({
|
|
62
|
+
...(links == null ? void 0 : links.linkAutocompleteSuggestions) ? { linkAutocompleteSuggestions: links.linkAutocompleteSuggestions } : {},
|
|
63
|
+
...(links == null ? void 0 : links.showLinkTitleField) !== void 0 ? { showLinkTitleField: links.showLinkTitleField } : {}
|
|
64
|
+
})
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
if (isEnabled(options.tables)) plugins.push(mdx.tablePlugin());
|
|
68
|
+
if (isEnabled(options.thematicBreak)) plugins.push(mdx.thematicBreakPlugin());
|
|
69
|
+
if (isEnabled(options.codeBlocks)) {
|
|
70
|
+
const codeBlocks = optionObject(options.codeBlocks);
|
|
71
|
+
plugins.push(
|
|
72
|
+
mdx.codeBlockPlugin({
|
|
73
|
+
defaultCodeBlockLanguage: (codeBlocks == null ? void 0 : codeBlocks.defaultLanguage) ?? "txt"
|
|
74
|
+
})
|
|
75
|
+
);
|
|
76
|
+
if (isEnabled(options.codeMirror)) {
|
|
77
|
+
const codeMirror = optionObject(options.codeMirror);
|
|
78
|
+
plugins.push(
|
|
79
|
+
mdx.codeMirrorPlugin({
|
|
80
|
+
codeBlockLanguages: (codeMirror == null ? void 0 : codeMirror.languages) ?? DEFAULT_CODE_BLOCK_LANGUAGES,
|
|
81
|
+
...(codeMirror == null ? void 0 : codeMirror.autoLoadLanguageSupport) !== void 0 ? { autoLoadLanguageSupport: codeMirror.autoLoadLanguageSupport } : {}
|
|
82
|
+
})
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (isEnabled(options.frontmatter)) plugins.push(mdx.frontmatterPlugin());
|
|
87
|
+
if (isEnabled(options.admonitions)) {
|
|
88
|
+
const admonitions = optionObject(options.admonitions);
|
|
89
|
+
plugins.push(
|
|
90
|
+
mdx.directivesPlugin({
|
|
91
|
+
directiveDescriptors: [mdx.AdmonitionDirectiveDescriptor],
|
|
92
|
+
escapeUnknownTextDirectives: (admonitions == null ? void 0 : admonitions.escapeUnknownTextDirectives) ?? true
|
|
93
|
+
})
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
if (isEnabled(options.images)) {
|
|
97
|
+
const images = optionObject(options.images);
|
|
98
|
+
plugins.push(
|
|
99
|
+
mdx.imagePlugin({
|
|
100
|
+
...(images == null ? void 0 : images.imageUploadHandler) ? { imageUploadHandler: images.imageUploadHandler } : {},
|
|
101
|
+
...(images == null ? void 0 : images.imageAutocompleteSuggestions) ? { imageAutocompleteSuggestions: images.imageAutocompleteSuggestions } : {},
|
|
102
|
+
...(images == null ? void 0 : images.imagePreviewHandler) ? { imagePreviewHandler: images.imagePreviewHandler } : {},
|
|
103
|
+
...(images == null ? void 0 : images.disableImageResize) !== void 0 ? { disableImageResize: images.disableImageResize } : {},
|
|
104
|
+
...(images == null ? void 0 : images.disableImageSettingsButton) !== void 0 ? { disableImageSettingsButton: images.disableImageSettingsButton } : {},
|
|
105
|
+
...(images == null ? void 0 : images.allowSetImageDimensions) !== void 0 ? { allowSetImageDimensions: images.allowSetImageDimensions } : {}
|
|
106
|
+
})
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
if (options.diffMode) {
|
|
110
|
+
const diff = diffModeOptions(options.diffMode);
|
|
111
|
+
plugins.push(
|
|
112
|
+
mdx.diffSourcePlugin({
|
|
113
|
+
...(diff == null ? void 0 : diff.viewMode) ? { viewMode: diff.viewMode } : {},
|
|
114
|
+
...(diff == null ? void 0 : diff.diffMarkdown) !== void 0 ? { diffMarkdown: diff.diffMarkdown } : {},
|
|
115
|
+
...(diff == null ? void 0 : diff.readOnlyDiff) !== void 0 ? { readOnlyDiff: diff.readOnlyDiff } : {}
|
|
116
|
+
})
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
if (isEnabled(options.markdownShortcuts)) plugins.push(mdx.markdownShortcutPlugin());
|
|
120
|
+
if ((_a = options.plugins) == null ? void 0 : _a.length) plugins.push(...options.plugins);
|
|
121
|
+
return plugins;
|
|
122
|
+
}
|
|
123
|
+
exports.createMdxEditorPlugins = createMdxEditorPlugins;
|
|
124
|
+
//# sourceMappingURL=mdx-editor-field-plugins.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdx-editor-field-plugins.cjs","sources":["../../src/components/mdx-editor-field-plugins.tsx"],"sourcesContent":["import { createElement } from \"react\";\nimport type { MdxEditorDiffModeOptions, MdxEditorPluginOptions } from \"./mdx-editor-options\";\nimport { MdxEditorToolbar } from \"./MdxEditorToolbar\";\n\ntype MdxEditorModule = typeof import(\"@mdxeditor/editor\");\ntype RealmPlugin = ReturnType<MdxEditorModule[\"headingsPlugin\"]>;\n\nconst DEFAULT_CODE_BLOCK_LANGUAGES: Record<string, string> = {\n bash: \"Bash\",\n css: \"CSS\",\n go: \"Go\",\n html: \"HTML\",\n javascript: \"JavaScript\",\n js: \"JavaScript\",\n json: \"JSON\",\n jsx: \"JSX\",\n markdown: \"Markdown\",\n python: \"Python\",\n shell: \"Shell\",\n sql: \"SQL\",\n ts: \"TypeScript\",\n tsx: \"TSX\",\n typescript: \"TypeScript\",\n yaml: \"YAML\",\n};\n\nfunction isEnabled<T extends object>(value: boolean | T | undefined, defaultValue = true): boolean {\n return value === undefined ? defaultValue : value !== false;\n}\n\nfunction optionObject<T extends object>(value: boolean | T | undefined): T | undefined {\n return typeof value === \"object\" && value !== null ? value : undefined;\n}\n\nfunction diffModeOptions(diffMode: MdxEditorPluginOptions[\"diffMode\"]): MdxEditorDiffModeOptions | undefined {\n if (!diffMode) return undefined;\n if (diffMode === true) return {};\n if (typeof diffMode === \"string\") return { viewMode: diffMode };\n return diffMode;\n}\n\nfunction createToolbar(mdx: MdxEditorModule, options: MdxEditorPluginOptions) {\n return () => createElement(MdxEditorToolbar, { mdx, options });\n}\n\nexport function createMdxEditorPlugins(\n mdx: MdxEditorModule,\n options: MdxEditorPluginOptions = {},\n): RealmPlugin[] {\n const plugins: RealmPlugin[] = [];\n if (isEnabled(options.toolbar)) {\n const toolbar = optionObject(options.toolbar);\n plugins.push(\n mdx.toolbarPlugin({\n toolbarContents: createToolbar(mdx, options),\n ...(toolbar?.className ? { toolbarClassName: toolbar.className } : {}),\n ...(toolbar?.position ? { toolbarPosition: toolbar.position } : {}),\n }),\n );\n }\n if (isEnabled(options.headings)) {\n const headings = optionObject(options.headings);\n plugins.push(mdx.headingsPlugin(headings));\n }\n if (isEnabled(options.lists)) plugins.push(mdx.listsPlugin());\n if (isEnabled(options.quote)) plugins.push(mdx.quotePlugin());\n if (isEnabled(options.links)) {\n const links = optionObject(options.links);\n plugins.push(\n mdx.linkPlugin(links?.disableAutoLink !== undefined ? { disableAutoLink: links.disableAutoLink } : undefined),\n mdx.linkDialogPlugin({\n ...(links?.linkAutocompleteSuggestions ? { linkAutocompleteSuggestions: links.linkAutocompleteSuggestions } : {}),\n ...(links?.showLinkTitleField !== undefined ? { showLinkTitleField: links.showLinkTitleField } : {}),\n }),\n );\n }\n if (isEnabled(options.tables)) plugins.push(mdx.tablePlugin());\n if (isEnabled(options.thematicBreak)) plugins.push(mdx.thematicBreakPlugin());\n if (isEnabled(options.codeBlocks)) {\n const codeBlocks = optionObject(options.codeBlocks);\n plugins.push(\n mdx.codeBlockPlugin({\n defaultCodeBlockLanguage: codeBlocks?.defaultLanguage ?? \"txt\",\n }),\n );\n if (isEnabled(options.codeMirror)) {\n const codeMirror = optionObject(options.codeMirror);\n plugins.push(\n mdx.codeMirrorPlugin({\n codeBlockLanguages: codeMirror?.languages ?? DEFAULT_CODE_BLOCK_LANGUAGES,\n ...(codeMirror?.autoLoadLanguageSupport !== undefined\n ? { autoLoadLanguageSupport: codeMirror.autoLoadLanguageSupport }\n : {}),\n }),\n );\n }\n }\n if (isEnabled(options.frontmatter)) plugins.push(mdx.frontmatterPlugin());\n if (isEnabled(options.admonitions)) {\n const admonitions = optionObject(options.admonitions);\n plugins.push(\n mdx.directivesPlugin({\n directiveDescriptors: [mdx.AdmonitionDirectiveDescriptor],\n escapeUnknownTextDirectives: admonitions?.escapeUnknownTextDirectives ?? true,\n }),\n );\n }\n if (isEnabled(options.images)) {\n const images = optionObject(options.images);\n plugins.push(\n mdx.imagePlugin({\n ...(images?.imageUploadHandler ? { imageUploadHandler: images.imageUploadHandler } : {}),\n ...(images?.imageAutocompleteSuggestions ? { imageAutocompleteSuggestions: images.imageAutocompleteSuggestions } : {}),\n ...(images?.imagePreviewHandler ? { imagePreviewHandler: images.imagePreviewHandler } : {}),\n ...(images?.disableImageResize !== undefined ? { disableImageResize: images.disableImageResize } : {}),\n ...(images?.disableImageSettingsButton !== undefined\n ? { disableImageSettingsButton: images.disableImageSettingsButton }\n : {}),\n ...(images?.allowSetImageDimensions !== undefined ? { allowSetImageDimensions: images.allowSetImageDimensions } : {}),\n }),\n );\n }\n if (options.diffMode) {\n const diff = diffModeOptions(options.diffMode);\n plugins.push(\n mdx.diffSourcePlugin({\n ...(diff?.viewMode ? { viewMode: diff.viewMode } : {}),\n ...(diff?.diffMarkdown !== undefined ? { diffMarkdown: diff.diffMarkdown } : {}),\n ...(diff?.readOnlyDiff !== undefined ? { readOnlyDiff: diff.readOnlyDiff } : {}),\n }),\n );\n }\n if (isEnabled(options.markdownShortcuts)) plugins.push(mdx.markdownShortcutPlugin());\n if (options.plugins?.length) plugins.push(...(options.plugins as RealmPlugin[]));\n return plugins;\n}\n"],"names":["createElement","MdxEditorToolbar"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MdxEditorPluginOptions } from './mdx-editor-options';
|
|
2
|
+
type MdxEditorModule = typeof import("@mdxeditor/editor");
|
|
3
|
+
type RealmPlugin = ReturnType<MdxEditorModule["headingsPlugin"]>;
|
|
4
|
+
export declare function createMdxEditorPlugins(mdx: MdxEditorModule, options?: MdxEditorPluginOptions): RealmPlugin[];
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=mdx-editor-field-plugins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdx-editor-field-plugins.d.ts","sourceRoot":"","sources":["../../src/components/mdx-editor-field-plugins.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA4B,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAG7F,KAAK,eAAe,GAAG,cAAc,mBAAmB,CAAC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAwCjE,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE,sBAA2B,GACnC,WAAW,EAAE,CAuFf"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { createElement } from "react";
|
|
2
|
+
import { MdxEditorToolbar } from "./MdxEditorToolbar.js";
|
|
3
|
+
const DEFAULT_CODE_BLOCK_LANGUAGES = {
|
|
4
|
+
bash: "Bash",
|
|
5
|
+
css: "CSS",
|
|
6
|
+
go: "Go",
|
|
7
|
+
html: "HTML",
|
|
8
|
+
javascript: "JavaScript",
|
|
9
|
+
js: "JavaScript",
|
|
10
|
+
json: "JSON",
|
|
11
|
+
jsx: "JSX",
|
|
12
|
+
markdown: "Markdown",
|
|
13
|
+
python: "Python",
|
|
14
|
+
shell: "Shell",
|
|
15
|
+
sql: "SQL",
|
|
16
|
+
ts: "TypeScript",
|
|
17
|
+
tsx: "TSX",
|
|
18
|
+
typescript: "TypeScript",
|
|
19
|
+
yaml: "YAML"
|
|
20
|
+
};
|
|
21
|
+
function isEnabled(value, defaultValue = true) {
|
|
22
|
+
return value === void 0 ? defaultValue : value !== false;
|
|
23
|
+
}
|
|
24
|
+
function optionObject(value) {
|
|
25
|
+
return typeof value === "object" && value !== null ? value : void 0;
|
|
26
|
+
}
|
|
27
|
+
function diffModeOptions(diffMode) {
|
|
28
|
+
if (!diffMode) return void 0;
|
|
29
|
+
if (diffMode === true) return {};
|
|
30
|
+
if (typeof diffMode === "string") return { viewMode: diffMode };
|
|
31
|
+
return diffMode;
|
|
32
|
+
}
|
|
33
|
+
function createToolbar(mdx, options) {
|
|
34
|
+
return () => createElement(MdxEditorToolbar, { mdx, options });
|
|
35
|
+
}
|
|
36
|
+
function createMdxEditorPlugins(mdx, options = {}) {
|
|
37
|
+
var _a;
|
|
38
|
+
const plugins = [];
|
|
39
|
+
if (isEnabled(options.toolbar)) {
|
|
40
|
+
const toolbar = optionObject(options.toolbar);
|
|
41
|
+
plugins.push(
|
|
42
|
+
mdx.toolbarPlugin({
|
|
43
|
+
toolbarContents: createToolbar(mdx, options),
|
|
44
|
+
...(toolbar == null ? void 0 : toolbar.className) ? { toolbarClassName: toolbar.className } : {},
|
|
45
|
+
...(toolbar == null ? void 0 : toolbar.position) ? { toolbarPosition: toolbar.position } : {}
|
|
46
|
+
})
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
if (isEnabled(options.headings)) {
|
|
50
|
+
const headings = optionObject(options.headings);
|
|
51
|
+
plugins.push(mdx.headingsPlugin(headings));
|
|
52
|
+
}
|
|
53
|
+
if (isEnabled(options.lists)) plugins.push(mdx.listsPlugin());
|
|
54
|
+
if (isEnabled(options.quote)) plugins.push(mdx.quotePlugin());
|
|
55
|
+
if (isEnabled(options.links)) {
|
|
56
|
+
const links = optionObject(options.links);
|
|
57
|
+
plugins.push(
|
|
58
|
+
mdx.linkPlugin((links == null ? void 0 : links.disableAutoLink) !== void 0 ? { disableAutoLink: links.disableAutoLink } : void 0),
|
|
59
|
+
mdx.linkDialogPlugin({
|
|
60
|
+
...(links == null ? void 0 : links.linkAutocompleteSuggestions) ? { linkAutocompleteSuggestions: links.linkAutocompleteSuggestions } : {},
|
|
61
|
+
...(links == null ? void 0 : links.showLinkTitleField) !== void 0 ? { showLinkTitleField: links.showLinkTitleField } : {}
|
|
62
|
+
})
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
if (isEnabled(options.tables)) plugins.push(mdx.tablePlugin());
|
|
66
|
+
if (isEnabled(options.thematicBreak)) plugins.push(mdx.thematicBreakPlugin());
|
|
67
|
+
if (isEnabled(options.codeBlocks)) {
|
|
68
|
+
const codeBlocks = optionObject(options.codeBlocks);
|
|
69
|
+
plugins.push(
|
|
70
|
+
mdx.codeBlockPlugin({
|
|
71
|
+
defaultCodeBlockLanguage: (codeBlocks == null ? void 0 : codeBlocks.defaultLanguage) ?? "txt"
|
|
72
|
+
})
|
|
73
|
+
);
|
|
74
|
+
if (isEnabled(options.codeMirror)) {
|
|
75
|
+
const codeMirror = optionObject(options.codeMirror);
|
|
76
|
+
plugins.push(
|
|
77
|
+
mdx.codeMirrorPlugin({
|
|
78
|
+
codeBlockLanguages: (codeMirror == null ? void 0 : codeMirror.languages) ?? DEFAULT_CODE_BLOCK_LANGUAGES,
|
|
79
|
+
...(codeMirror == null ? void 0 : codeMirror.autoLoadLanguageSupport) !== void 0 ? { autoLoadLanguageSupport: codeMirror.autoLoadLanguageSupport } : {}
|
|
80
|
+
})
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (isEnabled(options.frontmatter)) plugins.push(mdx.frontmatterPlugin());
|
|
85
|
+
if (isEnabled(options.admonitions)) {
|
|
86
|
+
const admonitions = optionObject(options.admonitions);
|
|
87
|
+
plugins.push(
|
|
88
|
+
mdx.directivesPlugin({
|
|
89
|
+
directiveDescriptors: [mdx.AdmonitionDirectiveDescriptor],
|
|
90
|
+
escapeUnknownTextDirectives: (admonitions == null ? void 0 : admonitions.escapeUnknownTextDirectives) ?? true
|
|
91
|
+
})
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
if (isEnabled(options.images)) {
|
|
95
|
+
const images = optionObject(options.images);
|
|
96
|
+
plugins.push(
|
|
97
|
+
mdx.imagePlugin({
|
|
98
|
+
...(images == null ? void 0 : images.imageUploadHandler) ? { imageUploadHandler: images.imageUploadHandler } : {},
|
|
99
|
+
...(images == null ? void 0 : images.imageAutocompleteSuggestions) ? { imageAutocompleteSuggestions: images.imageAutocompleteSuggestions } : {},
|
|
100
|
+
...(images == null ? void 0 : images.imagePreviewHandler) ? { imagePreviewHandler: images.imagePreviewHandler } : {},
|
|
101
|
+
...(images == null ? void 0 : images.disableImageResize) !== void 0 ? { disableImageResize: images.disableImageResize } : {},
|
|
102
|
+
...(images == null ? void 0 : images.disableImageSettingsButton) !== void 0 ? { disableImageSettingsButton: images.disableImageSettingsButton } : {},
|
|
103
|
+
...(images == null ? void 0 : images.allowSetImageDimensions) !== void 0 ? { allowSetImageDimensions: images.allowSetImageDimensions } : {}
|
|
104
|
+
})
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
if (options.diffMode) {
|
|
108
|
+
const diff = diffModeOptions(options.diffMode);
|
|
109
|
+
plugins.push(
|
|
110
|
+
mdx.diffSourcePlugin({
|
|
111
|
+
...(diff == null ? void 0 : diff.viewMode) ? { viewMode: diff.viewMode } : {},
|
|
112
|
+
...(diff == null ? void 0 : diff.diffMarkdown) !== void 0 ? { diffMarkdown: diff.diffMarkdown } : {},
|
|
113
|
+
...(diff == null ? void 0 : diff.readOnlyDiff) !== void 0 ? { readOnlyDiff: diff.readOnlyDiff } : {}
|
|
114
|
+
})
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
if (isEnabled(options.markdownShortcuts)) plugins.push(mdx.markdownShortcutPlugin());
|
|
118
|
+
if ((_a = options.plugins) == null ? void 0 : _a.length) plugins.push(...options.plugins);
|
|
119
|
+
return plugins;
|
|
120
|
+
}
|
|
121
|
+
export {
|
|
122
|
+
createMdxEditorPlugins
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=mdx-editor-field-plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdx-editor-field-plugins.js","sources":["../../src/components/mdx-editor-field-plugins.tsx"],"sourcesContent":["import { createElement } from \"react\";\nimport type { MdxEditorDiffModeOptions, MdxEditorPluginOptions } from \"./mdx-editor-options\";\nimport { MdxEditorToolbar } from \"./MdxEditorToolbar\";\n\ntype MdxEditorModule = typeof import(\"@mdxeditor/editor\");\ntype RealmPlugin = ReturnType<MdxEditorModule[\"headingsPlugin\"]>;\n\nconst DEFAULT_CODE_BLOCK_LANGUAGES: Record<string, string> = {\n bash: \"Bash\",\n css: \"CSS\",\n go: \"Go\",\n html: \"HTML\",\n javascript: \"JavaScript\",\n js: \"JavaScript\",\n json: \"JSON\",\n jsx: \"JSX\",\n markdown: \"Markdown\",\n python: \"Python\",\n shell: \"Shell\",\n sql: \"SQL\",\n ts: \"TypeScript\",\n tsx: \"TSX\",\n typescript: \"TypeScript\",\n yaml: \"YAML\",\n};\n\nfunction isEnabled<T extends object>(value: boolean | T | undefined, defaultValue = true): boolean {\n return value === undefined ? defaultValue : value !== false;\n}\n\nfunction optionObject<T extends object>(value: boolean | T | undefined): T | undefined {\n return typeof value === \"object\" && value !== null ? value : undefined;\n}\n\nfunction diffModeOptions(diffMode: MdxEditorPluginOptions[\"diffMode\"]): MdxEditorDiffModeOptions | undefined {\n if (!diffMode) return undefined;\n if (diffMode === true) return {};\n if (typeof diffMode === \"string\") return { viewMode: diffMode };\n return diffMode;\n}\n\nfunction createToolbar(mdx: MdxEditorModule, options: MdxEditorPluginOptions) {\n return () => createElement(MdxEditorToolbar, { mdx, options });\n}\n\nexport function createMdxEditorPlugins(\n mdx: MdxEditorModule,\n options: MdxEditorPluginOptions = {},\n): RealmPlugin[] {\n const plugins: RealmPlugin[] = [];\n if (isEnabled(options.toolbar)) {\n const toolbar = optionObject(options.toolbar);\n plugins.push(\n mdx.toolbarPlugin({\n toolbarContents: createToolbar(mdx, options),\n ...(toolbar?.className ? { toolbarClassName: toolbar.className } : {}),\n ...(toolbar?.position ? { toolbarPosition: toolbar.position } : {}),\n }),\n );\n }\n if (isEnabled(options.headings)) {\n const headings = optionObject(options.headings);\n plugins.push(mdx.headingsPlugin(headings));\n }\n if (isEnabled(options.lists)) plugins.push(mdx.listsPlugin());\n if (isEnabled(options.quote)) plugins.push(mdx.quotePlugin());\n if (isEnabled(options.links)) {\n const links = optionObject(options.links);\n plugins.push(\n mdx.linkPlugin(links?.disableAutoLink !== undefined ? { disableAutoLink: links.disableAutoLink } : undefined),\n mdx.linkDialogPlugin({\n ...(links?.linkAutocompleteSuggestions ? { linkAutocompleteSuggestions: links.linkAutocompleteSuggestions } : {}),\n ...(links?.showLinkTitleField !== undefined ? { showLinkTitleField: links.showLinkTitleField } : {}),\n }),\n );\n }\n if (isEnabled(options.tables)) plugins.push(mdx.tablePlugin());\n if (isEnabled(options.thematicBreak)) plugins.push(mdx.thematicBreakPlugin());\n if (isEnabled(options.codeBlocks)) {\n const codeBlocks = optionObject(options.codeBlocks);\n plugins.push(\n mdx.codeBlockPlugin({\n defaultCodeBlockLanguage: codeBlocks?.defaultLanguage ?? \"txt\",\n }),\n );\n if (isEnabled(options.codeMirror)) {\n const codeMirror = optionObject(options.codeMirror);\n plugins.push(\n mdx.codeMirrorPlugin({\n codeBlockLanguages: codeMirror?.languages ?? DEFAULT_CODE_BLOCK_LANGUAGES,\n ...(codeMirror?.autoLoadLanguageSupport !== undefined\n ? { autoLoadLanguageSupport: codeMirror.autoLoadLanguageSupport }\n : {}),\n }),\n );\n }\n }\n if (isEnabled(options.frontmatter)) plugins.push(mdx.frontmatterPlugin());\n if (isEnabled(options.admonitions)) {\n const admonitions = optionObject(options.admonitions);\n plugins.push(\n mdx.directivesPlugin({\n directiveDescriptors: [mdx.AdmonitionDirectiveDescriptor],\n escapeUnknownTextDirectives: admonitions?.escapeUnknownTextDirectives ?? true,\n }),\n );\n }\n if (isEnabled(options.images)) {\n const images = optionObject(options.images);\n plugins.push(\n mdx.imagePlugin({\n ...(images?.imageUploadHandler ? { imageUploadHandler: images.imageUploadHandler } : {}),\n ...(images?.imageAutocompleteSuggestions ? { imageAutocompleteSuggestions: images.imageAutocompleteSuggestions } : {}),\n ...(images?.imagePreviewHandler ? { imagePreviewHandler: images.imagePreviewHandler } : {}),\n ...(images?.disableImageResize !== undefined ? { disableImageResize: images.disableImageResize } : {}),\n ...(images?.disableImageSettingsButton !== undefined\n ? { disableImageSettingsButton: images.disableImageSettingsButton }\n : {}),\n ...(images?.allowSetImageDimensions !== undefined ? { allowSetImageDimensions: images.allowSetImageDimensions } : {}),\n }),\n );\n }\n if (options.diffMode) {\n const diff = diffModeOptions(options.diffMode);\n plugins.push(\n mdx.diffSourcePlugin({\n ...(diff?.viewMode ? { viewMode: diff.viewMode } : {}),\n ...(diff?.diffMarkdown !== undefined ? { diffMarkdown: diff.diffMarkdown } : {}),\n ...(diff?.readOnlyDiff !== undefined ? { readOnlyDiff: diff.readOnlyDiff } : {}),\n }),\n );\n }\n if (isEnabled(options.markdownShortcuts)) plugins.push(mdx.markdownShortcutPlugin());\n if (options.plugins?.length) plugins.push(...(options.plugins as RealmPlugin[]));\n return plugins;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { FormSize } from './json-schema-form-size';
|
|
3
|
+
export type MdxEditorHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
|
|
4
|
+
export type MdxEditorViewMode = "rich-text" | "source" | "diff";
|
|
5
|
+
export type MdxEditorPlugin = unknown;
|
|
6
|
+
export interface MdxEditorCodeBlockLanguage {
|
|
7
|
+
name: string;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
}
|
|
10
|
+
export type MdxEditorImageUploadHandler = (image: File) => Promise<string>;
|
|
11
|
+
export type MdxEditorImagePreviewHandler = (imageSource: string) => Promise<string>;
|
|
12
|
+
export interface MdxEditorToolbarOptions {
|
|
13
|
+
className?: string;
|
|
14
|
+
position?: "top" | "bottom";
|
|
15
|
+
}
|
|
16
|
+
export interface MdxEditorCodeBlockOptions {
|
|
17
|
+
defaultLanguage?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface MdxEditorCodeMirrorOptions {
|
|
20
|
+
languages?: Record<string, string> | MdxEditorCodeBlockLanguage[];
|
|
21
|
+
autoLoadLanguageSupport?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface MdxEditorLinkOptions {
|
|
24
|
+
disableAutoLink?: boolean;
|
|
25
|
+
linkAutocompleteSuggestions?: string[];
|
|
26
|
+
showLinkTitleField?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface MdxEditorImageOptions {
|
|
29
|
+
imageUploadHandler?: MdxEditorImageUploadHandler;
|
|
30
|
+
imageAutocompleteSuggestions?: string[];
|
|
31
|
+
imagePreviewHandler?: MdxEditorImagePreviewHandler;
|
|
32
|
+
disableImageResize?: boolean;
|
|
33
|
+
disableImageSettingsButton?: boolean;
|
|
34
|
+
allowSetImageDimensions?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface MdxEditorDiffModeOptions {
|
|
37
|
+
viewMode?: MdxEditorViewMode;
|
|
38
|
+
diffMarkdown?: string;
|
|
39
|
+
readOnlyDiff?: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface MdxEditorAdmonitionOptions {
|
|
42
|
+
escapeUnknownTextDirectives?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface MdxEditorPluginOptions {
|
|
45
|
+
toolbar?: boolean | MdxEditorToolbarOptions;
|
|
46
|
+
headings?: boolean | {
|
|
47
|
+
allowedHeadingLevels?: readonly MdxEditorHeadingLevel[];
|
|
48
|
+
};
|
|
49
|
+
lists?: boolean;
|
|
50
|
+
quote?: boolean;
|
|
51
|
+
links?: boolean | MdxEditorLinkOptions;
|
|
52
|
+
tables?: boolean;
|
|
53
|
+
thematicBreak?: boolean;
|
|
54
|
+
codeBlocks?: boolean | MdxEditorCodeBlockOptions;
|
|
55
|
+
codeMirror?: boolean | MdxEditorCodeMirrorOptions;
|
|
56
|
+
frontmatter?: boolean;
|
|
57
|
+
admonitions?: boolean | MdxEditorAdmonitionOptions;
|
|
58
|
+
images?: boolean | MdxEditorImageOptions;
|
|
59
|
+
markdownShortcuts?: boolean;
|
|
60
|
+
diffMode?: boolean | MdxEditorViewMode | MdxEditorDiffModeOptions;
|
|
61
|
+
plugins?: MdxEditorPlugin[];
|
|
62
|
+
}
|
|
63
|
+
export interface MdxEditorFieldProps extends MdxEditorPluginOptions {
|
|
64
|
+
id?: string;
|
|
65
|
+
value?: string;
|
|
66
|
+
onChange?: (markdown: string) => void;
|
|
67
|
+
readOnly?: boolean;
|
|
68
|
+
disabled?: boolean;
|
|
69
|
+
size?: FormSize;
|
|
70
|
+
placeholder?: ReactNode;
|
|
71
|
+
className?: string;
|
|
72
|
+
contentClassName?: string;
|
|
73
|
+
textareaClassName?: string;
|
|
74
|
+
"aria-label"?: string;
|
|
75
|
+
commitInitialMarkdownNormalize?: boolean;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=mdx-editor-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdx-editor-options.d.ts","sourceRoot":"","sources":["../../src/components/mdx-editor-options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
function useListMenuSelection(options) {
|
|
5
|
+
const { keys, selectedKeys: controlled, defaultSelectedKeys, onSelectionChange } = options;
|
|
6
|
+
const isControlled = controlled !== void 0;
|
|
7
|
+
const [localSet, setLocalSet] = react.useState(
|
|
8
|
+
() => new Set(defaultSelectedKeys ?? [])
|
|
9
|
+
);
|
|
10
|
+
const anchorRef = react.useRef(null);
|
|
11
|
+
const selected = react.useMemo(
|
|
12
|
+
() => isControlled ? new Set(controlled) : localSet,
|
|
13
|
+
[isControlled, controlled, localSet]
|
|
14
|
+
);
|
|
15
|
+
const commit = react.useCallback(
|
|
16
|
+
(next) => {
|
|
17
|
+
if (!isControlled) setLocalSet(next);
|
|
18
|
+
onSelectionChange == null ? void 0 : onSelectionChange(keys.filter((key) => next.has(key)));
|
|
19
|
+
},
|
|
20
|
+
[isControlled, onSelectionChange, keys]
|
|
21
|
+
);
|
|
22
|
+
const toggle = react.useCallback(
|
|
23
|
+
(key, modifiers) => {
|
|
24
|
+
const next = new Set(selected);
|
|
25
|
+
const anchor = anchorRef.current;
|
|
26
|
+
if ((modifiers == null ? void 0 : modifiers.shiftKey) && anchor !== null) {
|
|
27
|
+
const from = keys.indexOf(anchor);
|
|
28
|
+
const to = keys.indexOf(key);
|
|
29
|
+
if (from !== -1 && to !== -1) {
|
|
30
|
+
const [lo, hi] = from <= to ? [from, to] : [to, from];
|
|
31
|
+
for (let i = lo; i <= hi; i += 1) next.add(keys[i]);
|
|
32
|
+
commit(next);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (next.has(key)) next.delete(key);
|
|
37
|
+
else next.add(key);
|
|
38
|
+
anchorRef.current = key;
|
|
39
|
+
commit(next);
|
|
40
|
+
},
|
|
41
|
+
[selected, keys, commit]
|
|
42
|
+
);
|
|
43
|
+
const set = react.useCallback(
|
|
44
|
+
(next) => {
|
|
45
|
+
anchorRef.current = null;
|
|
46
|
+
commit(new Set(next));
|
|
47
|
+
},
|
|
48
|
+
[commit]
|
|
49
|
+
);
|
|
50
|
+
const selectAll = react.useCallback(() => commit(new Set(keys)), [commit, keys]);
|
|
51
|
+
const clear = react.useCallback(() => {
|
|
52
|
+
anchorRef.current = null;
|
|
53
|
+
commit(/* @__PURE__ */ new Set());
|
|
54
|
+
}, [commit]);
|
|
55
|
+
const selectedKeys = react.useMemo(() => keys.filter((key) => selected.has(key)), [keys, selected]);
|
|
56
|
+
const allSelected = keys.length > 0 && keys.every((key) => selected.has(key));
|
|
57
|
+
return {
|
|
58
|
+
selectedKeys,
|
|
59
|
+
selected,
|
|
60
|
+
isSelected: (key) => selected.has(key),
|
|
61
|
+
toggle,
|
|
62
|
+
set,
|
|
63
|
+
selectAll,
|
|
64
|
+
clear,
|
|
65
|
+
allSelected,
|
|
66
|
+
someSelected: selectedKeys.length > 0 && !allSelected,
|
|
67
|
+
count: selectedKeys.length
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const ListMenuSelectionContext = react.createContext(null);
|
|
71
|
+
function useListMenuSelectionContext() {
|
|
72
|
+
return react.useContext(ListMenuSelectionContext);
|
|
73
|
+
}
|
|
74
|
+
exports.ListMenuSelectionContext = ListMenuSelectionContext;
|
|
75
|
+
exports.useListMenuSelection = useListMenuSelection;
|
|
76
|
+
exports.useListMenuSelectionContext = useListMenuSelectionContext;
|
|
77
|
+
//# sourceMappingURL=use-list-menu-selection.cjs.map
|