@bitrix24/b24ui-nuxt 2.0.6 → 2.0.8

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 (150) hide show
  1. package/dist/meta.d.mts +160 -14
  2. package/dist/meta.mjs +160 -14
  3. package/dist/module.json +1 -1
  4. package/dist/module.mjs +1 -1
  5. package/dist/runtime/components/ChatPrompt.vue +4 -3
  6. package/dist/runtime/components/ChatPromptSubmit.d.vue.ts +3 -2
  7. package/dist/runtime/components/ChatPromptSubmit.vue +4 -3
  8. package/dist/runtime/components/ChatPromptSubmit.vue.d.ts +3 -2
  9. package/dist/runtime/components/NavigationMenu.vue +2 -2
  10. package/dist/runtime/components/RadioGroup.d.vue.ts +5 -5
  11. package/dist/runtime/components/RadioGroup.vue +1 -1
  12. package/dist/runtime/components/RadioGroup.vue.d.ts +5 -5
  13. package/dist/runtime/components/Tabs.vue +1 -1
  14. package/dist/runtime/dictionary/icons.d.ts +1 -0
  15. package/dist/runtime/dictionary/icons.js +2 -0
  16. package/dist/shared/{b24ui-nuxt.DX94P9Wb.mjs → b24ui-nuxt.CEMVb5Ee.mjs} +50 -21
  17. package/dist/unplugin.mjs +29 -1
  18. package/dist/vite.mjs +3 -1
  19. package/package.json +9 -20
  20. package/.nuxt/b24ui/accordion.ts +0 -20
  21. package/.nuxt/b24ui/advice.ts +0 -36
  22. package/.nuxt/b24ui/alert.ts +0 -176
  23. package/.nuxt/b24ui/avatar-group.ts +0 -52
  24. package/.nuxt/b24ui/avatar.ts +0 -63
  25. package/.nuxt/b24ui/badge.ts +0 -333
  26. package/.nuxt/b24ui/banner.ts +0 -78
  27. package/.nuxt/b24ui/breadcrumb.ts +0 -42
  28. package/.nuxt/b24ui/button.ts +0 -342
  29. package/.nuxt/b24ui/calendar.ts +0 -112
  30. package/.nuxt/b24ui/card.ts +0 -180
  31. package/.nuxt/b24ui/chat-message.ts +0 -123
  32. package/.nuxt/b24ui/chat-messages.ts +0 -14
  33. package/.nuxt/b24ui/chat-palette.ts +0 -8
  34. package/.nuxt/b24ui/chat-prompt-submit.ts +0 -5
  35. package/.nuxt/b24ui/chat-prompt.ts +0 -35
  36. package/.nuxt/b24ui/checkbox-group.ts +0 -255
  37. package/.nuxt/b24ui/checkbox.ts +0 -195
  38. package/.nuxt/b24ui/chip.ts +0 -238
  39. package/.nuxt/b24ui/collapsible.ts +0 -6
  40. package/.nuxt/b24ui/color-picker.ts +0 -42
  41. package/.nuxt/b24ui/command-palette.ts +0 -56
  42. package/.nuxt/b24ui/container.ts +0 -3
  43. package/.nuxt/b24ui/content/content-search-button.ts +0 -6
  44. package/.nuxt/b24ui/content/content-search.ts +0 -13
  45. package/.nuxt/b24ui/content/content-surround.ts +0 -21
  46. package/.nuxt/b24ui/content/content-toc.ts +0 -41
  47. package/.nuxt/b24ui/context-menu.ts +0 -91
  48. package/.nuxt/b24ui/countdown.ts +0 -89
  49. package/.nuxt/b24ui/dashboard-group.ts +0 -3
  50. package/.nuxt/b24ui/dashboard-search-button.ts +0 -6
  51. package/.nuxt/b24ui/dashboard-search.ts +0 -13
  52. package/.nuxt/b24ui/description-list.ts +0 -67
  53. package/.nuxt/b24ui/dropdown-menu.ts +0 -166
  54. package/.nuxt/b24ui/empty.ts +0 -145
  55. package/.nuxt/b24ui/error.ts +0 -9
  56. package/.nuxt/b24ui/field-group.ts +0 -17
  57. package/.nuxt/b24ui/file-upload.ts +0 -241
  58. package/.nuxt/b24ui/form-field.ts +0 -58
  59. package/.nuxt/b24ui/form.ts +0 -3
  60. package/.nuxt/b24ui/index.ts +0 -88
  61. package/.nuxt/b24ui/input-menu.ts +0 -631
  62. package/.nuxt/b24ui/input-number.ts +0 -426
  63. package/.nuxt/b24ui/input-tags.ts +0 -412
  64. package/.nuxt/b24ui/input.ts +0 -386
  65. package/.nuxt/b24ui/kbd.ts +0 -33
  66. package/.nuxt/b24ui/link.ts +0 -22
  67. package/.nuxt/b24ui/modal.ts +0 -57
  68. package/.nuxt/b24ui/navbar-divider.ts +0 -5
  69. package/.nuxt/b24ui/navbar-section.ts +0 -5
  70. package/.nuxt/b24ui/navbar-spacer.ts +0 -5
  71. package/.nuxt/b24ui/navbar.ts +0 -5
  72. package/.nuxt/b24ui/navigation-menu.ts +0 -155
  73. package/.nuxt/b24ui/page-card.ts +0 -489
  74. package/.nuxt/b24ui/page-columns.ts +0 -3
  75. package/.nuxt/b24ui/page-grid.ts +0 -3
  76. package/.nuxt/b24ui/page-links.ts +0 -26
  77. package/.nuxt/b24ui/page-list.ts +0 -8
  78. package/.nuxt/b24ui/pagination.ts +0 -13
  79. package/.nuxt/b24ui/pin-input.ts +0 -152
  80. package/.nuxt/b24ui/popover.ts +0 -6
  81. package/.nuxt/b24ui/progress.ts +0 -289
  82. package/.nuxt/b24ui/prose/a.ts +0 -5
  83. package/.nuxt/b24ui/prose/accordion-item.ts +0 -3
  84. package/.nuxt/b24ui/prose/accordion.ts +0 -6
  85. package/.nuxt/b24ui/prose/badge.ts +0 -3
  86. package/.nuxt/b24ui/prose/blockquote.ts +0 -5
  87. package/.nuxt/b24ui/prose/callout.ts +0 -83
  88. package/.nuxt/b24ui/prose/card-group.ts +0 -3
  89. package/.nuxt/b24ui/prose/card.ts +0 -86
  90. package/.nuxt/b24ui/prose/code-collapse.ts +0 -19
  91. package/.nuxt/b24ui/prose/code-group.ts +0 -10
  92. package/.nuxt/b24ui/prose/code-icon.ts +0 -66
  93. package/.nuxt/b24ui/prose/code-preview.ts +0 -14
  94. package/.nuxt/b24ui/prose/code.ts +0 -75
  95. package/.nuxt/b24ui/prose/collapsible.ts +0 -9
  96. package/.nuxt/b24ui/prose/em.ts +0 -5
  97. package/.nuxt/b24ui/prose/field-group.ts +0 -3
  98. package/.nuxt/b24ui/prose/field.ts +0 -11
  99. package/.nuxt/b24ui/prose/h1.ts +0 -26
  100. package/.nuxt/b24ui/prose/h2.ts +0 -28
  101. package/.nuxt/b24ui/prose/h3.ts +0 -28
  102. package/.nuxt/b24ui/prose/h4.ts +0 -28
  103. package/.nuxt/b24ui/prose/h5.ts +0 -25
  104. package/.nuxt/b24ui/prose/h6.ts +0 -25
  105. package/.nuxt/b24ui/prose/hr.ts +0 -5
  106. package/.nuxt/b24ui/prose/img.ts +0 -23
  107. package/.nuxt/b24ui/prose/index.ts +0 -41
  108. package/.nuxt/b24ui/prose/kbd.ts +0 -3
  109. package/.nuxt/b24ui/prose/li.ts +0 -5
  110. package/.nuxt/b24ui/prose/ol.ts +0 -5
  111. package/.nuxt/b24ui/prose/p.ts +0 -30
  112. package/.nuxt/b24ui/prose/pre.ts +0 -17
  113. package/.nuxt/b24ui/prose/steps.ts +0 -19
  114. package/.nuxt/b24ui/prose/strong.ts +0 -5
  115. package/.nuxt/b24ui/prose/table.ts +0 -6
  116. package/.nuxt/b24ui/prose/tabs-item.ts +0 -3
  117. package/.nuxt/b24ui/prose/tabs.ts +0 -5
  118. package/.nuxt/b24ui/prose/tbody.ts +0 -5
  119. package/.nuxt/b24ui/prose/td.ts +0 -5
  120. package/.nuxt/b24ui/prose/th.ts +0 -5
  121. package/.nuxt/b24ui/prose/thead.ts +0 -5
  122. package/.nuxt/b24ui/prose/tr.ts +0 -5
  123. package/.nuxt/b24ui/prose/ul.ts +0 -5
  124. package/.nuxt/b24ui/radio-group.ts +0 -303
  125. package/.nuxt/b24ui/range.ts +0 -184
  126. package/.nuxt/b24ui/select-menu.ts +0 -554
  127. package/.nuxt/b24ui/select.ts +0 -533
  128. package/.nuxt/b24ui/separator.ts +0 -131
  129. package/.nuxt/b24ui/sidebar-body.ts +0 -15
  130. package/.nuxt/b24ui/sidebar-footer.ts +0 -5
  131. package/.nuxt/b24ui/sidebar-header.ts +0 -5
  132. package/.nuxt/b24ui/sidebar-heading.ts +0 -5
  133. package/.nuxt/b24ui/sidebar-layout.ts +0 -160
  134. package/.nuxt/b24ui/sidebar-section.ts +0 -5
  135. package/.nuxt/b24ui/sidebar-spacer.ts +0 -5
  136. package/.nuxt/b24ui/sidebar.ts +0 -5
  137. package/.nuxt/b24ui/skeleton.ts +0 -21
  138. package/.nuxt/b24ui/slideover.ts +0 -130
  139. package/.nuxt/b24ui/stepper.ts +0 -187
  140. package/.nuxt/b24ui/switch.ts +0 -139
  141. package/.nuxt/b24ui/table-wrapper.ts +0 -46
  142. package/.nuxt/b24ui/table.ts +0 -131
  143. package/.nuxt/b24ui/tabs.ts +0 -119
  144. package/.nuxt/b24ui/textarea.ts +0 -186
  145. package/.nuxt/b24ui/timeline.ts +0 -211
  146. package/.nuxt/b24ui/toast.ts +0 -95
  147. package/.nuxt/b24ui/toaster.ts +0 -91
  148. package/.nuxt/b24ui/tooltip.ts +0 -10
  149. package/.nuxt/b24ui/user.ts +0 -95
  150. package/.nuxt/b24ui.css +0 -5
