@xleddyl/443-components-vue 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/README.md +34 -1
  2. package/dist/chart/BarChart.vue +33 -22
  3. package/dist/chart/BarChart.vue.d.ts +4 -0
  4. package/dist/chart/chart.css +2 -2
  5. package/dist/chart/useChartColors.mjs +8 -8
  6. package/dist/components/core/Button.vue.d.ts +1 -1
  7. package/dist/components/core/Input.vue.d.ts +1 -1
  8. package/dist/components/core/Textarea.vue.d.ts +1 -1
  9. package/dist/components/core/types.d.ts +1 -1
  10. package/dist/components/data/Badge.vue.d.ts +1 -1
  11. package/dist/components/data/FilterPills.vue +43 -4
  12. package/dist/components/data/FilterPills.vue.d.ts +4 -1
  13. package/dist/components/data/Pagination.vue +55 -0
  14. package/dist/components/data/Pagination.vue.d.ts +10 -0
  15. package/dist/components/data/Tag.vue.d.ts +1 -1
  16. package/dist/components/data/Tree.vue.d.ts +1 -1
  17. package/dist/components/data/types.d.ts +1 -0
  18. package/dist/components/feedback/Meter.vue.d.ts +1 -1
  19. package/dist/components/feedback/Progress.vue.d.ts +1 -1
  20. package/dist/components/feedback/ProgressRing.vue.d.ts +1 -1
  21. package/dist/components/forms/Calendar.vue +31 -7
  22. package/dist/components/forms/Calendar.vue.d.ts +13 -2
  23. package/dist/components/forms/ColorInput.vue.d.ts +1 -1
  24. package/dist/components/forms/DateInput.vue.d.ts +2 -2
  25. package/dist/components/forms/DatePicker.vue.d.ts +1 -1
  26. package/dist/components/forms/FileInput.vue.d.ts +1 -1
  27. package/dist/components/forms/NumberInput.vue.d.ts +1 -1
  28. package/dist/components/forms/PasswordInput.vue.d.ts +1 -1
  29. package/dist/components/forms/PinInput.vue.d.ts +1 -1
  30. package/dist/components/forms/Select.vue.d.ts +1 -1
  31. package/dist/components/forms/Slider.vue.d.ts +1 -1
  32. package/dist/components/forms/Switch.vue.d.ts +1 -1
  33. package/dist/components/forms/TimeInput.vue.d.ts +1 -1
  34. package/dist/components/layout/AppShell.vue +4 -2
  35. package/dist/components/layout/AppShell.vue.d.ts +2 -0
  36. package/dist/components/layout/CopyButton.vue.d.ts +1 -1
  37. package/dist/components/layout/PageHeader.vue +15 -3
  38. package/dist/components/layout/PageHeader.vue.d.ts +5 -0
  39. package/dist/components/layout/Separator.vue +17 -4
  40. package/dist/components/layout/Separator.vue.d.ts +7 -1
  41. package/dist/components/layout/Tabs.vue +10 -0
  42. package/dist/components/layout/types.d.ts +3 -0
  43. package/dist/components/overlays/ConfirmDialog.vue.d.ts +6 -2
  44. package/dist/components/overlays/ConfirmHost.vue.d.ts +6 -2
  45. package/dist/components/overlays/ContextMenu.vue.d.ts +2 -0
  46. package/dist/components/overlays/DropdownMenu.vue +5 -1
  47. package/dist/components/overlays/DropdownMenu.vue.d.ts +6 -0
  48. package/dist/components/overlays/Modal.vue +9 -2
  49. package/dist/components/overlays/Modal.vue.d.ts +4 -0
  50. package/dist/components/templates/DashboardLayout.vue +2 -0
  51. package/dist/components/templates/DashboardLayout.vue.d.ts +2 -0
  52. package/dist/components/templates/SettingsModal.vue.d.ts +6 -2
  53. package/dist/components/templates/types.d.ts +1 -0
  54. package/dist/composables/useForm.d.ts +16 -1
  55. package/dist/composables/useForm.mjs +31 -6
  56. package/dist/editor/RichTextEditor.vue +13 -1
  57. package/dist/editor/RichTextEditor.vue.d.ts +1 -1
  58. package/dist/editor/rich-text-editor.css +10 -4
  59. package/dist/editor/types.d.ts +1 -1
  60. package/dist/grid/DataGrid.vue +60 -8
  61. package/dist/grid/DataGrid.vue.d.ts +9 -2
  62. package/dist/grid/cells/DateCell.vue +18 -3
  63. package/dist/grid/data-grid.css +1 -1
  64. package/dist/grid/index.d.ts +1 -1
  65. package/dist/grid/index.mjs +1 -1
  66. package/dist/grid/modules.d.ts +1 -0
  67. package/dist/grid/modules.mjs +9 -0
  68. package/dist/grid/theme.mjs +4 -4
  69. package/dist/grid/types.d.ts +1 -0
  70. package/dist/icons/builtin.d.ts +3 -0
  71. package/dist/icons/builtin.mjs +3 -0
  72. package/dist/index.d.ts +1 -1
  73. package/dist/index.mjs +1 -0
  74. package/dist/internal/core/intl.d.ts +2 -0
  75. package/dist/internal/core/intl.mjs +17 -0
  76. package/dist/internal/keys.d.ts +2 -1
  77. package/dist/internal/keys.mjs +1 -0
  78. package/dist/internal/overlays/MenuList.vue +4 -2
  79. package/dist/internal/overlays/MenuList.vue.d.ts +2 -0
  80. package/dist/internal/overlays/OverlayView.vue.d.ts +6 -2
  81. package/dist/locale/de.mjs +10 -2
  82. package/dist/locale/en.mjs +10 -2
  83. package/dist/locale/it.mjs +10 -2
  84. package/dist/locale/types.d.ts +8 -0
  85. package/dist/nuxt/runtime/layouts/dashboard.vue +1 -0
  86. package/dist/styles/base.css +2 -1
  87. package/dist/styles/core/button.css +42 -16
  88. package/dist/styles/core/form-field.css +1 -1
  89. package/dist/styles/core/input.css +2 -2
  90. package/dist/styles/core/kbd.css +1 -1
  91. package/dist/styles/data/avatar.css +1 -1
  92. package/dist/styles/data/badge.css +39 -23
  93. package/dist/styles/data/description-list.css +2 -2
  94. package/dist/styles/data/filter-pills.css +24 -3
  95. package/dist/styles/data/pagination.css +26 -3
  96. package/dist/styles/data/selection-bar.css +1 -1
  97. package/dist/styles/data/stat.css +4 -4
  98. package/dist/styles/data/table.css +4 -4
  99. package/dist/styles/data/tag.css +1 -1
  100. package/dist/styles/data/timeline.css +1 -1
  101. package/dist/styles/data/tree.css +2 -2
  102. package/dist/styles/feedback/empty-state.css +1 -1
  103. package/dist/styles/feedback/loading-host.css +1 -1
  104. package/dist/styles/feedback/loading-overlay.css +1 -1
  105. package/dist/styles/feedback/meter.css +1 -1
  106. package/dist/styles/feedback/progress.css +2 -2
  107. package/dist/styles/forced-colors.css +6 -1
  108. package/dist/styles/forms/calendar.css +30 -3
  109. package/dist/styles/forms/checkbox.css +1 -1
  110. package/dist/styles/forms/choice.css +1 -1
  111. package/dist/styles/forms/combobox.css +2 -2
  112. package/dist/styles/forms/file-input.css +1 -1
  113. package/dist/styles/forms/password-input.css +1 -1
  114. package/dist/styles/forms/pin-input.css +1 -1
  115. package/dist/styles/forms/radio.css +1 -1
  116. package/dist/styles/forms/segmented.css +2 -2
  117. package/dist/styles/forms/select.css +2 -2
  118. package/dist/styles/forms/slider.css +1 -1
  119. package/dist/styles/forms/switch.css +4 -4
  120. package/dist/styles/layout/accordion.css +2 -2
  121. package/dist/styles/layout/app-shell.css +18 -6
  122. package/dist/styles/layout/breadcrumbs.css +3 -3
  123. package/dist/styles/layout/card.css +1 -1
  124. package/dist/styles/layout/nav-link.css +1 -1
  125. package/dist/styles/layout/page-header.css +21 -1
  126. package/dist/styles/layout/separator.css +21 -1
  127. package/dist/styles/layout/sidebar.css +1 -1
  128. package/dist/styles/layout/tabs.css +30 -1
  129. package/dist/styles/layout/theme-switch.css +1 -1
  130. package/dist/styles/overlays/command.css +3 -3
  131. package/dist/styles/overlays/drawer.css +4 -3
  132. package/dist/styles/overlays/floating.css +2 -2
  133. package/dist/styles/overlays/menu.css +5 -1
  134. package/dist/styles/overlays/modal.css +12 -9
  135. package/dist/styles/overlays/toast.css +3 -3
  136. package/dist/styles/overlays/tooltip.css +26 -8
  137. package/dist/styles/shared.css +2 -2
  138. package/dist/styles/templates/account-menu.css +1 -1
  139. package/dist/styles/templates/auth-layout.css +4 -4
  140. package/dist/styles/templates/brand.css +2 -2
  141. package/dist/styles/templates/dashboard-page.css +1 -1
  142. package/dist/styles/templates/empty-page.css +3 -3
  143. package/dist/styles/templates/error-page.css +1 -1
  144. package/dist/styles/templates/save-bar.css +1 -1
  145. package/dist/styles/templates/settings-modal.css +6 -6
  146. package/dist/styles/utilities.css +3 -3
  147. package/package.json +1 -1
