@eifi1/ui-kit 0.10.0 → 0.11.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.
- package/README.md +20 -16
- package/dist/components/alert-banner.d.ts +26 -1
- package/dist/components/alert-banner.js +10 -7
- package/dist/components/alert-banner.js.map +1 -1
- package/dist/components/amount-input.d.ts +2 -0
- package/dist/components/bulk-action-bar.d.ts +51 -5
- package/dist/components/bulk-action-bar.js +88 -41
- package/dist/components/bulk-action-bar.js.map +1 -1
- package/dist/components/button-group.d.ts +58 -3
- package/dist/components/button-group.js +56 -5
- package/dist/components/button-group.js.map +1 -1
- package/dist/components/calculator.d.ts +2 -0
- package/dist/components/calendar-heatmap.d.ts +124 -0
- package/dist/components/calendar-heatmap.js +295 -0
- package/dist/components/calendar-heatmap.js.map +1 -0
- package/dist/components/choice-card.d.ts +34 -2
- package/dist/components/choice-card.js +49 -0
- package/dist/components/choice-card.js.map +1 -1
- package/dist/components/copy-button.d.ts +1 -0
- package/dist/components/data-table.js +2 -0
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/field.d.ts +43 -0
- package/dist/components/field.js +52 -0
- package/dist/components/field.js.map +1 -0
- package/dist/components/file-button.d.ts +1 -0
- package/dist/components/file-dropzone.d.ts +1 -0
- package/dist/components/floating-panel.d.ts +147 -4
- package/dist/components/floating-panel.js +188 -28
- package/dist/components/floating-panel.js.map +1 -1
- package/dist/components/list.d.ts +14 -1
- package/dist/components/list.js +7 -1
- package/dist/components/list.js.map +1 -1
- package/dist/components/menu-item.d.ts +11 -1
- package/dist/components/menu-item.js +6 -1
- package/dist/components/menu-item.js.map +1 -1
- package/dist/components/mini-calendar.d.ts +70 -5
- package/dist/components/mini-calendar.js +166 -62
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/nav-pills.d.ts +66 -0
- package/dist/components/nav-pills.js +65 -0
- package/dist/components/nav-pills.js.map +1 -0
- package/dist/components/number-field.d.ts +2 -0
- package/dist/components/number-input.d.ts +2 -0
- package/dist/components/numpad-sheet.d.ts +2 -0
- package/dist/components/progress-bar.d.ts +31 -2
- package/dist/components/progress-bar.js +73 -7
- package/dist/components/progress-bar.js.map +1 -1
- package/dist/components/series-chart.d.ts +16 -0
- package/dist/components/series-chart.js +4 -1
- package/dist/components/series-chart.js.map +1 -1
- package/dist/components/settings-fields.d.ts +1 -0
- package/dist/components/status-dot.d.ts +6 -2
- package/dist/components/status-dot.js +6 -1
- package/dist/components/status-dot.js.map +1 -1
- package/dist/components/table.d.ts +40 -8
- package/dist/components/table.js +41 -7
- package/dist/components/table.js.map +1 -1
- package/dist/components/text.d.ts +8 -1
- package/dist/components/text.js +1 -0
- package/dist/components/text.js.map +1 -1
- package/dist/components/time-input.d.ts +1 -0
- package/dist/components/toggle-group.d.ts +15 -0
- package/dist/components/toggle-group.js +23 -3
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/tooltip.d.ts +11 -3
- package/dist/components/tooltip.js +2 -0
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/ui.d.ts +55 -4
- package/dist/components/ui.js +84 -7
- package/dist/components/ui.js.map +1 -1
- package/dist/components/user-avatar.d.ts +25 -3
- package/dist/components/user-avatar.js +32 -3
- package/dist/components/user-avatar.js.map +1 -1
- package/dist/hooks/use-file-drop.d.ts +1 -0
- package/dist/i18n/defaults.d.ts +2 -0
- package/dist/i18n/defaults.js +2 -0
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +3 -0
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/locales/de-CH-informal.d.ts +2 -0
- package/dist/i18n/locales/de-CH.d.ts +2 -0
- package/dist/i18n/locales/de-informal.d.ts +2 -0
- package/dist/i18n/locales/de.d.ts +2 -0
- package/dist/i18n/locales/de.js +9 -1
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +2 -0
- package/dist/i18n/locales/es.js +9 -1
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +2 -0
- package/dist/i18n/locales/fr.js +9 -1
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.d.ts +2 -0
- package/dist/i18n/locales/hu.js +9 -1
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +2 -0
- package/dist/i18n/locales/it.js +9 -1
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +2 -0
- package/dist/i18n/locales/zh.js +9 -1
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.d.ts +14 -10
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/clipping.d.ts +21 -5
- package/dist/lib/clipping.js +3 -0
- package/dist/lib/clipping.js.map +1 -1
- package/dist/lib/dates.d.ts +17 -1
- package/dist/lib/dates.js +19 -0
- package/dist/lib/dates.js.map +1 -1
- package/dist/rhf/form.d.ts +1 -0
- package/dist/rhf/use-rhf-wizard-step.d.ts +22 -0
- package/dist/rhf/use-rhf-wizard-step.js +38 -0
- package/dist/rhf/use-rhf-wizard-step.js.map +1 -0
- package/dist/rhf.d.ts +2 -0
- package/dist/rhf.js +1 -0
- package/dist/rhf.js.map +1 -1
- package/dist/shell/topbar-action-menu.d.ts +73 -3
- package/dist/shell/topbar-action-menu.js +100 -27
- package/dist/shell/topbar-action-menu.js.map +1 -1
- package/dist/shell.d.ts +2 -1
- package/dist/wizard/stepper-nav.d.ts +1 -0
- package/dist/wizard/wizard-context.d.ts +7 -1
- package/dist/wizard/wizard-context.js +4 -0
- package/dist/wizard/wizard-context.js.map +1 -1
- package/dist/wizard.d.ts +2 -1
- package/package.json +1 -1
- package/src/components/alert-banner.tsx +36 -7
- package/src/components/bulk-action-bar.tsx +163 -57
- package/src/components/button-group.tsx +124 -4
- package/src/components/calendar-heatmap.tsx +504 -0
- package/src/components/choice-card.tsx +97 -1
- package/src/components/data-table.tsx +7 -0
- package/src/components/field.tsx +137 -0
- package/src/components/floating-panel.tsx +366 -15
- package/src/components/list.tsx +28 -2
- package/src/components/menu-item.tsx +22 -1
- package/src/components/mini-calendar.tsx +245 -54
- package/src/components/nav-pills.tsx +145 -0
- package/src/components/progress-bar.tsx +129 -11
- package/src/components/series-chart.tsx +21 -0
- package/src/components/status-dot.tsx +10 -2
- package/src/components/table.tsx +85 -11
- package/src/components/text.tsx +9 -1
- package/src/components/toggle-group.tsx +48 -3
- package/src/components/tooltip.tsx +17 -3
- package/src/components/ui.tsx +149 -11
- package/src/components/user-avatar.tsx +57 -3
- package/src/i18n/defaults.ts +2 -0
- package/src/i18n/kit-labels.tsx +2 -0
- package/src/i18n/locales/de.ts +9 -0
- package/src/i18n/locales/es.ts +9 -0
- package/src/i18n/locales/fr.ts +9 -0
- package/src/i18n/locales/hu.ts +9 -0
- package/src/i18n/locales/it.ts +9 -0
- package/src/i18n/locales/zh.ts +9 -0
- package/src/index.ts +5 -0
- package/src/lib/clipping.ts +22 -4
- package/src/lib/dates.ts +37 -0
- package/src/rhf/use-rhf-wizard-step.ts +113 -0
- package/src/rhf.ts +2 -0
- package/src/shell/topbar-action-menu.tsx +239 -49
- package/src/wizard/wizard-context.tsx +9 -0
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ComponentPropsWithoutRef } from 'react';
|
|
2
|
+
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
3
|
+
import { StatusDotTone } from './status-dot.js';
|
|
4
|
+
import './progress-bar.js';
|
|
5
|
+
import './chip.js';
|
|
6
|
+
import 'lucide-react';
|
|
3
7
|
|
|
4
8
|
/** Initials from a display name (first + last) or, failing that, an email —
|
|
5
9
|
* e.g. "Marcel Eifert" → "ME", "marcel@x.com" → "MA". App-agnostic.
|
|
@@ -18,17 +22,35 @@ declare const AVATAR_SIZES: {
|
|
|
18
22
|
readonly md: "size-8 text-xs";
|
|
19
23
|
readonly lg: "size-12 text-base";
|
|
20
24
|
};
|
|
25
|
+
/** A status dot in the avatar's top corner — an unread count, presence. */
|
|
26
|
+
interface UserAvatarBadge {
|
|
27
|
+
/** What the dot MEANS, for a screen reader ("3 unread"). Required: a coloured circle
|
|
28
|
+
* says nothing to someone who cannot see it. */
|
|
29
|
+
label: ReactNode;
|
|
30
|
+
/** Default `danger`, the unread dot both apps draw by hand. */
|
|
31
|
+
tone?: StatusDotTone;
|
|
32
|
+
}
|
|
21
33
|
/** A `<span>`'s props, minus `children`: the content is the initials this computes
|
|
22
34
|
* from `name`/`email`, so there is nothing for a caller to put inside. */
|
|
23
35
|
interface UserAvatarProps extends Omit<ComponentPropsWithoutRef<"span">, "children"> {
|
|
24
36
|
name?: string | null;
|
|
25
37
|
email?: string | null;
|
|
26
38
|
size?: keyof typeof AVATAR_SIZES;
|
|
39
|
+
/**
|
|
40
|
+
* A status dot in the top-end corner (the top-right in LTR, top-left in RTL), ringed
|
|
41
|
+
* in the surface colour so it reads as its own mark (keksdose account-menu ~385,
|
|
42
|
+
* top-bar :152). Its `label` is read as text where the dot sits — inside a button
|
|
43
|
+
* named by its content it joins that name. In `TopBarActionMenu`'s `trigger` the
|
|
44
|
+
* button is named by the menu's `ariaLabel` followed by this label: "Account menu
|
|
45
|
+
* 3 unread". The initials stay hidden either way, so the person's name is NOT part
|
|
46
|
+
* of it — put it in `ariaLabel` ("Marcel Eifert, account menu") if it should be.
|
|
47
|
+
*/
|
|
48
|
+
badge?: UserAvatarBadge | null;
|
|
27
49
|
}
|
|
28
50
|
/**
|
|
29
51
|
* A round initials avatar — the common user chip shared across apps (feedback
|
|
30
52
|
* #333). Purely presentational; wrap it in a button for the account menu trigger.
|
|
31
53
|
*/
|
|
32
|
-
declare function UserAvatar({ name, email, size, className, ...rest }: UserAvatarProps): react.JSX.Element;
|
|
54
|
+
declare function UserAvatar({ name, email, size, badge, className, ...rest }: UserAvatarProps): react.JSX.Element;
|
|
33
55
|
|
|
34
|
-
export { UserAvatar, type UserAvatarProps, avatarInitials };
|
|
56
|
+
export { UserAvatar, type UserAvatarBadge, type UserAvatarProps, avatarInitials };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { cn } from "../lib/cn.js";
|
|
4
|
+
import { StatusDot } from "./status-dot.js";
|
|
4
5
|
function avatarInitials(name, email) {
|
|
5
6
|
const source = [name, email].map((s) => s?.trim()).find(Boolean) ?? "?";
|
|
6
7
|
const parts = source.split(/\s+/).filter(Boolean);
|
|
@@ -12,14 +13,42 @@ const AVATAR_SIZES = {
|
|
|
12
13
|
md: "size-8 text-xs",
|
|
13
14
|
lg: "size-12 text-base"
|
|
14
15
|
};
|
|
15
|
-
|
|
16
|
+
const CHIP = "inline-flex shrink-0 items-center justify-center rounded-full bg-[var(--bg-inverse)] font-semibold text-[var(--text-inverse)]";
|
|
17
|
+
const BADGE_SIZES = { sm: "sm", md: "md", lg: "lg" };
|
|
18
|
+
function UserAvatar({ name, email, size = "md", badge, className, ...rest }) {
|
|
19
|
+
if (badge) {
|
|
20
|
+
return /* @__PURE__ */ jsxs("span", { ...rest, className: "relative inline-flex shrink-0", children: [
|
|
21
|
+
/* @__PURE__ */ jsx(
|
|
22
|
+
"span",
|
|
23
|
+
{
|
|
24
|
+
"aria-hidden": true,
|
|
25
|
+
className: cn(
|
|
26
|
+
CHIP,
|
|
27
|
+
AVATAR_SIZES[size],
|
|
28
|
+
className
|
|
29
|
+
),
|
|
30
|
+
children: avatarInitials(name, email)
|
|
31
|
+
}
|
|
32
|
+
),
|
|
33
|
+
/* @__PURE__ */ jsx(
|
|
34
|
+
StatusDot,
|
|
35
|
+
{
|
|
36
|
+
ring: true,
|
|
37
|
+
tone: badge.tone ?? "danger",
|
|
38
|
+
size: BADGE_SIZES[size],
|
|
39
|
+
className: "absolute -end-0.5 -top-0.5"
|
|
40
|
+
}
|
|
41
|
+
),
|
|
42
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: badge.label })
|
|
43
|
+
] });
|
|
44
|
+
}
|
|
16
45
|
return /* @__PURE__ */ jsx(
|
|
17
46
|
"span",
|
|
18
47
|
{
|
|
19
48
|
"aria-hidden": true,
|
|
20
49
|
...rest,
|
|
21
50
|
className: cn(
|
|
22
|
-
|
|
51
|
+
CHIP,
|
|
23
52
|
AVATAR_SIZES[size],
|
|
24
53
|
className
|
|
25
54
|
),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/user-avatar.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/** Initials from a display name (first + last) or, failing that, an email —\n * e.g. \"Marcel Eifert\" → \"ME\", \"marcel@x.com\" → \"MA\". App-agnostic.\n *\n * \"Failing that\" means BLANK, not merely absent. This was `name ?? email ?? \"?\"`,\n * and `??` falls through on null/undefined alone — so an empty or whitespace-only\n * display name short-circuited the email it had in hand and landed on the guard\n * below, returning \"?\" for a user whose address says \"MA\" perfectly well. Keksdose\n * cannot reach it (its `display_name` has `min_length=1`), but this is exported as\n * app-agnostic, and any consumer whose profile name is optional free text got a wall\n * of \"?\" chips. The guard is what shows the empty case was foreseen; it just\n * answered it at the wrong end. */\nexport function avatarInitials(name?: string | null, email?: string | null): string {\n const source = [name, email].map((s) => s?.trim()).find(Boolean) ?? \"?\";\n const parts = source.split(/\\s+/).filter(Boolean);\n if (parts.length >= 2) return (parts[0][0] + parts[1][0]).toUpperCase();\n return source.slice(0, 2).toUpperCase();\n}\n\nconst AVATAR_SIZES = {\n sm: \"size-7 text-[11px]\",\n md: \"size-8 text-xs\",\n lg: \"size-12 text-base\",\n} as const;\n\n/** A `<span>`'s props, minus `children`: the content is the initials this computes\n * from `name`/`email`, so there is nothing for a caller to put inside. */\nexport interface UserAvatarProps extends Omit<ComponentPropsWithoutRef<\"span\">, \"children\"> {\n name?: string | null;\n email?: string | null;\n size?: keyof typeof AVATAR_SIZES;\n}\n\n/**\n * A round initials avatar — the common user chip shared across apps (feedback\n * #333). Purely presentational; wrap it in a button for the account menu trigger.\n */\nexport function UserAvatar({ name, email, size = \"md\", className, ...rest }: UserAvatarProps) {\n return (\n <span\n // `aria-hidden` sits BEFORE the spread, unlike the structural attributes on the\n // other components here, because it is a DEFAULT rather than an invariant. The\n // avatar is decorative next to the name it belongs to — which is where all three\n // apps render it — so hiding it stops a screen reader saying \"ME\" after the word\n // \"Marcel Eifert\". A caller who renders one ALONE (an assignee column, a\n // presence dot) needs the opposite, and now has it: `aria-hidden={false}` plus an\n // `aria-label` arrives through `...rest` and wins.\n aria-hidden\n {...rest}\n className={cn(\n
|
|
1
|
+
{"version":3,"sources":["../../src/components/user-avatar.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { StatusDot } from \"./status-dot\";\nimport type { StatusDotSize, StatusDotTone } from \"./status-dot\";\n\n/** Initials from a display name (first + last) or, failing that, an email —\n * e.g. \"Marcel Eifert\" → \"ME\", \"marcel@x.com\" → \"MA\". App-agnostic.\n *\n * \"Failing that\" means BLANK, not merely absent. This was `name ?? email ?? \"?\"`,\n * and `??` falls through on null/undefined alone — so an empty or whitespace-only\n * display name short-circuited the email it had in hand and landed on the guard\n * below, returning \"?\" for a user whose address says \"MA\" perfectly well. Keksdose\n * cannot reach it (its `display_name` has `min_length=1`), but this is exported as\n * app-agnostic, and any consumer whose profile name is optional free text got a wall\n * of \"?\" chips. The guard is what shows the empty case was foreseen; it just\n * answered it at the wrong end. */\nexport function avatarInitials(name?: string | null, email?: string | null): string {\n const source = [name, email].map((s) => s?.trim()).find(Boolean) ?? \"?\";\n const parts = source.split(/\\s+/).filter(Boolean);\n if (parts.length >= 2) return (parts[0][0] + parts[1][0]).toUpperCase();\n return source.slice(0, 2).toUpperCase();\n}\n\nconst AVATAR_SIZES = {\n sm: \"size-7 text-[11px]\",\n md: \"size-8 text-xs\",\n lg: \"size-12 text-base\",\n} as const;\n\nconst CHIP =\n \"inline-flex shrink-0 items-center justify-center rounded-full bg-[var(--bg-inverse)] font-semibold text-[var(--text-inverse)]\";\n\n/** The dot grows with the avatar: 8px on `sm`, 10px on `md` (keksdose's), 12px on `lg`. */\nconst BADGE_SIZES: Record<keyof typeof AVATAR_SIZES, StatusDotSize> = { sm: \"sm\", md: \"md\", lg: \"lg\" };\n\n/** A status dot in the avatar's top corner — an unread count, presence. */\nexport interface UserAvatarBadge {\n /** What the dot MEANS, for a screen reader (\"3 unread\"). Required: a coloured circle\n * says nothing to someone who cannot see it. */\n label: ReactNode;\n /** Default `danger`, the unread dot both apps draw by hand. */\n tone?: StatusDotTone;\n}\n\n/** A `<span>`'s props, minus `children`: the content is the initials this computes\n * from `name`/`email`, so there is nothing for a caller to put inside. */\nexport interface UserAvatarProps extends Omit<ComponentPropsWithoutRef<\"span\">, \"children\"> {\n name?: string | null;\n email?: string | null;\n size?: keyof typeof AVATAR_SIZES;\n /**\n * A status dot in the top-end corner (the top-right in LTR, top-left in RTL), ringed\n * in the surface colour so it reads as its own mark (keksdose account-menu ~385,\n * top-bar :152). Its `label` is read as text where the dot sits — inside a button\n * named by its content it joins that name. In `TopBarActionMenu`'s `trigger` the\n * button is named by the menu's `ariaLabel` followed by this label: \"Account menu\n * 3 unread\". The initials stay hidden either way, so the person's name is NOT part\n * of it — put it in `ariaLabel` (\"Marcel Eifert, account menu\") if it should be.\n */\n badge?: UserAvatarBadge | null;\n}\n\n/**\n * A round initials avatar — the common user chip shared across apps (feedback\n * #333). Purely presentational; wrap it in a button for the account menu trigger.\n */\nexport function UserAvatar({ name, email, size = \"md\", badge, className, ...rest }: UserAvatarProps) {\n if (badge) {\n // A wrapper, because the chip itself is `aria-hidden` and the badge label must not\n // be. `className` stays on the chip (a size override still sizes the circle); the\n // other attributes go on the wrapper, which is what a caller addresses. `relative`\n // also contains the sr-only text.\n return (\n <span {...rest} className=\"relative inline-flex shrink-0\">\n <span\n aria-hidden\n className={cn(\n CHIP,\n AVATAR_SIZES[size],\n className,\n )}\n >\n {avatarInitials(name, email)}\n </span>\n <StatusDot\n ring\n tone={badge.tone ?? \"danger\"}\n size={BADGE_SIZES[size]}\n className=\"absolute -end-0.5 -top-0.5\"\n />\n <span className=\"sr-only\">{badge.label}</span>\n </span>\n );\n }\n return (\n <span\n // `aria-hidden` sits BEFORE the spread, unlike the structural attributes on the\n // other components here, because it is a DEFAULT rather than an invariant. The\n // avatar is decorative next to the name it belongs to — which is where all three\n // apps render it — so hiding it stops a screen reader saying \"ME\" after the word\n // \"Marcel Eifert\". A caller who renders one ALONE (an assignee column, a\n // presence dot) needs the opposite, and now has it: `aria-hidden={false}` plus an\n // `aria-label` arrives through `...rest` and wins.\n aria-hidden\n {...rest}\n className={cn(\n CHIP,\n AVATAR_SIZES[size],\n className,\n )}\n >\n {avatarInitials(name, email)}\n </span>\n );\n}\n"],"mappings":";AAyEM,SACE,KADF;AAxEN,SAAS,UAAU;AACnB,SAAS,iBAAiB;AAcnB,SAAS,eAAe,MAAsB,OAA+B;AAClF,QAAM,SAAS,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,KAAK,OAAO,KAAK;AACpE,QAAM,QAAQ,OAAO,MAAM,KAAK,EAAE,OAAO,OAAO;AAChD,MAAI,MAAM,UAAU,EAAG,SAAQ,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,YAAY;AACtE,SAAO,OAAO,MAAM,GAAG,CAAC,EAAE,YAAY;AACxC;AAEA,MAAM,eAAe;AAAA,EACnB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,MAAM,OACJ;AAGF,MAAM,cAAgE,EAAE,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK;AAiC9F,SAAS,WAAW,EAAE,MAAM,OAAO,OAAO,MAAM,OAAO,WAAW,GAAG,KAAK,GAAoB;AACnG,MAAI,OAAO;AAKT,WACE,qBAAC,UAAM,GAAG,MAAM,WAAU,iCACxB;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,UACX,WAAW;AAAA,YACT;AAAA,YACA,aAAa,IAAI;AAAA,YACjB;AAAA,UACF;AAAA,UAEC,yBAAe,MAAM,KAAK;AAAA;AAAA,MAC7B;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAI;AAAA,UACJ,MAAM,MAAM,QAAQ;AAAA,UACpB,MAAM,YAAY,IAAI;AAAA,UACtB,WAAU;AAAA;AAAA,MACZ;AAAA,MACA,oBAAC,UAAK,WAAU,WAAW,gBAAM,OAAM;AAAA,OACzC;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MAQC,eAAW;AAAA,MACV,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA,aAAa,IAAI;AAAA,QACjB;AAAA,MACF;AAAA,MAEC,yBAAe,MAAM,KAAK;AAAA;AAAA,EAC7B;AAEJ;","names":[]}
|
|
@@ -3,6 +3,7 @@ import { UseFilePickerOptions } from '../components/file-button.js';
|
|
|
3
3
|
import '../components/ui.js';
|
|
4
4
|
import '../components/tooltip.js';
|
|
5
5
|
import './use-anchored-rect.js';
|
|
6
|
+
import '../lib/clipping.js';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Turn ANY element into a file drop target — kastlan's ask, for the document list of
|
package/dist/i18n/defaults.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { UiKitLabels } from './kit-labels.js';
|
|
|
2
2
|
import 'react';
|
|
3
3
|
import '../components/data-table-labels.js';
|
|
4
4
|
import '../components/mini-calendar.js';
|
|
5
|
+
import '../components/calendar-heatmap.js';
|
|
5
6
|
import '../components/popover.js';
|
|
6
7
|
import '../components/chip.js';
|
|
7
8
|
import 'lucide-react';
|
|
@@ -9,6 +10,7 @@ import '../components/field-sync.js';
|
|
|
9
10
|
import '../components/ui.js';
|
|
10
11
|
import '../components/tooltip.js';
|
|
11
12
|
import '../hooks/use-anchored-rect.js';
|
|
13
|
+
import '../lib/clipping.js';
|
|
12
14
|
import '../wizard/types.js';
|
|
13
15
|
import '../tour/tour.js';
|
|
14
16
|
import '../search/command-palette.js';
|
package/dist/i18n/defaults.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { DEFAULT_DATA_TABLE_LABELS } from "../components/data-table-labels.js";
|
|
3
3
|
import { DEFAULT_MINI_CALENDAR_LABELS } from "../components/mini-calendar.js";
|
|
4
|
+
import { DEFAULT_CALENDAR_HEATMAP_LABELS } from "../components/calendar-heatmap.js";
|
|
4
5
|
import { DEFAULT_MONTH_PICKER_LABELS } from "../components/month-picker.js";
|
|
5
6
|
import { DEFAULT_PAGE_CONTENTS_LABELS } from "../components/page-contents.js";
|
|
6
7
|
import { DEFAULT_POPOVER_LABELS } from "../components/popover.js";
|
|
@@ -47,6 +48,7 @@ const DEFAULT_UI_KIT_LABELS = {
|
|
|
47
48
|
common: DEFAULT_COMMON_LABELS,
|
|
48
49
|
dataTable: DEFAULT_DATA_TABLE_LABELS,
|
|
49
50
|
miniCalendar: DEFAULT_MINI_CALENDAR_LABELS,
|
|
51
|
+
calendarHeatmap: DEFAULT_CALENDAR_HEATMAP_LABELS,
|
|
50
52
|
datePicker: DEFAULT_DATE_PICKER_LABELS,
|
|
51
53
|
monthPicker: DEFAULT_MONTH_PICKER_LABELS,
|
|
52
54
|
popover: DEFAULT_POPOVER_LABELS,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/i18n/defaults.ts"],"sourcesContent":["import { DEFAULT_DATA_TABLE_LABELS } from \"../components/data-table-labels\";\nimport { DEFAULT_MINI_CALENDAR_LABELS } from \"../components/mini-calendar\";\nimport { DEFAULT_MONTH_PICKER_LABELS } from \"../components/month-picker\";\nimport { DEFAULT_PAGE_CONTENTS_LABELS } from \"../components/page-contents\";\nimport { DEFAULT_POPOVER_LABELS } from \"../components/popover\";\nimport { DEFAULT_CHIP_INPUT_LABELS } from \"../components/chip\";\nimport { DEFAULT_FIELD_SYNC_LABELS } from \"../components/field-sync\";\nimport { DEFAULT_PASSWORD_REVEAL_LABELS, DEFAULT_TABS_LABELS } from \"../components/ui\";\nimport { DEFAULT_WIZARD_LABELS } from \"../wizard/types\";\nimport { DEFAULT_TOUR_LABELS } from \"../tour/tour\";\nimport { DEFAULT_COMMAND_PALETTE_LABELS } from \"../search/command-palette\";\nimport { DEFAULT_GLOBAL_SEARCH_LABELS } from \"../search/global-search\";\nimport { DEFAULT_SERIES_CHART_LABELS } from \"../components/series-chart-labels\";\nimport { DEFAULT_SPARKLINE_LABELS } from \"../components/sparkline\";\nimport { DEFAULT_STAT_TILE_LABELS } from \"../components/stat-tile\";\nimport { DEFAULT_SIGNATURE_PAD_LABELS } from \"../components/signature-pad\";\nimport { DEFAULT_PASSWORD_STRENGTH_LABELS } from \"../components/password-strength\";\nimport { DEFAULT_DANGER_CONFIRM_LABELS } from \"../components/danger-confirm\";\nimport { DEFAULT_SWATCH_PICKER_LABELS } from \"../components/swatch-picker\";\nimport { DEFAULT_ICON_PICKER_LABELS } from \"../components/icon-picker\";\nimport { DEFAULT_DIALOG_FRAME_LABELS } from \"../components/dialog-frame\";\nimport { DEFAULT_FILE_PICKER_LABELS } from \"../components/file-button\";\nimport { DEFAULT_MEASURED_GRID_LABELS } from \"../components/measured-grid\";\nimport { DEFAULT_CONFIRM_DIALOG_LABELS } from \"../components/confirm-dialog\";\nimport { DEFAULT_FLOATING_PANEL_LABELS } from \"../components/floating-panel\";\nimport { DEFAULT_FEEDBACK_ATTACHMENT_LABELS } from \"../feedback/feedback-attachment\";\nimport { DEFAULT_COPY_BUTTON_LABELS } from \"../components/copy-button\";\nimport { DEFAULT_BULK_ACTION_BAR_LABELS } from \"../components/bulk-action-bar\";\nimport { DEFAULT_LIST_LABELS } from \"../components/list\";\nimport { DEFAULT_BREADCRUMBS_LABELS } from \"../components/breadcrumbs\";\nimport { DEFAULT_TOAST_LABELS } from \"../components/toast\";\nimport {\n DEFAULT_APP_SHELL_LABELS,\n DEFAULT_CALCULATOR_LABELS,\n DEFAULT_COMBOBOX_LABELS,\n DEFAULT_COMMON_LABELS,\n DEFAULT_CURRENCY_LABELS,\n DEFAULT_DATE_PICKER_LABELS,\n DEFAULT_FILE_LABELS,\n DEFAULT_MULTI_SELECT_LABELS,\n DEFAULT_PICKER_SHEET_LABELS,\n DEFAULT_SWIPEABLE_ROW_LABELS,\n DEFAULT_TOP_BAR_LABELS,\n} from \"./kit-labels\";\nimport type { UiKitLabels } from \"./kit-labels\";\n\n/**\n * The whole English tree in one object: what a translation is written against, and\n * the `reference` for {@link missingKitLabels}.\n *\n * A separate module from the provider on purpose. Components import the provider's\n * hooks; this file imports the components' defaults. Kept together they would be an\n * import cycle through every component in the kit.\n */\nexport const DEFAULT_UI_KIT_LABELS: UiKitLabels = {\n common: DEFAULT_COMMON_LABELS,\n dataTable: DEFAULT_DATA_TABLE_LABELS,\n miniCalendar: DEFAULT_MINI_CALENDAR_LABELS,\n datePicker: DEFAULT_DATE_PICKER_LABELS,\n monthPicker: DEFAULT_MONTH_PICKER_LABELS,\n popover: DEFAULT_POPOVER_LABELS,\n combobox: DEFAULT_COMBOBOX_LABELS,\n multiSelect: DEFAULT_MULTI_SELECT_LABELS,\n calculator: DEFAULT_CALCULATOR_LABELS,\n currency: DEFAULT_CURRENCY_LABELS,\n chipInput: DEFAULT_CHIP_INPUT_LABELS,\n fieldSync: DEFAULT_FIELD_SYNC_LABELS,\n passwordReveal: DEFAULT_PASSWORD_REVEAL_LABELS,\n tabs: DEFAULT_TABS_LABELS,\n appShell: DEFAULT_APP_SHELL_LABELS,\n pageContents: DEFAULT_PAGE_CONTENTS_LABELS,\n topBar: DEFAULT_TOP_BAR_LABELS,\n pickerSheet: DEFAULT_PICKER_SHEET_LABELS,\n swipeableRow: DEFAULT_SWIPEABLE_ROW_LABELS,\n file: DEFAULT_FILE_LABELS,\n wizard: DEFAULT_WIZARD_LABELS,\n tour: DEFAULT_TOUR_LABELS,\n commandPalette: DEFAULT_COMMAND_PALETTE_LABELS,\n globalSearch: DEFAULT_GLOBAL_SEARCH_LABELS,\n seriesChart: DEFAULT_SERIES_CHART_LABELS,\n sparkline: DEFAULT_SPARKLINE_LABELS,\n statTile: DEFAULT_STAT_TILE_LABELS,\n signaturePad: DEFAULT_SIGNATURE_PAD_LABELS,\n passwordStrength: DEFAULT_PASSWORD_STRENGTH_LABELS,\n dangerConfirm: DEFAULT_DANGER_CONFIRM_LABELS,\n swatchPicker: DEFAULT_SWATCH_PICKER_LABELS,\n iconPicker: DEFAULT_ICON_PICKER_LABELS,\n dialogFrame: DEFAULT_DIALOG_FRAME_LABELS,\n filePicker: DEFAULT_FILE_PICKER_LABELS,\n measuredGrid: DEFAULT_MEASURED_GRID_LABELS,\n feedbackAttachment: DEFAULT_FEEDBACK_ATTACHMENT_LABELS,\n confirmDialog: DEFAULT_CONFIRM_DIALOG_LABELS,\n floatingPanel: DEFAULT_FLOATING_PANEL_LABELS,\n copyButton: DEFAULT_COPY_BUTTON_LABELS,\n bulkActionBar: DEFAULT_BULK_ACTION_BAR_LABELS,\n list: DEFAULT_LIST_LABELS,\n breadcrumbs: DEFAULT_BREADCRUMBS_LABELS,\n toast: DEFAULT_TOAST_LABELS,\n};\n"],"mappings":";AAAA,SAAS,iCAAiC;AAC1C,SAAS,oCAAoC;AAC7C,SAAS,mCAAmC;AAC5C,SAAS,oCAAoC;AAC7C,SAAS,8BAA8B;AACvC,SAAS,iCAAiC;AAC1C,SAAS,iCAAiC;AAC1C,SAAS,gCAAgC,2BAA2B;AACpE,SAAS,6BAA6B;AACtC,SAAS,2BAA2B;AACpC,SAAS,sCAAsC;AAC/C,SAAS,oCAAoC;AAC7C,SAAS,mCAAmC;AAC5C,SAAS,gCAAgC;AACzC,SAAS,gCAAgC;AACzC,SAAS,oCAAoC;AAC7C,SAAS,wCAAwC;AACjD,SAAS,qCAAqC;AAC9C,SAAS,oCAAoC;AAC7C,SAAS,kCAAkC;AAC3C,SAAS,mCAAmC;AAC5C,SAAS,kCAAkC;AAC3C,SAAS,oCAAoC;AAC7C,SAAS,qCAAqC;AAC9C,SAAS,qCAAqC;AAC9C,SAAS,0CAA0C;AACnD,SAAS,kCAAkC;AAC3C,SAAS,sCAAsC;AAC/C,SAAS,2BAA2B;AACpC,SAAS,kCAAkC;AAC3C,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAWA,MAAM,wBAAqC;AAAA,EAChD,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,SAAS;AAAA,EACT,UAAU;AAAA,EACV,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,UAAU;AAAA,EACV,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,cAAc;AAAA,EACd,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AACT;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/i18n/defaults.ts"],"sourcesContent":["import { DEFAULT_DATA_TABLE_LABELS } from \"../components/data-table-labels\";\nimport { DEFAULT_MINI_CALENDAR_LABELS } from \"../components/mini-calendar\";\nimport { DEFAULT_CALENDAR_HEATMAP_LABELS } from \"../components/calendar-heatmap\";\nimport { DEFAULT_MONTH_PICKER_LABELS } from \"../components/month-picker\";\nimport { DEFAULT_PAGE_CONTENTS_LABELS } from \"../components/page-contents\";\nimport { DEFAULT_POPOVER_LABELS } from \"../components/popover\";\nimport { DEFAULT_CHIP_INPUT_LABELS } from \"../components/chip\";\nimport { DEFAULT_FIELD_SYNC_LABELS } from \"../components/field-sync\";\nimport { DEFAULT_PASSWORD_REVEAL_LABELS, DEFAULT_TABS_LABELS } from \"../components/ui\";\nimport { DEFAULT_WIZARD_LABELS } from \"../wizard/types\";\nimport { DEFAULT_TOUR_LABELS } from \"../tour/tour\";\nimport { DEFAULT_COMMAND_PALETTE_LABELS } from \"../search/command-palette\";\nimport { DEFAULT_GLOBAL_SEARCH_LABELS } from \"../search/global-search\";\nimport { DEFAULT_SERIES_CHART_LABELS } from \"../components/series-chart-labels\";\nimport { DEFAULT_SPARKLINE_LABELS } from \"../components/sparkline\";\nimport { DEFAULT_STAT_TILE_LABELS } from \"../components/stat-tile\";\nimport { DEFAULT_SIGNATURE_PAD_LABELS } from \"../components/signature-pad\";\nimport { DEFAULT_PASSWORD_STRENGTH_LABELS } from \"../components/password-strength\";\nimport { DEFAULT_DANGER_CONFIRM_LABELS } from \"../components/danger-confirm\";\nimport { DEFAULT_SWATCH_PICKER_LABELS } from \"../components/swatch-picker\";\nimport { DEFAULT_ICON_PICKER_LABELS } from \"../components/icon-picker\";\nimport { DEFAULT_DIALOG_FRAME_LABELS } from \"../components/dialog-frame\";\nimport { DEFAULT_FILE_PICKER_LABELS } from \"../components/file-button\";\nimport { DEFAULT_MEASURED_GRID_LABELS } from \"../components/measured-grid\";\nimport { DEFAULT_CONFIRM_DIALOG_LABELS } from \"../components/confirm-dialog\";\nimport { DEFAULT_FLOATING_PANEL_LABELS } from \"../components/floating-panel\";\nimport { DEFAULT_FEEDBACK_ATTACHMENT_LABELS } from \"../feedback/feedback-attachment\";\nimport { DEFAULT_COPY_BUTTON_LABELS } from \"../components/copy-button\";\nimport { DEFAULT_BULK_ACTION_BAR_LABELS } from \"../components/bulk-action-bar\";\nimport { DEFAULT_LIST_LABELS } from \"../components/list\";\nimport { DEFAULT_BREADCRUMBS_LABELS } from \"../components/breadcrumbs\";\nimport { DEFAULT_TOAST_LABELS } from \"../components/toast\";\nimport {\n DEFAULT_APP_SHELL_LABELS,\n DEFAULT_CALCULATOR_LABELS,\n DEFAULT_COMBOBOX_LABELS,\n DEFAULT_COMMON_LABELS,\n DEFAULT_CURRENCY_LABELS,\n DEFAULT_DATE_PICKER_LABELS,\n DEFAULT_FILE_LABELS,\n DEFAULT_MULTI_SELECT_LABELS,\n DEFAULT_PICKER_SHEET_LABELS,\n DEFAULT_SWIPEABLE_ROW_LABELS,\n DEFAULT_TOP_BAR_LABELS,\n} from \"./kit-labels\";\nimport type { UiKitLabels } from \"./kit-labels\";\n\n/**\n * The whole English tree in one object: what a translation is written against, and\n * the `reference` for {@link missingKitLabels}.\n *\n * A separate module from the provider on purpose. Components import the provider's\n * hooks; this file imports the components' defaults. Kept together they would be an\n * import cycle through every component in the kit.\n */\nexport const DEFAULT_UI_KIT_LABELS: UiKitLabels = {\n common: DEFAULT_COMMON_LABELS,\n dataTable: DEFAULT_DATA_TABLE_LABELS,\n miniCalendar: DEFAULT_MINI_CALENDAR_LABELS,\n calendarHeatmap: DEFAULT_CALENDAR_HEATMAP_LABELS,\n datePicker: DEFAULT_DATE_PICKER_LABELS,\n monthPicker: DEFAULT_MONTH_PICKER_LABELS,\n popover: DEFAULT_POPOVER_LABELS,\n combobox: DEFAULT_COMBOBOX_LABELS,\n multiSelect: DEFAULT_MULTI_SELECT_LABELS,\n calculator: DEFAULT_CALCULATOR_LABELS,\n currency: DEFAULT_CURRENCY_LABELS,\n chipInput: DEFAULT_CHIP_INPUT_LABELS,\n fieldSync: DEFAULT_FIELD_SYNC_LABELS,\n passwordReveal: DEFAULT_PASSWORD_REVEAL_LABELS,\n tabs: DEFAULT_TABS_LABELS,\n appShell: DEFAULT_APP_SHELL_LABELS,\n pageContents: DEFAULT_PAGE_CONTENTS_LABELS,\n topBar: DEFAULT_TOP_BAR_LABELS,\n pickerSheet: DEFAULT_PICKER_SHEET_LABELS,\n swipeableRow: DEFAULT_SWIPEABLE_ROW_LABELS,\n file: DEFAULT_FILE_LABELS,\n wizard: DEFAULT_WIZARD_LABELS,\n tour: DEFAULT_TOUR_LABELS,\n commandPalette: DEFAULT_COMMAND_PALETTE_LABELS,\n globalSearch: DEFAULT_GLOBAL_SEARCH_LABELS,\n seriesChart: DEFAULT_SERIES_CHART_LABELS,\n sparkline: DEFAULT_SPARKLINE_LABELS,\n statTile: DEFAULT_STAT_TILE_LABELS,\n signaturePad: DEFAULT_SIGNATURE_PAD_LABELS,\n passwordStrength: DEFAULT_PASSWORD_STRENGTH_LABELS,\n dangerConfirm: DEFAULT_DANGER_CONFIRM_LABELS,\n swatchPicker: DEFAULT_SWATCH_PICKER_LABELS,\n iconPicker: DEFAULT_ICON_PICKER_LABELS,\n dialogFrame: DEFAULT_DIALOG_FRAME_LABELS,\n filePicker: DEFAULT_FILE_PICKER_LABELS,\n measuredGrid: DEFAULT_MEASURED_GRID_LABELS,\n feedbackAttachment: DEFAULT_FEEDBACK_ATTACHMENT_LABELS,\n confirmDialog: DEFAULT_CONFIRM_DIALOG_LABELS,\n floatingPanel: DEFAULT_FLOATING_PANEL_LABELS,\n copyButton: DEFAULT_COPY_BUTTON_LABELS,\n bulkActionBar: DEFAULT_BULK_ACTION_BAR_LABELS,\n list: DEFAULT_LIST_LABELS,\n breadcrumbs: DEFAULT_BREADCRUMBS_LABELS,\n toast: DEFAULT_TOAST_LABELS,\n};\n"],"mappings":";AAAA,SAAS,iCAAiC;AAC1C,SAAS,oCAAoC;AAC7C,SAAS,uCAAuC;AAChD,SAAS,mCAAmC;AAC5C,SAAS,oCAAoC;AAC7C,SAAS,8BAA8B;AACvC,SAAS,iCAAiC;AAC1C,SAAS,iCAAiC;AAC1C,SAAS,gCAAgC,2BAA2B;AACpE,SAAS,6BAA6B;AACtC,SAAS,2BAA2B;AACpC,SAAS,sCAAsC;AAC/C,SAAS,oCAAoC;AAC7C,SAAS,mCAAmC;AAC5C,SAAS,gCAAgC;AACzC,SAAS,gCAAgC;AACzC,SAAS,oCAAoC;AAC7C,SAAS,wCAAwC;AACjD,SAAS,qCAAqC;AAC9C,SAAS,oCAAoC;AAC7C,SAAS,kCAAkC;AAC3C,SAAS,mCAAmC;AAC5C,SAAS,kCAAkC;AAC3C,SAAS,oCAAoC;AAC7C,SAAS,qCAAqC;AAC9C,SAAS,qCAAqC;AAC9C,SAAS,0CAA0C;AACnD,SAAS,kCAAkC;AAC3C,SAAS,sCAAsC;AAC/C,SAAS,2BAA2B;AACpC,SAAS,kCAAkC;AAC3C,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAWA,MAAM,wBAAqC;AAAA,EAChD,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,SAAS;AAAA,EACT,UAAU;AAAA,EACV,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,UAAU;AAAA,EACV,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,cAAc;AAAA,EACd,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AACT;","names":[]}
|
|
@@ -2,6 +2,7 @@ import * as react from 'react';
|
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import { DataTableLabels } from '../components/data-table-labels.js';
|
|
4
4
|
import { MiniCalendarLabels, WeekDay } from '../components/mini-calendar.js';
|
|
5
|
+
import { CalendarHeatmapLabels } from '../components/calendar-heatmap.js';
|
|
5
6
|
import { PopoverLabels } from '../components/popover.js';
|
|
6
7
|
import { ChipInputLabels } from '../components/chip.js';
|
|
7
8
|
import { FieldSyncLabels } from '../components/field-sync.js';
|
|
@@ -34,6 +35,7 @@ import { ToastLabels } from '../components/toast.js';
|
|
|
34
35
|
import 'lucide-react';
|
|
35
36
|
import '../components/tooltip.js';
|
|
36
37
|
import '../hooks/use-anchored-rect.js';
|
|
38
|
+
import '../lib/clipping.js';
|
|
37
39
|
import '../search/search-index.js';
|
|
38
40
|
import '../components/tile-radio.js';
|
|
39
41
|
import '../components/modal.js';
|
|
@@ -190,6 +192,7 @@ interface UiKitLabels {
|
|
|
190
192
|
common: CommonLabels;
|
|
191
193
|
dataTable: DataTableLabels;
|
|
192
194
|
miniCalendar: MiniCalendarLabels;
|
|
195
|
+
calendarHeatmap: CalendarHeatmapLabels;
|
|
193
196
|
datePicker: DatePickerLabels;
|
|
194
197
|
monthPicker: MonthPickerLabels;
|
|
195
198
|
popover: PopoverLabels;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/i18n/kit-labels.tsx"],"sourcesContent":["import { createContext, useContext, useMemo } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { DataTableLabels } from \"../components/data-table-labels\";\nimport type { MiniCalendarLabels, WeekDay } from \"../components/mini-calendar\";\nimport type { PopoverLabels } from \"../components/popover\";\nimport type { ChipInputLabels } from \"../components/chip\";\nimport type { FieldSyncLabels } from \"../components/field-sync\";\nimport type { PasswordRevealLabels, TabsLabels } from \"../components/ui\";\nimport type { WizardLabels } from \"../wizard/types\";\nimport type { TourLabels } from \"../tour/tour\";\nimport type { CommandPaletteLabels } from \"../search/command-palette\";\nimport type { GlobalSearchLabels } from \"../search/global-search\";\nimport type { MonthPickerLabels } from \"../components/month-picker\";\nimport type { PageContentsLabels } from \"../components/page-contents\";\nimport type { SeriesChartLabels } from \"../components/series-chart-labels\";\nimport type { SparklineLabels } from \"../components/sparkline\";\nimport type { StatTileLabels } from \"../components/stat-tile\";\nimport type { SignaturePadLabels } from \"../components/signature-pad\";\nimport type { PasswordStrengthLabels } from \"../components/password-strength\";\nimport type { DangerConfirmLabels } from \"../components/danger-confirm\";\nimport type { SwatchPickerLabels } from \"../components/swatch-picker\";\nimport type { IconPickerLabels } from \"../components/icon-picker\";\nimport type { DialogFrameLabels } from \"../components/dialog-frame\";\nimport type { FilePickerLabels } from \"../components/file-button\";\nimport type { MeasuredGridLabels } from \"../components/measured-grid\";\nimport type { FeedbackAttachmentFieldLabels } from \"../feedback/feedback-attachment\";\nimport type { ConfirmDialogLabels } from \"../components/confirm-dialog\";\nimport type { FloatingPanelLabels } from \"../components/floating-panel\";\nimport type { CopyButtonLabels } from \"../components/copy-button\";\nimport type { BulkActionBarLabels } from \"../components/bulk-action-bar\";\nimport type { ListLabels } from \"../components/list\";\nimport type { BreadcrumbsLabels } from \"../components/breadcrumbs\";\nimport type { ToastLabels } from \"../components/toast\";\n\n/**\n * EVERY string the kit renders, as one typed tree — and an optional provider that\n * hands it to every component at once.\n *\n * WHY THIS EXISTS. The kit ships no catalogue and resolves no strings, and that stays\n * true: the app supplies every word. What was wrong was HOW it had to supply them —\n * one `labels` prop per component instance, under a different prop name per\n * component (`labels`, `calendarLabels`, `passwordLabels`, `clearLabel`,\n * `searchPlaceholder`, `ariaLabel` …). A translated app therefore rendered English\n * wherever one call site forgot one prop, and nothing told it so: a German showcase\n * still said \"Rows per page\", \"Collapse sidebar\" and \"Popover\" in seven languages.\n *\n * Now there is one key per string, addressed by a dot path (`dataTable.pageSize`,\n * `datePicker.today`), and three sources in a fixed order of precedence:\n *\n * the component's own prop > <UiKitProvider labels> > English default\n *\n * A consumer writes its translation ONCE, as a `UiKitLabels` (or a partial of it),\n * mounts `<UiKitProvider labels={…} locale={…}>` at the root, and every kit component\n * below speaks that language — including the ones nested inside other kit components\n * (the calendar inside the data table's date filter, the popover inside the date\n * picker), which no prop at the outer call site could reach before.\n *\n * Messages that carry a value are FUNCTIONS of that value, never a template to fill:\n * a number glued into an English sentence is untranslatable, because the grammar\n * around it moves with it in most languages.\n */\n\n/* ── Namespaces that had no labels type of their own ─────────────────────── */\n\n/** The words several components share. A component's own namespace wins over these\n * where both exist; these are what a new component reaches for first. */\nexport interface CommonLabels {\n close: string;\n clear: string;\n search: string;\n done: string;\n cancel: string;\n save: string;\n back: string;\n next: string;\n remove: string;\n loading: string;\n noResults: string;\n /** \"Name: value\" — how a field's accessible name is composed with its value.\n * A colon-and-space is not universal punctuation (French puts a space before\n * the colon, Chinese uses a full-width one). */\n fieldValue: (field: string, value: string) => string;\n /** The × that puts away a banner or a notice (`AlertBanner onDismiss`). Not `close`:\n * nothing opened, and \"Close\" on a banner reads as closing the page it sits on. */\n dismiss: string;\n}\n\n/** `DatePicker` / `DateRangePicker` chrome. The calendar inside has its own\n * namespace, `miniCalendar`. */\nexport interface DatePickerLabels {\n /** Accessible name of the popover panel the calendar opens in. */\n panel: string;\n /** The same, for `DateRangePicker`'s panel. */\n rangePanel: string;\n clear: string;\n previousDay: string;\n nextDay: string;\n today: string;\n /** `DateRangePicker commit=\"apply\"`: the button that commits the drafted range. */\n apply: string;\n /** …and the one that discards it. */\n cancel: string;\n /** Accessible name of `DateRangePicker`'s preset column. */\n presets: string;\n}\n\n/** The whole combobox family: `Combobox`, `EntityCombobox`,\n * `MultiEntityCombobox`, `InlineEntityCombobox`, `Autocomplete`. */\nexport interface ComboboxLabels {\n search: string;\n noResults: string;\n clear: string;\n loading: string;\n /** The \"add this\" row when free entry is allowed. */\n create: (query: string) => string;\n /** Trigger summary once more than one value is picked. */\n selectedCount: (count: number) => string;\n /** An async lookup (`loadOptions`) failed. */\n loadError: string;\n /** Announced (live region) when the list settles on `count` > 0 rows. */\n resultCount: (count: number) => string;\n /** The query is shorter than the `minChars` a lookup needs. */\n minChars: (count: number) => string;\n}\n\nexport interface MultiSelectLabels {\n search: string;\n selectAll: string;\n clear: string;\n /** Trigger text when nothing is picked, which a multi-select reads as \"all\". */\n all: string;\n /** Trigger summary once some (but not all) values are picked. The English\n * default is the bare count, which is what the trigger has always shown. */\n selectedCount: (count: number) => string;\n}\n\n/** `CalculatorButton` (desktop popover keypad) and `NumberPadSheet` (phone sheet). */\nexport interface CalculatorLabels {\n /** The button that opens the calculator. */\n open: string;\n /** The popover / sheet itself. */\n panel: string;\n calculation: string;\n backspace: string;\n clear: string;\n equals: string;\n /** The primary key of the phone pad — visible text, not an aria-label. */\n done: string;\n /** Names of the operator keys and the decimal key. Their glyphs are not names a\n * screen reader agrees on — \"÷\" is read as \"division sign\", \"divided by\" or\n * nothing at all depending on the reader — so each says what it does. */\n plus: string;\n minus: string;\n times: string;\n divide: string;\n decimal: string;\n}\n\n/** `CurrencySelect` and the currency half of `AmountInput`. */\nexport interface CurrencyLabels {\n currency: string;\n search: string;\n}\n\nexport interface AppShellLabels {\n collapse: string;\n expand: string;\n /** Accessible name of an inline group's disclosure button (`subNav=\"inline\"`). */\n toggleGroup: (groupLabel: string) => string;\n}\n\nexport interface TopBarLabels {\n theme: string;\n palette: string;\n language: string;\n switchRole: string;\n /** The role switcher's tooltip, given the active role's name. */\n role: (value: string) => string;\n}\n\nexport interface PickerSheetLabels {\n close: string;\n}\n\nexport interface SwipeableRowLabels {\n actions: string;\n}\n\nexport interface FileLabels {\n /** A file size for display, given its size in BYTES. The default uses\n * `Intl.NumberFormat`'s unit formatting in the provider's locale. */\n size: (bytes: number) => string;\n}\n\n/** The complete tree. `UiKitProvider` takes any partial of it. */\nexport interface UiKitLabels {\n common: CommonLabels;\n dataTable: DataTableLabels;\n miniCalendar: MiniCalendarLabels;\n datePicker: DatePickerLabels;\n monthPicker: MonthPickerLabels;\n popover: PopoverLabels;\n combobox: ComboboxLabels;\n multiSelect: MultiSelectLabels;\n calculator: CalculatorLabels;\n currency: CurrencyLabels;\n chipInput: ChipInputLabels;\n fieldSync: FieldSyncLabels;\n passwordReveal: PasswordRevealLabels;\n tabs: TabsLabels;\n appShell: AppShellLabels;\n pageContents: PageContentsLabels;\n topBar: TopBarLabels;\n pickerSheet: PickerSheetLabels;\n swipeableRow: SwipeableRowLabels;\n file: FileLabels;\n wizard: WizardLabels;\n tour: TourLabels;\n commandPalette: CommandPaletteLabels;\n globalSearch: GlobalSearchLabels;\n seriesChart: SeriesChartLabels;\n sparkline: SparklineLabels;\n statTile: StatTileLabels;\n signaturePad: SignaturePadLabels;\n passwordStrength: PasswordStrengthLabels;\n dangerConfirm: DangerConfirmLabels;\n swatchPicker: SwatchPickerLabels;\n iconPicker: IconPickerLabels;\n dialogFrame: DialogFrameLabels;\n filePicker: FilePickerLabels;\n measuredGrid: MeasuredGridLabels;\n feedbackAttachment: FeedbackAttachmentFieldLabels;\n confirmDialog: ConfirmDialogLabels;\n floatingPanel: FloatingPanelLabels;\n copyButton: CopyButtonLabels;\n bulkActionBar: BulkActionBarLabels;\n list: ListLabels;\n breadcrumbs: BreadcrumbsLabels;\n toast: ToastLabels;\n}\n\n/** Any subset of the tree, one level deep — each namespace may be partial, and a\n * namespace that holds a record (`dataTable.presets`) is merged key by key. */\nexport type UiKitLabelOverrides = { [K in keyof UiKitLabels]?: Partial<UiKitLabels[K]> };\n\n/* ── English defaults for the namespaces defined here ────────────────────── */\n\nexport const DEFAULT_COMMON_LABELS: CommonLabels = {\n close: \"Close\",\n clear: \"Clear\",\n search: \"Search\",\n done: \"Done\",\n cancel: \"Cancel\",\n save: \"Save\",\n back: \"Back\",\n next: \"Next\",\n remove: \"Remove\",\n loading: \"Loading…\",\n noResults: \"No results\",\n fieldValue: (field, value) => `${field}: ${value}`,\n dismiss: \"Dismiss\",\n};\n\nexport const DEFAULT_DATE_PICKER_LABELS: DatePickerLabels = {\n panel: \"Choose a date\",\n rangePanel: \"Choose a date range\",\n clear: \"Clear\",\n previousDay: \"Previous day\",\n nextDay: \"Next day\",\n today: \"Today\",\n apply: \"Apply\",\n cancel: \"Cancel\",\n presets: \"Quick ranges\",\n};\n\nexport const DEFAULT_COMBOBOX_LABELS: ComboboxLabels = {\n search: \"Search\",\n noResults: \"No results\",\n clear: \"Clear\",\n loading: \"Loading…\",\n create: (query) => `Create “${query}”`,\n selectedCount: (count) => `${count} selected`,\n loadError: \"Couldn’t load results\",\n resultCount: (count) => (count === 1 ? \"1 result\" : `${count} results`),\n minChars: (count) =>\n count === 1 ? \"Type at least 1 character\" : `Type at least ${count} characters`,\n};\n\nexport const DEFAULT_MULTI_SELECT_LABELS: MultiSelectLabels = {\n search: \"Search\",\n selectAll: \"Select all\",\n clear: \"Clear\",\n all: \"All\",\n selectedCount: (count) => String(count),\n};\n\nexport const DEFAULT_CALCULATOR_LABELS: CalculatorLabels = {\n open: \"Open calculator\",\n panel: \"Calculator\",\n calculation: \"Calculation\",\n backspace: \"Backspace\",\n clear: \"Clear\",\n equals: \"Equals\",\n done: \"Done\",\n plus: \"Plus\",\n minus: \"Minus\",\n times: \"Times\",\n divide: \"Divide\",\n decimal: \"Decimal point\",\n};\n\nexport const DEFAULT_CURRENCY_LABELS: CurrencyLabels = {\n currency: \"Currency\",\n search: \"Search currency\",\n};\n\nexport const DEFAULT_APP_SHELL_LABELS: AppShellLabels = {\n collapse: \"Collapse sidebar\",\n expand: \"Expand sidebar\",\n toggleGroup: (groupLabel) => `${groupLabel}: pages`,\n};\n\nexport const DEFAULT_TOP_BAR_LABELS: TopBarLabels = {\n theme: \"Toggle theme\",\n palette: \"Appearance preset\",\n language: \"Language\",\n switchRole: \"Switch role\",\n role: (value) => `Role: ${value}`,\n};\n\nexport const DEFAULT_PICKER_SHEET_LABELS: PickerSheetLabels = { close: \"Close\" };\n\nexport const DEFAULT_SWIPEABLE_ROW_LABELS: SwipeableRowLabels = { actions: \"Row actions\" };\n\n/** Formats with the locale the provider was given (see {@link useKitFileLabels}).\n * This static default has no locale to hand and falls back to the runtime's. */\nexport const DEFAULT_FILE_LABELS: FileLabels = {\n size: (bytes) => formatFileSize(bytes),\n};\n\n/** \"12 kB\", \"3.4 MB\" — `Intl`'s unit formatting, so the digits, the decimal mark and\n * the unit's spelling all follow `locale`. */\nexport function formatFileSize(bytes: number, locale?: string): string {\n const units = [\"byte\", \"kilobyte\", \"megabyte\", \"gigabyte\"] as const;\n let value = bytes;\n let i = 0;\n while (value >= 1000 && i < units.length - 1) {\n value /= 1000;\n i += 1;\n }\n return new Intl.NumberFormat(locale, {\n style: \"unit\",\n unit: units[i],\n unitDisplay: i === 0 ? \"long\" : \"short\",\n maximumFractionDigits: value < 10 && i > 0 ? 1 : 0,\n }).format(value);\n}\n\n/* ── The provider ────────────────────────────────────────────────────────── */\n\ninterface KitI18n {\n labels?: UiKitLabelOverrides;\n locale?: string;\n weekStartsOn?: WeekDay;\n}\n\nconst KitI18nContext = createContext<KitI18n>({});\n\nexport interface UiKitProviderProps {\n /** Any part of {@link UiKitLabels}. Missing keys fall back to English. */\n labels?: UiKitLabelOverrides;\n /**\n * BCP 47 tag used by every kit component that formats something — dates, numbers,\n * month and weekday names, file sizes — when it is not handed a `locale` prop of\n * its own. Without a provider, and without a prop, those use the runtime default.\n */\n locale?: string;\n /**\n * The first day of the week (0 = Sunday, 1 = Monday …) for every calendar below —\n * `MiniCalendar` and the pickers built on it — that is not handed a `weekStartsOn`\n * of its own. Without it the week start follows `locale`'s week info.\n *\n * Separate from `locale` because the two are separate decisions: a German-built\n * app running in English (`locale=\"en\"`) would otherwise start its weeks on Sunday,\n * and switching it to `en-GB` to get Monday changes every date and number format.\n */\n weekStartsOn?: WeekDay;\n children: ReactNode;\n}\n\n/**\n * Hand every kit component below this point its strings and its locale.\n *\n * Optional: a component outside any provider behaves exactly as it did before the\n * provider existed. Nesting works as a merge — an inner provider overrides only what\n * it names, so a page can re-label one table's `dataTable.table` without restating\n * the language.\n */\nexport function UiKitProvider({ labels, locale, weekStartsOn, children }: UiKitProviderProps) {\n const outer = useContext(KitI18nContext);\n const value = useMemo<KitI18n>(\n () => ({\n locale: locale ?? outer.locale,\n weekStartsOn: weekStartsOn ?? outer.weekStartsOn,\n labels: mergeOverrides(outer.labels, labels),\n }),\n [outer, labels, locale, weekStartsOn],\n );\n return <KitI18nContext.Provider value={value}>{children}</KitI18nContext.Provider>;\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\n/** Two levels: namespaces, and inside a namespace a record-valued key (presets). */\nfunction mergeNamespace<T extends object>(base: T, over: Partial<T> | undefined): T {\n if (!over) return base;\n const out = { ...base } as Record<string, unknown>;\n for (const [k, v] of Object.entries(over)) {\n if (v === undefined) continue;\n const prev = out[k];\n out[k] = isRecord(prev) && isRecord(v) ? { ...prev, ...v } : v;\n }\n return out as T;\n}\n\nfunction mergeOverrides(\n a: UiKitLabelOverrides | undefined,\n b: UiKitLabelOverrides | undefined,\n): UiKitLabelOverrides | undefined {\n if (!a) return b;\n if (!b) return a;\n const out: Record<string, unknown> = { ...a };\n for (const [ns, v] of Object.entries(b)) {\n out[ns] = mergeNamespace((out[ns] as object | undefined) ?? {}, v as object);\n }\n return out as UiKitLabelOverrides;\n}\n\n/** What the nearest provider says about one namespace — `undefined` outside one.\n * For a component whose own resolver does more than a merge (the data table\n * derives `columnsCount` from `columns`): feed `{ ...overrides, ...props }` to it. */\nexport function useKitLabelOverrides<K extends keyof UiKitLabels>(\n ns: K,\n): Partial<UiKitLabels[K]> | undefined {\n return useContext(KitI18nContext).labels?.[ns] as Partial<UiKitLabels[K]> | undefined;\n}\n\n/**\n * One namespace, resolved: `defaults`, then the provider, then the component's own\n * `prop`. Record-valued keys are merged key by key at each step.\n */\nexport function useKitLabels<K extends keyof UiKitLabels>(\n ns: K,\n defaults: UiKitLabels[K],\n prop?: Partial<UiKitLabels[K]>,\n): UiKitLabels[K] {\n const fromProvider = useKitLabelOverrides(ns);\n return useMemo(\n () => mergeNamespace(mergeNamespace(defaults, fromProvider), prop),\n [defaults, fromProvider, prop],\n );\n}\n\n/** The component's own `locale` prop, else the provider's, else `undefined` (which\n * every `Intl` API reads as \"the runtime's default\"). */\nexport function useKitLocale(prop?: string): string | undefined {\n const fromProvider = useContext(KitI18nContext).locale;\n return prop ?? fromProvider;\n}\n\n/** The week start the nearest `<UiKitProvider weekStartsOn>` pins, else `undefined`\n * (the caller then asks the locale). A component's own prop goes first:\n * `prop ?? useKitWeekStart()`. */\nexport function useKitWeekStart(): WeekDay | undefined {\n return useContext(KitI18nContext).weekStartsOn;\n}\n\n/** {@link DEFAULT_FILE_LABELS}, but formatting in the provider's locale. */\nexport function useKitFileLabels(prop?: Partial<FileLabels>): FileLabels {\n const locale = useKitLocale();\n const defaults = useMemo<FileLabels>(\n () => ({ size: (bytes) => formatFileSize(bytes, locale) }),\n [locale],\n );\n return useKitLabels(\"file\", defaults, prop);\n}\n\n/**\n * The dot paths of every key `labels` does NOT supply — the ones a translated app is\n * still showing in English. Assert on it in the app's own test:\n *\n * expect(missingKitLabels(de)).toEqual([]);\n *\n * `reference` is the complete tree to check against — pass\n * {@link DEFAULT_UI_KIT_LABELS} (src/i18n/defaults.ts). It is a parameter rather than an import\n * because the defaults live beside their components, and this module is imported BY\n * those components.\n */\nexport function missingKitLabels(\n labels: UiKitLabelOverrides | undefined,\n reference: UiKitLabels,\n): string[] {\n const missing: string[] = [];\n for (const [ns, keys] of Object.entries(reference)) {\n const given = (labels as Record<string, Record<string, unknown> | undefined> | undefined)?.[ns];\n for (const [key, value] of Object.entries(keys as Record<string, unknown>)) {\n const got = given?.[key];\n if (got === undefined) {\n missing.push(`${ns}.${key}`);\n } else if (isRecord(value) && isRecord(got)) {\n for (const sub of Object.keys(value)) {\n if (got[sub] === undefined) missing.push(`${ns}.${key}.${sub}`);\n }\n }\n }\n }\n return missing;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/i18n/kit-labels.tsx"],"sourcesContent":["import { createContext, useContext, useMemo } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { DataTableLabels } from \"../components/data-table-labels\";\nimport type { MiniCalendarLabels, WeekDay } from \"../components/mini-calendar\";\nimport type { CalendarHeatmapLabels } from \"../components/calendar-heatmap\";\nimport type { PopoverLabels } from \"../components/popover\";\nimport type { ChipInputLabels } from \"../components/chip\";\nimport type { FieldSyncLabels } from \"../components/field-sync\";\nimport type { PasswordRevealLabels, TabsLabels } from \"../components/ui\";\nimport type { WizardLabels } from \"../wizard/types\";\nimport type { TourLabels } from \"../tour/tour\";\nimport type { CommandPaletteLabels } from \"../search/command-palette\";\nimport type { GlobalSearchLabels } from \"../search/global-search\";\nimport type { MonthPickerLabels } from \"../components/month-picker\";\nimport type { PageContentsLabels } from \"../components/page-contents\";\nimport type { SeriesChartLabels } from \"../components/series-chart-labels\";\nimport type { SparklineLabels } from \"../components/sparkline\";\nimport type { StatTileLabels } from \"../components/stat-tile\";\nimport type { SignaturePadLabels } from \"../components/signature-pad\";\nimport type { PasswordStrengthLabels } from \"../components/password-strength\";\nimport type { DangerConfirmLabels } from \"../components/danger-confirm\";\nimport type { SwatchPickerLabels } from \"../components/swatch-picker\";\nimport type { IconPickerLabels } from \"../components/icon-picker\";\nimport type { DialogFrameLabels } from \"../components/dialog-frame\";\nimport type { FilePickerLabels } from \"../components/file-button\";\nimport type { MeasuredGridLabels } from \"../components/measured-grid\";\nimport type { FeedbackAttachmentFieldLabels } from \"../feedback/feedback-attachment\";\nimport type { ConfirmDialogLabels } from \"../components/confirm-dialog\";\nimport type { FloatingPanelLabels } from \"../components/floating-panel\";\nimport type { CopyButtonLabels } from \"../components/copy-button\";\nimport type { BulkActionBarLabels } from \"../components/bulk-action-bar\";\nimport type { ListLabels } from \"../components/list\";\nimport type { BreadcrumbsLabels } from \"../components/breadcrumbs\";\nimport type { ToastLabels } from \"../components/toast\";\n\n/**\n * EVERY string the kit renders, as one typed tree — and an optional provider that\n * hands it to every component at once.\n *\n * WHY THIS EXISTS. The kit ships no catalogue and resolves no strings, and that stays\n * true: the app supplies every word. What was wrong was HOW it had to supply them —\n * one `labels` prop per component instance, under a different prop name per\n * component (`labels`, `calendarLabels`, `passwordLabels`, `clearLabel`,\n * `searchPlaceholder`, `ariaLabel` …). A translated app therefore rendered English\n * wherever one call site forgot one prop, and nothing told it so: a German showcase\n * still said \"Rows per page\", \"Collapse sidebar\" and \"Popover\" in seven languages.\n *\n * Now there is one key per string, addressed by a dot path (`dataTable.pageSize`,\n * `datePicker.today`), and three sources in a fixed order of precedence:\n *\n * the component's own prop > <UiKitProvider labels> > English default\n *\n * A consumer writes its translation ONCE, as a `UiKitLabels` (or a partial of it),\n * mounts `<UiKitProvider labels={…} locale={…}>` at the root, and every kit component\n * below speaks that language — including the ones nested inside other kit components\n * (the calendar inside the data table's date filter, the popover inside the date\n * picker), which no prop at the outer call site could reach before.\n *\n * Messages that carry a value are FUNCTIONS of that value, never a template to fill:\n * a number glued into an English sentence is untranslatable, because the grammar\n * around it moves with it in most languages.\n */\n\n/* ── Namespaces that had no labels type of their own ─────────────────────── */\n\n/** The words several components share. A component's own namespace wins over these\n * where both exist; these are what a new component reaches for first. */\nexport interface CommonLabels {\n close: string;\n clear: string;\n search: string;\n done: string;\n cancel: string;\n save: string;\n back: string;\n next: string;\n remove: string;\n loading: string;\n noResults: string;\n /** \"Name: value\" — how a field's accessible name is composed with its value.\n * A colon-and-space is not universal punctuation (French puts a space before\n * the colon, Chinese uses a full-width one). */\n fieldValue: (field: string, value: string) => string;\n /** The × that puts away a banner or a notice (`AlertBanner onDismiss`). Not `close`:\n * nothing opened, and \"Close\" on a banner reads as closing the page it sits on. */\n dismiss: string;\n}\n\n/** `DatePicker` / `DateRangePicker` chrome. The calendar inside has its own\n * namespace, `miniCalendar`. */\nexport interface DatePickerLabels {\n /** Accessible name of the popover panel the calendar opens in. */\n panel: string;\n /** The same, for `DateRangePicker`'s panel. */\n rangePanel: string;\n clear: string;\n previousDay: string;\n nextDay: string;\n today: string;\n /** `DateRangePicker commit=\"apply\"`: the button that commits the drafted range. */\n apply: string;\n /** …and the one that discards it. */\n cancel: string;\n /** Accessible name of `DateRangePicker`'s preset column. */\n presets: string;\n}\n\n/** The whole combobox family: `Combobox`, `EntityCombobox`,\n * `MultiEntityCombobox`, `InlineEntityCombobox`, `Autocomplete`. */\nexport interface ComboboxLabels {\n search: string;\n noResults: string;\n clear: string;\n loading: string;\n /** The \"add this\" row when free entry is allowed. */\n create: (query: string) => string;\n /** Trigger summary once more than one value is picked. */\n selectedCount: (count: number) => string;\n /** An async lookup (`loadOptions`) failed. */\n loadError: string;\n /** Announced (live region) when the list settles on `count` > 0 rows. */\n resultCount: (count: number) => string;\n /** The query is shorter than the `minChars` a lookup needs. */\n minChars: (count: number) => string;\n}\n\nexport interface MultiSelectLabels {\n search: string;\n selectAll: string;\n clear: string;\n /** Trigger text when nothing is picked, which a multi-select reads as \"all\". */\n all: string;\n /** Trigger summary once some (but not all) values are picked. The English\n * default is the bare count, which is what the trigger has always shown. */\n selectedCount: (count: number) => string;\n}\n\n/** `CalculatorButton` (desktop popover keypad) and `NumberPadSheet` (phone sheet). */\nexport interface CalculatorLabels {\n /** The button that opens the calculator. */\n open: string;\n /** The popover / sheet itself. */\n panel: string;\n calculation: string;\n backspace: string;\n clear: string;\n equals: string;\n /** The primary key of the phone pad — visible text, not an aria-label. */\n done: string;\n /** Names of the operator keys and the decimal key. Their glyphs are not names a\n * screen reader agrees on — \"÷\" is read as \"division sign\", \"divided by\" or\n * nothing at all depending on the reader — so each says what it does. */\n plus: string;\n minus: string;\n times: string;\n divide: string;\n decimal: string;\n}\n\n/** `CurrencySelect` and the currency half of `AmountInput`. */\nexport interface CurrencyLabels {\n currency: string;\n search: string;\n}\n\nexport interface AppShellLabels {\n collapse: string;\n expand: string;\n /** Accessible name of an inline group's disclosure button (`subNav=\"inline\"`). */\n toggleGroup: (groupLabel: string) => string;\n}\n\nexport interface TopBarLabels {\n theme: string;\n palette: string;\n language: string;\n switchRole: string;\n /** The role switcher's tooltip, given the active role's name. */\n role: (value: string) => string;\n}\n\nexport interface PickerSheetLabels {\n close: string;\n}\n\nexport interface SwipeableRowLabels {\n actions: string;\n}\n\nexport interface FileLabels {\n /** A file size for display, given its size in BYTES. The default uses\n * `Intl.NumberFormat`'s unit formatting in the provider's locale. */\n size: (bytes: number) => string;\n}\n\n/** The complete tree. `UiKitProvider` takes any partial of it. */\nexport interface UiKitLabels {\n common: CommonLabels;\n dataTable: DataTableLabels;\n miniCalendar: MiniCalendarLabels;\n calendarHeatmap: CalendarHeatmapLabels;\n datePicker: DatePickerLabels;\n monthPicker: MonthPickerLabels;\n popover: PopoverLabels;\n combobox: ComboboxLabels;\n multiSelect: MultiSelectLabels;\n calculator: CalculatorLabels;\n currency: CurrencyLabels;\n chipInput: ChipInputLabels;\n fieldSync: FieldSyncLabels;\n passwordReveal: PasswordRevealLabels;\n tabs: TabsLabels;\n appShell: AppShellLabels;\n pageContents: PageContentsLabels;\n topBar: TopBarLabels;\n pickerSheet: PickerSheetLabels;\n swipeableRow: SwipeableRowLabels;\n file: FileLabels;\n wizard: WizardLabels;\n tour: TourLabels;\n commandPalette: CommandPaletteLabels;\n globalSearch: GlobalSearchLabels;\n seriesChart: SeriesChartLabels;\n sparkline: SparklineLabels;\n statTile: StatTileLabels;\n signaturePad: SignaturePadLabels;\n passwordStrength: PasswordStrengthLabels;\n dangerConfirm: DangerConfirmLabels;\n swatchPicker: SwatchPickerLabels;\n iconPicker: IconPickerLabels;\n dialogFrame: DialogFrameLabels;\n filePicker: FilePickerLabels;\n measuredGrid: MeasuredGridLabels;\n feedbackAttachment: FeedbackAttachmentFieldLabels;\n confirmDialog: ConfirmDialogLabels;\n floatingPanel: FloatingPanelLabels;\n copyButton: CopyButtonLabels;\n bulkActionBar: BulkActionBarLabels;\n list: ListLabels;\n breadcrumbs: BreadcrumbsLabels;\n toast: ToastLabels;\n}\n\n/** Any subset of the tree, one level deep — each namespace may be partial, and a\n * namespace that holds a record (`dataTable.presets`) is merged key by key. */\nexport type UiKitLabelOverrides = { [K in keyof UiKitLabels]?: Partial<UiKitLabels[K]> };\n\n/* ── English defaults for the namespaces defined here ────────────────────── */\n\nexport const DEFAULT_COMMON_LABELS: CommonLabels = {\n close: \"Close\",\n clear: \"Clear\",\n search: \"Search\",\n done: \"Done\",\n cancel: \"Cancel\",\n save: \"Save\",\n back: \"Back\",\n next: \"Next\",\n remove: \"Remove\",\n loading: \"Loading…\",\n noResults: \"No results\",\n fieldValue: (field, value) => `${field}: ${value}`,\n dismiss: \"Dismiss\",\n};\n\nexport const DEFAULT_DATE_PICKER_LABELS: DatePickerLabels = {\n panel: \"Choose a date\",\n rangePanel: \"Choose a date range\",\n clear: \"Clear\",\n previousDay: \"Previous day\",\n nextDay: \"Next day\",\n today: \"Today\",\n apply: \"Apply\",\n cancel: \"Cancel\",\n presets: \"Quick ranges\",\n};\n\nexport const DEFAULT_COMBOBOX_LABELS: ComboboxLabels = {\n search: \"Search\",\n noResults: \"No results\",\n clear: \"Clear\",\n loading: \"Loading…\",\n create: (query) => `Create “${query}”`,\n selectedCount: (count) => `${count} selected`,\n loadError: \"Couldn’t load results\",\n resultCount: (count) => (count === 1 ? \"1 result\" : `${count} results`),\n minChars: (count) =>\n count === 1 ? \"Type at least 1 character\" : `Type at least ${count} characters`,\n};\n\nexport const DEFAULT_MULTI_SELECT_LABELS: MultiSelectLabels = {\n search: \"Search\",\n selectAll: \"Select all\",\n clear: \"Clear\",\n all: \"All\",\n selectedCount: (count) => String(count),\n};\n\nexport const DEFAULT_CALCULATOR_LABELS: CalculatorLabels = {\n open: \"Open calculator\",\n panel: \"Calculator\",\n calculation: \"Calculation\",\n backspace: \"Backspace\",\n clear: \"Clear\",\n equals: \"Equals\",\n done: \"Done\",\n plus: \"Plus\",\n minus: \"Minus\",\n times: \"Times\",\n divide: \"Divide\",\n decimal: \"Decimal point\",\n};\n\nexport const DEFAULT_CURRENCY_LABELS: CurrencyLabels = {\n currency: \"Currency\",\n search: \"Search currency\",\n};\n\nexport const DEFAULT_APP_SHELL_LABELS: AppShellLabels = {\n collapse: \"Collapse sidebar\",\n expand: \"Expand sidebar\",\n toggleGroup: (groupLabel) => `${groupLabel}: pages`,\n};\n\nexport const DEFAULT_TOP_BAR_LABELS: TopBarLabels = {\n theme: \"Toggle theme\",\n palette: \"Appearance preset\",\n language: \"Language\",\n switchRole: \"Switch role\",\n role: (value) => `Role: ${value}`,\n};\n\nexport const DEFAULT_PICKER_SHEET_LABELS: PickerSheetLabels = { close: \"Close\" };\n\nexport const DEFAULT_SWIPEABLE_ROW_LABELS: SwipeableRowLabels = { actions: \"Row actions\" };\n\n/** Formats with the locale the provider was given (see {@link useKitFileLabels}).\n * This static default has no locale to hand and falls back to the runtime's. */\nexport const DEFAULT_FILE_LABELS: FileLabels = {\n size: (bytes) => formatFileSize(bytes),\n};\n\n/** \"12 kB\", \"3.4 MB\" — `Intl`'s unit formatting, so the digits, the decimal mark and\n * the unit's spelling all follow `locale`. */\nexport function formatFileSize(bytes: number, locale?: string): string {\n const units = [\"byte\", \"kilobyte\", \"megabyte\", \"gigabyte\"] as const;\n let value = bytes;\n let i = 0;\n while (value >= 1000 && i < units.length - 1) {\n value /= 1000;\n i += 1;\n }\n return new Intl.NumberFormat(locale, {\n style: \"unit\",\n unit: units[i],\n unitDisplay: i === 0 ? \"long\" : \"short\",\n maximumFractionDigits: value < 10 && i > 0 ? 1 : 0,\n }).format(value);\n}\n\n/* ── The provider ────────────────────────────────────────────────────────── */\n\ninterface KitI18n {\n labels?: UiKitLabelOverrides;\n locale?: string;\n weekStartsOn?: WeekDay;\n}\n\nconst KitI18nContext = createContext<KitI18n>({});\n\nexport interface UiKitProviderProps {\n /** Any part of {@link UiKitLabels}. Missing keys fall back to English. */\n labels?: UiKitLabelOverrides;\n /**\n * BCP 47 tag used by every kit component that formats something — dates, numbers,\n * month and weekday names, file sizes — when it is not handed a `locale` prop of\n * its own. Without a provider, and without a prop, those use the runtime default.\n */\n locale?: string;\n /**\n * The first day of the week (0 = Sunday, 1 = Monday …) for every calendar below —\n * `MiniCalendar` and the pickers built on it — that is not handed a `weekStartsOn`\n * of its own. Without it the week start follows `locale`'s week info.\n *\n * Separate from `locale` because the two are separate decisions: a German-built\n * app running in English (`locale=\"en\"`) would otherwise start its weeks on Sunday,\n * and switching it to `en-GB` to get Monday changes every date and number format.\n */\n weekStartsOn?: WeekDay;\n children: ReactNode;\n}\n\n/**\n * Hand every kit component below this point its strings and its locale.\n *\n * Optional: a component outside any provider behaves exactly as it did before the\n * provider existed. Nesting works as a merge — an inner provider overrides only what\n * it names, so a page can re-label one table's `dataTable.table` without restating\n * the language.\n */\nexport function UiKitProvider({ labels, locale, weekStartsOn, children }: UiKitProviderProps) {\n const outer = useContext(KitI18nContext);\n const value = useMemo<KitI18n>(\n () => ({\n locale: locale ?? outer.locale,\n weekStartsOn: weekStartsOn ?? outer.weekStartsOn,\n labels: mergeOverrides(outer.labels, labels),\n }),\n [outer, labels, locale, weekStartsOn],\n );\n return <KitI18nContext.Provider value={value}>{children}</KitI18nContext.Provider>;\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\n/** Two levels: namespaces, and inside a namespace a record-valued key (presets). */\nfunction mergeNamespace<T extends object>(base: T, over: Partial<T> | undefined): T {\n if (!over) return base;\n const out = { ...base } as Record<string, unknown>;\n for (const [k, v] of Object.entries(over)) {\n if (v === undefined) continue;\n const prev = out[k];\n out[k] = isRecord(prev) && isRecord(v) ? { ...prev, ...v } : v;\n }\n return out as T;\n}\n\nfunction mergeOverrides(\n a: UiKitLabelOverrides | undefined,\n b: UiKitLabelOverrides | undefined,\n): UiKitLabelOverrides | undefined {\n if (!a) return b;\n if (!b) return a;\n const out: Record<string, unknown> = { ...a };\n for (const [ns, v] of Object.entries(b)) {\n out[ns] = mergeNamespace((out[ns] as object | undefined) ?? {}, v as object);\n }\n return out as UiKitLabelOverrides;\n}\n\n/** What the nearest provider says about one namespace — `undefined` outside one.\n * For a component whose own resolver does more than a merge (the data table\n * derives `columnsCount` from `columns`): feed `{ ...overrides, ...props }` to it. */\nexport function useKitLabelOverrides<K extends keyof UiKitLabels>(\n ns: K,\n): Partial<UiKitLabels[K]> | undefined {\n return useContext(KitI18nContext).labels?.[ns] as Partial<UiKitLabels[K]> | undefined;\n}\n\n/**\n * One namespace, resolved: `defaults`, then the provider, then the component's own\n * `prop`. Record-valued keys are merged key by key at each step.\n */\nexport function useKitLabels<K extends keyof UiKitLabels>(\n ns: K,\n defaults: UiKitLabels[K],\n prop?: Partial<UiKitLabels[K]>,\n): UiKitLabels[K] {\n const fromProvider = useKitLabelOverrides(ns);\n return useMemo(\n () => mergeNamespace(mergeNamespace(defaults, fromProvider), prop),\n [defaults, fromProvider, prop],\n );\n}\n\n/** The component's own `locale` prop, else the provider's, else `undefined` (which\n * every `Intl` API reads as \"the runtime's default\"). */\nexport function useKitLocale(prop?: string): string | undefined {\n const fromProvider = useContext(KitI18nContext).locale;\n return prop ?? fromProvider;\n}\n\n/** The week start the nearest `<UiKitProvider weekStartsOn>` pins, else `undefined`\n * (the caller then asks the locale). A component's own prop goes first:\n * `prop ?? useKitWeekStart()`. */\nexport function useKitWeekStart(): WeekDay | undefined {\n return useContext(KitI18nContext).weekStartsOn;\n}\n\n/** {@link DEFAULT_FILE_LABELS}, but formatting in the provider's locale. */\nexport function useKitFileLabels(prop?: Partial<FileLabels>): FileLabels {\n const locale = useKitLocale();\n const defaults = useMemo<FileLabels>(\n () => ({ size: (bytes) => formatFileSize(bytes, locale) }),\n [locale],\n );\n return useKitLabels(\"file\", defaults, prop);\n}\n\n/**\n * The dot paths of every key `labels` does NOT supply — the ones a translated app is\n * still showing in English. Assert on it in the app's own test:\n *\n * expect(missingKitLabels(de)).toEqual([]);\n *\n * `reference` is the complete tree to check against — pass\n * {@link DEFAULT_UI_KIT_LABELS} (src/i18n/defaults.ts). It is a parameter rather than an import\n * because the defaults live beside their components, and this module is imported BY\n * those components.\n */\nexport function missingKitLabels(\n labels: UiKitLabelOverrides | undefined,\n reference: UiKitLabels,\n): string[] {\n const missing: string[] = [];\n for (const [ns, keys] of Object.entries(reference)) {\n const given = (labels as Record<string, Record<string, unknown> | undefined> | undefined)?.[ns];\n for (const [key, value] of Object.entries(keys as Record<string, unknown>)) {\n const got = given?.[key];\n if (got === undefined) {\n missing.push(`${ns}.${key}`);\n } else if (isRecord(value) && isRecord(got)) {\n for (const sub of Object.keys(value)) {\n if (got[sub] === undefined) missing.push(`${ns}.${key}.${sub}`);\n }\n }\n }\n }\n return missing;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,6 +2,7 @@ import { UiKitLabels } from '../kit-labels.js';
|
|
|
2
2
|
import 'react';
|
|
3
3
|
import '../../components/data-table-labels.js';
|
|
4
4
|
import '../../components/mini-calendar.js';
|
|
5
|
+
import '../../components/calendar-heatmap.js';
|
|
5
6
|
import '../../components/popover.js';
|
|
6
7
|
import '../../components/chip.js';
|
|
7
8
|
import 'lucide-react';
|
|
@@ -9,6 +10,7 @@ import '../../components/field-sync.js';
|
|
|
9
10
|
import '../../components/ui.js';
|
|
10
11
|
import '../../components/tooltip.js';
|
|
11
12
|
import '../../hooks/use-anchored-rect.js';
|
|
13
|
+
import '../../lib/clipping.js';
|
|
12
14
|
import '../../wizard/types.js';
|
|
13
15
|
import '../../tour/tour.js';
|
|
14
16
|
import '../../search/command-palette.js';
|
|
@@ -2,6 +2,7 @@ import { UiKitLabels } from '../kit-labels.js';
|
|
|
2
2
|
import 'react';
|
|
3
3
|
import '../../components/data-table-labels.js';
|
|
4
4
|
import '../../components/mini-calendar.js';
|
|
5
|
+
import '../../components/calendar-heatmap.js';
|
|
5
6
|
import '../../components/popover.js';
|
|
6
7
|
import '../../components/chip.js';
|
|
7
8
|
import 'lucide-react';
|
|
@@ -9,6 +10,7 @@ import '../../components/field-sync.js';
|
|
|
9
10
|
import '../../components/ui.js';
|
|
10
11
|
import '../../components/tooltip.js';
|
|
11
12
|
import '../../hooks/use-anchored-rect.js';
|
|
13
|
+
import '../../lib/clipping.js';
|
|
12
14
|
import '../../wizard/types.js';
|
|
13
15
|
import '../../tour/tour.js';
|
|
14
16
|
import '../../search/command-palette.js';
|
|
@@ -2,6 +2,7 @@ import { UiKitLabels } from '../kit-labels.js';
|
|
|
2
2
|
import 'react';
|
|
3
3
|
import '../../components/data-table-labels.js';
|
|
4
4
|
import '../../components/mini-calendar.js';
|
|
5
|
+
import '../../components/calendar-heatmap.js';
|
|
5
6
|
import '../../components/popover.js';
|
|
6
7
|
import '../../components/chip.js';
|
|
7
8
|
import 'lucide-react';
|
|
@@ -9,6 +10,7 @@ import '../../components/field-sync.js';
|
|
|
9
10
|
import '../../components/ui.js';
|
|
10
11
|
import '../../components/tooltip.js';
|
|
11
12
|
import '../../hooks/use-anchored-rect.js';
|
|
13
|
+
import '../../lib/clipping.js';
|
|
12
14
|
import '../../wizard/types.js';
|
|
13
15
|
import '../../tour/tour.js';
|
|
14
16
|
import '../../search/command-palette.js';
|
|
@@ -2,6 +2,7 @@ import { UiKitLabels } from '../kit-labels.js';
|
|
|
2
2
|
import 'react';
|
|
3
3
|
import '../../components/data-table-labels.js';
|
|
4
4
|
import '../../components/mini-calendar.js';
|
|
5
|
+
import '../../components/calendar-heatmap.js';
|
|
5
6
|
import '../../components/popover.js';
|
|
6
7
|
import '../../components/chip.js';
|
|
7
8
|
import 'lucide-react';
|
|
@@ -9,6 +10,7 @@ import '../../components/field-sync.js';
|
|
|
9
10
|
import '../../components/ui.js';
|
|
10
11
|
import '../../components/tooltip.js';
|
|
11
12
|
import '../../hooks/use-anchored-rect.js';
|
|
13
|
+
import '../../lib/clipping.js';
|
|
12
14
|
import '../../wizard/types.js';
|
|
13
15
|
import '../../tour/tour.js';
|
|
14
16
|
import '../../search/command-palette.js';
|
package/dist/i18n/locales/de.js
CHANGED
|
@@ -103,6 +103,13 @@ function uiKitLabelsDe(numberLocale = "de-DE") {
|
|
|
103
103
|
startSelected: (date) => `${date} als Startdatum gew\xE4hlt. W\xE4hlen Sie jetzt ein Enddatum.`,
|
|
104
104
|
rangeSelected: (from, to) => `Zeitraum ${from} bis ${to} gew\xE4hlt. W\xE4hlen Sie ein Startdatum, um neu zu beginnen.`
|
|
105
105
|
},
|
|
106
|
+
calendarHeatmap: {
|
|
107
|
+
grid: "Tageswerte",
|
|
108
|
+
day: (date, value) => `${date}: ${value}`,
|
|
109
|
+
less: "Weniger",
|
|
110
|
+
more: "Mehr",
|
|
111
|
+
truncated: (count) => `Die neuesten Tage werden angezeigt; ${n(count)} ${count === 1 ? "fr\xFCherer Tag wird" : "fr\xFChere Tage werden"} nicht angezeigt.`
|
|
112
|
+
},
|
|
106
113
|
datePicker: {
|
|
107
114
|
apply: "\xDCbernehmen",
|
|
108
115
|
cancel: "Abbrechen",
|
|
@@ -366,7 +373,8 @@ function uiKitLabelsDe(numberLocale = "de-DE") {
|
|
|
366
373
|
cancel: "Abbrechen"
|
|
367
374
|
},
|
|
368
375
|
floatingPanel: {
|
|
369
|
-
close: "Schlie\xDFen"
|
|
376
|
+
close: "Schlie\xDFen",
|
|
377
|
+
badge: (count) => `${n(count)} neu`
|
|
370
378
|
},
|
|
371
379
|
copyButton: {
|
|
372
380
|
copy: "Kopieren",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/i18n/locales/de.ts"],"sourcesContent":["import { formatFileSize } from \"../kit-labels\";\nimport type { UiKitLabels } from \"../kit-labels\";\n\n/**\n * The kit's words in German: every namespace of {@link UiKitLabels}, for\n * `<UiKitProvider labels={UI_KIT_LABELS_DE}>`.\n *\n * Self-contained on purpose — nothing but the kit's own `formatFileSize` — so it works\n * as a starting point to copy and adjust. Counts and sizes are formatted with\n * `de-DE` digits; {@link uiKitLabelsDe} takes another number locale\n * (e.g. `\"de-CH\"` for 1’234) without touching the words.\n */\nexport function uiKitLabelsDe(numberLocale = \"de-DE\"): UiKitLabels {\n const num = new Intl.NumberFormat(numberLocale);\n const n = (value: number) => num.format(value);\n\n return {\n feedbackAttachment: {\n attachmentAdd: \"Bild anhängen\",\n attachmentCapture: \"Screenshot aufnehmen\",\n attachmentPaste: \"…oder einen Screenshot aus der Zwischenablage einfügen.\",\n attachmentRemove: \"Anhang entfernen\",\n },\n measuredGrid: {\n view: \"Tabellenansicht\",\n cellsView: \"Zellen\",\n textView: \"Text\",\n addRow: \"Zeile hinzufügen\",\n removeRow: (row) => `Zeile ${row} entfernen`,\n clear: \"Tabelle leeren\",\n pasteHint: \"Einen Block aus einer Tabellenkalkulation in eine beliebige Zelle einfügen\",\n cell: (column, row) => `${column}, Zeile ${row}`,\n rowNumber: \"Zeile\",\n rowActions: \"Zeilenaktionen\",\n keyboardHint:\n \"Pfeiltasten wechseln zwischen Zellen. Tippen ersetzt eine Zelle, F2 bearbeitet sie, Escape macht die Bearbeitung rückgängig. Enter geht nach unten und fügt am Ende eine Zeile hinzu.\",\n lineError: (line) => `Zeile ${line} konnte nicht gelesen werden`,\n points: (count) => (count === 1 ? \"1 Punkt\" : `${count} Punkte`),\n problems: (count) =>\n count === 1 ? \"1 Zelle ist keine Zahl\" : `${count} Zellen sind keine Zahlen`,\n },\n pageContents: { title: \"Auf dieser Seite\" },\n common: {\n dismiss: \"Schließen\",\n close: \"Schließen\",\n clear: \"Leeren\",\n search: \"Suchen\",\n done: \"Fertig\",\n cancel: \"Abbrechen\",\n save: \"Speichern\",\n back: \"Zurück\",\n next: \"Weiter\",\n remove: \"Entfernen\",\n loading: \"Wird geladen…\",\n noResults: \"Keine Ergebnisse\",\n fieldValue: (field, value) => `${field}: ${value}`,\n },\n dataTable: {\n columns: \"Spalten\",\n selectAllRows: \"Alle Zeilen auswählen\",\n sortHint: \"Klicken zum Sortieren · Umschalt-Klick für weitere Sortierung\",\n filter: \"Filter\",\n close: \"Schließen\",\n selectRow: \"Zeile auswählen\",\n autoSize: \"Spaltenbreiten anpassen\",\n loading: \"Wird geladen…\",\n filters: \"Filter\",\n // Resets every active filter; \"Alle löschen\" would read as deleting the filters.\n clearAll: \"Alle zurücksetzen\",\n done: \"Fertig\",\n pageSize: \"Zeilen pro Seite\",\n // Sits among 10 / 25 / 50 counting \"Zeilen\", so the plural \"Alle\", not \"Alles\".\n pageSizeAll: \"Alle\",\n prevPage: \"Vorherige Seite\",\n nextPage: \"Nächste Seite\",\n clearFilter: \"Filter zurücksetzen\",\n filterPlaceholder: \"Filtern…\",\n selectFilter: \"Auswählen\",\n selectAll: \"Alle\",\n selectNone: \"Keine\",\n dateFrom: \"Von\",\n dateTo: \"Bis\",\n numberMin: \"Min.\",\n numberMax: \"Max.\",\n numberAbs: \"Betrag\",\n presets: {\n today: \"Heute\",\n yesterday: \"Gestern\",\n this_week: \"Diese Woche\",\n last_week: \"Letzte Woche\",\n last_7_days: \"Letzte 7 Tage\",\n last_30_days: \"Letzte 30 Tage\",\n this_month: \"Dieser Monat\",\n last_month: \"Letzter Monat\",\n last_3_months: \"Letzte 3 Monate\",\n ytd: \"Seit Jahresbeginn\",\n last_year: \"Letztes Jahr\",\n },\n table: \"Datentabelle\",\n filterResults: (shown, total) =>\n `${n(shown)} von ${n(total)} ${total === 1 ? \"Zeile\" : \"Zeilen\"}`,\n sortedAscending: (column) => `Sortiert nach ${column}, aufsteigend`,\n sortedDescending: (column) => `Sortiert nach ${column}, absteigend`,\n sortCleared: (column) => `Sortierung nach ${column} aufgehoben`,\n pageChanged: (page, totalPages) => `Seite ${n(page)} von ${n(totalPages)}`,\n pageRange: (from, to, total) => `${n(from)}–${n(to)} / ${n(total)}`,\n rowCount: (total) => n(total),\n columnsCount: (visible, total) => `Spalten (${n(visible)}/${n(total)})`,\n },\n miniCalendar: {\n previousMonth: \"Vorheriger Monat\",\n nextMonth: \"Nächster Monat\",\n // Already formatted in the provider's locale (\"Montag, 14. September 2026\").\n day: (date) => date,\n chooseStart: \"Startdatum wählen\",\n chooseEnd: \"Enddatum wählen\",\n startSelected: (date) => `${date} als Startdatum gewählt. Wählen Sie jetzt ein Enddatum.`,\n rangeSelected: (from, to) =>\n `Zeitraum ${from} bis ${to} gewählt. Wählen Sie ein Startdatum, um neu zu beginnen.`,\n },\n datePicker: {\n apply: \"Übernehmen\",\n cancel: \"Abbrechen\",\n presets: \"Schnellauswahl\",\n panel: \"Datum wählen\",\n rangePanel: \"Zeitraum wählen\",\n clear: \"Leeren\",\n previousDay: \"Vorheriger Tag\",\n nextDay: \"Nächster Tag\",\n today: \"Heute\",\n },\n monthPicker: {\n previousYear: \"Vorheriges Jahr\",\n nextYear: \"Nächstes Jahr\",\n panel: \"Monat wählen\",\n month: (monthYear) => monthYear,\n },\n popover: {\n panel: \"Aufklappfenster\",\n },\n combobox: {\n search: \"Suchen\",\n noResults: \"Keine Ergebnisse\",\n clear: \"Leeren\",\n loading: \"Wird geladen…\",\n create: (query) => `„${query}“ anlegen`,\n selectedCount: (count) => `${n(count)} ausgewählt`,\n loadError: \"Ergebnisse konnten nicht geladen werden\",\n resultCount: (count) => `${n(count)} ${count === 1 ? \"Ergebnis\" : \"Ergebnisse\"}`,\n // \"Zeichen\" is the same in singular and plural.\n minChars: (count) => `Mindestens ${n(count)} Zeichen eingeben`,\n },\n multiSelect: {\n search: \"Suchen\",\n selectAll: \"Alle auswählen\",\n clear: \"Leeren\",\n all: \"Alle\",\n // The bare count, as in English: the trigger has always shown just the number.\n selectedCount: (count) => n(count),\n },\n calculator: {\n open: \"Taschenrechner öffnen\",\n panel: \"Taschenrechner\",\n calculation: \"Rechnung\",\n backspace: \"Rücktaste\",\n clear: \"Löschen\",\n equals: \"Ist gleich\",\n done: \"Fertig\",\n plus: \"Plus\",\n minus: \"Minus\",\n times: \"Mal\",\n divide: \"Geteilt durch\",\n decimal: \"Dezimaltrennzeichen\",\n },\n currency: {\n currency: \"Währung\",\n search: \"Währung suchen\",\n },\n chipInput: {\n // The value is arbitrary user text, quoted as a citation, so the participle agrees\n // with the implied \"Eintrag\" whatever the chip says.\n added: (value) => `„${value}“ hinzugefügt`,\n removed: (value) => `„${value}“ entfernt`,\n remove: \"Entfernen\",\n // `von` governs the dative, visible only in the plural: \"von 1 Eintrag\", \"von 2 Einträgen\".\n atLimit: (max) => `Grenze von ${n(max)} ${max === 1 ? \"Eintrag\" : \"Einträgen\"} erreicht`,\n duplicate: (value) => `„${value}“ steht bereits in der Liste`,\n },\n swatchPicker: {\n none: \"Keine Farbe\",\n mixed: \"Gemischt: Die ausgewählten Elemente haben unterschiedliche Farben\",\n },\n iconPicker: {\n none: \"Kein Symbol\",\n mixed: \"Gemischt: Die ausgewählten Elemente haben unterschiedliche Symbole\",\n search: \"Symbole suchen\",\n noResults: \"Keine passenden Symbole\",\n resultCount: (count) => `${n(count)} ${count === 1 ? \"Symbol\" : \"Symbole\"}`,\n },\n fieldSync: {\n synced: \"Gespeichert\",\n edited: \"Nicht gespeicherte Änderungen\",\n pending: \"Wird gespeichert…\",\n error: \"Speichern fehlgeschlagen\",\n retry: \"Erneut versuchen\",\n },\n passwordReveal: {\n show: \"Passwort anzeigen\",\n hide: \"Passwort verbergen\",\n },\n dangerConfirm: {\n arm: \"Löschen…\",\n confirm: \"Löschen\",\n cancel: \"Abbrechen\",\n prompt: \"Dies kann nicht rückgängig gemacht werden.\",\n password: \"Passwort\",\n phrase: (phrase) => `Geben Sie zur Bestätigung „${phrase}“ ein`,\n },\n tabs: {\n // \"Tab\" is what German UIs say; \"Registerkarte\" reads like a 1990s manual.\n add: \"Tab hinzufügen\",\n remove: (tab) => `${tab} entfernen`,\n },\n appShell: {\n collapse: \"Seitenleiste einklappen\",\n expand: \"Seitenleiste ausklappen\",\n toggleGroup: (groupLabel) => `${groupLabel}: Seiten`,\n },\n topBar: {\n theme: \"Theme wechseln\",\n palette: \"Darstellungsvorlage\",\n language: \"Sprache\",\n switchRole: \"Rolle wechseln\",\n role: (value) => `Rolle: ${value}`,\n },\n pickerSheet: {\n close: \"Schließen\",\n },\n dialogFrame: {\n close: \"Schließen\",\n },\n bulkActionBar: {\n selected: (count) => `${n(count)} ausgewählt`,\n clear: \"Auswahl aufheben\",\n cleared: \"Auswahl aufgehoben\",\n },\n swipeableRow: {\n actions: \"Zeilenaktionen\",\n },\n file: {\n // The kit's own `Intl` unit formatting, pinned to this locale (\"3,4 MB\").\n size: (bytes) => formatFileSize(bytes, numberLocale),\n },\n filePicker: {\n dropzone: \"Datei-Upload\",\n browse: \"Durchsuchen\",\n empty: \"Datei hier ablegen\",\n emptyMultiple: \"Dateien hier ablegen\",\n hint: (accept) => (accept ? `Erlaubt: ${accept}` : \"Beliebiger Dateityp\"),\n busy: \"Wird hochgeladen…\",\n rejectedPick: (count) =>\n count === 1\n ? \"Die Datei wurde nicht hinzugefügt\"\n : `Keine der ${count} Dateien wurde hinzugefügt`,\n rejectedType: (name) => `„${name}“ hat einen nicht unterstützten Dateityp`,\n rejectedTypeOnly: (accept) => `Nur ${accept}-Dateien`,\n rejectedSize: (name, maxSize) => `„${name}“ ist größer als ${maxSize}`,\n rejectedCount: (name, maxFiles) =>\n `„${name}“ wurde nicht hinzugefügt: höchstens ${n(maxFiles)} ${maxFiles === 1 ? \"Datei\" : \"Dateien\"}`,\n rejectedInvalid: (name) => `„${name}“ kann hier nicht verwendet werden`,\n rejectedMany: (count) =>\n count === 1\n ? \"1 Datei wurde nicht hinzugefügt\"\n : `${n(count)} Dateien wurden nicht hinzugefügt`,\n selected: (count, firstName) =>\n count === 1 ? `„${firstName}“ ausgewählt` : `${n(count)} Dateien ausgewählt`,\n remove: (name) => `„${name}“ entfernen`,\n clearAll: \"Alle Dateien entfernen\",\n removed: (name) => `„${name}“ entfernt`,\n cleared: \"Alle Dateien entfernt\",\n },\n wizard: {\n done: \"Fertig\",\n cancel: \"Abbrechen\",\n back: \"Zurück\",\n next: \"Weiter\",\n skip: \"Überspringen\",\n finish: \"Abschließen\",\n submitting: \"Wird erstellt…\",\n steps: \"Schritte\",\n step: (current, total) => `Schritt ${n(current)} von ${n(total)}`,\n cancelTitle: \"Formular verwerfen?\",\n confirmCancel: \"Ihre Eingaben gehen verloren.\",\n cancelConfirmLabel: \"Verwerfen\",\n cancelDismissLabel: \"Weiter bearbeiten\",\n reviewTitle: \"Überprüfen\",\n edit: \"Bearbeiten\",\n missingRequired: \"Bitte füllen Sie alle Pflichtfelder aus.\",\n genericError: \"Ein Fehler ist aufgetreten\",\n },\n tour: {\n next: \"Weiter\",\n back: \"Zurück\",\n skip: \"Überspringen\",\n done: \"Fertig\",\n awaitClickHint: \"Klicken Sie auf das hervorgehobene Element, um fortzufahren\",\n step: (current, total) => `${n(current)} / ${n(total)}`,\n },\n commandPalette: {\n clear: \"Suche löschen\",\n submit: \"Suchen\",\n close: \"Schließen\",\n placeholder: \"Suchen…\",\n empty: \"Keine Ergebnisse\",\n loading: \"Wird gesucht…\",\n dialog: \"Suche\",\n error: \"Die Suche ist fehlgeschlagen. Bitte erneut versuchen.\",\n },\n globalSearch: {\n trigger: \"Suche\",\n placeholder: \"Suchen oder springen zu…\",\n shortcut: (keys) => `Suche (${keys})`,\n suggestions: \"Vorschläge\",\n results: \"Ergebnisse\",\n },\n sparkline: {\n rising: (first, last) => `Steigend von ${first} auf ${last}`,\n falling: (first, last) => `Fallend von ${first} auf ${last}`,\n flat: (value) => `Unverändert bei ${value}`,\n single: (value) => `Ein Wert: ${value}`,\n noData: \"Keine Daten\",\n named: (name, summary) => `${name}: ${summary}`,\n },\n statTile: {\n // `amount` arrives formatted and unsigned (\"5 %\", \"1.200 €\").\n increase: (amount) => `Um ${amount} gestiegen`,\n decrease: (amount) => `Um ${amount} gesunken`,\n unchanged: \"Keine Veränderung\",\n better: (change) => `${change} (besser)`,\n worse: (change) => `${change} (schlechter)`,\n noValue: \"Keine Daten\",\n loading: \"Wird geladen…\",\n },\n signaturePad: {\n label: \"Unterschrift\",\n instructions: \"Unterschreiben Sie im Feld mit der Maus, dem Finger oder einem Stift.\",\n typedFallbackHint: \"Wenn Sie nicht zeichnen können, geben Sie stattdessen Ihren Namen ein.\",\n empty: \"Noch nichts gezeichnet\",\n signed: \"Unterschrift gezeichnet\",\n undo: \"Letzten Strich rückgängig machen\",\n clear: \"Leeren\",\n save: \"Unterschrift speichern\",\n useTyped: \"Stattdessen Namen eingeben\",\n useDrawn: \"Stattdessen zeichnen\",\n typedName: \"Vollständiger Name\",\n cleared: \"Unterschrift gelöscht\",\n undone: \"Letzter Strich entfernt\",\n viewEmpty: \"Nicht unterschrieben\",\n viewDrawn: \"Handschriftliche Unterschrift\",\n viewTyped: (name) => `Unterschrieben mit dem eingegebenen Namen ${name}`,\n },\n passwordStrength: {\n tooShort: \"Zu kurz\",\n weak: \"Schwach\",\n fair: \"Mittel\",\n good: \"Gut\",\n strong: \"Stark\",\n announcement: (level) => `Passwortstärke: ${level}`,\n // \"Zeichen\" is the same in singular and plural. The English default does not\n // format these counts, so neither does this file.\n ruleLength: (minLength) => `Mindestens ${minLength} Zeichen`,\n ruleCase: \"Groß- und Kleinbuchstaben\",\n ruleDigit: \"Eine Ziffer\",\n ruleSymbol: \"Ein Sonderzeichen\",\n optional: (rule) => `${rule} (optional)`,\n met: \"Erfüllt:\",\n notMet: \"Nicht erfüllt:\",\n tooLong: (maxBytes) =>\n `Höchstens ${maxBytes} Zeichen (Buchstaben mit Akzent und Emojis zählen mehrfach).`,\n },\n seriesChart: {\n resetZoom: \"Zoom zurücksetzen\",\n zoomHint:\n \"Zum Zoomen ziehen: Eine annähernd quadratische Auswahl zoomt beide Achsen, eine lange, schmale nur ihre eigene. Doppelklick setzt zurück.\",\n empty: \"Keine Daten\",\n legend: \"Datenreihen\",\n points: \"Diagrammwerte\",\n },\n confirmDialog: {\n confirm: \"Bestätigen\",\n cancel: \"Abbrechen\",\n },\n floatingPanel: {\n close: \"Schließen\",\n },\n copyButton: {\n copy: \"Kopieren\",\n copied: \"Kopiert\",\n failed: \"Kopieren fehlgeschlagen\",\n copiedAnnouncement: \"In die Zwischenablage kopiert\",\n failedAnnouncement: \"Kopieren in die Zwischenablage fehlgeschlagen\",\n },\n list: {\n unread: \"Ungelesen\",\n opensInNewTab: \"öffnet in einem neuen Tab\",\n },\n breadcrumbs: {\n label: \"Brotkrümelnavigation\",\n showAll: \"Vollständigen Pfad anzeigen\",\n },\n toast: {\n close: \"Benachrichtigung schließen\",\n notifications: \"Benachrichtigungen\",\n undo: \"Rückgängig\",\n redo: \"Wiederholen\",\n },\n };\n}\n\nexport const UI_KIT_LABELS_DE: UiKitLabels = uiKitLabelsDe();\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/i18n/locales/de.ts"],"sourcesContent":["import { formatFileSize } from \"../kit-labels\";\nimport type { UiKitLabels } from \"../kit-labels\";\n\n/**\n * The kit's words in German: every namespace of {@link UiKitLabels}, for\n * `<UiKitProvider labels={UI_KIT_LABELS_DE}>`.\n *\n * Self-contained on purpose — nothing but the kit's own `formatFileSize` — so it works\n * as a starting point to copy and adjust. Counts and sizes are formatted with\n * `de-DE` digits; {@link uiKitLabelsDe} takes another number locale\n * (e.g. `\"de-CH\"` for 1’234) without touching the words.\n */\nexport function uiKitLabelsDe(numberLocale = \"de-DE\"): UiKitLabels {\n const num = new Intl.NumberFormat(numberLocale);\n const n = (value: number) => num.format(value);\n\n return {\n feedbackAttachment: {\n attachmentAdd: \"Bild anhängen\",\n attachmentCapture: \"Screenshot aufnehmen\",\n attachmentPaste: \"…oder einen Screenshot aus der Zwischenablage einfügen.\",\n attachmentRemove: \"Anhang entfernen\",\n },\n measuredGrid: {\n view: \"Tabellenansicht\",\n cellsView: \"Zellen\",\n textView: \"Text\",\n addRow: \"Zeile hinzufügen\",\n removeRow: (row) => `Zeile ${row} entfernen`,\n clear: \"Tabelle leeren\",\n pasteHint: \"Einen Block aus einer Tabellenkalkulation in eine beliebige Zelle einfügen\",\n cell: (column, row) => `${column}, Zeile ${row}`,\n rowNumber: \"Zeile\",\n rowActions: \"Zeilenaktionen\",\n keyboardHint:\n \"Pfeiltasten wechseln zwischen Zellen. Tippen ersetzt eine Zelle, F2 bearbeitet sie, Escape macht die Bearbeitung rückgängig. Enter geht nach unten und fügt am Ende eine Zeile hinzu.\",\n lineError: (line) => `Zeile ${line} konnte nicht gelesen werden`,\n points: (count) => (count === 1 ? \"1 Punkt\" : `${count} Punkte`),\n problems: (count) =>\n count === 1 ? \"1 Zelle ist keine Zahl\" : `${count} Zellen sind keine Zahlen`,\n },\n pageContents: { title: \"Auf dieser Seite\" },\n common: {\n dismiss: \"Schließen\",\n close: \"Schließen\",\n clear: \"Leeren\",\n search: \"Suchen\",\n done: \"Fertig\",\n cancel: \"Abbrechen\",\n save: \"Speichern\",\n back: \"Zurück\",\n next: \"Weiter\",\n remove: \"Entfernen\",\n loading: \"Wird geladen…\",\n noResults: \"Keine Ergebnisse\",\n fieldValue: (field, value) => `${field}: ${value}`,\n },\n dataTable: {\n columns: \"Spalten\",\n selectAllRows: \"Alle Zeilen auswählen\",\n sortHint: \"Klicken zum Sortieren · Umschalt-Klick für weitere Sortierung\",\n filter: \"Filter\",\n close: \"Schließen\",\n selectRow: \"Zeile auswählen\",\n autoSize: \"Spaltenbreiten anpassen\",\n loading: \"Wird geladen…\",\n filters: \"Filter\",\n // Resets every active filter; \"Alle löschen\" would read as deleting the filters.\n clearAll: \"Alle zurücksetzen\",\n done: \"Fertig\",\n pageSize: \"Zeilen pro Seite\",\n // Sits among 10 / 25 / 50 counting \"Zeilen\", so the plural \"Alle\", not \"Alles\".\n pageSizeAll: \"Alle\",\n prevPage: \"Vorherige Seite\",\n nextPage: \"Nächste Seite\",\n clearFilter: \"Filter zurücksetzen\",\n filterPlaceholder: \"Filtern…\",\n selectFilter: \"Auswählen\",\n selectAll: \"Alle\",\n selectNone: \"Keine\",\n dateFrom: \"Von\",\n dateTo: \"Bis\",\n numberMin: \"Min.\",\n numberMax: \"Max.\",\n numberAbs: \"Betrag\",\n presets: {\n today: \"Heute\",\n yesterday: \"Gestern\",\n this_week: \"Diese Woche\",\n last_week: \"Letzte Woche\",\n last_7_days: \"Letzte 7 Tage\",\n last_30_days: \"Letzte 30 Tage\",\n this_month: \"Dieser Monat\",\n last_month: \"Letzter Monat\",\n last_3_months: \"Letzte 3 Monate\",\n ytd: \"Seit Jahresbeginn\",\n last_year: \"Letztes Jahr\",\n },\n table: \"Datentabelle\",\n filterResults: (shown, total) =>\n `${n(shown)} von ${n(total)} ${total === 1 ? \"Zeile\" : \"Zeilen\"}`,\n sortedAscending: (column) => `Sortiert nach ${column}, aufsteigend`,\n sortedDescending: (column) => `Sortiert nach ${column}, absteigend`,\n sortCleared: (column) => `Sortierung nach ${column} aufgehoben`,\n pageChanged: (page, totalPages) => `Seite ${n(page)} von ${n(totalPages)}`,\n pageRange: (from, to, total) => `${n(from)}–${n(to)} / ${n(total)}`,\n rowCount: (total) => n(total),\n columnsCount: (visible, total) => `Spalten (${n(visible)}/${n(total)})`,\n },\n miniCalendar: {\n previousMonth: \"Vorheriger Monat\",\n nextMonth: \"Nächster Monat\",\n // Already formatted in the provider's locale (\"Montag, 14. September 2026\").\n day: (date) => date,\n chooseStart: \"Startdatum wählen\",\n chooseEnd: \"Enddatum wählen\",\n startSelected: (date) => `${date} als Startdatum gewählt. Wählen Sie jetzt ein Enddatum.`,\n rangeSelected: (from, to) =>\n `Zeitraum ${from} bis ${to} gewählt. Wählen Sie ein Startdatum, um neu zu beginnen.`,\n },\n calendarHeatmap: {\n grid: \"Tageswerte\",\n day: (date, value) => `${date}: ${value}`,\n less: \"Weniger\",\n more: \"Mehr\",\n truncated: (count) =>\n `Die neuesten Tage werden angezeigt; ${n(count)} ${count === 1 ? \"früherer Tag wird\" : \"frühere Tage werden\"} nicht angezeigt.`,\n },\n datePicker: {\n apply: \"Übernehmen\",\n cancel: \"Abbrechen\",\n presets: \"Schnellauswahl\",\n panel: \"Datum wählen\",\n rangePanel: \"Zeitraum wählen\",\n clear: \"Leeren\",\n previousDay: \"Vorheriger Tag\",\n nextDay: \"Nächster Tag\",\n today: \"Heute\",\n },\n monthPicker: {\n previousYear: \"Vorheriges Jahr\",\n nextYear: \"Nächstes Jahr\",\n panel: \"Monat wählen\",\n month: (monthYear) => monthYear,\n },\n popover: {\n panel: \"Aufklappfenster\",\n },\n combobox: {\n search: \"Suchen\",\n noResults: \"Keine Ergebnisse\",\n clear: \"Leeren\",\n loading: \"Wird geladen…\",\n create: (query) => `„${query}“ anlegen`,\n selectedCount: (count) => `${n(count)} ausgewählt`,\n loadError: \"Ergebnisse konnten nicht geladen werden\",\n resultCount: (count) => `${n(count)} ${count === 1 ? \"Ergebnis\" : \"Ergebnisse\"}`,\n // \"Zeichen\" is the same in singular and plural.\n minChars: (count) => `Mindestens ${n(count)} Zeichen eingeben`,\n },\n multiSelect: {\n search: \"Suchen\",\n selectAll: \"Alle auswählen\",\n clear: \"Leeren\",\n all: \"Alle\",\n // The bare count, as in English: the trigger has always shown just the number.\n selectedCount: (count) => n(count),\n },\n calculator: {\n open: \"Taschenrechner öffnen\",\n panel: \"Taschenrechner\",\n calculation: \"Rechnung\",\n backspace: \"Rücktaste\",\n clear: \"Löschen\",\n equals: \"Ist gleich\",\n done: \"Fertig\",\n plus: \"Plus\",\n minus: \"Minus\",\n times: \"Mal\",\n divide: \"Geteilt durch\",\n decimal: \"Dezimaltrennzeichen\",\n },\n currency: {\n currency: \"Währung\",\n search: \"Währung suchen\",\n },\n chipInput: {\n // The value is arbitrary user text, quoted as a citation, so the participle agrees\n // with the implied \"Eintrag\" whatever the chip says.\n added: (value) => `„${value}“ hinzugefügt`,\n removed: (value) => `„${value}“ entfernt`,\n remove: \"Entfernen\",\n // `von` governs the dative, visible only in the plural: \"von 1 Eintrag\", \"von 2 Einträgen\".\n atLimit: (max) => `Grenze von ${n(max)} ${max === 1 ? \"Eintrag\" : \"Einträgen\"} erreicht`,\n duplicate: (value) => `„${value}“ steht bereits in der Liste`,\n },\n swatchPicker: {\n none: \"Keine Farbe\",\n mixed: \"Gemischt: Die ausgewählten Elemente haben unterschiedliche Farben\",\n },\n iconPicker: {\n none: \"Kein Symbol\",\n mixed: \"Gemischt: Die ausgewählten Elemente haben unterschiedliche Symbole\",\n search: \"Symbole suchen\",\n noResults: \"Keine passenden Symbole\",\n resultCount: (count) => `${n(count)} ${count === 1 ? \"Symbol\" : \"Symbole\"}`,\n },\n fieldSync: {\n synced: \"Gespeichert\",\n edited: \"Nicht gespeicherte Änderungen\",\n pending: \"Wird gespeichert…\",\n error: \"Speichern fehlgeschlagen\",\n retry: \"Erneut versuchen\",\n },\n passwordReveal: {\n show: \"Passwort anzeigen\",\n hide: \"Passwort verbergen\",\n },\n dangerConfirm: {\n arm: \"Löschen…\",\n confirm: \"Löschen\",\n cancel: \"Abbrechen\",\n prompt: \"Dies kann nicht rückgängig gemacht werden.\",\n password: \"Passwort\",\n phrase: (phrase) => `Geben Sie zur Bestätigung „${phrase}“ ein`,\n },\n tabs: {\n // \"Tab\" is what German UIs say; \"Registerkarte\" reads like a 1990s manual.\n add: \"Tab hinzufügen\",\n remove: (tab) => `${tab} entfernen`,\n },\n appShell: {\n collapse: \"Seitenleiste einklappen\",\n expand: \"Seitenleiste ausklappen\",\n toggleGroup: (groupLabel) => `${groupLabel}: Seiten`,\n },\n topBar: {\n theme: \"Theme wechseln\",\n palette: \"Darstellungsvorlage\",\n language: \"Sprache\",\n switchRole: \"Rolle wechseln\",\n role: (value) => `Rolle: ${value}`,\n },\n pickerSheet: {\n close: \"Schließen\",\n },\n dialogFrame: {\n close: \"Schließen\",\n },\n bulkActionBar: {\n selected: (count) => `${n(count)} ausgewählt`,\n clear: \"Auswahl aufheben\",\n cleared: \"Auswahl aufgehoben\",\n },\n swipeableRow: {\n actions: \"Zeilenaktionen\",\n },\n file: {\n // The kit's own `Intl` unit formatting, pinned to this locale (\"3,4 MB\").\n size: (bytes) => formatFileSize(bytes, numberLocale),\n },\n filePicker: {\n dropzone: \"Datei-Upload\",\n browse: \"Durchsuchen\",\n empty: \"Datei hier ablegen\",\n emptyMultiple: \"Dateien hier ablegen\",\n hint: (accept) => (accept ? `Erlaubt: ${accept}` : \"Beliebiger Dateityp\"),\n busy: \"Wird hochgeladen…\",\n rejectedPick: (count) =>\n count === 1\n ? \"Die Datei wurde nicht hinzugefügt\"\n : `Keine der ${count} Dateien wurde hinzugefügt`,\n rejectedType: (name) => `„${name}“ hat einen nicht unterstützten Dateityp`,\n rejectedTypeOnly: (accept) => `Nur ${accept}-Dateien`,\n rejectedSize: (name, maxSize) => `„${name}“ ist größer als ${maxSize}`,\n rejectedCount: (name, maxFiles) =>\n `„${name}“ wurde nicht hinzugefügt: höchstens ${n(maxFiles)} ${maxFiles === 1 ? \"Datei\" : \"Dateien\"}`,\n rejectedInvalid: (name) => `„${name}“ kann hier nicht verwendet werden`,\n rejectedMany: (count) =>\n count === 1\n ? \"1 Datei wurde nicht hinzugefügt\"\n : `${n(count)} Dateien wurden nicht hinzugefügt`,\n selected: (count, firstName) =>\n count === 1 ? `„${firstName}“ ausgewählt` : `${n(count)} Dateien ausgewählt`,\n remove: (name) => `„${name}“ entfernen`,\n clearAll: \"Alle Dateien entfernen\",\n removed: (name) => `„${name}“ entfernt`,\n cleared: \"Alle Dateien entfernt\",\n },\n wizard: {\n done: \"Fertig\",\n cancel: \"Abbrechen\",\n back: \"Zurück\",\n next: \"Weiter\",\n skip: \"Überspringen\",\n finish: \"Abschließen\",\n submitting: \"Wird erstellt…\",\n steps: \"Schritte\",\n step: (current, total) => `Schritt ${n(current)} von ${n(total)}`,\n cancelTitle: \"Formular verwerfen?\",\n confirmCancel: \"Ihre Eingaben gehen verloren.\",\n cancelConfirmLabel: \"Verwerfen\",\n cancelDismissLabel: \"Weiter bearbeiten\",\n reviewTitle: \"Überprüfen\",\n edit: \"Bearbeiten\",\n missingRequired: \"Bitte füllen Sie alle Pflichtfelder aus.\",\n genericError: \"Ein Fehler ist aufgetreten\",\n },\n tour: {\n next: \"Weiter\",\n back: \"Zurück\",\n skip: \"Überspringen\",\n done: \"Fertig\",\n awaitClickHint: \"Klicken Sie auf das hervorgehobene Element, um fortzufahren\",\n step: (current, total) => `${n(current)} / ${n(total)}`,\n },\n commandPalette: {\n clear: \"Suche löschen\",\n submit: \"Suchen\",\n close: \"Schließen\",\n placeholder: \"Suchen…\",\n empty: \"Keine Ergebnisse\",\n loading: \"Wird gesucht…\",\n dialog: \"Suche\",\n error: \"Die Suche ist fehlgeschlagen. Bitte erneut versuchen.\",\n },\n globalSearch: {\n trigger: \"Suche\",\n placeholder: \"Suchen oder springen zu…\",\n shortcut: (keys) => `Suche (${keys})`,\n suggestions: \"Vorschläge\",\n results: \"Ergebnisse\",\n },\n sparkline: {\n rising: (first, last) => `Steigend von ${first} auf ${last}`,\n falling: (first, last) => `Fallend von ${first} auf ${last}`,\n flat: (value) => `Unverändert bei ${value}`,\n single: (value) => `Ein Wert: ${value}`,\n noData: \"Keine Daten\",\n named: (name, summary) => `${name}: ${summary}`,\n },\n statTile: {\n // `amount` arrives formatted and unsigned (\"5 %\", \"1.200 €\").\n increase: (amount) => `Um ${amount} gestiegen`,\n decrease: (amount) => `Um ${amount} gesunken`,\n unchanged: \"Keine Veränderung\",\n better: (change) => `${change} (besser)`,\n worse: (change) => `${change} (schlechter)`,\n noValue: \"Keine Daten\",\n loading: \"Wird geladen…\",\n },\n signaturePad: {\n label: \"Unterschrift\",\n instructions: \"Unterschreiben Sie im Feld mit der Maus, dem Finger oder einem Stift.\",\n typedFallbackHint: \"Wenn Sie nicht zeichnen können, geben Sie stattdessen Ihren Namen ein.\",\n empty: \"Noch nichts gezeichnet\",\n signed: \"Unterschrift gezeichnet\",\n undo: \"Letzten Strich rückgängig machen\",\n clear: \"Leeren\",\n save: \"Unterschrift speichern\",\n useTyped: \"Stattdessen Namen eingeben\",\n useDrawn: \"Stattdessen zeichnen\",\n typedName: \"Vollständiger Name\",\n cleared: \"Unterschrift gelöscht\",\n undone: \"Letzter Strich entfernt\",\n viewEmpty: \"Nicht unterschrieben\",\n viewDrawn: \"Handschriftliche Unterschrift\",\n viewTyped: (name) => `Unterschrieben mit dem eingegebenen Namen ${name}`,\n },\n passwordStrength: {\n tooShort: \"Zu kurz\",\n weak: \"Schwach\",\n fair: \"Mittel\",\n good: \"Gut\",\n strong: \"Stark\",\n announcement: (level) => `Passwortstärke: ${level}`,\n // \"Zeichen\" is the same in singular and plural. The English default does not\n // format these counts, so neither does this file.\n ruleLength: (minLength) => `Mindestens ${minLength} Zeichen`,\n ruleCase: \"Groß- und Kleinbuchstaben\",\n ruleDigit: \"Eine Ziffer\",\n ruleSymbol: \"Ein Sonderzeichen\",\n optional: (rule) => `${rule} (optional)`,\n met: \"Erfüllt:\",\n notMet: \"Nicht erfüllt:\",\n tooLong: (maxBytes) =>\n `Höchstens ${maxBytes} Zeichen (Buchstaben mit Akzent und Emojis zählen mehrfach).`,\n },\n seriesChart: {\n resetZoom: \"Zoom zurücksetzen\",\n zoomHint:\n \"Zum Zoomen ziehen: Eine annähernd quadratische Auswahl zoomt beide Achsen, eine lange, schmale nur ihre eigene. Doppelklick setzt zurück.\",\n empty: \"Keine Daten\",\n legend: \"Datenreihen\",\n points: \"Diagrammwerte\",\n },\n confirmDialog: {\n confirm: \"Bestätigen\",\n cancel: \"Abbrechen\",\n },\n floatingPanel: {\n close: \"Schließen\",\n badge: (count) => `${n(count)} neu`,\n },\n copyButton: {\n copy: \"Kopieren\",\n copied: \"Kopiert\",\n failed: \"Kopieren fehlgeschlagen\",\n copiedAnnouncement: \"In die Zwischenablage kopiert\",\n failedAnnouncement: \"Kopieren in die Zwischenablage fehlgeschlagen\",\n },\n list: {\n unread: \"Ungelesen\",\n opensInNewTab: \"öffnet in einem neuen Tab\",\n },\n breadcrumbs: {\n label: \"Brotkrümelnavigation\",\n showAll: \"Vollständigen Pfad anzeigen\",\n },\n toast: {\n close: \"Benachrichtigung schließen\",\n notifications: \"Benachrichtigungen\",\n undo: \"Rückgängig\",\n redo: \"Wiederholen\",\n },\n };\n}\n\nexport const UI_KIT_LABELS_DE: UiKitLabels = uiKitLabelsDe();\n"],"mappings":"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","names":[]}
|
|
@@ -2,6 +2,7 @@ import { UiKitLabels } from '../kit-labels.js';
|
|
|
2
2
|
import 'react';
|
|
3
3
|
import '../../components/data-table-labels.js';
|
|
4
4
|
import '../../components/mini-calendar.js';
|
|
5
|
+
import '../../components/calendar-heatmap.js';
|
|
5
6
|
import '../../components/popover.js';
|
|
6
7
|
import '../../components/chip.js';
|
|
7
8
|
import 'lucide-react';
|
|
@@ -9,6 +10,7 @@ import '../../components/field-sync.js';
|
|
|
9
10
|
import '../../components/ui.js';
|
|
10
11
|
import '../../components/tooltip.js';
|
|
11
12
|
import '../../hooks/use-anchored-rect.js';
|
|
13
|
+
import '../../lib/clipping.js';
|
|
12
14
|
import '../../wizard/types.js';
|
|
13
15
|
import '../../tour/tour.js';
|
|
14
16
|
import '../../search/command-palette.js';
|