@widgetic/design-system 0.5.15 → 0.5.16

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.
Files changed (155) hide show
  1. package/README.md +167 -0
  2. package/dist/components/CopyableHeader.svelte +25 -11
  3. package/dist/components/CopyableHeader.svelte.d.ts +4 -0
  4. package/dist/components/EmptyState.svelte +1 -1
  5. package/dist/components/PasswordInput.svelte +2 -2
  6. package/dist/components/WScrollArea.svelte +2 -2
  7. package/dist/components/ic/browser/BrowserInputController.svelte +2 -2
  8. package/dist/components/index.d.ts +1 -0
  9. package/dist/components/modals/ActionModal.svelte +3 -0
  10. package/dist/components/modals/ActionModal.svelte.d.ts +1 -0
  11. package/dist/components/modals/BaseModal.svelte +4 -2
  12. package/dist/components/modals/BaseModal.svelte.d.ts +1 -0
  13. package/dist/components/modals/NewItemDialog.svelte +48 -30
  14. package/dist/components/modals/NewItemDialog.svelte.d.ts +3 -0
  15. package/dist/components/modals/Portal.svelte +9 -1
  16. package/dist/components/modals/README.md +34 -1
  17. package/dist/components/modals/RenameDialog.svelte +29 -9
  18. package/dist/components/modals/RenameDialog.svelte.d.ts +3 -0
  19. package/dist/components/modals/messages.d.ts +39 -0
  20. package/dist/components/modals/messages.js +10 -0
  21. package/dist/components/navigation/Breadcrumbs.svelte +30 -17
  22. package/dist/components/navigation/Breadcrumbs.svelte.d.ts +4 -0
  23. package/dist/components/navigation/types.d.ts +8 -0
  24. package/dist/components/pdf/PDFViewer.svelte +17 -8
  25. package/dist/components/pdf/PDFViewer.svelte.d.ts +5 -0
  26. package/dist/components/search-input/SearchInput.svelte +3 -3
  27. package/dist/components/shad-editor/colorpicker.svelte +4 -1
  28. package/dist/components/shad-editor/custom/Extentions/ImageExtention.d.ts +20 -1
  29. package/dist/components/shad-editor/custom/Extentions/ImageExtention.js +4 -1
  30. package/dist/components/shad-editor/custom/code-extended.svelte +4 -2
  31. package/dist/components/shad-editor/custom/image-extended-component.svelte +54 -32
  32. package/dist/components/shad-editor/editor.css +5 -5
  33. package/dist/components/shad-editor/i18n/context.d.ts +6 -0
  34. package/dist/components/shad-editor/i18n/context.js +11 -0
  35. package/dist/components/shad-editor/i18n/index.d.ts +8 -0
  36. package/dist/components/shad-editor/i18n/index.js +11 -0
  37. package/dist/components/shad-editor/i18n/messages.d.ts +109 -0
  38. package/dist/components/shad-editor/i18n/messages.js +116 -0
  39. package/dist/components/shad-editor/icons/block-quote.svelte +3 -1
  40. package/dist/components/shad-editor/icons/bold.svelte +3 -1
  41. package/dist/components/shad-editor/icons/buttle-list.svelte +3 -1
  42. package/dist/components/shad-editor/icons/code.svelte +3 -1
  43. package/dist/components/shad-editor/icons/highlighter.svelte +5 -3
  44. package/dist/components/shad-editor/icons/image.svelte +7 -5
  45. package/dist/components/shad-editor/icons/italic.svelte +3 -1
  46. package/dist/components/shad-editor/icons/link.svelte +8 -6
  47. package/dist/components/shad-editor/icons/ordered-list.svelte +3 -1
  48. package/dist/components/shad-editor/icons/quickcolor.svelte +24 -22
  49. package/dist/components/shad-editor/icons/redo.svelte +3 -1
  50. package/dist/components/shad-editor/icons/search-replace.svelte +16 -14
  51. package/dist/components/shad-editor/icons/strikethrough.svelte +3 -1
  52. package/dist/components/shad-editor/icons/subscript.svelte +3 -1
  53. package/dist/components/shad-editor/icons/superscript.svelte +3 -1
  54. package/dist/components/shad-editor/icons/table.svelte +21 -19
  55. package/dist/components/shad-editor/icons/task-list.svelte +3 -1
  56. package/dist/components/shad-editor/icons/text.svelte +13 -11
  57. package/dist/components/shad-editor/icons/textalign.svelte +11 -9
  58. package/dist/components/shad-editor/icons/textcolor.svelte +5 -3
  59. package/dist/components/shad-editor/icons/underline.svelte +3 -1
  60. package/dist/components/shad-editor/icons/undo.svelte +3 -1
  61. package/dist/components/shad-editor/index.d.ts +1 -0
  62. package/dist/components/shad-editor/index.js +2 -0
  63. package/dist/components/shad-editor/shad-editor.svelte +32 -3
  64. package/dist/components/shad-editor/shad-editor.svelte.d.ts +12 -0
  65. package/dist/components/textDirection.d.ts +91 -0
  66. package/dist/components/textDirection.js +99 -0
  67. package/dist/components/toast/ToasterModal.svelte +49 -14
  68. package/dist/components/toast/ToasterModal.svelte.d.ts +9 -2
  69. package/dist/components/toast/toasterRoots.d.ts +23 -0
  70. package/dist/components/toast/toasterRoots.js +36 -0
  71. package/dist/components/ui/alert/index.d.ts +2 -2
  72. package/dist/components/ui/alert/index.js +1 -1
  73. package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte +1 -1
  74. package/dist/components/ui/calendar/calendar-next-button.svelte +21 -4
  75. package/dist/components/ui/calendar/calendar-next-button.svelte.d.ts +9 -2
  76. package/dist/components/ui/calendar/calendar-prev-button.svelte +21 -4
  77. package/dist/components/ui/calendar/calendar-prev-button.svelte.d.ts +9 -2
  78. package/dist/components/ui/calendar/calendar.svelte +18 -6
  79. package/dist/components/ui/calendar/calendar.svelte.d.ts +6 -1
  80. package/dist/components/ui/command/command-input.svelte +1 -1
  81. package/dist/components/ui/command/command-shortcut.svelte +1 -1
  82. package/dist/components/ui/dialog/dialog-content.svelte +5 -2
  83. package/dist/components/ui/dialog/dialog-content.svelte.d.ts +1 -0
  84. package/dist/components/ui/dialog/dialog-header.svelte +1 -1
  85. package/dist/components/ui/drawer/drawer-header.svelte +1 -1
  86. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +2 -2
  87. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +6 -0
  88. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -1
  89. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
  90. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +1 -1
  91. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +2 -2
  92. package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +1 -1
  93. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +7 -1
  94. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +2 -2
  95. package/dist/components/ui/hover-card/hover-card-content.svelte +6 -0
  96. package/dist/components/ui/input-otp/input-otp-slot.svelte +1 -1
  97. package/dist/components/ui/popover/popover-content.svelte +6 -0
  98. package/dist/components/ui/progress/progress.svelte +2 -2
  99. package/dist/components/ui/range-calendar/range-calendar-cell.svelte +1 -1
  100. package/dist/components/ui/range-calendar/range-calendar-next-button.svelte +21 -4
  101. package/dist/components/ui/range-calendar/range-calendar-next-button.svelte.d.ts +9 -2
  102. package/dist/components/ui/range-calendar/range-calendar-prev-button.svelte +21 -4
  103. package/dist/components/ui/range-calendar/range-calendar-prev-button.svelte.d.ts +9 -2
  104. package/dist/components/ui/range-calendar/range-calendar.svelte +18 -6
  105. package/dist/components/ui/range-calendar/range-calendar.svelte.d.ts +7 -2
  106. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +1 -1
  107. package/dist/components/ui/scroll-area/scroll-area.svelte +6 -1
  108. package/dist/components/ui/select/select-content.svelte +6 -0
  109. package/dist/components/ui/select/select-group-heading.svelte +1 -1
  110. package/dist/components/ui/select/select-item.svelte +2 -2
  111. package/dist/components/ui/slider/slider.svelte +6 -0
  112. package/dist/components/ui/switch/switch.svelte +1 -1
  113. package/dist/components/ui/table/table-cell.svelte +1 -1
  114. package/dist/components/ui/table/table-head.svelte +1 -1
  115. package/dist/components/ui/tooltip/tooltip-content.svelte +6 -0
  116. package/dist/i18n/audit/catalogUsage.d.ts +36 -0
  117. package/dist/i18n/audit/catalogUsage.js +58 -0
  118. package/dist/i18n/audit/designSystemWords.d.ts +47 -0
  119. package/dist/i18n/audit/designSystemWords.js +137 -0
  120. package/dist/i18n/audit/hardCodedText.d.ts +40 -0
  121. package/dist/i18n/audit/hardCodedText.js +27 -0
  122. package/dist/i18n/audit/index.d.ts +19 -0
  123. package/dist/i18n/audit/index.js +19 -0
  124. package/dist/i18n/audit/messageCalls.d.ts +34 -0
  125. package/dist/i18n/audit/messageCalls.js +89 -0
  126. package/dist/i18n/audit/syntaxTree.d.ts +33 -0
  127. package/dist/i18n/audit/syntaxTree.js +90 -0
  128. package/dist/i18n/audit/visibleText.d.ts +57 -0
  129. package/dist/i18n/audit/visibleText.js +252 -0
  130. package/dist/i18n/createI18n.d.ts +63 -0
  131. package/dist/i18n/createI18n.js +72 -0
  132. package/dist/i18n/direction.d.ts +27 -0
  133. package/dist/i18n/direction.js +89 -0
  134. package/dist/i18n/index.d.ts +17 -0
  135. package/dist/i18n/index.js +16 -0
  136. package/dist/i18n/localeDate.d.ts +34 -0
  137. package/dist/i18n/localeDate.js +104 -0
  138. package/dist/i18n/splitMessages.d.ts +21 -0
  139. package/dist/i18n/splitMessages.js +33 -0
  140. package/dist/i18n/translator.d.ts +61 -0
  141. package/dist/i18n/translator.js +337 -0
  142. package/dist/rtl/audit/auditPhysicalPlacement.d.ts +36 -0
  143. package/dist/rtl/audit/auditPhysicalPlacement.js +58 -0
  144. package/dist/rtl/audit/index.d.ts +14 -0
  145. package/dist/rtl/audit/index.js +14 -0
  146. package/dist/rtl/audit/physicalPlacement.d.ts +64 -0
  147. package/dist/rtl/audit/physicalPlacement.js +444 -0
  148. package/dist/shad-editor/index.d.ts +1 -1
  149. package/dist/shad-editor/index.js +1 -1
  150. package/dist/styles/global.css +4 -4
  151. package/dist/utils/fillMessage.d.ts +8 -0
  152. package/dist/utils/fillMessage.js +10 -0
  153. package/dist/utils/itemName.d.ts +17 -0
  154. package/dist/utils/itemName.js +41 -0
  155. package/package.json +18 -1