@@ -18,20 +18,20 @@ export function createGridTheme(density) {
18
18
  headerTextColor: "var(--k-grid-header-text, var(--k-text-muted))",
19
19
  headerFontFamily: "var(--k-grid-header-font, var(--k-font-sans))",
20
20
  headerFontSize: 12,
21
- headerFontWeight: 500,
21
+ headerFontWeight: "var(--k-grid-header-font-weight, var(--k-font-weight-medium, 500))",
22
22
  headerRowBorder: { color: "var(--k-line)" },
23
23
  headerColumnBorder: false,
24
24
  rowBorder: { color: "var(--k-line)" },
25
25
  columnBorder: false,
26
26
  rowHoverColor: "var(--k-hover)",
27
- selectedRowBackgroundColor: "var(--k-accent-soft)",
27
+ selectedRowBackgroundColor: "var(--k-grid-selected-background, var(--k-accent-soft))",
28
28
  oddRowBackgroundColor: "transparent",
29
29
  fontFamily: "var(--k-font-sans)",
30
- fontSize: 13,
30
+ fontSize: "var(--k-grid-font-size, 13px)",
31
31
  iconSize: 14,
32
32
  spacing: spacingByDensity[density],
33
33
  borderRadius: "var(--k-radius-sm)",
34
- wrapperBorderRadius: "var(--k-radius-lg)",
34
+ wrapperBorderRadius: "var(--k-grid-radius, var(--k-radius-lg))",
35
35
  wrapperBorder: { color: "var(--k-line)" },
36
36
  menuBackgroundColor: "var(--k-elevated)",
37
37
  menuShadow: "var(--k-shadow-overlay)",
@@ -38,6 +38,7 @@ export interface BooleanCellParams {
38
38
  export interface DateCellParams {
39
39
  locale?: string;
40
40
  options?: Intl.DateTimeFormatOptions;
41
+ relative?: boolean | Intl.RelativeTimeFormatOptions;
41
42
  }
42
43
  export interface BadgeCellParams {
43
44
  tones?: Record<string, Tone>;
@@ -8,6 +8,9 @@ export declare const builtinIcons: {
8
8
  readonly 'chevron-left': readonly ["M15.75 19.5 8.25 12l7.5-7.5"];
9
9
  readonly 'chevron-right': readonly ["m8.25 4.5 7.5 7.5-7.5 7.5"];
10
10
  readonly 'chevron-up-down': readonly ["M8.25 15 12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9"];
11
+ readonly 'chevron-double-left': readonly ["m18.75 4.5-7.5 7.5 7.5 7.5m-6-15L5.25 12l7.5 7.5"];
12
+ readonly 'chevron-double-right': readonly ["m5.25 4.5 7.5 7.5-7.5 7.5m6-15 7.5 7.5-7.5 7.5"];
13
+ readonly underline: readonly ["M17.995 3.744v7.5a6 6 0 1 1-12 0v-7.5m-2.25 16.502h16.5"];
11
14
  readonly 'arrow-path': readonly ["M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99"];
12
15
  readonly 'arrow-right': readonly ["M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3"];
13
16
  readonly 'arrow-left': readonly ["M10.5 19.5 3 12m0 0 7.5-7.5M3 12h18"];
@@ -8,6 +8,9 @@ export const builtinIcons = {
8
8
  "chevron-left": ["M15.75 19.5 8.25 12l7.5-7.5"],
9
9
  "chevron-right": ["m8.25 4.5 7.5 7.5-7.5 7.5"],
10
10
  "chevron-up-down": ["M8.25 15 12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9"],
11
+ "chevron-double-left": ["m18.75 4.5-7.5 7.5 7.5 7.5m-6-15L5.25 12l7.5 7.5"],
12
+ "chevron-double-right": ["m5.25 4.5 7.5 7.5-7.5 7.5m6-15 7.5 7.5-7.5 7.5"],
13
+ underline: ["M17.995 3.744v7.5a6 6 0 1 1-12 0v-7.5m-2.25 16.502h16.5"],
11
14
  "arrow-path": [
12
15
  "M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99"
13
16
  ],
package/dist/index.d.ts CHANGED
@@ -11,5 +11,5 @@ export { builtinLocales, de, defineLocale, en, it } from './locale';
11
11
  export type { DefineLocaleOptions } from './locale';
12
12
  export type * from './locale/types';
13
13
  export type { BuiltinIconName } from './icons/builtin';
14
- export { FIELD_KEY, FORM_KEY, ICON_USAGE_KEY, ICONS_KEY, LINK_KEY, LOCALE_KEY, PRESET_KEY, THEME_KEY, } from './internal/keys';
14
+ export { FIELD_KEY, FORM_CONFIG_KEY, FORM_KEY, ICON_USAGE_KEY, ICONS_KEY, LINK_KEY, LOCALE_KEY, PRESET_KEY, THEME_KEY, } from './internal/keys';
15
15
  export type * from './types/dom';
package/dist/index.mjs CHANGED
@@ -10,6 +10,7 @@ export { builtinIcons } from "./icons/builtin.mjs";
10
10
  export { builtinLocales, de, defineLocale, en, it } from "./locale/index.mjs";
11
11
  export {
12
12
  FIELD_KEY,
13
+ FORM_CONFIG_KEY,
13
14
  FORM_KEY,
14
15
  ICON_USAGE_KEY,
15
16
  ICONS_KEY,
@@ -2,3 +2,5 @@ export declare const numberFormat: (locale?: string, options?: Intl.NumberFormat
2
2
  export declare const dateTimeFormat: (locale?: string, options?: Intl.DateTimeFormatOptions) => Intl.DateTimeFormat;
3
3
  export declare const pluralRules: (locale?: string, options?: Intl.PluralRulesOptions) => Intl.PluralRules;
4
4
  export declare const collator: (locale?: string, options?: Intl.CollatorOptions) => Intl.Collator;
5
+ export declare const relativeTimeFormat: (locale?: string, options?: Intl.RelativeTimeFormatOptions) => Intl.RelativeTimeFormat;
6
+ export declare function formatRelativeTime(date: Date, locale?: string, options?: Intl.RelativeTimeFormatOptions, now?: number): string;
@@ -22,3 +22,20 @@ export const pluralRules = cachedIntl(
22
22
  export const collator = cachedIntl(
23
23
  (locale, options) => new Intl.Collator(locale, options)
24
24
  );
25
+ export const relativeTimeFormat = cachedIntl(
26
+ (locale, options) => new Intl.RelativeTimeFormat(locale, options)
27
+ );
28
+ const relativeUnits = [
29
+ ["year", 31536e3],
30
+ ["month", 2592e3],
31
+ ["week", 604800],
32
+ ["day", 86400],
33
+ ["hour", 3600],
34
+ ["minute", 60],
35
+ ["second", 1]
36
+ ];
37
+ export function formatRelativeTime(date, locale, options = { numeric: "auto" }, now = Date.now()) {
38
+ const seconds = Math.round((date.getTime() - now) / 1e3);
39
+ const [unit, size] = relativeUnits.find(([, length]) => Math.abs(seconds) >= length) ?? relativeUnits.at(-1);
40
+ return relativeTimeFormat(locale, options).format(Math.round(seconds / size), unit);
41
+ }
@@ -1,6 +1,6 @@
1
1
  import type { Component, ComputedRef, InjectionKey, Ref } from 'vue';
2
2
  import type { FieldContext, FieldControlRole } from '../composables/useField';
3
- import type { FormContext } from '../composables/useForm';
3
+ import type { FormConfig, FormContext } from '../composables/useForm';
4
4
  import type { IconRegistry } from '../composables/useIcons';
5
5
  import type { ThemePreference } from '../composables/useTheme';
6
6
  import type { KLocale } from '../locale/types';
@@ -14,4 +14,5 @@ export declare const FIELD_KEY: InjectionKey<FieldContext>;
14
14
  export declare const FIELD_ROLE_KEY: InjectionKey<FieldControlRole>;
15
15
  export declare const ROOT_KEY: InjectionKey<true>;
16
16
  export declare const FORM_KEY: InjectionKey<FormContext>;
17
+ export declare const FORM_CONFIG_KEY: InjectionKey<FormConfig>;
17
18
  export declare const LOCALE_KEY: InjectionKey<ComputedRef<KLocale>>;
@@ -7,4 +7,5 @@ export const FIELD_KEY = Symbol("k-field");
7
7
  export const FIELD_ROLE_KEY = Symbol("k-field-role");
8
8
  export const ROOT_KEY = Symbol("k-root");
9
9
  export const FORM_KEY = Symbol("k-form");
10
+ export const FORM_CONFIG_KEY = Symbol("k-form-config");
10
11
  export const LOCALE_KEY = Symbol("k-locale");
@@ -5,7 +5,7 @@
5
5
  :popover="layer.popoverMode.value"
6
6
  :data-side="layer.side.value"
7
7
  class="k-floating k-menu"
8
- :class="{ 'is-submenu': level > 0 }"
8
+ :class="{ 'is-submenu': level > 0, 'is-match-width': matchWidth && level === 0 }"
9
9
  role="menu"
10
10
  :aria-label="label"
11
11
  :aria-labelledby="labelledby"
@@ -133,7 +133,8 @@ const props = defineProps({
133
133
  label: { type: String, required: false },
134
134
  labelledby: { type: String, required: false },
135
135
  id: { type: String, required: false },
136
- manualPositioning: { type: Boolean, required: false }
136
+ manualPositioning: { type: Boolean, required: false },
137
+ matchWidth: { type: Boolean, required: false }
137
138
  });
138
139
  const emit = defineEmits(["openChange", "select"]);
139
140
  const generatedId = useId();
@@ -156,6 +157,7 @@ const layer = useFloatingLayer({
156
157
  placement: () => props.placement,
157
158
  offset: () => props.offset,
158
159
  mode: "auto",
160
+ matchWidth: Boolean(props.matchWidth) && props.level === 0,
159
161
  manualPositioning: () => props.manualPositioning || !(props.anchor() instanceof Element),
160
162
  onOpen: () => {
161
163
  const target = pendingFocus;
@@ -13,6 +13,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
13
13
  labelledby?: string;
14
14
  id?: string | undefined;
15
15
  manualPositioning?: boolean;
16
+ matchWidth?: boolean;
16
17
  key?: PropertyKey | undefined;
17
18
  prefix?: string | undefined | undefined;
18
19
  title?: string | undefined | undefined;
@@ -224,6 +225,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
224
225
  labelledby?: string;
225
226
  id?: string | undefined;
226
227
  manualPositioning?: boolean;
228
+ matchWidth?: boolean;
227
229
  key?: PropertyKey | undefined;
228
230
  prefix?: string | undefined | undefined;
229
231
  title?: string | undefined | undefined;
@@ -4,13 +4,13 @@ declare const __VLS_export: import("vue").DefineComponent<{
4
4
  key?: PropertyKey | undefined;
5
5
  loading?: boolean;
6
6
  prefix?: "k-modal" | "k-drawer" | undefined;
7
+ size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
7
8
  label?: string;
8
9
  title?: string | undefined;
9
10
  style?: import("vue").StyleValue;
10
11
  results?: (string | number) | undefined;
11
12
  placeholder?: string | undefined;
12
13
  description?: string;
13
- size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
14
14
  dir?: string | undefined;
15
15
  class?: import("vue").ClassValue;
16
16
  role?: string | undefined;
@@ -114,6 +114,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
114
114
  color?: string | undefined;
115
115
  id?: string | undefined;
116
116
  lang?: string | undefined;
117
+ width?: string;
117
118
  tabindex?: (string | number) | undefined;
118
119
  'aria-activedescendant'?: string | undefined;
119
120
  'aria-atomic'?: (boolean | "true" | "false") | undefined;
@@ -216,6 +217,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
216
217
  hideClose?: boolean;
217
218
  beforeClose?: import("../../index.ts").DialogBeforeClose;
218
219
  closedby?: import("../../index.ts").DialogClosedBy;
220
+ minHeight?: string;
219
221
  }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
220
222
  close: () => any;
221
223
  afterLeave: () => any;
@@ -225,13 +227,13 @@ declare const __VLS_export: import("vue").DefineComponent<{
225
227
  key?: PropertyKey | undefined;
226
228
  loading?: boolean;
227
229
  prefix?: "k-modal" | "k-drawer" | undefined;
230
+ size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
228
231
  label?: string;
229
232
  title?: string | undefined;
230
233
  style?: import("vue").StyleValue;
231
234
  results?: (string | number) | undefined;
232
235
  placeholder?: string | undefined;
233
236
  description?: string;
234
- size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
235
237
  dir?: string | undefined;
236
238
  class?: import("vue").ClassValue;
237
239
  role?: string | undefined;
@@ -335,6 +337,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
335
337
  color?: string | undefined;
336
338
  id?: string | undefined;
337
339
  lang?: string | undefined;
340
+ width?: string;
338
341
  tabindex?: (string | number) | undefined;
339
342
  'aria-activedescendant'?: string | undefined;
340
343
  'aria-atomic'?: (boolean | "true" | "false") | undefined;
@@ -437,6 +440,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
437
440
  hideClose?: boolean;
438
441
  beforeClose?: import("../../index.ts").DialogBeforeClose;
439
442
  closedby?: import("../../index.ts").DialogClosedBy;
443
+ minHeight?: string;
440
444
  }> & Readonly<{
441
445
  onClose?: (() => any) | undefined;
442
446
  onAfterLeave?: (() => any) | undefined;
@@ -46,6 +46,7 @@ export const de = {
46
46
  bold: "Fett",
47
47
  italic: "Kursiv",
48
48
  strike: "Durchgestrichen",
49
+ underline: "Unterstrichen",
49
50
  code: "Code",
50
51
  heading: "\xDCberschrift {level}",
51
52
  bulletList: "Aufz\xE4hlung",
@@ -222,7 +223,11 @@ export const de = {
222
223
  rejected: "{count} Datei wurde nicht akzeptiert | {count} Dateien wurden nicht akzeptiert"
223
224
  },
224
225
  filterPills: {
225
- label: "Filter"
226
+ label: "Filter",
227
+ remove: "{label} entfernen"
228
+ },
229
+ tabs: {
230
+ dot: "Erfordert Aufmerksamkeit"
226
231
  },
227
232
  listPage: {
228
233
  toolbar: "Ergebnisse filtern",
@@ -241,7 +246,10 @@ export const de = {
241
246
  previous: "Vorherige Seite",
242
247
  next: "N\xE4chste Seite",
243
248
  pageSize: "Zeilen pro Seite",
244
- of: "von"
249
+ of: "von",
250
+ first: "Erste Seite",
251
+ last: "Letzte Seite",
252
+ jump: "Gehe zu Seite"
245
253
  },
246
254
  passwordInput: {
247
255
  show: "Passwort anzeigen",
@@ -46,6 +46,7 @@ export const en = {
46
46
  bold: "Bold",
47
47
  italic: "Italic",
48
48
  strike: "Strikethrough",
49
+ underline: "Underline",
49
50
  code: "Inline code",
50
51
  heading: "Heading {level}",
51
52
  bulletList: "Bullet list",
@@ -222,7 +223,11 @@ export const en = {
222
223
  rejected: "{count} file was not accepted | {count} files were not accepted"
223
224
  },
224
225
  filterPills: {
225
- label: "Filters"
226
+ label: "Filters",
227
+ remove: "Remove {label}"
228
+ },
229
+ tabs: {
230
+ dot: "Needs attention"
226
231
  },
227
232
  listPage: {
228
233
  toolbar: "Filter results",
@@ -241,7 +246,10 @@ export const en = {
241
246
  previous: "Previous page",
242
247
  next: "Next page",
243
248
  pageSize: "Rows per page",
244
- of: "of"
249
+ of: "of",
250
+ first: "First page",
251
+ last: "Last page",
252
+ jump: "Go to page"
245
253
  },
246
254
  passwordInput: {
247
255
  show: "Show password",
@@ -46,6 +46,7 @@ export const it = {
46
46
  bold: "Grassetto",
47
47
  italic: "Corsivo",
48
48
  strike: "Barrato",
49
+ underline: "Sottolineato",
49
50
  code: "Codice",
50
51
  heading: "Titolo {level}",
51
52
  bulletList: "Elenco puntato",
@@ -222,7 +223,11 @@ export const it = {
222
223
  rejected: "{count} file non accettato | {count} file non accettati"
223
224
  },
224
225
  filterPills: {
225
- label: "Filtri"
226
+ label: "Filtri",
227
+ remove: "Rimuovi {label}"
228
+ },
229
+ tabs: {
230
+ dot: "Richiede attenzione"
226
231
  },
227
232
  listPage: {
228
233
  toolbar: "Filtra i risultati",
@@ -241,7 +246,10 @@ export const it = {
241
246
  previous: "Pagina precedente",
242
247
  next: "Pagina successiva",
243
248
  pageSize: "Righe per pagina",
244
- of: "di"
249
+ of: "di",
250
+ first: "Prima pagina",
251
+ last: "Ultima pagina",
252
+ jump: "Vai alla pagina"
245
253
  },
246
254
  passwordInput: {
247
255
  show: "Mostra password",
@@ -44,6 +44,7 @@ export interface KMessages {
44
44
  bold: string;
45
45
  italic: string;
46
46
  strike: string;
47
+ underline: string;
47
48
  code: string;
48
49
  heading: string;
49
50
  bulletList: string;
@@ -221,6 +222,10 @@ export interface KMessages {
221
222
  };
222
223
  filterPills: {
223
224
  label: string;
225
+ remove: string;
226
+ };
227
+ tabs: {
228
+ dot: string;
224
229
  };
225
230
  listPage: {
226
231
  toolbar: string;
@@ -240,6 +245,9 @@ export interface KMessages {
240
245
  next: string;
241
246
  pageSize: string;
242
247
  of: string;
248
+ first: string;
249
+ last: string;
250
+ jump: string;
243
251
  };
244
252
  passwordInput: {
245
253
  show: string;
@@ -20,6 +20,7 @@
20
20
  :collapsible="dashboard.collapsible"
21
21
  :storage-key="dashboard.storageKey"
22
22
  :fluid="dashboard.fluid"
23
+ :fill="route.meta.fill === true || Boolean(dashboard.fill)"
23
24
  >
24
25
  <slot />
25
26
  </DashboardLayout>
@@ -1,6 +1,7 @@
1
1
  .k-root {
2
2
  font-family: var(--k-font-sans);
3
3
  font-size: var(--k-font-size);
4
+ font-weight: var(--k-font-weight, 400);
4
5
  font-feature-settings: var(--k-font-features);
5
6
  line-height: var(--k-line-height);
6
7
  color: var(--k-text-toned);
@@ -78,7 +79,7 @@ html.k-root > body {
78
79
  :where(.k-root) :where(h1, h2, h3, h4, h5, h6) {
79
80
  font-family: var(--k-font-display, var(--k-font-sans));
80
81
  font-size: inherit;
81
- font-weight: 600;
82
+ font-weight: var(--k-font-weight-strong, 600);
82
83
  color: var(--k-text);
83
84
  letter-spacing: -0.015em;
84
85
  }
@@ -2,7 +2,7 @@
2
2
  --k-btn-tone: var(--k-accent);
3
3
  --k-btn-tone-text: var(--k-accent-text);
4
4
  --k-btn-on-tone: var(--k-accent-contrast);
5
- --k-icon-size: 1rem;
5
+ --k-icon-size: var(--k-btn-icon-size, 1rem);
6
6
  position: relative;
7
7
  display: inline-flex;
8
8
  align-items: center;
@@ -10,7 +10,7 @@
10
10
  gap: 0.375rem;
11
11
  min-height: var(--k-btn-size);
12
12
  font-family: inherit;
13
- font-weight: 500;
13
+ font-weight: var(--k-font-weight-medium, 500);
14
14
  line-height: 1;
15
15
  letter-spacing: -0.005em;
16
16
  white-space: nowrap;
@@ -31,7 +31,7 @@
31
31
  }
32
32
 
33
33
  .k-btn:active:not(:disabled, [aria-disabled='true'], .k-btn-link) {
34
- scale: 0.97;
34
+ scale: var(--k-press-scale, 0.97);
35
35
  }
36
36
 
37
37
  .k-btn:disabled,
@@ -95,15 +95,15 @@
95
95
 
96
96
  .k-btn-md {
97
97
  --k-btn-size: var(--k-size-md);
98
- font-size: 0.8125rem;
99
- padding: 0.25rem 0.8125rem;
98
+ font-size: var(--k-btn-font-size, 0.8125rem);
99
+ padding: 0.25rem var(--k-btn-padding-x, 0.8125rem);
100
100
  }
101
101
 
102
102
  .k-btn-lg {
103
103
  --k-btn-size: var(--k-size-lg);
104
- --k-icon-size: 1.125rem;
105
- font-size: 0.875rem;
106
- padding: 0.375rem 1.125rem;
104
+ --k-icon-size: var(--k-btn-icon-size, 1.125rem);
105
+ font-size: var(--k-btn-font-size, 0.875rem);
106
+ padding: 0.375rem var(--k-btn-padding-x, 1.125rem);
107
107
  border-radius: calc(10px * var(--k-radius-scale));
108
108
  }
109
109
 
@@ -134,17 +134,17 @@
134
134
  .k-btn-solid {
135
135
  background: var(--k-btn-tone);
136
136
  color: var(--k-btn-on-tone);
137
- border-color: color-mix(in oklab, var(--k-btn-tone) 82%, black);
137
+ border-color: var(--k-btn-border, color-mix(in oklab, var(--k-btn-tone) 82%, black));
138
138
  box-shadow:
139
- inset 0 1px 0 rgb(255 255 255 / 0.18),
140
- 0 1px 2px color-mix(in oklab, var(--k-btn-tone) 35%, transparent);
139
+ inset 0 1px 0 var(--k-btn-highlight, rgb(255 255 255 / 0.18)),
140
+ var(--k-btn-shadow, 0 1px 2px color-mix(in oklab, var(--k-btn-tone) 35%, transparent));
141
141
  }
142
142
 
143
143
  .k-btn-solid:hover:not(:disabled, [aria-disabled='true']) {
144
144
  background: color-mix(in oklab, var(--k-btn-tone) 90%, black);
145
145
  box-shadow:
146
- inset 0 1px 0 rgb(255 255 255 / 0.22),
147
- 0 2px 8px -2px color-mix(in oklab, var(--k-btn-tone) 60%, transparent);
146
+ inset 0 1px 0 var(--k-btn-highlight, rgb(255 255 255 / 0.22)),
147
+ var(--k-btn-shadow, 0 2px 8px -2px color-mix(in oklab, var(--k-btn-tone) 60%, transparent));
148
148
  }
149
149
 
150
150
  .k-btn-solid:active:not(:disabled, [aria-disabled='true']) {
@@ -162,13 +162,13 @@
162
162
  .k-btn-neutral.k-btn-solid {
163
163
  background: var(--k-text);
164
164
  color: var(--k-surface);
165
- border-color: var(--k-text);
166
- box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.14);
165
+ border-color: var(--k-btn-border, var(--k-text));
166
+ box-shadow: inset 0 1px 0 var(--k-btn-highlight, rgb(255 255 255 / 0.14));
167
167
  }
168
168
 
169
169
  .k-btn-neutral.k-btn-solid:hover:not(:disabled, [aria-disabled='true']) {
170
170
  background: color-mix(in oklab, var(--k-text) 86%, var(--k-surface));
171
- box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.14);
171
+ box-shadow: inset 0 1px 0 var(--k-btn-highlight, rgb(255 255 255 / 0.14));
172
172
  }
173
173
 
174
174
  .k-btn-neutral.k-btn-solid:active:not(:disabled, [aria-disabled='true']) {
@@ -208,6 +208,32 @@
208
208
  background: var(--k-fill);
209
209
  }
210
210
 
211
+ .k-btn-subtle {
212
+ background: color-mix(in oklab, var(--k-btn-tone) 12%, transparent);
213
+ color: var(--k-btn-tone-text);
214
+ }
215
+
216
+ .k-btn-subtle:hover:not(:disabled, [aria-disabled='true']) {
217
+ background: color-mix(in oklab, var(--k-btn-tone) 18%, transparent);
218
+ }
219
+
220
+ .k-btn-subtle:active:not(:disabled, [aria-disabled='true']) {
221
+ background: color-mix(in oklab, var(--k-btn-tone) 24%, transparent);
222
+ }
223
+
224
+ .k-btn-neutral.k-btn-subtle {
225
+ background: var(--k-fill);
226
+ color: var(--k-text);
227
+ }
228
+
229
+ .k-btn-neutral.k-btn-subtle:hover:not(:disabled, [aria-disabled='true']) {
230
+ background: color-mix(in oklab, var(--k-text) 7%, var(--k-fill));
231
+ }
232
+
233
+ .k-btn-neutral.k-btn-subtle:active:not(:disabled, [aria-disabled='true']) {
234
+ background: color-mix(in oklab, var(--k-text) 12%, var(--k-fill));
235
+ }
236
+
211
237
  .k-btn-outline {
212
238
  background: transparent;
213
239
  border-color: var(--k-btn-tone);
@@ -19,7 +19,7 @@
19
19
  align-items: center;
20
20
  gap: 0.4375rem;
21
21
  font-size: 0.8125rem;
22
- font-weight: 500;
22
+ font-weight: var(--k-font-weight-medium, 500);
23
23
  color: var(--k-text-toned);
24
24
  }
25
25
 
@@ -68,13 +68,13 @@
68
68
 
69
69
  .k-field-md {
70
70
  font-size: 0.875rem;
71
- padding: 0.25rem 0.75rem;
71
+ padding: 0.25rem var(--k-field-padding-x, 0.75rem);
72
72
  min-height: var(--k-size-md);
73
73
  }
74
74
 
75
75
  .k-field-lg {
76
76
  font-size: 0.9375rem;
77
- padding: 0.375rem 0.875rem;
77
+ padding: 0.375rem var(--k-field-padding-x, 0.875rem);
78
78
  min-height: var(--k-size-lg);
79
79
  border-radius: calc(10px * var(--k-radius-scale));
80
80
  }
@@ -7,7 +7,7 @@
7
7
  padding: 0 0.3125rem;
8
8
  font-family: var(--k-font-mono);
9
9
  font-size: 0.75rem;
10
- font-weight: 500;
10
+ font-weight: var(--k-font-weight-medium, 500);
11
11
  line-height: 1;
12
12
  color: var(--k-text-muted);
13
13
  background: var(--k-subtle);
@@ -10,7 +10,7 @@
10
10
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--k-accent) 14%, transparent);
11
11
  color: var(--k-accent-text);
12
12
  font-size: calc(var(--k-avatar-size) * 0.38);
13
- font-weight: 600;
13
+ font-weight: var(--k-font-weight-strong, 600);
14
14
  line-height: 1;
15
15
  letter-spacing: 0.01em;
16
16
  vertical-align: middle;
@@ -1,6 +1,7 @@
1
1
  .k-badge {
2
2
  --k-badge-tone: var(--k-text-muted);
3
3
  --k-badge-text: var(--k-text-toned);
4
+ --k-badge-on-tone: var(--k-text-inverted);
4
5
  --k-icon-size: 0.75rem;
5
6
  display: inline-flex;
6
7
  align-items: center;
@@ -10,8 +11,11 @@
10
11
  padding: 0 0.5rem;
11
12
  border: 1px solid transparent;
12
13
  border-radius: var(--k-badge-radius, var(--k-radius-full));
13
- font-size: 0.75rem;
14
- font-weight: 500;
14
+ font-family: var(--k-badge-font, inherit);
15
+ font-size: var(--k-badge-font-size, 0.75rem);
16
+ font-weight: var(--k-badge-font-weight, var(--k-font-weight-medium, 500));
17
+ text-transform: var(--k-badge-text-transform, none);
18
+ letter-spacing: var(--k-badge-letter-spacing, normal);
15
19
  line-height: 1;
16
20
  white-space: nowrap;
17
21
  vertical-align: middle;
@@ -55,46 +59,58 @@
55
59
  --k-badge-text: var(--k-info-text);
56
60
  }
57
61
 
62
+ .k-badge-accent {
63
+ --k-badge-on-tone: var(--k-accent-contrast);
64
+ }
65
+
58
66
  .k-badge-soft {
59
- background: color-mix(in oklab, var(--k-badge-tone) 10%, transparent);
60
- border-color: color-mix(in oklab, var(--k-badge-tone) 24%, transparent);
61
- color: var(--k-badge-text);
67
+ background: var(--k-badge-background, color-mix(in oklab, var(--k-badge-tone) 10%, transparent));
68
+ border-color: var(
69
+ --k-badge-border-color,
70
+ color-mix(in oklab, var(--k-badge-tone) 24%, transparent)
71
+ );
72
+ color: var(--k-badge-color, var(--k-badge-text));
62
73
  }
63
74
 
64
75
  .k-badge-neutral.k-badge-soft {
65
- background: var(--k-subtle);
66
- border-color: var(--k-line);
76
+ background: var(--k-badge-background, var(--k-subtle));
77
+ border-color: var(--k-badge-border-color, var(--k-line));
67
78
  }
68
79
 
69
80
  .k-badge-outline {
70
- background: transparent;
71
- border-color: color-mix(in oklab, var(--k-badge-tone) 45%, transparent);
72
- color: var(--k-badge-text);
81
+ background: var(--k-badge-background, transparent);
82
+ border-color: var(
83
+ --k-badge-border-color,
84
+ color-mix(in oklab, var(--k-badge-tone) 45%, transparent)
85
+ );
86
+ color: var(--k-badge-color, var(--k-badge-text));
73
87
  }
74
88
 
75
89
  .k-badge-neutral.k-badge-outline {
76
- border-color: var(--k-line-strong);
77
- color: var(--k-text-muted);
90
+ border-color: var(--k-badge-border-color, var(--k-line-strong));
91
+ color: var(--k-badge-color, var(--k-text-muted));
78
92
  }
79
93
 
80
94
  .k-badge-solid {
81
- background: var(--k-badge-tone);
82
- border-color: color-mix(in oklab, var(--k-badge-tone) 82%, black);
83
- color: var(--k-text-inverted);
95
+ background: var(--k-badge-background, var(--k-badge-tone));
96
+ border-color: var(
97
+ --k-badge-border-color,
98
+ color-mix(in oklab, var(--k-badge-background, var(--k-badge-tone)) 82%, black)
99
+ );
100
+ color: var(--k-badge-color, var(--k-badge-on-tone));
84
101
  }
85
102
 
86
103
  :is(.k-badge-success, .k-badge-warning).k-badge-solid {
87
- background: light-dark(color-mix(in oklab, var(--k-badge-tone) 94%, black), var(--k-badge-tone));
88
- }
89
-
90
- .k-badge-accent.k-badge-solid {
91
- color: var(--k-accent-contrast);
104
+ background: var(
105
+ --k-badge-background,
106
+ light-dark(color-mix(in oklab, var(--k-badge-tone) 94%, black), var(--k-badge-tone))
107
+ );
92
108
  }
93
109
 
94
110
  .k-badge-neutral.k-badge-solid {
95
- background: var(--k-text);
96
- border-color: var(--k-text);
97
- color: var(--k-surface);
111
+ background: var(--k-badge-background, var(--k-text));
112
+ border-color: var(--k-badge-border-color, var(--k-badge-background, var(--k-text)));
113
+ color: var(--k-badge-color, var(--k-surface));
98
114
  }
99
115
 
100
116
  .k-badge-dot {