@adecore/ui 0.23.0 → 0.24.0

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 (129) hide show
  1. package/dist/ButtonGroup.d.ts +1 -1
  2. package/dist/ButtonGroup.js +1 -1
  3. package/dist/Checkbox.js +1 -1
  4. package/dist/ChoiceCards.js +2 -2
  5. package/dist/CloseButton.js +1 -1
  6. package/dist/ColorSwatch.d.ts +1 -1
  7. package/dist/ColorSwatch.js +1 -1
  8. package/dist/Field.d.ts +1 -1
  9. package/dist/Field.js +4 -3
  10. package/dist/IconButton.d.ts +1 -1
  11. package/dist/IconButton.js +1 -1
  12. package/dist/ListRow.d.ts +1 -1
  13. package/dist/ListRow.js +1 -1
  14. package/dist/MiddleTruncate.d.ts +8 -0
  15. package/dist/MiddleTruncate.js +59 -0
  16. package/dist/PanelHeader.d.ts +1 -1
  17. package/dist/PanelHeader.js +1 -1
  18. package/dist/SectionLabel.d.ts +1 -1
  19. package/dist/SectionLabel.js +1 -1
  20. package/dist/Select.js +1 -1
  21. package/dist/SelectSearch.js +1 -1
  22. package/dist/Slider.js +1 -1
  23. package/dist/Surface.d.ts +1 -1
  24. package/dist/Surface.js +1 -1
  25. package/dist/Switch.js +1 -1
  26. package/dist/Toasts.d.ts +1 -1
  27. package/dist/Toasts.js +4 -5
  28. package/dist/Tooltip.d.ts +1 -1
  29. package/dist/Tooltip.js +2 -2
  30. package/dist/clipboard.d.ts +1 -1
  31. package/dist/clipboard.js +12 -2
  32. package/dist/dialog/parts.d.ts +3 -3
  33. package/dist/dialog/parts.js +2 -2
  34. package/dist/file-tree/helpers.d.ts +1 -0
  35. package/dist/file-tree/helpers.js +9 -0
  36. package/dist/file-tree/parts.d.ts +1 -1
  37. package/dist/file-tree/parts.js +1 -1
  38. package/dist/file-tree/use-slots.d.ts +8 -0
  39. package/dist/file-tree/use-slots.js +64 -22
  40. package/dist/format/datetime.d.ts +1 -0
  41. package/dist/format/datetime.js +15 -0
  42. package/dist/format/index.d.ts +1 -1
  43. package/dist/format/index.js +1 -1
  44. package/dist/index.d.ts +6 -3
  45. package/dist/index.js +5 -1
  46. package/dist/key-value-list/parts.d.ts +1 -1
  47. package/dist/key-value-list/parts.js +1 -1
  48. package/dist/locales/en.d.ts +83 -0
  49. package/dist/locales/en.js +82 -0
  50. package/dist/locales/nl.d.ts +83 -0
  51. package/dist/locales/nl.js +82 -0
  52. package/dist/locales.js +3 -2
  53. package/dist/menu/parts.d.ts +7 -7
  54. package/dist/menu/parts.js +4 -4
  55. package/dist/middle-truncate.d.ts +7 -0
  56. package/dist/middle-truncate.js +34 -0
  57. package/dist/popover/parts.d.ts +7 -7
  58. package/dist/popover/parts.js +2 -2
  59. package/dist/prefetch.js +6 -1
  60. package/dist/settings/ConfirmDialog.d.ts +4 -1
  61. package/dist/settings/ConfirmDialog.js +2 -2
  62. package/dist/settings/SettingsDialog.js +1 -1
  63. package/dist/tabs/parts.d.ts +8 -4
  64. package/dist/tabs/parts.js +84 -18
  65. package/dist/testing/dedupe.js +74 -23
  66. package/dist/theme.css +24 -8
  67. package/dist/tree/parts.d.ts +1 -1
  68. package/dist/tree/parts.js +1 -1
  69. package/dist/workspace/DropPreview.d.ts +8 -0
  70. package/dist/workspace/DropPreview.js +14 -0
  71. package/dist/workspace/SplitView.d.ts +1 -1
  72. package/dist/workspace/SplitView.js +59 -18
  73. package/dist/workspace/TabStrip.d.ts +1 -1
  74. package/dist/workspace/TabStrip.js +1 -1
  75. package/dist/workspace/Workspace.d.ts +2 -2
  76. package/dist/workspace/Workspace.js +4 -2
  77. package/dist/workspace/preview.d.ts +4 -8
  78. package/dist/workspace/preview.js +17 -2
  79. package/package.json +2 -2
  80. package/src/ButtonGroup.tsx +1 -1
  81. package/src/Checkbox.tsx +1 -1
  82. package/src/ChoiceCards.tsx +2 -2
  83. package/src/CloseButton.tsx +1 -1
  84. package/src/ColorSwatch.tsx +1 -1
  85. package/src/ErrorBoundary.tsx +4 -4
  86. package/src/Field.tsx +4 -5
  87. package/src/IconButton.tsx +1 -1
  88. package/src/ListRow.tsx +1 -1
  89. package/src/MiddleTruncate.tsx +84 -0
  90. package/src/PanelHeader.tsx +1 -1
  91. package/src/SectionLabel.tsx +1 -1
  92. package/src/Select.tsx +1 -1
  93. package/src/SelectSearch.tsx +1 -1
  94. package/src/Slider.tsx +1 -1
  95. package/src/Surface.tsx +1 -1
  96. package/src/Switch.tsx +1 -1
  97. package/src/Toasts.tsx +5 -6
  98. package/src/Tooltip.tsx +5 -5
  99. package/src/clipboard.ts +11 -2
  100. package/src/dialog/parts.tsx +2 -2
  101. package/src/file-tree/helpers.ts +10 -0
  102. package/src/file-tree/parts.tsx +1 -1
  103. package/src/file-tree/use-slots.ts +68 -23
  104. package/src/format/datetime.ts +17 -0
  105. package/src/format/index.ts +1 -0
  106. package/src/index.ts +6 -3
  107. package/src/key-value-list/parts.tsx +1 -1
  108. package/src/locales/en.ts +82 -0
  109. package/src/locales/nl.ts +82 -0
  110. package/src/locales.ts +3 -2
  111. package/src/menu/parts.tsx +4 -4
  112. package/src/middle-truncate.ts +41 -0
  113. package/src/popover/parts.tsx +2 -2
  114. package/src/prefetch.ts +6 -1
  115. package/src/settings/ConfirmDialog.tsx +7 -1
  116. package/src/settings/SettingsDialog.tsx +1 -1
  117. package/src/tabs/parts.tsx +156 -54
  118. package/src/testing/dedupe.ts +87 -24
  119. package/src/theme.css +24 -8
  120. package/src/tree/parts.tsx +1 -1
  121. package/src/workspace/DropPreview.tsx +26 -0
  122. package/src/workspace/SplitView.tsx +58 -22
  123. package/src/workspace/TabStrip.tsx +1 -1
  124. package/src/workspace/Workspace.tsx +7 -3
  125. package/src/workspace/preview.ts +22 -9
  126. package/dist/locales/en.json +0 -82
  127. package/dist/locales/nl.json +0 -82
  128. package/src/locales/en.json +0 -82
  129. package/src/locales/nl.json +0 -82