package/dist/module.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitrix24/b24ui-nuxt",
3
- "version": "2.0.6",
3
+ "version": "2.0.8",
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 } from '@nuxt/kit';
3
- import { d as defaultOptions, v as version, n as name, a as getDefaultUiConfig, b as addTemplates } from './shared/b24ui-nuxt.DX94P9Wb.mjs';
3
+ import { d as defaultOptions, v as version, n as name, a as getDefaultUiConfig, b as addTemplates } from './shared/b24ui-nuxt.CEMVb5Ee.mjs';
4
4
  import 'node:url';
5
5
  import 'node:fs/promises';
6
6
  import 'pathe';
@@ -36,7 +36,7 @@ const model = defineModel({ type: String, ...{ default: "" } });
36
36
  const { t } = useLocale();
37
37
  const appConfig = useAppConfig();
38
38
  const textareaProps = useForwardProps(reactivePick(props, "rows", "autofocus", "autofocusDelay", "autoresize", "autoresizeDelay", "maxrows", "icon", "avatar", "loading"));
39
- const getProxySlots = () => omit(slots, ["header", "footer"]);
39
+ const getProxySlots = () => omit(slots, ["header", "footer", "default"]);
40
40
  const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.chatPrompt || {} })({
41
41
  variant: props.variant
42
42
  }));