@@ -12,8 +12,10 @@
12
12
  import { Button } from '../../ui/button/index.js';
13
13
  import * as Popover from '../../ui/popover/index.js';
14
14
  import { Input } from '../../ui/input/index.js';
15
+ import { useI18n } from '../i18n/context.js';
15
16
 
16
17
  let { editor }: ImageProps = $props();
18
+ const { t } = useI18n();
17
19
  </script>
18
20
 
19
21
  <Tooltip.Provider>
@@ -28,14 +30,14 @@
28
30
  </Popover.Trigger>
29
31
  <Popover.Content class="bg-popover shadow-lg *:my-2">
30
32
  <div class="flex items-center justify-between">
31
- <h1 class="text-xl font-bold">Image</h1>
33
+ <h1 class="text-xl font-bold">{$t('shadEditor.image.title')}</h1>
32
34
  <Popover.Close>
33
35
  <X class="size-4 text-muted-foreground" />
34
36
  </Popover.Close>
35
37
  </div>
36
- <p>Insert image url</p>
38
+ <p>{$t('shadEditor.image.urlHint')}</p>
37
39
  <Input
38
- placeholder="Enter image url..."
40
+ placeholder={$t('shadEditor.image.urlPlaceholder')}
39
41
  type="url"
40
42
  onchange={(e) => {
41
43
  if (e !== null && e.target !== null) {
@@ -45,7 +47,7 @@
45
47
  }}
46
48
  class="w-full"
47
49
  />
48
- <p>OR Pick an Image</p>
50
+ <p>{$t('shadEditor.image.orPick')}</p>
49
51
  <Input
50
52
  id="picture"
51
53
  type="file"
@@ -72,7 +74,7 @@
72
74
  </Popover.Root>
73
75
  </Tooltip.Trigger>
74
76
  <Tooltip.Content>
75
- <p>Add Image</p>
77
+ <p>{$t('shadEditor.image.tooltip')}</p>
76
78
  </Tooltip.Content>
77
79
  </Tooltip.Root>
78
80
  </Tooltip.Provider>
@@ -9,8 +9,10 @@
9
9
  import * as Tooltip from '../../ui/tooltip/index.js';
10
10
  import { Button } from '../../ui/button/index.js';
11
11
  import { cn } from '../../../utils.js';
12
+ import { useI18n } from '../i18n/context.js';
12
13
 
13
14
  let { editor }: ItalicProps = $props();
15
+ const { t } = useI18n();
14
16
  </script>
15
17
 
16
18
  <Tooltip.Provider>
@@ -25,7 +27,7 @@
25
27
  </Button>
26
28
  </Tooltip.Trigger>
27
29
  <Tooltip.Content>
28
- <p>Italic (⌘I)</p>
30
+ <p>{$t('shadEditor.toolbar.italic')}</p>
29
31
  </Tooltip.Content>
30
32
  </Tooltip.Root>
31
33
  </Tooltip.Provider>
@@ -13,8 +13,10 @@
13
13
  import { cn } from '../../../utils.js';
14
14
  import * as Popover from '../../ui/popover/index.js';
15
15
  import { Input } from '../../ui/input/index.js';
16
+ import { useI18n } from '../i18n/context.js';
16
17
 
17
18
  let { editor }: LinkProps = $props();
19
+ const { t } = useI18n();
18
20
 
19
21
  function setLink(url: string) {
20
22
  if (url.trim() === '') {
@@ -41,14 +43,14 @@
41
43
  </Popover.Trigger>
42
44
  <Popover.Content class="bg-popover shadow-lg *:my-2">
43
45
  <div class="flex items-center justify-between">
44
- <h1 class="text-xl font-bold">Link</h1>
46
+ <h1 class="text-xl font-bold">{$t('shadEditor.link.title')}</h1>
45
47
  <Popover.Close>
46
48
  <X class="size-4 text-muted-foreground" />
47
49
  </Popover.Close>
48
50
  </div>
49
- <p>Insert or remove link from selected text.</p>
51
+ <p>{$t('shadEditor.link.hint')}</p>
50
52
  <Input
51
- placeholder="Enter link to attach.."
53
+ placeholder={$t('shadEditor.link.placeholder')}
52
54
  value={editor?.getAttributes('link').href}
53
55
  onchange={(e) => {
54
56
  //@ts-ignore
@@ -58,20 +60,20 @@
58
60
  />
59
61
  <div class="flex items-center justify-end gap-2">
60
62
  <Button size="sm" onclick={() => {}}>
61
- <Popover.Close>Insert</Popover.Close>
63
+ <Popover.Close>{$t('shadEditor.link.insert')}</Popover.Close>
62
64
  </Button>
63
65
  <Button
64
66
  variant="destructive"
65
67
  onclick={() => {
66
68
  editor.chain().focus().extendMarkRange('link').unsetLink().run();
67
- }}>Remove</Button
69
+ }}>{$t('shadEditor.link.remove')}</Button
68
70
  >
69
71
  </div>
70
72
  </Popover.Content>
71
73
  </Popover.Root>
72
74
  </Tooltip.Trigger>
73
75
  <Tooltip.Content>
74
- <p>Add Or Remove Link</p>
76
+ <p>{$t('shadEditor.link.tooltip')}</p>
75
77
  </Tooltip.Content>
76
78
  </Tooltip.Root>
77
79
  </Tooltip.Provider>
@@ -9,8 +9,10 @@
9
9
  import * as Tooltip from '../../ui/tooltip/index.js';
10
10
  import { Button } from '../../ui/button/index.js';
11
11
  import { cn } from '../../../utils.js';
12
+ import { useI18n } from '../i18n/context.js';
12
13
 
13
14
  let { editor }: OrderedListProps = $props();
15
+ const { t } = useI18n();
14
16
  </script>
15
17
 
16
18
  <Tooltip.Provider>
@@ -25,7 +27,7 @@
25
27
  </Button>
26
28
  </Tooltip.Trigger>
27
29
  <Tooltip.Content>
28
- <p>Ordered List</p>
30
+ <p>{$t('shadEditor.toolbar.orderedList')}</p>
29
31
  </Tooltip.Content>
30
32
  </Tooltip.Root>
31
33
  </Tooltip.Provider>
@@ -9,20 +9,24 @@
9
9
  import * as Tooltip from '../../ui/tooltip/index.js';
10
10
  import { type Editor } from '@tiptap/core';
11
11
  import { Check, ChevronDown } from 'lucide-svelte';
12
+ import { useI18n } from '../i18n/context.js';
13
+ import type { ShadEditorMessageKey } from '../i18n/messages.js';
12
14
 
13
15
  let { editor }: QuickcolorProps = $props();
16
+ const { t } = useI18n();
14
17
 
15
- const colors = [
16
- { label: 'Default', value: '' },
17
- { label: 'Blue', value: '#0000FF' },
18
- { label: 'Brown', value: '#A52A2A' },
19
- { label: 'Green', value: '#008000' },
20
- { label: 'Grey', value: '#808080' },
21
- { label: 'Orange', value: '#FFA500' },
22
- { label: 'Pink', value: '#FFC0CB' },
23
- { label: 'Purple', value: '#800080' },
24
- { label: 'Red', value: '#FF0000' },
25
- { label: 'Yellow', value: '#FFFF00' }
18
+ // The names of the colours are words: a message key each, and the colour itself is the value.
19
+ const colors: { messageKey: ShadEditorMessageKey; value: string }[] = [
20
+ { messageKey: 'shadEditor.colorName.default', value: '' },
21
+ { messageKey: 'shadEditor.colorName.blue', value: '#0000FF' },
22
+ { messageKey: 'shadEditor.colorName.brown', value: '#A52A2A' },
23
+ { messageKey: 'shadEditor.colorName.green', value: '#008000' },
24
+ { messageKey: 'shadEditor.colorName.grey', value: '#808080' },
25
+ { messageKey: 'shadEditor.colorName.orange', value: '#FFA500' },
26
+ { messageKey: 'shadEditor.colorName.pink', value: '#FFC0CB' },
27
+ { messageKey: 'shadEditor.colorName.purple', value: '#800080' },
28
+ { messageKey: 'shadEditor.colorName.red', value: '#FF0000' },
29
+ { messageKey: 'shadEditor.colorName.yellow', value: '#FFFF00' }
26
30
  ];
27
31
 
28
32
  const currentColor = $derived(editor.getAttributes('textStyle').color);
@@ -40,13 +44,12 @@
40
44
  </DropdownMenu.Trigger>
41
45
  <DropdownMenu.Content class="max-h-[25rem] w-40 overflow-auto">
42
46
  <DropdownMenu.Group>
43
- <span class="text-[0.75rem] font-medium text-muted-foreground">Text Color</span>
47
+ <span class="text-[0.75rem] font-medium text-muted-foreground">{$t('shadEditor.quickColor.textColor')}</span>
44
48
  {#each colors as color}
45
49
  <DropdownMenu.Item
46
50
  class="flex items-center"
47
51
  onclick={() => {
48
- if (color.value === '' || color.label === 'Default')
49
- editor.chain().focus().unsetColor().run();
52
+ if (color.value === '') editor.chain().focus().unsetColor().run();
50
53
  else
51
54
  editor
52
55
  .chain()
@@ -59,22 +62,21 @@
59
62
  <span class="rounded border px-1 py-px font-medium" style={`color: ${color.value}`}
60
63
  >A</span
61
64
  >
62
- <span>{color.label}</span>
65
+ <span>{$t(color.messageKey)}</span>
63
66
  {#if editor.isActive('textStyle', { color: color.value })}
64
- <Check class="absolute right-2 !size-3 text-muted-foreground" />
67
+ <Check class="absolute end-2 !size-3 text-muted-foreground" />
65
68
  {/if}
66
69
  </DropdownMenu.Item>
67
70
  {/each}
68
71
  </DropdownMenu.Group>
69
72
  <DropdownMenu.Separator />
70
73
  <DropdownMenu.Group>
71
- <span class="text-[0.75rem] font-medium text-muted-foreground">Background Colors</span>
74
+ <span class="text-[0.75rem] font-medium text-muted-foreground">{$t('shadEditor.quickColor.backgroundColors')}</span>
72
75
  {#each colors as color}
73
76
  <DropdownMenu.Item
74
77
  class="flex items-center"
75
78
  onclick={() => {
76
- if (color.value === '' || color.label === 'Default')
77
- editor.chain().focus().unsetHighlight().run();
79
+ if (color.value === '') editor.chain().focus().unsetHighlight().run();
78
80
  else editor.chain().focus().toggleHighlight({ color: color.value }).run();
79
81
  }}
80
82
  closeOnSelect={false}
@@ -83,9 +85,9 @@
83
85
  class="rounded px-1 py-px font-medium"
84
86
  style={`background-color: ${color.value};`}>A</span
85
87
  >
86
- <span>{color.label}</span>
88
+ <span>{$t(color.messageKey)}</span>
87
89
  {#if editor.isActive('highlight', { color: color.value })}
88
- <Check class="absolute right-2 !size-3 text-muted-foreground" />
90
+ <Check class="absolute end-2 !size-3 text-muted-foreground" />
89
91
  {/if}
90
92
  </DropdownMenu.Item>
91
93
  {/each}
@@ -94,7 +96,7 @@
94
96
  </DropdownMenu.Root>
95
97
  </Tooltip.Trigger>
96
98
  <Tooltip.Content>
97
- <p>Quick Colors</p>
99
+ <p>{$t('shadEditor.quickColor.tooltip')}</p>
98
100
  </Tooltip.Content>
99
101
  </Tooltip.Root>
100
102
  </Tooltip.Provider>
@@ -8,8 +8,10 @@
8
8
  import { type Editor } from '@tiptap/core';
9
9
  import * as Tooltip from '../../ui/tooltip/index.js';
10
10
  import { Button } from '../../ui/button/index.js';
11
+ import { useI18n } from '../i18n/context.js';
11
12
 
12
13
  let { editor }: RedoProps = $props();
14
+ const { t } = useI18n();
13
15
  </script>
14
16
 
15
17
  <Tooltip.Provider>
@@ -25,7 +27,7 @@
25
27
  </Button>
26
28
  </Tooltip.Trigger>
27
29
  <Tooltip.Content>
28
- <p>Undo (⌘R)</p>
30
+ <p>{$t('shadEditor.toolbar.redo')}</p>
29
31
  </Tooltip.Content>
30
32
  </Tooltip.Root>
31
33
  </Tooltip.Provider>
@@ -18,8 +18,10 @@
18
18
  ReplaceAll,
19
19
  ChevronDown
20
20
  } from 'lucide-svelte';
21
+ import { useI18n } from '../i18n/context.js';
21
22
 
22
23
  let { editor }: SearchReplaceProps = $props();
24
+ const { t } = useI18n();
23
25
 
24
26
  let searchText = $state('');
25
27
  let replaceText = $state('');
@@ -90,7 +92,7 @@
90
92
  </Popover.Trigger>
91
93
  <Popover.Content class="bg-popover shadow-lg *:my-2">
92
94
  <Popover.Close
93
- class="absolute right-2 top-0 text-muted-foreground"
95
+ class="absolute end-2 top-0 text-muted-foreground"
94
96
  onclick={() => {
95
97
  clear();
96
98
  updateSearchTerm(true);
@@ -100,29 +102,29 @@
100
102
  </Popover.Close>
101
103
  <div class="flex items-center justify-between">
102
104
  <Input
103
- placeholder="Enter Text to search.."
105
+ placeholder={$t('shadEditor.search.searchPlaceholder')}
104
106
  bind:value={searchText}
105
107
  oninput={() => updateSearchTerm()}
106
- class="mr-1 "
108
+ class="me-1 "
107
109
  />
108
- <Button variant="ghost" class="ml-1 size-8" onclick={previous}>
109
- <ArrowLeft />
110
+ <Button variant="ghost" class="ms-1 size-8" onclick={previous}>
111
+ <ArrowLeft class="rtl:-scale-x-100" />
110
112
  </Button>
111
- <Button variant="ghost" class="ml-1 size-8" onclick={next}>
112
- <ArrowRight />
113
+ <Button variant="ghost" class="ms-1 size-8" onclick={next}>
114
+ <ArrowRight class="rtl:-scale-x-100" />
113
115
  </Button>
114
116
  </div>
115
117
  <div class="flex items-center justify-between">
116
118
  <Input
117
- placeholder="Enter Text to Replace.."
119
+ placeholder={$t('shadEditor.search.replacePlaceholder')}
118
120
  bind:value={replaceText}
119
121
  oninput={() => updateSearchTerm()}
120
- class="mr-1 "
122
+ class="me-1 "
121
123
  />
122
- <Button variant="ghost" class="ml-1 size-8" onclick={replace}>
124
+ <Button variant="ghost" class="ms-1 size-8" onclick={replace}>
123
125
  <Replace />
124
126
  </Button>
125
- <Button variant="ghost" class="ml-1 size-8" onclick={replaceAll}>
127
+ <Button variant="ghost" class="ms-1 size-8" onclick={replaceAll}>
126
128
  <ReplaceAll />
127
129
  </Button>
128
130
  </div>
@@ -135,17 +137,17 @@
135
137
  bind:checked={caseSensitive}
136
138
  onchange={() => updateSearchTerm()}
137
139
  />
138
- <p>Case Sensitive</p>
140
+ <p>{$t('shadEditor.search.caseSensitive')}</p>
139
141
  </div>
140
142
  <div class="flex items-center gap-2">
141
- {searchCount > 0 ? searchIndex + 1 : 0} / {searchCount}
143
+ {$t('shadEditor.search.position', { index: searchCount > 0 ? searchIndex + 1 : 0, count: searchCount ?? 0 })}
142
144
  </div>
143
145
  </div>
144
146
  </Popover.Content>
145
147
  </Popover.Root>
146
148
  </Tooltip.Trigger>
147
149
  <Tooltip.Content>
148
- <p>Search And Replace Text</p>
150
+ <p>{$t('shadEditor.search.tooltip')}</p>
149
151
  </Tooltip.Content>
150
152
  </Tooltip.Root>
151
153
  </Tooltip.Provider>
@@ -9,8 +9,10 @@
9
9
  import * as Tooltip from '../../ui/tooltip/index.js';
10
10
  import { Button } from '../../ui/button/index.js';
11
11
  import { cn } from '../../../utils.js';
12
+ import { useI18n } from '../i18n/context.js';
12
13
 
13
14
  let { editor }: StrikethroughProps = $props();
15
+ const { t } = useI18n();
14
16
  </script>
15
17
 
16
18
  <Tooltip.Provider>
@@ -25,7 +27,7 @@
25
27
  </Button>
26
28
  </Tooltip.Trigger>
27
29
  <Tooltip.Content>
28
- <p>Strike (⌘⇧S)</p>
30
+ <p>{$t('shadEditor.toolbar.strikethrough')}</p>
29
31
  </Tooltip.Content>
30
32
  </Tooltip.Root>
31
33
  </Tooltip.Provider>
@@ -9,8 +9,10 @@
9
9
  import * as Tooltip from '../../ui/tooltip/index.js';
10
10
  import { Button } from '../../ui/button/index.js';
11
11
  import { cn } from '../../../utils.js';
12
+ import { useI18n } from '../i18n/context.js';
12
13
 
13
14
  let { editor }: SubscriptProps = $props();
15
+ const { t } = useI18n();
14
16
  </script>
15
17
 
16
18
  <Tooltip.Provider>
@@ -25,7 +27,7 @@
25
27
  </Button>
26
28
  </Tooltip.Trigger>
27
29
  <Tooltip.Content>
28
- <p>Subscript (⌘,)</p>
30
+ <p>{$t('shadEditor.toolbar.subscript')}</p>
29
31
  </Tooltip.Content>
30
32
  </Tooltip.Root>
31
33
  </Tooltip.Provider>
@@ -9,8 +9,10 @@
9
9
  import * as Tooltip from '../../ui/tooltip/index.js';
10
10
  import { Button } from '../../ui/button/index.js';
11
11
  import { cn } from '../../../utils.js';
12
+ import { useI18n } from '../i18n/context.js';
12
13
 
13
14
  let { editor }: SuperscriptProps = $props();
15
+ const { t } = useI18n();
14
16
  </script>
15
17
 
16
18
  <Tooltip.Provider>
@@ -25,7 +27,7 @@
25
27
  </Button>
26
28
  </Tooltip.Trigger>
27
29
  <Tooltip.Content>
28
- <p>Superscript (⌘.)</p>
30
+ <p>{$t('shadEditor.toolbar.superscript')}</p>
29
31
  </Tooltip.Content>
30
32
  </Tooltip.Root>
31
33
  </Tooltip.Provider>
@@ -9,8 +9,10 @@
9
9
  import * as Tooltip from '../../ui/tooltip/index.js';
10
10
  import { type Editor } from '@tiptap/core';
11
11
  import { Table, ChevronDown } from 'lucide-svelte';
12
+ import { useI18n } from '../i18n/context.js';
12
13
 
13
14
  let { editor }: TableProps = $props();
15
+ const { t } = useI18n();
14
16
  </script>
15
17
 
16
18
  <Tooltip.Provider>
@@ -28,75 +30,75 @@
28
30
  onclick={() =>
29
31
  editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run()}
30
32
  >
31
- <span>Insert Table</span>
33
+ <span>{$t('shadEditor.table.insert')}</span>
32
34
  </DropdownMenu.Item>
33
35
  <DropdownMenu.Sub>
34
36
  <DropdownMenu.SubTrigger>
35
- <span>Header</span>
37
+ <span>{$t('shadEditor.table.header')}</span>
36
38
  </DropdownMenu.SubTrigger>
37
39
  <DropdownMenu.SubContent>
38
40
  <DropdownMenu.Item onclick={() => editor.chain().focus().toggleHeaderColumn().run()}>
39
- <span>Toggle Column</span>
41
+ <span>{$t('shadEditor.table.toggleColumn')}</span>
40
42
  </DropdownMenu.Item>
41
43
  <DropdownMenu.Item onclick={() => editor.chain().focus().toggleHeaderRow().run()}>
42
- <span>Toggle Row</span>
44
+ <span>{$t('shadEditor.table.toggleRow')}</span>
43
45
  </DropdownMenu.Item>
44
46
  <DropdownMenu.Item onclick={() => editor.chain().focus().toggleHeaderCell().run()}>
45
- <span>Toggle Cell</span>
47
+ <span>{$t('shadEditor.table.toggleCell')}</span>
46
48
  </DropdownMenu.Item>
47
49
  </DropdownMenu.SubContent>
48
50
  </DropdownMenu.Sub>
49
51
  <DropdownMenu.Sub>
50
52
  <DropdownMenu.SubTrigger>
51
- <span>Cells</span>
53
+ <span>{$t('shadEditor.table.cells')}</span>
52
54
  </DropdownMenu.SubTrigger>
53
55
  <DropdownMenu.SubContent>
54
56
  <DropdownMenu.Item onclick={() => editor.chain().focus().mergeCells().run()}>
55
- <span>Merge</span>
57
+ <span>{$t('shadEditor.table.merge')}</span>
56
58
  </DropdownMenu.Item>
57
59
  <DropdownMenu.Item onclick={() => editor.chain().focus().splitCell().run()}>
58
- <span>Split</span>
60
+ <span>{$t('shadEditor.table.split')}</span>
59
61
  </DropdownMenu.Item>
60
62
  <DropdownMenu.Item onclick={() => editor.chain().focus().mergeOrSplit().run()}>
61
- <span>Merge or Split</span>
63
+ <span>{$t('shadEditor.table.mergeOrSplit')}</span>
62
64
  </DropdownMenu.Item>
63
65
  </DropdownMenu.SubContent>
64
66
  </DropdownMenu.Sub>
65
67
  <DropdownMenu.Sub>
66
68
  <DropdownMenu.SubTrigger>
67
- <span>Row</span>
69
+ <span>{$t('shadEditor.table.row')}</span>
68
70
  </DropdownMenu.SubTrigger>
69
71
  <DropdownMenu.SubContent>
70
72
  <DropdownMenu.Item onclick={() => editor.chain().focus().addRowBefore().run()}>
71
- <span>Insert Above</span>
73
+ <span>{$t('shadEditor.table.insertAbove')}</span>
72
74
  </DropdownMenu.Item>
73
75
  <DropdownMenu.Item onclick={() => editor.chain().focus().addRowAfter().run()}>
74
- <span>Insert Below</span>
76
+ <span>{$t('shadEditor.table.insertBelow')}</span>
75
77
  </DropdownMenu.Item>
76
78
  <DropdownMenu.Item
77
79
  onclick={() => editor.chain().focus().deleteRow().run()}
78
80
  class="text-destructive hover:text-foreground data-highlighted:bg-destructive"
79
81
  >
80
- <span>Delete Row</span>
82
+ <span>{$t('shadEditor.table.deleteRow')}</span>
81
83
  </DropdownMenu.Item>
82
84
  </DropdownMenu.SubContent>
83
85
  </DropdownMenu.Sub>
84
86
  <DropdownMenu.Sub>
85
87
  <DropdownMenu.SubTrigger>
86
- <span>Column</span>
88
+ <span>{$t('shadEditor.table.column')}</span>
87
89
  </DropdownMenu.SubTrigger>
88
90
  <DropdownMenu.SubContent>
89
91
  <DropdownMenu.Item onclick={() => editor.chain().focus().addColumnBefore().run()}>
90
- <span>Insert Before</span>
92
+ <span>{$t('shadEditor.table.insertBefore')}</span>
91
93
  </DropdownMenu.Item>
92
94
  <DropdownMenu.Item onclick={() => editor.chain().focus().addColumnAfter().run()}>
93
- <span>Insert After</span>
95
+ <span>{$t('shadEditor.table.insertAfter')}</span>
94
96
  </DropdownMenu.Item>
95
97
  <DropdownMenu.Item
96
98
  onclick={() => editor.chain().focus().deleteColumn().run()}
97
99
  class="text-destructive hover:text-foreground data-highlighted:bg-destructive"
98
100
  >
99
- <span>Delete</span>
101
+ <span>{$t('shadEditor.table.deleteColumn')}</span>
100
102
  </DropdownMenu.Item>
101
103
  </DropdownMenu.SubContent>
102
104
  </DropdownMenu.Sub>
@@ -104,13 +106,13 @@
104
106
  onclick={() => editor.chain().focus().deleteTable().run()}
105
107
  class="text-destructive hover:text-foreground data-highlighted:bg-destructive"
106
108
  >
107
- <span>Delete</span>
109
+ <span>{$t('shadEditor.table.deleteTable')}</span>
108
110
  </DropdownMenu.Item>
109
111
  </DropdownMenu.Content>
110
112
  </DropdownMenu.Root>
111
113
  </Tooltip.Trigger>
112
114
  <Tooltip.Content>
113
- <p>Table</p>
115
+ <p>{$t('shadEditor.table.tooltip')}</p>
114
116
  </Tooltip.Content>
115
117
  </Tooltip.Root>
116
118
  </Tooltip.Provider>
@@ -9,8 +9,10 @@
9
9
  import * as Tooltip from '../../ui/tooltip/index.js';
10
10
  import { Button } from '../../ui/button/index.js';
11
11
  import { cn } from '../../../utils.js';
12
+ import { useI18n } from '../i18n/context.js';
12
13
 
13
14
  let { editor }: TaskListProps = $props();
15
+ const { t } = useI18n();
14
16
  </script>
15
17
 
16
18
  <Tooltip.Provider>
@@ -25,7 +27,7 @@
25
27
  </Button>
26
28
  </Tooltip.Trigger>
27
29
  <Tooltip.Content>
28
- <p>Tasks List (⌘⇧9)</p>
30
+ <p>{$t('shadEditor.toolbar.taskList')}</p>
29
31
  </Tooltip.Content>
30
32
  </Tooltip.Root>
31
33
  </Tooltip.Provider>
@@ -18,8 +18,10 @@
18
18
  import * as Tooltip from '../../ui/tooltip/index.js';
19
19
  import * as DropdownMenu from '../../ui/dropdown-menu/index.js';
20
20
  import Button from '../../ui/button/button.svelte';
21
+ import { useI18n } from '../i18n/context.js';
21
22
 
22
23
  let { editor }: TextProps = $props();
24
+ const { t } = useI18n();
23
25
  </script>
24
26
 
25
27
  <Tooltip.Provider>
@@ -49,52 +51,52 @@
49
51
  onclick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}
50
52
  closeOnSelect={false}
51
53
  >
52
- <Heading1 /> Heading 1
54
+ <Heading1 /> {$t('shadEditor.text.heading1')}
53
55
  {#if editor.isActive('heading', { level: 1 })}
54
- <Check class="absolute right-2 !size-3 text-muted-foreground" />
56
+ <Check class="absolute end-2 !size-3 text-muted-foreground" />
55
57
  {/if}
56
58
  </DropdownMenu.Item>
57
59
  <DropdownMenu.Item
58
60
  onclick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}
59
61
  closeOnSelect={false}
60
62
  >
61
- <Heading2 /> Heading 2
63
+ <Heading2 /> {$t('shadEditor.text.heading2')}
62
64
  {#if editor.isActive('heading', { level: 2 })}
63
- <Check class="absolute right-2 !size-3 text-muted-foreground" />
65
+ <Check class="absolute end-2 !size-3 text-muted-foreground" />
64
66
  {/if}
65
67
  </DropdownMenu.Item>
66
68
  <DropdownMenu.Item
67
69
  onclick={() => editor.chain().focus().toggleHeading({ level: 3 }).run()}
68
70
  closeOnSelect={false}
69
71
  >
70
- <Heading3 /> Heading 3
72
+ <Heading3 /> {$t('shadEditor.text.heading3')}
71
73
  {#if editor.isActive('heading', { level: 3 })}
72
- <Check class="absolute right-2 !size-3 text-muted-foreground" />
74
+ <Check class="absolute end-2 !size-3 text-muted-foreground" />
73
75
  {/if}
74
76
  </DropdownMenu.Item>
75
77
  <DropdownMenu.Item
76
78
  onclick={() => editor.chain().focus().setParagraph().run()}
77
79
  closeOnSelect={false}
78
80
  >
79
- <Pilcrow /> Paragraph
81
+ <Pilcrow /> {$t('shadEditor.text.paragraph')}
80
82
  {#if editor.isActive('paragraph')}
81
- <Check class="absolute right-2 size-3! text-muted-foreground" />
83
+ <Check class="absolute end-2 size-3! text-muted-foreground" />
82
84
  {/if}
83
85
  </DropdownMenu.Item>
84
86
  <DropdownMenu.Item
85
87
  onclick={() => editor.chain().focus().toggleCodeBlock().run()}
86
88
  closeOnSelect={false}
87
89
  >
88
- <FileJson /> Code Block
90
+ <FileJson /> {$t('shadEditor.text.codeBlock')}
89
91
  {#if editor.isActive('codeBlock')}
90
- <Check class="absolute right-2 !size-3 text-muted-foreground" />
92
+ <Check class="absolute end-2 !size-3 text-muted-foreground" />
91
93
  {/if}
92
94
  </DropdownMenu.Item>
93
95
  </DropdownMenu.Content>
94
96
  </DropdownMenu.Root>
95
97
  </Tooltip.Trigger>
96
98
  <Tooltip.Content>
97
- <p>Text Formatting</p>
99
+ <p>{$t('shadEditor.text.tooltip')}</p>
98
100
  </Tooltip.Content>
99
101
  </Tooltip.Root>
100
102
  </Tooltip.Provider>