@dynamicforms/vuetify-inputs 0.9.2 → 0.10.1

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/index.d.ts CHANGED
@@ -14,7 +14,6 @@ import { Day } from 'date-fns';
14
14
  import { default as default_2 } from '@dynamicforms/vue-forms';
15
15
  import { DefaultInputSlot } from 'vuetify/lib/components/VField/VField';
16
16
  import { DefineComponent } from 'vue';
17
- import { Editor } from '@ckeditor/ckeditor5-core';
18
17
  import { Era } from 'date-fns';
19
18
  import { FirstWeekContainsDate } from 'date-fns';
20
19
  import { FormatDistanceFn } from 'date-fns';
@@ -300,11 +299,6 @@ export declare type BreakpointNames = (typeof responsiveBreakpoints)[number];
300
299
  */
301
300
  export declare type BreakpointsJSON<T extends Record<string, any>, B extends Record<string, any> = T> = T & Partial<Record<BreakpointNames, B>>;
302
301
 
303
- export declare const ckEditorLanguage: {
304
- language: string;
305
- translations: undefined;
306
- };
307
-
308
302
  export declare const DateTimeLocaleConfig: {
309
303
  dateTimeLocale: Ref<{
310
304
  code: string;
@@ -462,6 +456,28 @@ declare interface DfFileProps extends BaseProps {
462
456
  comms: FileComms;
463
457
  }
464
458
 
459
+ export declare const DfImage: DefineComponent<DfImageProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
460
+ "update:modelValue": (value: any) => any;
461
+ "click:clear": () => any;
462
+ }, string, PublicProps, Readonly<DfImageProps> & Readonly<{
463
+ "onUpdate:modelValue"?: ((value: any) => any) | undefined;
464
+ "onClick:clear"?: (() => any) | undefined;
465
+ }>, {
466
+ enabled: boolean;
467
+ clearable: boolean;
468
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {
469
+ fileInputRef: HTMLInputElement;
470
+ }, any>;
471
+
472
+ /**
473
+ * `comms.upload` must resolve to a value directly usable as an `<img>` src (typically the URL your backend
474
+ * serves the image from): the component has no separate lookup for turning an identifier into a display URL,
475
+ * so it renders `modelValue` itself as the preview once a file has been uploaded.
476
+ */
477
+ declare interface DfImageProps extends BaseProps {
478
+ comms: FileComms;
479
+ }
480
+
465
481
  export declare const DfInput: DefineComponent<DfInputProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
466
482
  "update:modelValue": (value: any) => any;
467
483
  "click:clear": () => any;
@@ -485,6 +501,7 @@ export declare namespace DfInputComponentProps {
485
501
  DfColorProps,
486
502
  DfDateTimeProps,
487
503
  DfFileProps,
504
+ DfImageProps,
488
505
  DfInputProps,
489
506
  DfInputHintProps,
490
507
  DfLabelProps,
@@ -501,6 +518,7 @@ export declare namespace DfInputComponents {
501
518
  DfColor,
502
519
  DfDateTime,
503
520
  DfFile,
521
+ DfImage,
504
522
  DfInput,
505
523
  DfInputHint,
506
524
  DfLabel,
@@ -570,6 +588,18 @@ export declare const dfInputComponentsByTag: {
570
588
  enabled: boolean;
571
589
  clearable: boolean;
572
590
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
591
+ readonly 'df-image': DefineComponent<DfImageProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
592
+ "update:modelValue": (value: any) => any;
593
+ "click:clear": () => any;
594
+ }, string, PublicProps, Readonly<DfImageProps> & Readonly<{
595
+ "onUpdate:modelValue"?: ((value: any) => any) | undefined;
596
+ "onClick:clear"?: (() => any) | undefined;
597
+ }>, {
598
+ enabled: boolean;
599
+ clearable: boolean;
600
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {
601
+ fileInputRef: HTMLInputElement;
602
+ }, any>;
573
603
  readonly 'df-input': DefineComponent<DfInputProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
574
604
  "update:modelValue": (value: any) => any;
575
605
  "click:clear": () => any;
@@ -609,17 +639,13 @@ export declare const dfInputComponentsByTag: {
609
639
  disabled?: boolean;
610
640
  }> & Readonly<{
611
641
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
612
- }>, {
613
- onEditorReady: (editorReady: Editor) => void;
614
- }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
642
+ }>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
615
643
  "update:modelValue": (value: string) => any;
616
644
  }, PublicProps, {
617
645
  minHeight: string;
618
646
  modelValue: string;
619
647
  disabled: boolean;
620
- }, false, {}, {}, GlobalComponents, GlobalDirectives, string, {
621
- editorElement: HTMLDivElement;
622
- }, HTMLDivElement, ComponentProvideOptions, {
648
+ }, false, {}, {}, GlobalComponents, GlobalDirectives, string, {}, HTMLDivElement, ComponentProvideOptions, {
623
649
  P: {};
624
650
  B: {};
625
651
  D: {};
@@ -632,9 +658,7 @@ export declare const dfInputComponentsByTag: {
632
658
  disabled?: boolean;
633
659
  }> & Readonly<{
634
660
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
635
- }>, {
636
- onEditorReady: (editorReady: Editor) => void;
637
- }, {}, {}, {}, {
661
+ }>, {}, {}, {}, {}, {
638
662
  minHeight: string;
639
663
  modelValue: string;
640
664
  disabled: boolean;
@@ -780,17 +804,13 @@ minHeight?: string;
780
804
  disabled?: boolean;
781
805
  }> & Readonly<{
782
806
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
783
- }>, {
784
- onEditorReady: (editorReady: Editor) => void;
785
- }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
807
+ }>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
786
808
  "update:modelValue": (value: string) => any;
787
809
  }, PublicProps, {
788
810
  minHeight: string;
789
811
  modelValue: string;
790
812
  disabled: boolean;
791
- }, false, {}, {}, GlobalComponents, GlobalDirectives, string, {
792
- editorElement: HTMLDivElement;
793
- }, HTMLDivElement, ComponentProvideOptions, {
813
+ }, false, {}, {}, GlobalComponents, GlobalDirectives, string, {}, HTMLDivElement, ComponentProvideOptions, {
794
814
  P: {};
795
815
  B: {};
796
816
  D: {};
@@ -803,9 +823,7 @@ minHeight?: string;
803
823
  disabled?: boolean;
804
824
  }> & Readonly<{
805
825
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
806
- }>, {
807
- onEditorReady: (editorReady: Editor) => void;
808
- }, {}, {}, {}, {
826
+ }>, {}, {}, {}, {}, {
809
827
  minHeight: string;
810
828
  modelValue: string;
811
829
  disabled: boolean;
@@ -934,8 +952,6 @@ export declare interface SelectChoice {
934
952
 
935
953
  export declare type SelectFetchChoices<T1 = any, T2 = any> = (queryValue?: T1, idValue?: T2) => Promise<SelectChoice[]>;
936
954
 
937
- export declare function setCkEditorLanguage(language: string, translations: any): void;
938
-
939
955
  declare type ShowAsGroup = 'no' | 'grouped' | 'grouped-no-borders';
940
956
 
941
957
  export declare const translatableStrings: {
@@ -959,6 +975,45 @@ export declare const translatableStrings: {
959
975
  Spoiler: string;
960
976
  CodeDark: string;
961
977
  CodeBright: string;
978
+ Undo: string;
979
+ Redo: string;
980
+ SelectAll: string;
981
+ Bold: string;
982
+ Italic: string;
983
+ HorizontalLine: string;
984
+ Blockquote: string;
985
+ BulletedList: string;
986
+ NumberedList: string;
987
+ Outdent: string;
988
+ Indent: string;
989
+ AlignLeft: string;
990
+ AlignCenter: string;
991
+ AlignRight: string;
992
+ AlignJustify: string;
993
+ Link: string;
994
+ LinkUrl: string;
995
+ LinkApply: string;
996
+ LinkRemove: string;
997
+ Image: string;
998
+ ImageUrl: string;
999
+ ImageUpload: string;
1000
+ ImageInsert: string;
1001
+ ImageDropHint: string;
1002
+ ImageReplace: string;
1003
+ Table: string;
1004
+ TableInsert: string;
1005
+ TableAddRowAbove: string;
1006
+ TableAddRowBelow: string;
1007
+ TableDeleteRow: string;
1008
+ TableAddColumnBefore: string;
1009
+ TableAddColumnAfter: string;
1010
+ TableDeleteColumn: string;
1011
+ TableToggleHeaderRow: string;
1012
+ TableDeleteTable: string;
1013
+ Style: string;
1014
+ MediaEmbed: string;
1015
+ MediaEmbedUrl: string;
1016
+ MediaEmbedInsert: string;
962
1017
  };
963
1018
 
964
1019
  export declare function translateStrings(translationCallback: (s: string) => string): void;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dynamicforms/vuetify-inputs",
3
3
  "private": false,
4
- "version": "0.9.2",
4
+ "version": "0.10.1",
5
5
  "type": "module",
6
6
  "description": "Vuetify input components with guaranteed visual consistency across all form fields — unified density/variant system, globally configurable, with inline mode for table cells. Built for @dynamicforms/vue-forms.",
7
7
  "author": "Jure Erznožnik",
@@ -24,6 +24,7 @@
24
24
  "scripts": {
25
25
  "build": "vite build",
26
26
  "test": "vitest run --coverage",
27
+ "test:e2e": "playwright test",
27
28
  "lint": "eslint src --fix && vue-tsc --noEmit",
28
29
  "lint:ci": "eslint src && vue-tsc --noEmit",
29
30
  "docs:dev": "npm run docs:dev -w docs",
@@ -55,10 +56,20 @@
55
56
  "url": "https://github.com/dynamicforms/vuetify-inputs/issues"
56
57
  },
57
58
  "peerDependencies": {
58
- "@ckeditor/ckeditor5-vue": "^7.0.0",
59
59
  "@dynamicforms/vue-forms": "^0.17.0",
60
60
  "@mdi/font": "^7.4.47",
61
- "ckeditor5": "^43.0.0",
61
+ "@tiptap/core": "^3.30.2",
62
+ "@tiptap/extension-image": "^3.30.2",
63
+ "@tiptap/extension-link": "^3.30.2",
64
+ "@tiptap/extension-placeholder": "^3.30.2",
65
+ "@tiptap/extension-table": "^3.30.2",
66
+ "@tiptap/extension-table-cell": "^3.30.2",
67
+ "@tiptap/extension-table-header": "^3.30.2",
68
+ "@tiptap/extension-table-row": "^3.30.2",
69
+ "@tiptap/extension-text-align": "^3.30.2",
70
+ "@tiptap/pm": "^3.30.2",
71
+ "@tiptap/starter-kit": "^3.30.2",
72
+ "@tiptap/vue-3": "^3.30.2",
62
73
  "date-fns": "^4.1.0",
63
74
  "lodash-es": "^4.17.12",
64
75
  "vitepress-plugin-crosslinks": "^1.0.0",
@@ -68,14 +79,15 @@
68
79
  "vuetify": "^3.9"
69
80
  },
70
81
  "devDependencies": {
82
+ "@playwright/test": "^1.62.1",
71
83
  "@types/lodash-es": "^4.17.12",
72
84
  "@types/markdown-it-attrs": "^4.1.3",
73
- "@types/node": "^24",
85
+ "@types/node": "^26",
74
86
  "@vitejs/plugin-vue": "^6",
75
87
  "@vitest/coverage-v8": "^3",
76
88
  "@vue/test-utils": "^2.2.4",
77
89
  "@vue/tsconfig": "^0.7.0",
78
- "eslint-config-velis": "^2.0.12",
90
+ "eslint-config-velis": "^3",
79
91
  "jsdom": "^26.0.0",
80
92
  "markdown-it-attrs": "^4.3.1",
81
93
  "rollup-plugin-visualizer": "^5.14.0",
@@ -85,5 +97,10 @@
85
97
  "vite-plugin-eslint": "^1.8.1",
86
98
  "vitest": "^3",
87
99
  "vue-tsc": "^2"
100
+ },
101
+ "allowScripts": {
102
+ "@parcel/watcher@2.6.0": true,
103
+ "esbuild@0.28.2": true,
104
+ "unrs-resolver@1.12.2": true
88
105
  }
89
106
  }
package/readme.md CHANGED
@@ -66,10 +66,9 @@ consistent appearance.
66
66
  - **Selection**: static choices or an async `fetchChoices`, single or multiple, chips with icons, free values with
67
67
  `allowTags`
68
68
  - **Uploads**: a `FileComms` object with upload progress, delete and a periodic touch
69
- - **Rich text**: a configured CKEditor 5 inside the same field frame as every other input
70
- - **Localisable**: `translateStrings()` replaces the library's own strings, `setCkEditorLanguage()` sets the RTF
71
- editor's interface language, and `DateTimeLocaleConfig` sets the date-fns locale dates are formatted and parsed
72
- with
69
+ - **Rich text**: TipTap with a Vuetify toolbar, inside the same field frame as every other input
70
+ - **Localisable**: `translateStrings()` replaces the library's own strings, including every RTF editor toolbar
71
+ label, and `DateTimeLocaleConfig` sets the date-fns locale dates are formatted and parsed with
73
72
  - **TypeScript**: every component's props are an exported interface, and the definitions ship with the build
74
73
 
75
74
  ## Installation