@@ -67,7 +67,7 @@ defineExpose({
67
67
  v-model="model"
68
68
  :placeholder="placeholder || t('chatPrompt.placeholder')"
69
69
  :disabled="Boolean(error) || disabled"
70
- variant="none"
70
+ no-border
71
71
  v-bind="{ ...textareaProps, ...$attrs }"
72
72
  :b24ui="transformUI(omit(b24ui, ['root', 'body', 'header', 'footer']), props.b24ui)"
73
73
  :class="b24ui.body({ class: props.b24ui?.body })"
@@ -79,8 +79,9 @@ defineExpose({
79
79
  </template>
80
80
  </B24Textarea>
81
81
 
82
- <div v-if="!!slots.footer" :class="b24ui.footer({ class: props.b24ui?.footer })">
82
+ <div :class="b24ui.footer({ class: props.b24ui?.footer })">
83
83
  <slot name="footer" />
84
+ <slot name="default" :b24ui="transformUI(omit(b24ui, ['root', 'body', 'header', 'footer']), props.b24ui)" />
84
85
  </div>
85
86
  </Primitive>
86
87
  </template>
@@ -8,7 +8,7 @@ export interface ChatPromptSubmitProps extends /** @vue-ignore */ Pick<ButtonPro
8
8
  status?: ChatStatus;
9
9
  /**
10
10
  * The icon displayed in the button when the status is `ready`.
11
- * @defaultValue icons.arrowUp
11
+ * @defaultValue icons.imSend
12
12
  * @IconComponent
13
13
  */
14
14
  icon?: IconComponent;
@@ -25,7 +25,7 @@ export interface ChatPromptSubmitProps extends /** @vue-ignore */ Pick<ButtonPro
25
25
  streamingIcon?: IconComponent;
26
26
  /**
27
27
  * The color of the button when the status is `streaming`.
28
- * @defaultValue 'air-secondary-no-accent'
28
+ * @defaultValue 'air-secondary-accent-2'
29
29
  */
30
30
  streamingColor?: ButtonProps['color'];
31
31
  /**
@@ -64,6 +64,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ChatPr
64
64
  onStop?: (() => any) | undefined;
65
65
  onReload?: (() => any) | undefined;
66
66
  }>, {
67
+ color: "link" | "air-primary" | "air-primary-success" | "air-primary-alert" | "air-primary-copilot" | "air-secondary" | "air-secondary-accent" | "air-secondary-accent-1" | "air-tertiary" | "default" | "danger" | "success" | "warning" | "primary" | "secondary" | "collab" | "ai" | "air-secondary-alert" | "air-secondary-accent-2" | "air-secondary-no-accent" | "air-tertiary-accent" | "air-tertiary-no-accent" | "air-selection" | "air-boost";
67
68
  status: ChatStatus;
68
69
  streamingColor: "link" | "air-primary" | "air-primary-success" | "air-primary-alert" | "air-primary-copilot" | "air-secondary" | "air-secondary-accent" | "air-secondary-accent-1" | "air-tertiary" | "default" | "danger" | "success" | "warning" | "primary" | "secondary" | "collab" | "ai" | "air-secondary-alert" | "air-secondary-accent-2" | "air-secondary-no-accent" | "air-tertiary-accent" | "air-tertiary-no-accent" | "air-selection" | "air-boost";
69
70
  submittedColor: "link" | "air-primary" | "air-primary-success" | "air-primary-alert" | "air-primary-copilot" | "air-secondary" | "air-secondary-accent" | "air-secondary-accent-1" | "air-tertiary" | "default" | "danger" | "success" | "warning" | "primary" | "secondary" | "collab" | "ai" | "air-secondary-alert" | "air-secondary-accent-2" | "air-secondary-no-accent" | "air-tertiary-accent" | "air-tertiary-no-accent" | "air-selection" | "air-boost";
@@ -13,9 +13,9 @@ import B24Button from "./Button.vue";
13
13
  const props = defineProps({
14
14
  status: { type: String, required: false, default: "ready" },
15
15
  icon: { type: [Function, Object], required: false },
16
- color: { type: null, required: false },
16
+ color: { type: null, required: false, default: "air-primary" },
17
17
  streamingIcon: { type: [Function, Object], required: false },
18
- streamingColor: { type: null, required: false, default: "air-secondary-no-accent" },
18
+ streamingColor: { type: null, required: false, default: "air-secondary-accent-2" },
19
19
  submittedIcon: { type: [Function, Object], required: false },
20
20
  submittedColor: { type: null, required: false, default: "air-secondary-no-accent" },
21
21
  errorIcon: { type: [Function, Object], required: false },
@@ -29,7 +29,7 @@ const { t } = useLocale();
29
29
  const appConfig = useAppConfig();
30
30
  const buttonProps = computed(() => ({
31
31
  ready: {
32
- icon: props.icon || icons.arrowUp,
32
+ icon: props.icon || icons.imSend,
33
33
  color: props.color,
34
34
  type: "submit"
35
35
  },
@@ -61,6 +61,7 @@ const b24ui = computed(() => tv({ extend: tv(theme), ...appConfig.b24ui?.chatPro
61
61
  <template>
62
62
  <B24Button
63
63
  :aria-label="t('chatPromptSubmit.label')"
64
+ rounded
64
65
  v-bind="buttonProps"
65
66
  :class="b24ui.base({ class: [props.b24ui?.base, props.class] })"
66
67
  :b24ui="transformUI(b24ui, props.b24ui)"
@@ -8,7 +8,7 @@ export interface ChatPromptSubmitProps extends /** @vue-ignore */ Pick<ButtonPro
8
8
  status?: ChatStatus;
9
9
  /**
10
10
  * The icon displayed in the button when the status is `ready`.
11
- * @defaultValue icons.arrowUp
11
+ * @defaultValue icons.imSend
12
12
  * @IconComponent
13
13
  */
14
14
  icon?: IconComponent;
@@ -25,7 +25,7 @@ export interface ChatPromptSubmitProps extends /** @vue-ignore */ Pick<ButtonPro
25
25
  streamingIcon?: IconComponent;
26
26
  /**
27
27
  * The color of the button when the status is `streaming`.
28
- * @defaultValue 'air-secondary-no-accent'
28
+ * @defaultValue 'air-secondary-accent-2'
29
29
  */
30
30
  streamingColor?: ButtonProps['color'];
31
31
  /**
@@ -64,6 +64,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ChatPr
64
64
  onStop?: (() => any) | undefined;
65
65
  onReload?: (() => any) | undefined;
66
66
  }>, {
67
+ color: "link" | "air-primary" | "air-primary-success" | "air-primary-alert" | "air-primary-copilot" | "air-secondary" | "air-secondary-accent" | "air-secondary-accent-1" | "air-tertiary" | "default" | "danger" | "success" | "warning" | "primary" | "secondary" | "collab" | "ai" | "air-secondary-alert" | "air-secondary-accent-2" | "air-secondary-no-accent" | "air-tertiary-accent" | "air-tertiary-no-accent" | "air-selection" | "air-boost";
67
68
  status: ChatStatus;
68
69
  streamingColor: "link" | "air-primary" | "air-primary-success" | "air-primary-alert" | "air-primary-copilot" | "air-secondary" | "air-secondary-accent" | "air-secondary-accent-1" | "air-tertiary" | "default" | "danger" | "success" | "warning" | "primary" | "secondary" | "collab" | "ai" | "air-secondary-alert" | "air-secondary-accent-2" | "air-secondary-no-accent" | "air-tertiary-accent" | "air-tertiary-no-accent" | "air-selection" | "air-boost";
69
70
  submittedColor: "link" | "air-primary" | "air-primary-success" | "air-primary-alert" | "air-primary-copilot" | "air-secondary" | "air-secondary-accent" | "air-secondary-accent-1" | "air-tertiary" | "default" | "danger" | "success" | "warning" | "primary" | "secondary" | "collab" | "ai" | "air-secondary-alert" | "air-secondary-accent-2" | "air-secondary-no-accent" | "air-tertiary-accent" | "air-tertiary-no-accent" | "air-selection" | "air-boost";
@@ -120,7 +120,7 @@ function getAccordionDefaultValue(list, level = 0) {
120
120
  {{ item.hint }}
121
121
  </div>
122
122
  <B24Badge
123
- v-if="item.badge !== void 0 && item.type !== 'label'"
123
+ v-if="(item.badge || item.badge === 0) && item.type !== 'label'"
124
124
  color="air-primary-alert"
125
125
  :size="item.b24ui?.linkLeadingBadgeSize || props.b24ui?.linkLeadingBadgeSize || b24ui.linkLeadingBadgeSize()"
126
126
  v-bind="typeof item.badge === 'string' || typeof item.badge === 'number' ? { label: item.badge } : item.badge"
@@ -145,7 +145,7 @@ function getAccordionDefaultValue(list, level = 0) {
145
145
 
146
146
  <component
147
147
  :is="orientation === 'vertical' && item.children?.length && !collapsed ? AccordionTrigger : 'span'"
148
- v-if="(!collapsed || orientation !== 'vertical') && /* item.badge !== undefined || */
148
+ v-if="(!collapsed || orientation !== 'vertical') && /* (item.badge || item.badge === 0) || */
149
149
  (orientation === 'horizontal' && (item.children?.length || !!slots[item.slot ? `${item.slot}-content` : 'item-content']) || orientation === 'vertical' && item.children?.length || item.trailingIcon || !!slots[item.slot ? `${item.slot}-trailing` : 'item-trailing'])"
150
150
  as="span"
151
151
  :class="b24ui.linkTrailing({ class: [props.b24ui?.linkTrailing, item.b24ui?.linkTrailing] })"
@@ -1,7 +1,7 @@
1
1
  import type { RadioGroupRootProps, RadioGroupRootEmits } from 'reka-ui';
2
2
  import type { AppConfig } from '@nuxt/schema';
3
3
  import theme from '#build/b24ui/radio-group';
4
- import type { AcceptableValue, GetItemKeys, GetModelValue } from '../types/utils';
4
+ import type { AcceptableValue, GetItemKeys, GetModelValue, GetModelValueEmits } from '../types/utils';
5
5
  import type { ComponentConfig } from '../types/tv';
6
6
  type RadioGroup = ComponentConfig<typeof theme, AppConfig, 'radioGroup'>;
7
7
  export type RadioGroupValue = AcceptableValue;
@@ -66,9 +66,9 @@ export interface RadioGroupProps<T extends RadioGroupItem[] = RadioGroupItem[],
66
66
  class?: any;
67
67
  b24ui?: RadioGroup['slots'];
68
68
  }
69
- export type RadioGroupEmits = RadioGroupRootEmits & {
69
+ export type RadioGroupEmits<T extends RadioGroupItem[] = RadioGroupItem[], VK extends GetItemKeys<T> = 'value'> = Omit<RadioGroupRootEmits, 'update:modelValue'> & {
70
70
  change: [event: Event];
71
- };
71
+ } & GetModelValueEmits<T, VK, false>;
72
72
  type NormalizeItem<T extends RadioGroupItem> = Exclude<T & {
73
73
  id: string;
74
74
  }, RadioGroupValue>;
@@ -84,12 +84,12 @@ export interface RadioGroupSlots<T extends RadioGroupItem[] = RadioGroupItem[]>
84
84
  declare const __VLS_export: <T extends RadioGroupItem[], VK extends GetItemKeys<T> = "value">(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
85
85
  props: __VLS_PrettifyLocal<RadioGroupProps<T, VK> & {
86
86
  onChange?: ((event: Event) => any) | undefined;
87
- "onUpdate:modelValue"?: ((payload: string) => any) | undefined;
87
+ "onUpdate:modelValue"?: ((value: import("../types/utils").GetItemValue<T, VK, import("../types/utils").NestedItem<T>>) => any) | undefined;
88
88
  }> & import("vue").PublicProps;
89
89
  expose: (exposed: {}) => void;
90
90
  attrs: any;
91
91
  slots: RadioGroupSlots<T>;
92
- emit: ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", payload: string) => void);
92
+ emit: ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", value: import("../types/utils").GetItemValue<T, VK, import("../types/utils").NestedItem<T>>) => void);
93
93
  }>) => import("vue").VNode & {
94
94
  __ctx?: Awaited<typeof __VLS_setup>;
95
95
  };
@@ -31,7 +31,7 @@ const props = defineProps({
31
31
  name: { type: String, required: false },
32
32
  required: { type: Boolean, required: false }
33
33
  });
34
- const emits = defineEmits(["update:modelValue", "change"]);
34
+ const emits = defineEmits(["change", "update:modelValue"]);
35
35
  const slots = defineSlots();
36
36
  const appConfig = useAppConfig();
37
37
  const rootProps = useForwardPropsEmits(reactivePick(props, "as", "loop", "required"), emits);
@@ -1,7 +1,7 @@
1
1
  import type { RadioGroupRootProps, RadioGroupRootEmits } from 'reka-ui';
2
2
  import type { AppConfig } from '@nuxt/schema';
3
3
  import theme from '#build/b24ui/radio-group';
4
- import type { AcceptableValue, GetItemKeys, GetModelValue } from '../types/utils';
4
+ import type { AcceptableValue, GetItemKeys, GetModelValue, GetModelValueEmits } from '../types/utils';
5
5
  import type { ComponentConfig } from '../types/tv';
6
6
  type RadioGroup = ComponentConfig<typeof theme, AppConfig, 'radioGroup'>;
7
7
  export type RadioGroupValue = AcceptableValue;
@@ -66,9 +66,9 @@ export interface RadioGroupProps<T extends RadioGroupItem[] = RadioGroupItem[],
66
66
  class?: any;
67
67
  b24ui?: RadioGroup['slots'];
68
68
  }
69
- export type RadioGroupEmits = RadioGroupRootEmits & {
69
+ export type RadioGroupEmits<T extends RadioGroupItem[] = RadioGroupItem[], VK extends GetItemKeys<T> = 'value'> = Omit<RadioGroupRootEmits, 'update:modelValue'> & {
70
70
  change: [event: Event];
71
- };
71
+ } & GetModelValueEmits<T, VK, false>;
72
72
  type NormalizeItem<T extends RadioGroupItem> = Exclude<T & {
73
73
  id: string;
74
74
  }, RadioGroupValue>;
@@ -84,12 +84,12 @@ export interface RadioGroupSlots<T extends RadioGroupItem[] = RadioGroupItem[]>
84
84
  declare const __VLS_export: <T extends RadioGroupItem[], VK extends GetItemKeys<T> = "value">(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
85
85
  props: __VLS_PrettifyLocal<RadioGroupProps<T, VK> & {
86
86
  onChange?: ((event: Event) => any) | undefined;
87
- "onUpdate:modelValue"?: ((payload: string) => any) | undefined;
87
+ "onUpdate:modelValue"?: ((value: import("../types/utils").GetItemValue<T, VK, import("../types/utils").NestedItem<T>>) => any) | undefined;
88
88
  }> & import("vue").PublicProps;
89
89
  expose: (exposed: {}) => void;
90
90
  attrs: any;
91
91
  slots: RadioGroupSlots<T>;
92
- emit: ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", payload: string) => void);
92
+ emit: ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", value: import("../types/utils").GetItemValue<T, VK, import("../types/utils").NestedItem<T>>) => void);
93
93
  }>) => import("vue").VNode & {
94
94
  __ctx?: Awaited<typeof __VLS_setup>;
95
95
  };
