@bitrix24/b24ui-nuxt 2.5.1 → 2.5.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.
package/dist/module.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitrix24/b24ui-nuxt",
3
- "version": "2.5.1",
3
+ "version": "2.5.2",
4
4
  "docs": "https://bitrix24.github.io/b24ui/guide/installation-nuxt-app.html",
5
5
  "configKey": "b24ui",
6
6
  "compatibility": {
package/dist/module.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { defu } from 'defu';
2
2
  import { defineNuxtModule, createResolver, addPlugin, hasNuxtModule, addComponentsDir, addImportsDir, installModule } from '@nuxt/kit';
3
- import { d as defaultOptions, v as version, n as name, a as getDefaultConfig, b as addTemplates } from './shared/b24ui-nuxt.DMHr4spo.mjs';
3
+ import { d as defaultOptions, v as version, n as name, a as getDefaultConfig, b as addTemplates } from './shared/b24ui-nuxt.D2-pCbE6.mjs';
4
4
  import 'node:url';
5
5
  import 'scule';
6
6
  import 'knitwork';
@@ -1,16 +1,16 @@
1
1
  import type { VNode } from 'vue';
2
2
  import type { AppConfig } from '@nuxt/schema';
3
- import theme from '#build/b24ui/dashboard-sidebar';
4
3
  import type { UseResizableProps } from '../composables/useResizable';
5
4
  import type { ButtonProps, DrawerProps, ModalProps, SlideoverProps, LinkPropsKeys } from '../types';
6
5
  import type { ComponentConfig } from '../types/tv';
6
+ import theme from '#build/b24ui/dashboard-sidebar';
7
7
  type DashboardSidebar = ComponentConfig<typeof theme, AppConfig, 'dashboardSidebar'>;
8
8
  type DashboardSidebarMode = 'modal' | 'slideover' | 'drawer';
9
9
  type DashboardSidebarMenu<T> = T extends 'modal' ? ModalProps : T extends 'slideover' ? SlideoverProps : T extends 'drawer' ? DrawerProps : never;
10
10
  export interface DashboardSidebarProps<T extends DashboardSidebarMode = DashboardSidebarMode> extends Pick<UseResizableProps, 'id' | 'side' | 'minSize' | 'maxSize' | 'defaultSize' | 'resizable' | 'collapsible' | 'collapsedSize'> {
11
11
  /**
12
12
  * The mode of the sidebar menu.
13
- * @defaultValue 'modal'
13
+ * @defaultValue 'slideover'
14
14
  */
15
15
  mode?: T;
16
16
  /**
@@ -72,11 +72,22 @@ const Menu = computed(() => ({
72
72
  modal: B24Modal,
73
73
  drawer: B24Drawer
74
74
  })[props.mode]);
75
- const menuProps = toRef(() => defu(props.menu, {
76
- content: {
77
- onOpenAutoFocus: (e) => e.preventDefault()
78
- }
79
- }, props.mode === "modal" ? { fullscreen: true, transition: false } : props.mode === "slideover" ? { side: "left", close: false } : {}));
75
+ const menuProps = toRef(() => {
76
+ const modeSettings = props.mode === "modal" ? { fullscreen: true, transition: false, b24ui: { content: "p-0 pt-0" } } : props.mode === "slideover" ? { side: "left", close: false } : {};
77
+ return defu(
78
+ props.menu,
79
+ { content: { onOpenAutoFocus: (e) => e.preventDefault() } },
80
+ modeSettings,
81
+ {
82
+ b24ui: {
83
+ overlay: b24ui.value.overlay({ class: uiProp.value?.overlay }),
84
+ content: b24ui.value.content({
85
+ class: [modeSettings.b24ui?.content, uiProp.value?.content]
86
+ })
87
+ }
88
+ }
89
+ );
90
+ });
80
91
  function toggleOpen() {
81
92
  open.value = !open.value;
82
93
  }
@@ -141,10 +152,6 @@ function toggleOpen() {
141
152
  :title="t('dashboardSidebar.title')"
142
153
  :description="t('dashboardSidebar.description')"
143
154
  v-bind="menuProps"
144
- :b24ui="{
145
- overlay: b24ui.overlay({ class: uiProp?.overlay }),
146
- content: b24ui.content({ class: uiProp?.content })
147
- }"
148
155
  >
149
156
  <template #content="contentData">
150
157
  <slot name="content" v-bind="contentData">
@@ -1,16 +1,16 @@
1
1
  import type { VNode } from 'vue';
2
2
  import type { AppConfig } from '@nuxt/schema';
3
- import theme from '#build/b24ui/dashboard-sidebar';
4
3
  import type { UseResizableProps } from '../composables/useResizable';
5
4
  import type { ButtonProps, DrawerProps, ModalProps, SlideoverProps, LinkPropsKeys } from '../types';
6
5
  import type { ComponentConfig } from '../types/tv';
6
+ import theme from '#build/b24ui/dashboard-sidebar';
7
7
  type DashboardSidebar = ComponentConfig<typeof theme, AppConfig, 'dashboardSidebar'>;
8
8
  type DashboardSidebarMode = 'modal' | 'slideover' | 'drawer';
9
9
  type DashboardSidebarMenu<T> = T extends 'modal' ? ModalProps : T extends 'slideover' ? SlideoverProps : T extends 'drawer' ? DrawerProps : never;
10
10
  export interface DashboardSidebarProps<T extends DashboardSidebarMode = DashboardSidebarMode> extends Pick<UseResizableProps, 'id' | 'side' | 'minSize' | 'maxSize' | 'defaultSize' | 'resizable' | 'collapsible' | 'collapsedSize'> {
11
11
  /**
12
12
  * The mode of the sidebar menu.
13
- * @defaultValue 'modal'
13
+ * @defaultValue 'slideover'
14
14
  */
15
15
  mode?: T;
16
16
  /**
@@ -1,8 +1,8 @@
1
1
  import type { VNode } from 'vue';
2
2
  import type { AppConfig } from '@nuxt/schema';
3
- import theme from '#build/b24ui/header';
4
3
  import type { ButtonProps, DrawerProps, ModalProps, SlideoverProps, LinkPropsKeys } from '../types';
5
4
  import type { ComponentConfig } from '../types/tv';
5
+ import theme from '#build/b24ui/header';
6
6
  type Header = ComponentConfig<typeof theme, AppConfig, 'header'>;
7
7
  type HeaderMode = 'modal' | 'slideover' | 'drawer';
8
8
  type HeaderMenu<T> = T extends 'modal' ? ModalProps : T extends 'slideover' ? SlideoverProps : T extends 'drawer' ? DrawerProps : never;
@@ -16,7 +16,7 @@ export interface HeaderProps<T extends HeaderMode = HeaderMode> {
16
16
  to?: string;
17
17
  /**
18
18
  * The mode of the header menu.
19
- * @defaultValue 'modal'
19
+ * @defaultValue 'slideover'
20
20
  */
21
21
  mode?: T;
22
22
  /**
@@ -24,7 +24,7 @@ const props = defineProps({
24
24
  as: { type: null, required: false, default: "header" },
25
25
  title: { type: String, required: false, default: "Bitrix24 UI" },
26
26
  to: { type: String, required: false, default: "/" },
27
- mode: { type: null, required: false, default: "modal" },
27
+ mode: { type: null, required: false, default: "slideover" },
28
28
  menu: { type: null, required: false },
29
29
  toggle: { type: [Boolean, Object], required: false, default: true },
30
30
  toggleSide: { type: String, required: false, default: "left" },
@@ -55,11 +55,22 @@ const Menu = computed(() => ({
55
55
  modal: B24Modal,
56
56
  drawer: B24Drawer
57
57
  })[props.mode]);
58
- const menuProps = toRef(() => defu(props.menu, {
59
- content: {
60
- onOpenAutoFocus: (e) => e.preventDefault()
61
- }
62
- }, props.mode === "modal" ? { fullscreen: true, transition: false } : {}));
58
+ const menuProps = toRef(() => {
59
+ const modeSettings = props.mode === "modal" ? { fullscreen: true, transition: false, b24ui: { content: "p-0 pt-0" } } : props.mode === "slideover" ? { side: "left", close: false } : {};
60
+ return defu(
61
+ props.menu,
62
+ { content: { onOpenAutoFocus: (e) => e.preventDefault() } },
63
+ modeSettings,
64
+ {
65
+ b24ui: {
66
+ overlay: b24ui.value.overlay({ class: uiProp.value?.overlay }),
67
+ content: b24ui.value.content({
68
+ class: [modeSettings.b24ui?.content, uiProp.value?.content]
69
+ })
70
+ }
71
+ }
72
+ );
73
+ });
63
74
  function toggleOpen() {
64
75
  open.value = !open.value;
65
76
  }
@@ -125,10 +136,6 @@ function toggleOpen() {
125
136
  :title="t('header.title')"
126
137
  :description="t('header.description')"
127
138
  v-bind="menuProps"
128
- :b24ui="{
129
- overlay: b24ui.overlay({ class: uiProp?.overlay }),
130
- content: b24ui.content({ class: uiProp?.content })
131
- }"
132
139
  >
133
140
  <template #content="contentData">
134
141
  <slot name="content" v-bind="contentData">
@@ -1,8 +1,8 @@
1
1
  import type { VNode } from 'vue';
2
2
  import type { AppConfig } from '@nuxt/schema';
3
- import theme from '#build/b24ui/header';
4
3
  import type { ButtonProps, DrawerProps, ModalProps, SlideoverProps, LinkPropsKeys } from '../types';
5
4
  import type { ComponentConfig } from '../types/tv';
5
+ import theme from '#build/b24ui/header';
6
6
  type Header = ComponentConfig<typeof theme, AppConfig, 'header'>;
7
7
  type HeaderMode = 'modal' | 'slideover' | 'drawer';
8
8
  type HeaderMenu<T> = T extends 'modal' ? ModalProps : T extends 'slideover' ? SlideoverProps : T extends 'drawer' ? DrawerProps : never;
@@ -16,7 +16,7 @@ export interface HeaderProps<T extends HeaderMode = HeaderMode> {
16
16
  to?: string;
17
17
  /**
18
18
  * The mode of the header menu.
19
- * @defaultValue 'modal'
19
+ * @defaultValue 'slideover'
20
20
  */
21
21
  mode?: T;
22
22
  /**
@@ -6,4 +6,7 @@ export * from './useOverlay';
6
6
  export * from './useResizable';
7
7
  export * from './useScrollspy';
8
8
  export * from './useToast';
9
+ export * from './useDevice';
10
+ export * from './useConfetti';
9
11
  export * from './useSpeechRecognition';
12
+ export * from './color-mode/useColorMode';
@@ -6,4 +6,7 @@ export * from "./useOverlay.js";
6
6
  export * from "./useResizable.js";
7
7
  export * from "./useScrollspy.js";
8
8
  export * from "./useToast.js";
9
+ export * from "./useDevice.js";
10
+ export * from "./useConfetti.js";
9
11
  export * from "./useSpeechRecognition.js";
12
+ export * from "./color-mode/useColorMode.js";
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Breakpoints Tailwind
3
+ */
4
+ declare const TAILWIND_BREAKPOINTS: {
5
+ readonly sm: 640;
6
+ readonly md: 768;
7
+ readonly lg: 1024;
8
+ readonly xl: 1280;
9
+ readonly '2xl': 1536;
10
+ };
11
+ export type PlatformName = 'web' | 'bitrix-mobile' | 'bitrix-desktop';
12
+ export type ScreenSize = keyof typeof TAILWIND_BREAKPOINTS | 'xs';
13
+ export declare const useDevice: () => {
14
+ platform: Readonly<import("vue").Ref<{
15
+ readonly name?: PlatformName | undefined;
16
+ readonly version?: string | undefined;
17
+ }, {
18
+ readonly name?: PlatformName | undefined;
19
+ readonly version?: string | undefined;
20
+ }>>;
21
+ version: import("vue").ComputedRef<string | undefined>;
22
+ isWeb: import("vue").ComputedRef<boolean>;
23
+ isBitrixMobile: import("vue").ComputedRef<boolean>;
24
+ isBitrixDesktop: import("vue").ComputedRef<boolean>;
25
+ screen: import("vue").ComputedRef<{
26
+ current: ScreenSize;
27
+ xs: boolean;
28
+ sm: boolean;
29
+ md: boolean;
30
+ lg: boolean;
31
+ xl: boolean;
32
+ '2xl': boolean;
33
+ isMobile: boolean;
34
+ isTablet: boolean;
35
+ isDesktop: boolean;
36
+ isLargeDesktop: boolean;
37
+ }>;
38
+ };
39
+ export {};
@@ -0,0 +1,62 @@
1
+ import { useState } from "#imports";
2
+ import { computed, readonly } from "vue";
3
+ import { createSharedComposable, useMediaQuery } from "@vueuse/core";
4
+ const TAILWIND_BREAKPOINTS = {
5
+ "sm": 640,
6
+ "md": 768,
7
+ "lg": 1024,
8
+ "xl": 1280,
9
+ "2xl": 1536
10
+ };
11
+ const _useDevice = () => {
12
+ const platform = useState("platform", () => ({}));
13
+ const isWeb = computed(() => platform.value.name === "web");
14
+ const isBitrixMobile = computed(() => platform.value.name === "bitrix-mobile");
15
+ const isBitrixDesktop = computed(() => platform.value.name === "bitrix-desktop");
16
+ const mediaQueries = {
17
+ "sm": useMediaQuery(`(min-width: ${TAILWIND_BREAKPOINTS["sm"]}px)`),
18
+ "md": useMediaQuery(`(min-width: ${TAILWIND_BREAKPOINTS["md"]}px)`),
19
+ "lg": useMediaQuery(`(min-width: ${TAILWIND_BREAKPOINTS["lg"]}px)`),
20
+ "xl": useMediaQuery(`(min-width: ${TAILWIND_BREAKPOINTS["xl"]}px)`),
21
+ "2xl": useMediaQuery(`(min-width: ${TAILWIND_BREAKPOINTS["2xl"]}px)`)
22
+ };
23
+ const screen = computed(() => {
24
+ const sm = mediaQueries.sm.value;
25
+ const md = mediaQueries.md.value;
26
+ const lg = mediaQueries.lg.value;
27
+ const xl = mediaQueries.xl.value;
28
+ const xl2 = mediaQueries["2xl"].value;
29
+ let current = "xs";
30
+ if (xl2) current = "2xl";
31
+ else if (xl) current = "xl";
32
+ else if (lg) current = "lg";
33
+ else if (md) current = "md";
34
+ else if (sm) current = "sm";
35
+ else current = "xs";
36
+ return {
37
+ current,
38
+ "xs": !sm,
39
+ sm,
40
+ md,
41
+ lg,
42
+ xl,
43
+ "2xl": xl2,
44
+ "isMobile": !md,
45
+ "isTablet": md && !lg,
46
+ "isDesktop": lg,
47
+ "isLargeDesktop": xl2
48
+ };
49
+ });
50
+ return {
51
+ // Platform data
52
+ platform: readonly(platform),
53
+ version: computed(() => platform.value.version),
54
+ // Platform flags
55
+ isWeb,
56
+ isBitrixMobile,
57
+ isBitrixDesktop,
58
+ // Screen information
59
+ screen
60
+ };
61
+ };
62
+ export const useDevice = /* @__PURE__ */ createSharedComposable(_useDevice);
@@ -1 +1 @@
1
- @import "#build/b24ui.css";@import "./keyframes.css";@import "./air-design-tokens/tw-style/index.css";@import "./air-design-tokens/index.css";@variant light (&:where(.light, .light *));@variant edge-dark (&:where(.edge-dark, .edge-dark *));@variant edge-light (&:where(.edge-light, .edge-light *));@variant dark (&:where(.dark, .dark *));@variant bitrix-mobile (&:where(html[data-platform="bitrix-mobile"] *));@variant bitrix-desktop (&:where(html[data-platform="bitrix-desktop"] *));@layer base{.air-custom-bg,.sidebar-layout.--inner,body{--air-theme-background:var(--air-theme-bg-image,none) var(--air-theme-bg-position,0 0) /var(--air-theme-bg-size,auto) var(--air-theme-bg-repeat,repeat) var(--air-theme-bg-attachment,scroll) var(--air-theme-bg-color,transparent);--air-theme-background-blurred:var(--air-theme-bg-image-blurred,none) var(--air-theme-bg-position,0 0) /var(--air-theme-bg-size,auto) var(--air-theme-bg-repeat,repeat) var(--air-theme-bg-attachment,scroll)}}@layer theme{:host,:root{--b24ui-header-height:--spacing(14.5)}}@theme default inline{--text-color-dimmed:var(--ui-color-base-6);--text-color-muted:var(--ui-color-design-plain-na-content-secondary);--text-color-description:var(--b24ui-typography-description-color);--text-color-legend:var(--b24ui-typography-legend-color);--text-color-label:var(--b24ui-typography-label-color)}
1
+ @import "#build/b24ui.css";@import "./keyframes.css";@import "./air-design-tokens/tw-style/index.css";@import "./air-design-tokens/index.css";@variant light (&:where(.light, .light *));@variant edge-dark (&:where(.edge-dark, .edge-dark *));@variant edge-light (&:where(.edge-light, .edge-light *));@variant dark (&:where(.dark, .dark *));@variant bitrix-mobile (&:where(html[data-platform="bitrix-mobile"] *));@variant bitrix-desktop (&:where(html[data-platform="bitrix-desktop"] *));@variant web (&:where(html[data-platform="web"] *));@layer base{.air-custom-bg,.sidebar-layout.--inner,body{--air-theme-background:var(--air-theme-bg-image,none) var(--air-theme-bg-position,0 0) /var(--air-theme-bg-size,auto) var(--air-theme-bg-repeat,repeat) var(--air-theme-bg-attachment,scroll) var(--air-theme-bg-color,transparent);--air-theme-background-blurred:var(--air-theme-bg-image-blurred,none) var(--air-theme-bg-position,0 0) /var(--air-theme-bg-size,auto) var(--air-theme-bg-repeat,repeat) var(--air-theme-bg-attachment,scroll)}}@layer theme{:host,:root{--b24ui-header-height:--spacing(14.5)}}@theme default inline{--text-color-dimmed:var(--ui-color-base-6);--text-color-muted:var(--ui-color-design-plain-na-content-secondary);--text-color-description:var(--b24ui-typography-description-color);--text-color-legend:var(--b24ui-typography-legend-color);--text-color-label:var(--b24ui-typography-label-color)}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Plugin to detect the Bitrix24 mobile application environment.
2
+ * Plugin to detect the Bitrix24 application environment.
3
3
  *
4
4
  * @description
5
5
  * 1. Analyzes the User-Agent on the server-side (SSR) or client-side.
@@ -8,7 +8,7 @@ import { globSync } from 'tinyglobby';
8
8
  import { defuFn } from 'defu';
9
9
 
10
10
  const name = "@bitrix24/b24ui-nuxt";
11
- const version = "2.5.1";
11
+ const version = "2.5.2";
12
12
 
13
13
  function getDefaultConfig(theme) {
14
14
  return {
@@ -2943,10 +2943,13 @@ const dashboardSidebar = {
2943
2943
  root: [
2944
2944
  "relative hidden lg:flex flex-col min-h-svh min-w-16 w-(--width) shrink-0",
2945
2945
  "backdrop-blur-sm bg-(--ui-color-bg-content-primary)/20 light:bg-transparent dark:bg-(--ui-color-bg-content-primary)/70",
2946
- "light:bg-transparent light:[--leftmenu-group-stroke:var(--ui-color-base-30)]"
2946
+ "light:bg-transparent"
2947
2947
  ].join(" "),
2948
2948
  header: "h-(--b24ui-header-height) shrink-0 flex items-center gap-1.5 ps-4 pe-4",
2949
- body: "flex flex-col gap-4 flex-1 overflow-y-auto py-2 ps-4 pe-4 md:pe-2 scrollbar-thin scrollbar-transparent",
2949
+ body: [
2950
+ "flex flex-col gap-4 flex-1 overflow-y-auto py-2 ps-4 pe-4 md:pe-2 scrollbar-thin scrollbar-transparent",
2951
+ "light:[--leftmenu-group-stroke:var(--ui-color-base-30)]"
2952
+ ],
2950
2953
  footer: [
2951
2954
  "shrink-0 flex items-center gap-1.5 py-2 ps-4 pe-4",
2952
2955
  "lg:border-t lg:border-(--ui-color-divider-default)",
@@ -6064,6 +6067,8 @@ const navigationMenu = {
6064
6067
  list: "flex flex-col",
6065
6068
  item: [
6066
6069
  "mt-(--menu-item-block-stack-space)",
6070
+ // @see `--leftmenu-group-stroke` src/runtime/air-design-tokens/components/navigation-menu.css:75
6071
+ // @see `light:--leftmenu-group-stroke` src/theme/dashboard-sidebar.ts:16
6067
6072
  "data-[state=open]:rounded-(--menu-item-border-radius) data-[state=open]:border-(length:--leftmenu-group-stroke-weight) data-[state=open]:border-(--leftmenu-group-stroke)"
6068
6073
  ].join(" "),
6069
6074
  link: [
package/dist/unplugin.mjs CHANGED
@@ -3,7 +3,7 @@ import { join, normalize } from 'pathe';
3
3
  import { createUnplugin } from 'unplugin';
4
4
  import { defu } from 'defu';
5
5
  import tailwind from '@tailwindcss/vite';
6
- import { g as getTemplates, d as defaultOptions, a as getDefaultConfig } from './shared/b24ui-nuxt.DMHr4spo.mjs';
6
+ import { g as getTemplates, d as defaultOptions, a as getDefaultConfig } from './shared/b24ui-nuxt.D2-pCbE6.mjs';
7
7
  import fs from 'node:fs';
8
8
  import path from 'node:path';
9
9
  import MagicString from 'magic-string';
package/dist/vite.mjs CHANGED
@@ -4,7 +4,7 @@ import 'pathe';
4
4
  import 'unplugin';
5
5
  import 'defu';
6
6
  import '@tailwindcss/vite';
7
- import './shared/b24ui-nuxt.DMHr4spo.mjs';
7
+ import './shared/b24ui-nuxt.D2-pCbE6.mjs';
8
8
  import 'scule';
9
9
  import 'knitwork';
10
10
  import '@nuxt/kit';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bitrix24/b24ui-nuxt",
3
3
  "description": "Bitrix24 UI-Kit for developing web applications REST API for NUXT & VUE",
4
- "version": "2.5.1",
4
+ "version": "2.5.2",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/bitrix24/b24ui.git"