@rufous/ui 0.1.89 → 0.1.90

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/main.css CHANGED
@@ -13972,7 +13972,6 @@ svg.jodit-icon {
13972
13972
  .rf-rte-wrapper:has(.ai-commands-panel),
13973
13973
  .rf-rte-wrapper:has(.tts-panel),
13974
13974
  .rf-rte-wrapper:has(.stt-panel),
13975
- .rf-rte-wrapper:has(.image-toolbar),
13976
13975
  .rf-rte-wrapper:has(.translate-toast-popup) {
13977
13976
  z-index: 100;
13978
13977
  }
@@ -14009,9 +14008,23 @@ svg.jodit-icon {
14009
14008
  padding: 4px 8px;
14010
14009
  flex-wrap: wrap;
14011
14010
  }
14012
- .rf-rte-wrapper .toolbar-row + .toolbar-row {
14011
+ .rf-rte-wrapper .toolbar-row .with-close {
14012
+ width: calc(100% - 32px);
14013
+ }
14014
+ .rf-rte-wrapper .toolbar-row + .toolbar-row,
14015
+ .rf-rte-wrapper .toolbar-row-right + .toolbar-row-right {
14013
14016
  border-top: 1px solid #e8eaed;
14014
14017
  }
14018
+ .rf-rte-wrapper .toolbar-row-right {
14019
+ display: flex;
14020
+ align-items: center;
14021
+ gap: 1px;
14022
+ padding: 4px 0px;
14023
+ position: absolute;
14024
+ right: 0;
14025
+ top: 0;
14026
+ width: 32px;
14027
+ }
14015
14028
  .rf-rte-wrapper .toolbar-group {
14016
14029
  display: flex;
14017
14030
  align-items: center;
@@ -14043,6 +14056,17 @@ svg.jodit-icon {
14043
14056
  position: relative;
14044
14057
  flex-shrink: 0;
14045
14058
  }
14059
+ .rf-rte-wrapper .toolbar-btn.btn-cross {
14060
+ background-color: #fafbfd;
14061
+ }
14062
+ .rf-rte-wrapper .toolbar-btn.btn-cross svg {
14063
+ width: 12px;
14064
+ height: 12px;
14065
+ color: #a81c08;
14066
+ }
14067
+ .rf-rte-wrapper .toolbar-btn.special-characters-btn {
14068
+ font-size: 20px;
14069
+ }
14046
14070
  .rf-rte-wrapper .toolbar-btn svg {
14047
14071
  width: 20px;
14048
14072
  height: 20px;
@@ -14267,6 +14291,7 @@ svg.jodit-icon {
14267
14291
  font-weight: 500;
14268
14292
  cursor: pointer;
14269
14293
  border-bottom: 2px solid transparent;
14294
+ border-radius: 0;
14270
14295
  transition: color 0.15s, border-color 0.15s;
14271
14296
  }
14272
14297
  .rf-rte-wrapper .color-picker-tab:hover {
@@ -14496,6 +14521,10 @@ svg.jodit-icon {
14496
14521
  font-size: 12px;
14497
14522
  line-height: 1;
14498
14523
  }
14524
+ .rf-rte-wrapper .task-icon img {
14525
+ width: 18px;
14526
+ height: 18px;
14527
+ }
14499
14528
  .rf-rte-wrapper .task-icon.task-todo {
14500
14529
  color: #dc2626;
14501
14530
  border: 2px solid #dc2626;
@@ -14503,10 +14532,11 @@ svg.jodit-icon {
14503
14532
  .rf-rte-wrapper .task-icon.task-working {
14504
14533
  color: #2563eb;
14505
14534
  border: 2px solid #2563eb;
14535
+ font-size: 25px;
14506
14536
  }
14507
14537
  .rf-rte-wrapper .task-icon.task-blocked {
14508
14538
  color: #1f2937;
14509
- background: #1f2937;
14539
+ border: 2px solid #000000;
14510
14540
  }
14511
14541
  .rf-rte-wrapper .task-icon.task-resolved {
14512
14542
  color: #16a34a;
@@ -14901,6 +14931,22 @@ svg.jodit-icon {
14901
14931
  border-radius: 8px;
14902
14932
  max-width: 100%;
14903
14933
  }
14934
+ .rf-rte-wrapper .tiptap video {
14935
+ max-width: 100%;
14936
+ }
14937
+ .rf-rte-wrapper .rf-video-outer {
14938
+ margin: 0.8em 0;
14939
+ }
14940
+ .rf-rte-wrapper .rf-video-outer video,
14941
+ .rf-rte-wrapper .rf-video-outer iframe {
14942
+ display: block;
14943
+ max-width: 100%;
14944
+ }
14945
+ .rf-rte-wrapper .rf-video-outer.rf-video-selected video,
14946
+ .rf-rte-wrapper .rf-video-outer.rf-video-selected iframe {
14947
+ outline: 2px solid #6366f1;
14948
+ outline-offset: 2px;
14949
+ }
14904
14950
  .rf-rte-wrapper .bubble-menu {
14905
14951
  display: flex;
14906
14952
  gap: 2px;
@@ -14979,10 +15025,47 @@ svg.jodit-icon {
14979
15025
  border-radius: 8px;
14980
15026
  margin: 0.8em 0;
14981
15027
  }
14982
- .rf-rte-wrapper .tiptap img.ProseMirror-selectednode {
15028
+ .rf-rte-wrapper .rf-image-resizable img {
15029
+ display: block;
15030
+ max-width: 100%;
15031
+ }
15032
+ .rf-rte-wrapper .rf-image-resizable.rf-image-selected img {
14983
15033
  outline: 2px solid #6366f1;
14984
15034
  outline-offset: 2px;
14985
15035
  }
15036
+ .rf-rte-wrapper .rf-resize-handle {
15037
+ display: none;
15038
+ position: absolute;
15039
+ width: 10px;
15040
+ height: 10px;
15041
+ background: #6366f1;
15042
+ border: 2px solid #fff;
15043
+ border-radius: 50%;
15044
+ z-index: 10;
15045
+ }
15046
+ .rf-rte-wrapper .rf-image-selected .rf-resize-handle {
15047
+ display: block;
15048
+ }
15049
+ .rf-rte-wrapper .rf-resize-handle--nw {
15050
+ top: 5px;
15051
+ left: -7px;
15052
+ cursor: nw-resize;
15053
+ }
15054
+ .rf-rte-wrapper .rf-resize-handle--ne {
15055
+ top: 5px;
15056
+ right: -7px;
15057
+ cursor: ne-resize;
15058
+ }
15059
+ .rf-rte-wrapper .rf-resize-handle--sw {
15060
+ bottom: 5px;
15061
+ left: -7px;
15062
+ cursor: sw-resize;
15063
+ }
15064
+ .rf-rte-wrapper .rf-resize-handle--se {
15065
+ bottom: 5px;
15066
+ right: -7px;
15067
+ cursor: se-resize;
15068
+ }
14986
15069
  .rf-rte-wrapper .status-bar {
14987
15070
  display: flex;
14988
15071
  justify-content: space-between;
@@ -15062,7 +15145,7 @@ svg.jodit-icon {
15062
15145
  letter-spacing: 0.5px;
15063
15146
  text-transform: uppercase;
15064
15147
  }
15065
- .rf-rte-wrapper .image-toolbar {
15148
+ .image-toolbar {
15066
15149
  display: flex;
15067
15150
  align-items: center;
15068
15151
  gap: 3px;
@@ -15070,11 +15153,9 @@ svg.jodit-icon {
15070
15153
  background: #1e293b;
15071
15154
  border-radius: 10px;
15072
15155
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
15073
- position: absolute;
15074
- z-index: 100;
15075
15156
  transform: translateY(4px);
15076
15157
  }
15077
- .rf-rte-wrapper .img-tool-btn {
15158
+ .image-toolbar .img-tool-btn {
15078
15159
  display: inline-flex;
15079
15160
  align-items: center;
15080
15161
  justify-content: center;
@@ -15089,15 +15170,15 @@ svg.jodit-icon {
15089
15170
  line-height: 1;
15090
15171
  gap: 3px;
15091
15172
  }
15092
- .rf-rte-wrapper .img-tool-btn:hover {
15173
+ .image-toolbar .img-tool-btn:hover {
15093
15174
  background: #334155;
15094
15175
  color: #f8fafc;
15095
15176
  }
15096
- .rf-rte-wrapper .img-tool-copy-wrapper {
15177
+ .image-toolbar .img-tool-copy-wrapper {
15097
15178
  position: relative;
15098
15179
  display: inline-flex;
15099
15180
  }
15100
- .rf-rte-wrapper .img-copy-toast {
15181
+ .image-toolbar .img-copy-toast {
15101
15182
  position: absolute;
15102
15183
  bottom: 100%;
15103
15184
  left: 50%;
@@ -15123,10 +15204,10 @@ svg.jodit-icon {
15123
15204
  transform: translateX(-50%) translateY(0);
15124
15205
  }
15125
15206
  }
15126
- .rf-rte-wrapper .img-tool-dropdown {
15207
+ .image-toolbar .img-tool-dropdown {
15127
15208
  position: relative;
15128
15209
  }
15129
- .rf-rte-wrapper .img-tool-menu {
15210
+ .image-toolbar .img-tool-menu {
15130
15211
  position: absolute;
15131
15212
  top: 100%;
15132
15213
  left: 0;
@@ -15139,16 +15220,32 @@ svg.jodit-icon {
15139
15220
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
15140
15221
  margin-top: 4px;
15141
15222
  }
15223
+ .image-toolbar .dropdown-item {
15224
+ display: flex;
15225
+ align-items: center;
15226
+ gap: 10px;
15227
+ width: 100%;
15228
+ padding: 7px 12px;
15229
+ border: none;
15230
+ border-radius: 4px;
15231
+ background: transparent;
15232
+ color: #3c4043;
15233
+ font-size: 13px;
15234
+ cursor: pointer;
15235
+ text-align: left;
15236
+ white-space: nowrap;
15237
+ transition: background 0.12s ease;
15238
+ }
15239
+ .image-toolbar .dropdown-item:hover {
15240
+ background: #e8eaed;
15241
+ color: #202124;
15242
+ }
15142
15243
  .rf-rte-wrapper .tiptap img {
15143
15244
  cursor: grab;
15144
15245
  }
15145
15246
  .rf-rte-wrapper .tiptap img:active {
15146
15247
  cursor: grabbing;
15147
15248
  }
15148
- .rf-rte-wrapper .tiptap img.ProseMirror-selectednode {
15149
- outline: 2px solid #6366f1;
15150
- outline-offset: 2px;
15151
- }
15152
15249
  .modal-overlay {
15153
15250
  position: fixed;
15154
15251
  top: 0;
@@ -15464,6 +15561,7 @@ svg.jodit-icon {
15464
15561
  background: #fef2f2;
15465
15562
  border-left: 3px solid #991b1b;
15466
15563
  font-weight: 600;
15564
+ border-radius: 0;
15467
15565
  }
15468
15566
  .translate-code {
15469
15567
  color: #991b1b;
@@ -16118,6 +16216,79 @@ svg.jodit-icon {
16118
16216
  .rf-rte-mention-name {
16119
16217
  font-weight: 500;
16120
16218
  }
16219
+ .rf-spell-error {
16220
+ text-decoration: underline wavy #dc2626;
16221
+ text-decoration-skip-ink: none;
16222
+ text-underline-offset: 3px;
16223
+ cursor: default;
16224
+ }
16225
+ .rf-spell-tooltip {
16226
+ background: #fff;
16227
+ border: 1px solid #dadce0;
16228
+ border-radius: 8px;
16229
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.14);
16230
+ min-width: 160px;
16231
+ max-width: 240px;
16232
+ overflow: hidden;
16233
+ font-family: inherit;
16234
+ }
16235
+ .rf-spell-tooltip-header {
16236
+ padding: 8px 12px 6px;
16237
+ font-size: 0.8rem;
16238
+ color: #dc2626;
16239
+ font-weight: 600;
16240
+ border-bottom: 1px solid #f3f4f6;
16241
+ }
16242
+ .rf-spell-tooltip-word {
16243
+ text-decoration: underline wavy #dc2626;
16244
+ text-underline-offset: 2px;
16245
+ }
16246
+ .rf-spell-tooltip-suggestions {
16247
+ padding: 4px 0;
16248
+ }
16249
+ .rf-spell-suggestion-btn {
16250
+ display: block;
16251
+ width: 100%;
16252
+ padding: 6px 12px;
16253
+ text-align: left;
16254
+ background: none;
16255
+ border: none;
16256
+ cursor: pointer;
16257
+ color: #1f2937;
16258
+ font-size: 0.85rem;
16259
+ font-family: inherit;
16260
+ transition: background 0.12s;
16261
+ }
16262
+ .rf-spell-suggestion-btn:hover {
16263
+ background: #f3f4f6;
16264
+ }
16265
+ .rf-spell-no-suggestions {
16266
+ padding: 8px 12px;
16267
+ color: #9ca3af;
16268
+ font-size: 0.8rem;
16269
+ font-style: italic;
16270
+ }
16271
+ .rf-spell-tooltip-footer {
16272
+ border-top: 1px solid #f3f4f6;
16273
+ padding: 2px 0;
16274
+ }
16275
+ .rf-spell-action-btn {
16276
+ display: block;
16277
+ width: 100%;
16278
+ padding: 5px 12px;
16279
+ text-align: left;
16280
+ background: none;
16281
+ border: none;
16282
+ cursor: pointer;
16283
+ color: #6b7280;
16284
+ font-size: 0.78rem;
16285
+ font-family: inherit;
16286
+ transition: background 0.12s;
16287
+ }
16288
+ .rf-spell-action-btn:hover {
16289
+ background: #f3f4f6;
16290
+ color: #374151;
16291
+ }
16121
16292
  /*! Bundled license information:
16122
16293
 
16123
16294
  jodit/es5/jodit.min.css:
package/dist/main.d.cts CHANGED
@@ -484,6 +484,14 @@ interface BaseDialogProps {
484
484
  size?: "sm" | "md" | "lg" | "xl" | "fullScreen";
485
485
  /** Scoped style overrides. Supports nested CSS selectors with & */
486
486
  sx?: SxProp;
487
+ /** A transition component (e.g. Fade, Slide, Grow, Zoom) to animate the dialog container */
488
+ TransitionComponent?: React.ComponentType<{
489
+ in: boolean;
490
+ children: React.ReactElement;
491
+ [key: string]: any;
492
+ }>;
493
+ /** Props forwarded to the TransitionComponent */
494
+ TransitionProps?: Record<string, any>;
487
495
  }
488
496
  declare const BaseDialog: React.FC<BaseDialogProps>;
489
497
 
@@ -1679,6 +1687,7 @@ interface RufousTextEditorProps {
1679
1687
  onTranslate?: (text: string, sourceLang: string, targetLang: string) => Promise<string>;
1680
1688
  onSpeechToText?: (text: string) => Promise<string>;
1681
1689
  onTextToSpeech?: (text: string, voice?: string) => Promise<string>;
1690
+ onImageUpload?: (file: File) => Promise<string>;
1682
1691
  mentions?: Array<{
1683
1692
  id: string;
1684
1693
  name: string;
package/dist/main.d.ts CHANGED
@@ -484,6 +484,14 @@ interface BaseDialogProps {
484
484
  size?: "sm" | "md" | "lg" | "xl" | "fullScreen";
485
485
  /** Scoped style overrides. Supports nested CSS selectors with & */
486
486
  sx?: SxProp;
487
+ /** A transition component (e.g. Fade, Slide, Grow, Zoom) to animate the dialog container */
488
+ TransitionComponent?: React.ComponentType<{
489
+ in: boolean;
490
+ children: React.ReactElement;
491
+ [key: string]: any;
492
+ }>;
493
+ /** Props forwarded to the TransitionComponent */
494
+ TransitionProps?: Record<string, any>;
487
495
  }
488
496
  declare const BaseDialog: React.FC<BaseDialogProps>;
489
497
 
@@ -1679,6 +1687,7 @@ interface RufousTextEditorProps {
1679
1687
  onTranslate?: (text: string, sourceLang: string, targetLang: string) => Promise<string>;
1680
1688
  onSpeechToText?: (text: string) => Promise<string>;
1681
1689
  onTextToSpeech?: (text: string, voice?: string) => Promise<string>;
1690
+ onImageUpload?: (file: File) => Promise<string>;
1682
1691
  mentions?: Array<{
1683
1692
  id: string;
1684
1693
  name: string;