@@ -12,7 +12,7 @@ import {
12
12
  type KeyboardEvent,
13
13
  type ReactNode
14
14
  } from 'react';
15
- import { useRender } from '@base-ui-components/react/use-render';
15
+ import { useRender } from '@base-ui/react/use-render';
16
16
  import { GripVertical, Maximize2, Minimize2 } from 'lucide-react';
17
17
  import clsx from 'clsx';
18
18
  import { useTranslation } from 'react-i18next';
@@ -31,7 +31,8 @@ import {
31
31
  } from './geometry.ts';
32
32
  import { splitPanes, updateSplitLayout, type SplitCommand, type SplitLayout, type SplitPane } from './model.ts';
33
33
  import { TabStrip, type TabStripItem, type TabStripProps } from './TabStrip.tsx';
34
- import { dropPreviewPath, rectPreview, tabPreview, type DropPreviewShape } from './preview.ts';
34
+ import { DropPreview } from './DropPreview.tsx';
35
+ import { rectDropPreview, sameDropPreview, tabDropPreview, type DropPreviewShape } from './preview.ts';
35
36
 
36
37
  export interface SplitViewInfo {
37
38
  paneId: string;
@@ -150,6 +151,7 @@ function Divider({
150
151
  event.preventDefault();
151
152
  cleanup.current?.();
152
153
  const element = event.currentTarget;
154
+ const view = element.ownerDocument.defaultView;
153
155
  const pointerId = event.pointerId;
154
156
  const start = horizontal ? event.clientX : event.clientY;
155
157
  const parent = element.parentElement;
@@ -157,16 +159,46 @@ function Divider({
157
159
  const scale = horizontal ? (rect?.width ?? 1) / (parent?.clientWidth || 1) : (rect?.height ?? 1) / (parent?.clientHeight || 1);
158
160
  element.dataset.resizing = '';
159
161
  element.focus();
162
+ // A pointer reports more often than the screen draws; one resize per frame is all that shows.
163
+ let frame = 0;
164
+ let pending: PointerEvent | null = null;
165
+ const apply = (): void => {
166
+ frame = 0;
167
+ const next = pending;
168
+ pending = null;
169
+ if (next) {
170
+ const delta = ((horizontal ? next.clientX : next.clientY) - start) / (scale || 1);
171
+ onResize(resizeSplit(divider, delta, next.altKey, 8 / (scale || 1), minimumResizeShare));
172
+ }
173
+ };
160
174
  const move = (next: PointerEvent): void => {
161
175
  if (next.pointerId !== pointerId) {
162
176
  return;
163
177
  }
164
- const delta = ((horizontal ? next.clientX : next.clientY) - start) / (scale || 1);
165
- onResize(resizeSplit(divider, delta, next.altKey, 8 / (scale || 1), minimumResizeShare));
178
+ pending = next;
179
+ if (frame !== 0) {
180
+ return;
181
+ }
182
+ if (view) {
183
+ frame = view.requestAnimationFrame(apply);
184
+ } else {
185
+ apply();
186
+ }
187
+ };
188
+ const release = (): void => {
189
+ if (frame !== 0) {
190
+ view?.cancelAnimationFrame(frame);
191
+ apply();
192
+ }
193
+ end();
166
194
  };
167
195
  const end = (): void => {
196
+ if (frame !== 0) {
197
+ view?.cancelAnimationFrame(frame);
198
+ frame = 0;
199
+ }
168
200
  element.removeEventListener('pointermove', move);
169
- element.removeEventListener('pointerup', end);
201
+ element.removeEventListener('pointerup', release);
170
202
  element.removeEventListener('pointercancel', end);
171
203
  element.removeEventListener('lostpointercapture', end);
172
204
  element.ownerDocument.defaultView?.removeEventListener('blur', end);
@@ -179,7 +211,7 @@ function Divider({
179
211
  cleanup.current = end;
180
212
  element.setPointerCapture(pointerId);
181
213
  element.addEventListener('pointermove', move);
182
- element.addEventListener('pointerup', end);
214
+ element.addEventListener('pointerup', release);
183
215
  element.addEventListener('pointercancel', end);
184
216
  element.addEventListener('lostpointercapture', end);
185
217
  element.ownerDocument.defaultView?.addEventListener('blur', end);
@@ -243,6 +275,14 @@ export function SplitView({
243
275
  const [dragging, setDragging] = useState(false);
244
276
  const drag = useRef<(SplitDrag & { width: number }) | null>(null);
245
277
  const [preview, setPreview] = useState<DropPreviewShape | null>(null);
278
+ // A dragover fires many times a second; only a different shape is worth a render.
279
+ const shownPreview = useRef<DropPreviewShape | null>(null);
280
+ const showPreview = useCallback((shape: DropPreviewShape | null): void => {
281
+ if (!sameDropPreview(shownPreview.current, shape)) {
282
+ shownPreview.current = shape;
283
+ setPreview(shape);
284
+ }
285
+ }, []);
246
286
  const latest = useRef({ value, onValueChange });
247
287
  useLayoutEffect(() => {
248
288
  latest.current = { value, onValueChange };
@@ -290,8 +330,8 @@ export function SplitView({
290
330
  const stopDrag = useCallback((): void => {
291
331
  drag.current = null;
292
332
  setDragging(false);
293
- setPreview(null);
294
- }, []);
333
+ showPreview(null);
334
+ }, [showPreview]);
295
335
  useEffect(() => {
296
336
  if (!dragging) {
297
337
  return;
@@ -391,9 +431,9 @@ export function SplitView({
391
431
  return null;
392
432
  }
393
433
  const header = Math.min(barHeight, rect.height);
394
- const strip = paneElement(root.current, 'splitHeader', rect.pane.id);
395
- const tabRects = Array.from(strip?.querySelectorAll('[data-document-tab]') ?? [], (element) => element.getBoundingClientRect());
396
434
  const inHeader = y < rect.y + header;
435
+ const strip = inHeader ? paneElement(root.current, 'splitHeader', rect.pane.id) : undefined;
436
+ const tabRects = Array.from(strip?.querySelectorAll('[data-document-tab]') ?? [], (element) => element.getBoundingClientRect());
397
437
  const side = inHeader ? undefined : (splitSideAt(rect, x, y) ?? 'center');
398
438
  const index = inHeader ? tabGapAt(tabRects, event.clientX) : undefined;
399
439
  const target: SplitDropTarget = { paneId: rect.pane.id, side, index };
@@ -406,7 +446,7 @@ export function SplitView({
406
446
  return null;
407
447
  }
408
448
  if (side === 'center') {
409
- return { target, shape: rectPreview(rect) };
449
+ return { target, shape: rectDropPreview(rect) };
410
450
  }
411
451
  if (side) {
412
452
  const horizontal = side === 'left' || side === 'right';
@@ -414,7 +454,7 @@ export function SplitView({
414
454
  const height = horizontal ? rect.height : Math.max(0, (rect.height - gap) / 2);
415
455
  return {
416
456
  target,
417
- shape: rectPreview({
457
+ shape: rectDropPreview({
418
458
  x: side === 'right' ? rect.x + rect.width - width : rect.x,
419
459
  y: side === 'bottom' ? rect.y + rect.height - height : rect.y,
420
460
  width,
@@ -423,7 +463,7 @@ export function SplitView({
423
463
  };
424
464
  }
425
465
  if (header === 0) {
426
- return { target, shape: rectPreview(rect) };
466
+ return { target, shape: rectDropPreview(rect) };
427
467
  }
428
468
  const tabWidth = Math.min(rect.width, (drag.current?.width ?? 128) / (measurement.scaleX || 1));
429
469
  const next = tabRects[index ?? tabRects.length];
@@ -431,7 +471,7 @@ export function SplitView({
431
471
  const relative = Math.max(0, Math.min(rect.width - tabWidth, (left - measurement.left) / (measurement.scaleX || 1) - rect.x));
432
472
  return {
433
473
  target,
434
- shape: tabPreview(
474
+ shape: tabDropPreview(
435
475
  { gap: index ?? rect.pane.views.length, left: relative, tabWidth, width: rect.width, height: rect.height, barHeight: header },
436
476
  { x: rect.x, y: rect.y }
437
477
  )
@@ -493,11 +533,11 @@ export function SplitView({
493
533
  onDragOver: (event: DragEvent<HTMLDivElement>) => {
494
534
  props.onDragOver?.(event);
495
535
  if (event.defaultPrevented) {
496
- setPreview(null);
536
+ showPreview(null);
497
537
  return;
498
538
  }
499
539
  const drop = locateDrop(event);
500
- setPreview(drop?.shape ?? null);
540
+ showPreview(drop?.shape ?? null);
501
541
  if (drop) {
502
542
  event.preventDefault();
503
543
  event.dataTransfer.dropEffect = drag.current ? 'move' : 'copy';
@@ -506,7 +546,7 @@ export function SplitView({
506
546
  onDragLeave: (event: DragEvent<HTMLDivElement>) => {
507
547
  props.onDragLeave?.(event);
508
548
  if (!(event.relatedTarget instanceof Node) || !event.currentTarget.contains(event.relatedTarget)) {
509
- setPreview(null);
549
+ showPreview(null);
510
550
  }
511
551
  },
512
552
  onDrop: (event: DragEvent<HTMLDivElement>) => {
@@ -648,11 +688,7 @@ export function SplitView({
648
688
  }
649
689
  />
650
690
  ))}
651
- {preview && (
652
- <svg className="ade-split-preview" width="100%" height="100%" aria-hidden="true">
653
- <path style={{ d: `path("${dropPreviewPath(preview)}")` }} />
654
- </svg>
655
- )}
691
+ <DropPreview shape={preview} />
656
692
  </>
657
693
  )
658
694
  }
@@ -12,7 +12,7 @@ import {
12
12
  type UIEvent,
13
13
  type WheelEvent
14
14
  } from 'react';
15
- import { useRender } from '@base-ui-components/react/use-render';
15
+ import { useRender } from '@base-ui/react/use-render';
16
16
  import { Pin, X } from 'lucide-react';
17
17
  import clsx from 'clsx';
18
18
  import { useTranslation } from 'react-i18next';
@@ -1,6 +1,6 @@
1
- import type { ReactNode } from 'react';
1
+ import { useMemo, type ReactNode } from 'react';
2
2
  import clsx from 'clsx';
3
- import { useRender } from '@base-ui-components/react/use-render';
3
+ import { useRender } from '@base-ui/react/use-render';
4
4
  import { WorkspaceContext, type WorkspaceLayout } from './context.ts';
5
5
 
6
6
  export interface WorkspaceProps extends useRender.ComponentProps<'div'> {
@@ -70,5 +70,9 @@ export function Workspace({
70
70
  )
71
71
  }
72
72
  });
73
- return <WorkspaceContext value={{ layout, edges: { top: !hasToolbar, right: !rightOpen, bottom: true, left: !leftOpen } }}>{element}</WorkspaceContext>;
73
+ const context = useMemo(
74
+ () => ({ layout, edges: { top: !hasToolbar, right: !rightOpen, bottom: true, left: !leftOpen } }),
75
+ [layout, hasToolbar, rightOpen, leftOpen]
76
+ );
77
+ return <WorkspaceContext value={context}>{element}</WorkspaceContext>;
74
78
  }
@@ -1,3 +1,5 @@
1
+ import type { SplitRect } from './geometry.ts';
2
+
1
3
  /* The gap above the indicator's tab, so it reads as a tab standing in the bar. */
2
4
  export const TAB_TOP_INSET = 4;
3
5
 
@@ -27,13 +29,6 @@ export interface DropPreviewShape {
27
29
  radius: number;
28
30
  }
29
31
 
30
- export interface PreviewRect {
31
- x: number;
32
- y: number;
33
- width: number;
34
- height: number;
35
- }
36
-
37
32
  function coordinate(value: number): string {
38
33
  return String(Math.round(value * 100) / 100 + 0);
39
34
  }
@@ -42,12 +37,12 @@ function coordinate(value: number): string {
42
37
  * The preview for a split or a trade: the rectangle as a tab with no height, parked just inside its
43
38
  * top left corner so the corner keeps its radius. It is where a tab target grows out of the rectangle.
44
39
  */
45
- export function rectPreview({ x, y, width, height }: PreviewRect): DropPreviewShape {
40
+ export function rectDropPreview({ x, y, width, height }: SplitRect): DropPreviewShape {
46
41
  return { x, y, width, height, barHeight: 0, tabLeft: x + BODY_RADIUS, tabWidth: 0, tabTop: y, radius: TAB_RADIUS };
47
42
  }
48
43
 
49
44
  /* The preview for a tab: the tab and the body of the cell it lands in, `origin` being the cell's top left in the grid. */
50
- export function tabPreview(drop: TabDrop, origin: { x: number; y: number }): DropPreviewShape {
45
+ export function tabDropPreview(drop: TabDrop, origin: { x: number; y: number }): DropPreviewShape {
51
46
  return {
52
47
  x: origin.x,
53
48
  y: origin.y,
@@ -61,6 +56,24 @@ export function tabPreview(drop: TabDrop, origin: { x: number; y: number }): Dro
61
56
  };
62
57
  }
63
58
 
59
+ /* Two shapes that draw the same outline, so a drag that stays in one place can skip a render. */
60
+ export function sameDropPreview(left: DropPreviewShape | null, right: DropPreviewShape | null): boolean {
61
+ if (left === null || right === null) {
62
+ return left === right;
63
+ }
64
+ return (
65
+ left.x === right.x &&
66
+ left.y === right.y &&
67
+ left.width === right.width &&
68
+ left.height === right.height &&
69
+ left.barHeight === right.barHeight &&
70
+ left.tabLeft === right.tabLeft &&
71
+ left.tabWidth === right.tabWidth &&
72
+ left.tabTop === right.tabTop &&
73
+ left.radius === right.radius
74
+ );
75
+ }
76
+
64
77
  /*
65
78
  * The outline of a tab grown into the body under it, as one closed path so no line runs between the
66
79
  * two. The commands are the same whatever the numbers are (an arc of radius 0 is a straight line), so
@@ -1,82 +0,0 @@
1
- {
2
- "action": {
3
- "cancel": "Cancel",
4
- "copy": "Copy",
5
- "copyError": "Copy error",
6
- "dismiss": "Dismiss",
7
- "reload": "Reload",
8
- "retry": "Try again",
9
- "select": "Select",
10
- "selectAll": "Select all"
11
- },
12
- "accent": {
13
- "more": "More colors"
14
- },
15
- "settings": {
16
- "title": "Settings",
17
- "section": "Settings section",
18
- "sections": "Settings sections",
19
- "close": "Close settings",
20
- "failed": "This settings page failed to render",
21
- "search": {
22
- "placeholder": "Search settings",
23
- "clear": "Clear search",
24
- "none": "Nothing matches \"{{query}}\".",
25
- "results": "Search results",
26
- "pane": "Section"
27
- }
28
- },
29
- "controls": {
30
- "stepper": {
31
- "smaller": "Smaller",
32
- "larger": "Larger",
33
- "smallerFor": "{{label}}: smaller",
34
- "largerFor": "{{label}}: larger"
35
- }
36
- },
37
- "select": {
38
- "search": "Search",
39
- "noMatch": "No option matches “{{query}}”"
40
- },
41
- "iconPicker": {
42
- "label": "Icon",
43
- "none": "No icon",
44
- "search": "Find an icon",
45
- "clear": "Clear search",
46
- "noMatch": "No icon matches “{{query}}”"
47
- },
48
- "zoom": {
49
- "out": "Zoom out",
50
- "in": "Zoom in",
51
- "presets": "Zoom presets",
52
- "fit": "Zoom to fit",
53
- "fitEverything": "Fit everything"
54
- },
55
- "waveform": {
56
- "position": "{{time}} of {{duration}}"
57
- },
58
- "projectSwitcher": {
59
- "label": "Projects",
60
- "recent": "Recent projects",
61
- "actionsFor": "Actions for {{name}}"
62
- },
63
- "tabs": {
64
- "more": "More",
65
- "close": "Close tab"
66
- },
67
- "tree": {
68
- "label": "Files",
69
- "expand": "Expand",
70
- "collapse": "Collapse"
71
- },
72
- "workspace": {
73
- "tabs": "Open views",
74
- "unsaved": "Unsaved changes",
75
- "closeTab": "Close {{name}}",
76
- "resize": "Resize panels",
77
- "pane": "Panel",
78
- "movePane": "Move panel",
79
- "maximize": "Maximize panel",
80
- "restore": "Restore panels"
81
- }
82
- }
@@ -1,82 +0,0 @@
1
- {
2
- "action": {
3
- "cancel": "Annuleren",
4
- "copy": "Kopiëren",
5
- "copyError": "Fout kopiëren",
6
- "dismiss": "Sluiten",
7
- "reload": "Herladen",
8
- "retry": "Opnieuw proberen",
9
- "select": "Selecteren",
10
- "selectAll": "Alles selecteren"
11
- },
12
- "accent": {
13
- "more": "Meer kleuren"
14
- },
15
- "settings": {
16
- "title": "Instellingen",
17
- "section": "Onderdeel van de instellingen",
18
- "sections": "Onderdelen van de instellingen",
19
- "close": "Instellingen sluiten",
20
- "failed": "Deze instellingenpagina kon niet worden getekend",
21
- "search": {
22
- "placeholder": "Instellingen zoeken",
23
- "clear": "Zoekopdracht wissen",
24
- "none": "Niets komt overeen met \"{{query}}\".",
25
- "results": "Zoekresultaten",
26
- "pane": "Onderdeel"
27
- }
28
- },
29
- "controls": {
30
- "stepper": {
31
- "smaller": "Kleiner",
32
- "larger": "Groter",
33
- "smallerFor": "{{label}}: kleiner",
34
- "largerFor": "{{label}}: groter"
35
- }
36
- },
37
- "select": {
38
- "search": "Zoeken",
39
- "noMatch": "Geen optie past bij “{{query}}”"
40
- },
41
- "iconPicker": {
42
- "label": "Icoon",
43
- "none": "Geen icoon",
44
- "search": "Zoek een icoon",
45
- "clear": "Zoekopdracht wissen",
46
- "noMatch": "Geen icoon past bij “{{query}}”"
47
- },
48
- "zoom": {
49
- "out": "Uitzoomen",
50
- "in": "Inzoomen",
51
- "presets": "Zoomstanden",
52
- "fit": "Zoomen tot alles past",
53
- "fitEverything": "Alles laten passen"
54
- },
55
- "waveform": {
56
- "position": "{{time}} van {{duration}}"
57
- },
58
- "projectSwitcher": {
59
- "label": "Projecten",
60
- "recent": "Recente projecten",
61
- "actionsFor": "Acties voor {{name}}"
62
- },
63
- "tabs": {
64
- "more": "Meer",
65
- "close": "Tabblad sluiten"
66
- },
67
- "tree": {
68
- "label": "Bestanden",
69
- "expand": "Uitvouwen",
70
- "collapse": "Invouwen"
71
- },
72
- "workspace": {
73
- "tabs": "Open views",
74
- "unsaved": "Niet-opgeslagen wijzigingen",
75
- "closeTab": "Sluit {{name}}",
76
- "resize": "Panelen vergroten of verkleinen",
77
- "pane": "Paneel",
78
- "movePane": "Paneel verplaatsen",
79
- "maximize": "Paneel maximaliseren",
80
- "restore": "Panelen herstellen"
81
- }
82
- }
@@ -1,82 +0,0 @@
1
- {
2
- "action": {
3
- "cancel": "Cancel",
4
- "copy": "Copy",
5
- "copyError": "Copy error",
6
- "dismiss": "Dismiss",
7
- "reload": "Reload",
8
- "retry": "Try again",
9
- "select": "Select",
10
- "selectAll": "Select all"
11
- },
12
- "accent": {
13
- "more": "More colors"
14
- },
15
- "settings": {
16
- "title": "Settings",
17
- "section": "Settings section",
18
- "sections": "Settings sections",
19
- "close": "Close settings",
20
- "failed": "This settings page failed to render",
21
- "search": {
22
- "placeholder": "Search settings",
23
- "clear": "Clear search",
24
- "none": "Nothing matches \"{{query}}\".",
25
- "results": "Search results",
26
- "pane": "Section"
27
- }
28
- },
29
- "controls": {
30
- "stepper": {
31
- "smaller": "Smaller",
32
- "larger": "Larger",
33
- "smallerFor": "{{label}}: smaller",
34
- "largerFor": "{{label}}: larger"
35
- }
36
- },
37
- "select": {
38
- "search": "Search",
39
- "noMatch": "No option matches “{{query}}”"
40
- },
41
- "iconPicker": {
42
- "label": "Icon",
43
- "none": "No icon",
44
- "search": "Find an icon",
45
- "clear": "Clear search",
46
- "noMatch": "No icon matches “{{query}}”"
47
- },
48
- "zoom": {
49
- "out": "Zoom out",
50
- "in": "Zoom in",
51
- "presets": "Zoom presets",
52
- "fit": "Zoom to fit",
53
- "fitEverything": "Fit everything"
54
- },
55
- "waveform": {
56
- "position": "{{time}} of {{duration}}"
57
- },
58
- "projectSwitcher": {
59
- "label": "Projects",
60
- "recent": "Recent projects",
61
- "actionsFor": "Actions for {{name}}"
62
- },
63
- "tabs": {
64
- "more": "More",
65
- "close": "Close tab"
66
- },
67
- "tree": {
68
- "label": "Files",
69
- "expand": "Expand",
70
- "collapse": "Collapse"
71
- },
72
- "workspace": {
73
- "tabs": "Open views",
74
- "unsaved": "Unsaved changes",
75
- "closeTab": "Close {{name}}",
76
- "resize": "Resize panels",
77
- "pane": "Panel",
78
- "movePane": "Move panel",
79
- "maximize": "Maximize panel",
80
- "restore": "Restore panels"
81
- }
82
- }
@@ -1,82 +0,0 @@
1
- {
2
- "action": {
3
- "cancel": "Annuleren",
4
- "copy": "Kopiëren",
5
- "copyError": "Fout kopiëren",
6
- "dismiss": "Sluiten",
7
- "reload": "Herladen",
8
- "retry": "Opnieuw proberen",
9
- "select": "Selecteren",
10
- "selectAll": "Alles selecteren"
11
- },
12
- "accent": {
13
- "more": "Meer kleuren"
14
- },
15
- "settings": {
16
- "title": "Instellingen",
17
- "section": "Onderdeel van de instellingen",
18
- "sections": "Onderdelen van de instellingen",
19
- "close": "Instellingen sluiten",
20
- "failed": "Deze instellingenpagina kon niet worden getekend",
21
- "search": {
22
- "placeholder": "Instellingen zoeken",
23
- "clear": "Zoekopdracht wissen",
24
- "none": "Niets komt overeen met \"{{query}}\".",
25
- "results": "Zoekresultaten",
26
- "pane": "Onderdeel"
27
- }
28
- },
29
- "controls": {
30
- "stepper": {
31
- "smaller": "Kleiner",
32
- "larger": "Groter",
33
- "smallerFor": "{{label}}: kleiner",
34
- "largerFor": "{{label}}: groter"
35
- }
36
- },
37
- "select": {
38
- "search": "Zoeken",
39
- "noMatch": "Geen optie past bij “{{query}}”"
40
- },
41
- "iconPicker": {
42
- "label": "Icoon",
43
- "none": "Geen icoon",
44
- "search": "Zoek een icoon",
45
- "clear": "Zoekopdracht wissen",
46
- "noMatch": "Geen icoon past bij “{{query}}”"
47
- },
48
- "zoom": {
49
- "out": "Uitzoomen",
50
- "in": "Inzoomen",
51
- "presets": "Zoomstanden",
52
- "fit": "Zoomen tot alles past",
53
- "fitEverything": "Alles laten passen"
54
- },
55
- "waveform": {
56
- "position": "{{time}} van {{duration}}"
57
- },
58
- "projectSwitcher": {
59
- "label": "Projecten",
60
- "recent": "Recente projecten",
61
- "actionsFor": "Acties voor {{name}}"
62
- },
63
- "tabs": {
64
- "more": "Meer",
65
- "close": "Tabblad sluiten"
66
- },
67
- "tree": {
68
- "label": "Bestanden",
69
- "expand": "Uitvouwen",
70
- "collapse": "Invouwen"
71
- },
72
- "workspace": {
73
- "tabs": "Open views",
74
- "unsaved": "Niet-opgeslagen wijzigingen",
75
- "closeTab": "Sluit {{name}}",
76
- "resize": "Panelen vergroten of verkleinen",
77
- "pane": "Paneel",
78
- "movePane": "Paneel verplaatsen",
79
- "maximize": "Paneel maximaliseren",
80
- "restore": "Panelen herstellen"
81
- }
82
- }