@@ -79,7 +79,7 @@ defineExpose({
79
79
 
80
80
  <slot name="trailing" :item="item" :index="index" :b24ui="b24ui">
81
81
  <B24Badge
82
- v-if="item.badge !== void 0"
82
+ v-if="item.badge || item.badge === 0"
83
83
  color="air-primary"
84
84
  variant="outline"
85
85
  :size="item.b24ui?.trailingBadgeSize || props.b24ui?.trailingBadgeSize || b24ui.trailingBadgeSize()"
@@ -33,6 +33,7 @@ declare const _default: {
33
33
  caution: import("vue").FunctionalComponent<import("vue").HTMLAttributes & import("vue").VNodeProps, {}, any, {}>;
34
34
  copyCheck: import("vue").FunctionalComponent<import("vue").HTMLAttributes & import("vue").VNodeProps, {}, any, {}>;
35
35
  copy: import("vue").FunctionalComponent<import("vue").HTMLAttributes & import("vue").VNodeProps, {}, any, {}>;
36
+ imSend: import("vue").FunctionalComponent<import("vue").HTMLAttributes & import("vue").VNodeProps, {}, any, {}>;
36
37
  arrowDown: import("vue").FunctionalComponent<import("vue").HTMLAttributes & import("vue").VNodeProps, {}, any, {}>;
37
38
  arrowUp: import("vue").FunctionalComponent<import("vue").HTMLAttributes & import("vue").VNodeProps, {}, any, {}>;
38
39
  stop: import("vue").FunctionalComponent<import("vue").HTMLAttributes & import("vue").VNodeProps, {}, any, {}>;
@@ -31,6 +31,7 @@ import ArrowDownLIcon from "@bitrix24/b24icons-vue/outline/ArrowDownLIcon";
31
31
  import ArrowTopLIcon from "@bitrix24/b24icons-vue/outline/ArrowTopLIcon";
32
32
  import StopLIcon from "@bitrix24/b24icons-vue/outline/StopLIcon";
33
33
  import RefreshIcon from "@bitrix24/b24icons-vue/outline/RefreshIcon";
34
+ import SendIcon from "@bitrix24/b24icons-vue/main/SendIcon";
34
35
  export default {
35
36
  arrowLeft: ArrowToTheLeftIcon,
36
37
  arrowRight: ArrowToTheRightIcon,
@@ -62,6 +63,7 @@ export default {
62
63
  caution: AlertIcon,
63
64
  copyCheck: CircleCheckIcon,
64
65
  copy: CopyIcon,
66
+ imSend: SendIcon,
65
67
  arrowDown: ArrowDownLIcon,
66
68
  arrowUp: ArrowTopLIcon,
67
69
  stop: StopLIcon,
@@ -4,11 +4,11 @@ import { join } from 'pathe';
4
4
  import { globSync } from 'tinyglobby';
5
5
  import { kebabCase, camelCase, pascalCase } from 'scule';
6
6
  import { genExport } from 'knitwork';
7
- import { addTypeTemplate, addTemplate, updateTemplates, hasNuxtModule, logger } from '@nuxt/kit';
7
+ import { hasNuxtModule, addTypeTemplate, addTemplate, updateTemplates, logger } from '@nuxt/kit';
8
8
  import { defuFn } from 'defu';
9
9
 
10
10
  const name = "@bitrix24/b24ui-nuxt";
11
- const version = "2.0.6";
11
+ const version = "2.0.8";
12
12
 
13
13
  const getDefaultUiConfig = () => ({});
14
14
  const defaultOptions = {
@@ -1136,6 +1136,18 @@ const button = {
1136
1136
  "pe-[calc(var(--ui-btn-padding-right)_-_var(--ui-btn-icon-compensation))]"
1137
1137
  ].join(" ")
1138
1138
  }
1139
+ },
1140
+ // endregion ////
1141
+ // region single icon ////
1142
+ {
1143
+ leading: true,
1144
+ useLabel: false,
1145
+ useDropdown: false,
1146
+ class: {
1147
+ base: [
1148
+ "w-(--ui-btn-height)"
1149
+ ].join(" ")
1150
+ }
1139
1151
  }
1140
1152
  // endregion ////
1141
1153
  ],
@@ -1636,7 +1648,7 @@ const chatMessages = {
1636
1648
  const chatPalette = {
1637
1649
  slots: {
1638
1650
  root: "relative flex-1 flex flex-col min-h-0 min-w-0",
1639
- prompt: "px-0 rounded-t-none border-t border-default",
1651
+ prompt: "px-0 rounded-t-none border-t border-(--ui-color-divider-default)",
1640
1652
  close: "",
1641
1653
  content: "overflow-y-auto flex-1 flex flex-col py-3"
1642
1654
  }
@@ -1644,25 +1656,41 @@ const chatPalette = {
1644
1656
 
1645
1657
  const chatPrompt = {
1646
1658
  slots: {
1647
- root: "relative flex flex-col items-stretch gap-2 px-2.5 py-2 w-full rounded-lg backdrop-blur",
1648
- header: "flex items-center gap-1.5",
1649
- body: "items-start",
1650
- footer: "flex items-center justify-between gap-1.5",
1651
- base: "text-base/5"
1659
+ root: "relative flex flex-col items-stretch gap-[2px] ps-[12px] pe-[8px] py-[8px] w-full rounded-lg",
1660
+ header: "flex items-center gap-[8px]",
1661
+ body: "py-[4px] items-start",
1662
+ footer: "flex items-center justify-end gap-[8px]",
1663
+ base: "pt-[1px] pb-[0px] text-(length:--ui-font-size-lg)/(--ui-font-line-height-2xs)"
1652
1664
  },
1653
1665
  variants: {
1654
1666
  variant: {
1655
1667
  outline: {
1656
- root: "bg-default/75 ring ring-default"
1668
+ root: [
1669
+ "bg-(--ui-color-design-outline-bg)",
1670
+ "ring ring-(--ui-color-design-outline-stroke) ring-1",
1671
+ "text-(--ui-color-design-outline-content)"
1672
+ ].join(" ")
1657
1673
  },
1658
- soft: {
1659
- root: "bg-elevated/50"
1674
+ tinted: {
1675
+ root: [
1676
+ "bg-(--ui-color-design-tinted-na-bg)",
1677
+ "ring ring-(--ui-color-design-tinted-na-stroke) ring-(length:--ui-design-tinted-na-stroke-weight)",
1678
+ "text-(--ui-color-design-tinted-na-content)"
1679
+ ].join(" ")
1660
1680
  },
1661
- subtle: {
1662
- root: "bg-elevated/50 ring ring-default"
1681
+ filled: {
1682
+ root: [
1683
+ "bg-(--ui-color-design-filled-na-bg)",
1684
+ "ring ring-(--ui-color-design-filled-na-stroke) ring-(length:--ui-design-filled-na-stroke-weight)",
1685
+ "text-(--ui-color-design-filled-na-content)"
1686
+ ].join(" ")
1663
1687
  },
1664
- naked: {
1665
- root: ""
1688
+ plain: {
1689
+ root: [
1690
+ "bg-(--ui-color-design-plain-bg)",
1691
+ "ring ring-(--ui-color-design-plain-stroke) ring-(length:--ui-design-plain-stroke-weight)",
1692
+ "text-(--ui-color-design-plain-content)"
1693
+ ].join(" ")
1666
1694
  }
1667
1695
  }
1668
1696
  },
@@ -1673,7 +1701,7 @@ const chatPrompt = {
1673
1701
 
1674
1702
  const chatPromptSubmit = {
1675
1703
  slots: {
1676
- base: ""
1704
+ base: "rounded-full"
1677
1705
  }
1678
1706
  };
1679
1707
 
@@ -9955,13 +9983,12 @@ const themeContent = {
9955
9983
  contentToc: contentToc
9956
9984
  };
9957
9985
 
9958
- async function buildComponentDependencyGraph(componentDir, prefix) {
9986
+ async function buildComponentDependencyGraph(componentDir, componentPattern) {
9959
9987
  const dependencyGraph = /* @__PURE__ */ new Map();
9960
9988
  const componentFiles = globSync(["**/*.vue"], {
9961
9989
  cwd: componentDir,
9962
9990
  absolute: true
9963
9991
  });
9964
- const componentPattern = new RegExp(`<${prefix}([A-Z][a-zA-Z]+)|\\b${prefix}([A-Z][a-zA-Z]+)\\b`, "g");
9965
9992
  for (const componentFile of componentFiles) {
9966
9993
  try {
9967
9994
  const content = await readFile(componentFile, "utf-8");
@@ -10004,7 +10031,7 @@ async function detectUsedComponents(rootDir, prefix, componentDir, includeCompon
10004
10031
  cwd: rootDir,
10005
10032
  ignore: ["node_modules/**", ".nuxt/**", "dist/**"]
10006
10033
  });
10007
- const componentPattern = new RegExp(`<${prefix}([A-Z][a-zA-Z]+)|\\b${prefix}([A-Z][a-zA-Z]+)\\b`, "g");
10034
+ const componentPattern = new RegExp(`<(?:Lazy)?${prefix}([A-Z][a-zA-Z]+)|\\b(?:Lazy)?${prefix}([A-Z][a-zA-Z]+)\\b`, "g");
10008
10035
  for (const file of appFiles) {
10009
10036
  try {
10010
10037
  const filePath = join(rootDir, file);
@@ -10022,7 +10049,7 @@ async function detectUsedComponents(rootDir, prefix, componentDir, includeCompon
10022
10049
  if (detectedComponents.size === 0) {
10023
10050
  return void 0;
10024
10051
  }
10025
- const dependencyGraph = await buildComponentDependencyGraph(componentDir, prefix);
10052
+ const dependencyGraph = await buildComponentDependencyGraph(componentDir, componentPattern);
10026
10053
  const allComponents = /* @__PURE__ */ new Set();
10027
10054
  for (const component of detectedComponents) {
10028
10055
  const resolved = resolveComponentDependencies(component, dependencyGraph);
@@ -10115,7 +10142,9 @@ function getTemplates(options, uiConfig, nuxt, resolve) {
10115
10142
  }
10116
10143
  return sources || '@source "./b24ui";';
10117
10144
  }
10118
- if (!!nuxt && (hasNuxtModule("@nuxtjs/mdc") || options.mdc || (hasNuxtModule("@nuxt/content") || options.content))) {
10145
+ const forNuxt = !!nuxt && (hasNuxtModule("@nuxtjs/mdc") || options.mdc || (hasNuxtModule("@nuxt/content") || options.content));
10146
+ const forVue = !nuxt && options.mdc;
10147
+ if (forNuxt || forVue) {
10119
10148
  hasProse = true;
10120
10149
  const path = "prose";
10121
10150
  writeThemeTemplate(themeProse, path);
package/dist/unplugin.mjs CHANGED
@@ -3,7 +3,9 @@ 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 getDefaultUiConfig } from './shared/b24ui-nuxt.DX94P9Wb.mjs';
6
+ import { g as getTemplates, d as defaultOptions, a as getDefaultUiConfig } from './shared/b24ui-nuxt.CEMVb5Ee.mjs';
7
+ import fs from 'node:fs';
8
+ import path from 'node:path';
7
9
  import MagicString from 'magic-string';
8
10
  import { genSafeVariableName } from 'knitwork';
9
11
  import { resolvePathSync } from 'mlly';
@@ -17,9 +19,35 @@ import '@nuxt/kit';
17
19
  function TemplatePlugin(options, appConfig) {
18
20
  const templates = getTemplates(options, appConfig.b24ui);
19
21
  const templateKeys = new Set(templates.map((t) => `#build/${t.filename}`));
22
+ async function writeTemplates(root) {
23
+ const map = {};
24
+ const dir = path.join(root, "node_modules", ".b24ui-nuxt");
25
+ for (const template of templates) {
26
+ if (!template.write || !template.filename) {
27
+ continue;
28
+ }
29
+ const filePath = path.join(dir, template.filename);
30
+ if (!fs.existsSync(path.dirname(filePath))) {
31
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
32
+ }
33
+ fs.writeFileSync(filePath, await template.getContents({}));
34
+ map[`#build/${template.filename}`] = filePath;
35
+ }
36
+ return map;
37
+ }
20
38
  return {
21
39
  name: "bitrix24:b24ui:templates",
22
40
  enforce: "pre",
41
+ vite: {
42
+ async config(config) {
43
+ const alias = await writeTemplates(config.root || process.cwd());
44
+ return {
45
+ resolve: {
46
+ alias
47
+ }
48
+ };
49
+ }
50
+ },
23
51
  resolveId(id) {
24
52
  if (templateKeys.has(id + ".ts")) {
25
53
  return id.replace("#build/", "virtual:bitrix24-ui-templates/") + ".ts";
package/dist/vite.mjs CHANGED
@@ -4,12 +4,14 @@ import 'pathe';
4
4
  import 'unplugin';
5
5
  import 'defu';
6
6
  import '@tailwindcss/vite';
7
- import './shared/b24ui-nuxt.DX94P9Wb.mjs';
7
+ import './shared/b24ui-nuxt.CEMVb5Ee.mjs';
8
8
  import 'node:fs/promises';
9
9
  import 'tinyglobby';
10
10
  import 'scule';
11
11
  import 'knitwork';
12
12
  import '@nuxt/kit';
13
+ import 'node:fs';
14
+ import 'node:path';
13
15
  import 'magic-string';
14
16
  import 'mlly';
15
17
  import 'unplugin-vue-components';
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.0.6",
4
+ "version": "2.0.8",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/bitrix24/b24ui.git"
@@ -80,10 +80,6 @@
80
80
  ]
81
81
  }
82
82
  },
83
- "imports": {
84
- "#build/b24ui/*": "./.nuxt/b24ui/*.ts",
85
- "#build/b24ui.css": "./.nuxt/b24ui.css"
86
- },
87
83
  "bin": {
88
84
  "bitrix24-ui": "./cli/index.mjs"
89
85
  },
@@ -93,8 +89,6 @@
93
89
  "README.md",
94
90
  "README-AI.md",
95
91
  "LICENSE",
96
- ".nuxt/b24ui",
97
- ".nuxt/b24ui.css",
98
92
  "dist",
99
93
  "cli",
100
94
  "vue-plugin.d.ts"
@@ -103,8 +97,8 @@
103
97
  "@bitrix24/b24icons-vue": "^2.0.4",
104
98
  "@internationalized/date": "^3.10.0",
105
99
  "@internationalized/number": "^3.6.5",
106
- "@nuxt/kit": "^4.1.2",
107
- "@nuxt/schema": "^4.1.2",
100
+ "@nuxt/kit": "^4.2.0",
101
+ "@nuxt/schema": "^4.2.0",
108
102
  "@standard-schema/spec": "^1.0.0",
109
103
  "@tailwindcss/postcss": "^4.1.16",
110
104
  "@tailwindcss/vite": "^4.1.16",
@@ -146,7 +140,7 @@
146
140
  },
147
141
  "devDependencies": {
148
142
  "@nuxt/content": "^3.7.1",
149
- "@nuxt/eslint-config": "^1.9.0",
143
+ "@nuxt/eslint-config": "^1.10.0",
150
144
  "@nuxt/module-builder": "^1.0.2",
151
145
  "@nuxt/test-utils": "^3.20.1",
152
146
  "@types/canvas-confetti": "^1.9.0",
@@ -155,11 +149,11 @@
155
149
  "nuxt-component-meta": "^0.14.1",
156
150
  "sharp": "^0.34.3",
157
151
  "@vue/test-utils": "^2.4.6",
158
- "ai": "^5.0.80",
152
+ "ai": "^5.0.81",
159
153
  "embla-carousel": "^8.6.0",
160
154
  "eslint": "^9.38.0",
161
- "happy-dom": "^20.0.8",
162
- "nuxt": "^4.1.2",
155
+ "happy-dom": "^20.0.10",
156
+ "nuxt": "^4.2.0",
163
157
  "vitest": "^3.2.4",
164
158
  "vitest-axe": "^0.1.0",
165
159
  "vitest-environment-nuxt": "^1.0.1",
@@ -199,16 +193,11 @@
199
193
  }
200
194
  },
201
195
  "resolutions": {
202
- "@nuxt/kit": "4.1.2",
203
- "nuxt": "4.1.2",
196
+ "@nuxt/kit": "^4.2.0",
204
197
  "@bitrix24/b24ui-nuxt": "workspace:*",
205
198
  "debug": "4.3.7",
206
199
  "typescript": "5.8.3",
207
- "unimport": "4.1.1",
208
- "unplugin": "^2.3.10",
209
- "@ai-sdk/gateway": "2.0.1",
210
- "ai": "5.0.80",
211
- "@types/node": "24.7.0"
200
+ "unplugin": "^2.3.10"
212
201
  },
213
202
  "keywords": [
214
203
  "bitrix24-ui",
@@ -1,20 +0,0 @@
1
- export default {
2
- "slots": {
3
- "root": "w-full",
4
- "item": "text-(--b24ui-typography-label-color) border-b border-(--ui-color-divider-vibrant-accent-more) last:border-b-0",
5
- "header": "flex",
6
- "trigger": "min-w-0 group flex-1 flex items-center gap-1.5 py-[12px] font-(--ui-font-weight-medium) text-(length:--ui-font-size-sm) leading-[20px] focus-visible:outline-(--ui-color-accent-soft-element-blue) cursor-pointer",
7
- "content": "motion-safe:data-[state=open]:animate-[accordion-down_200ms_ease-out] motion-safe:data-[state=closed]:animate-[accordion-up_200ms_ease-out] overflow-hidden focus:outline-none",
8
- "body": "text-(length:--ui-font-size-sm) pb-[12px]",
9
- "leadingIcon": "shrink-0 size-[20px]",
10
- "trailingIcon": "shrink-0 size-[20px] ms-auto group-data-[state=open]:rotate-180 transition-transform duration-200",
11
- "label": "text-start break-words"
12
- },
13
- "variants": {
14
- "disabled": {
15
- "true": {
16
- "trigger": "cursor-not-allowed opacity-75"
17
- }
18
- }
19
- }
20
- }
@@ -1,36 +0,0 @@
1
- const angle = [
2
- "top",
3
- "bottom"
4
- ] as const
5
-
6
- export default {
7
- "slots": {
8
- "root": "light style-outline-accent-1 flex items-end",
9
- "descriptionWrapper": "relative",
10
- "descriptionBorder": "fill-(--b24ui-border-color)",
11
- "descriptionBg": "fill-(--b24ui-background) dark:fill-(--ui-color-base-6)",
12
- "descriptionAngle": "absolute w-[14px] h-[12px]",
13
- "description": "grow w-11/12 py-3 px-md2 ms-2 rounded-[23px] font-[family-name:var(--ui-font-family-secondary)] text-(length:--ui-font-size-md)/(--ui-font-line-height-md) font-(--ui-font-weight-normal) border-1 border-(--b24ui-border-color) bg-(--b24ui-background) text-(--b24ui-color) dark:bg-(--ui-color-base-6)",
14
- "leading": "me-1.5 ms-2 font-(--ui-font-weight-medium) text-(--ui-color-design-plain-content-icon-secondary)",
15
- "leadingIcon": "shrink-0 size-[42px]",
16
- "leadingAvatar": "shrink-0",
17
- "leadingAvatarIcon": "text-(--b24ui-typography-label-color) bg-(--ui-color-base-8)",
18
- "leadingAvatarSize": "lg"
19
- },
20
- "variants": {
21
- "angle": {
22
- "top": {
23
- "root": "items-start",
24
- "leading": "mt-0.5",
25
- "descriptionAngle": "start-[0.8px] top-[9px] scale-x-100 -scale-y-100 rtl:-scale-x-100"
26
- },
27
- "bottom": {
28
- "root": "items-end",
29
- "descriptionAngle": "start-[0.8px] bottom-[9px] rtl:-scale-x-100"
30
- }
31
- }
32
- },
33
- "defaultVariants": {
34
- "angle": "bottom" as typeof angle[number]
35
- }
36
- }