@firstnoodle-ui/bui 0.0.13 → 0.0.14

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 (272) hide show
  1. package/dist/bui.css +1 -1
  2. package/dist/components/checkbox/Checkbox.vue.d.ts +5 -9
  3. package/dist/components/checkbox/CircleIndicator.vue.d.ts +3 -2
  4. package/dist/components/checkbox/DefaultIndicator.vue.d.ts +3 -2
  5. package/dist/components/collapse/Collapse.vue.d.ts +0 -2
  6. package/dist/components/input/Input.vue.d.ts +3 -1
  7. package/dist/components/pagination/Pagination.vue.d.ts +4 -4
  8. package/dist/components/text-editor/components/InsertLinkDialog.vue.d.ts +5 -2
  9. package/dist/components/text-editor/components/InsertTextDialog.vue.d.ts +5 -2
  10. package/dist/components/types.d.ts +2 -0
  11. package/dist/index.mjs +4391 -4425
  12. package/package.json +8 -3
  13. package/dist/components/scrollbar/scrollbarWidth.d.ts +0 -1
  14. package/src/components/application-wrapper/ApplicationWrapper.vue +0 -8
  15. package/src/components/application-wrapper/index.ts +0 -1
  16. package/src/components/aside-section-label/AsideSectionLabel.vue +0 -16
  17. package/src/components/aside-section-label/index.ts +0 -1
  18. package/src/components/button/Button.vue +0 -245
  19. package/src/components/button/NotificationBadge.vue +0 -15
  20. package/src/components/button/index.ts +0 -1
  21. package/src/components/button-group/ButtonGroup.vue +0 -97
  22. package/src/components/button-group/index.ts +0 -1
  23. package/src/components/checkbox/Checkbox.vue +0 -52
  24. package/src/components/checkbox/CircleIndicator.vue +0 -27
  25. package/src/components/checkbox/DefaultIndicator.vue +0 -22
  26. package/src/components/checkbox/index.ts +0 -1
  27. package/src/components/collapse/Collapse.vue +0 -120
  28. package/src/components/collapse/index.ts +0 -1
  29. package/src/components/confirm-cancel/ConfirmCancel.vue +0 -79
  30. package/src/components/confirm-cancel/index.ts +0 -1
  31. package/src/components/data-point/DataPoint.vue +0 -5
  32. package/src/components/data-point/index.ts +0 -1
  33. package/src/components/dialog/Dialog.vue +0 -70
  34. package/src/components/dialog/index.ts +0 -1
  35. package/src/components/fade-in-up/FadeInUp.vue +0 -17
  36. package/src/components/fade-in-up/index.ts +0 -1
  37. package/src/components/first-paint/FirstPaint.vue +0 -21
  38. package/src/components/first-paint/index.ts +0 -1
  39. package/src/components/first-paint/style.scss +0 -23
  40. package/src/components/flexbox/Flexbox.vue +0 -50
  41. package/src/components/flexbox/index.ts +0 -1
  42. package/src/components/horizontal-layout/Aside.vue +0 -113
  43. package/src/components/horizontal-layout/HorizontalLayout.vue +0 -118
  44. package/src/components/horizontal-layout/index.ts +0 -2
  45. package/src/components/icon/Icon.vue +0 -1159
  46. package/src/components/icon/index.ts +0 -1
  47. package/src/components/icon/utils/combine-svgs.cjs +0 -55
  48. package/src/components/icon/utils/combined-svgs.txt +0 -1150
  49. package/src/components/icon/utils/svgs/admin.svg +0 -16
  50. package/src/components/icon/utils/svgs/arrow-deviate.svg +0 -3
  51. package/src/components/icon/utils/svgs/arrow-down-plus.svg +0 -4
  52. package/src/components/icon/utils/svgs/arrow-down.svg +0 -3
  53. package/src/components/icon/utils/svgs/arrow-from.svg +0 -3
  54. package/src/components/icon/utils/svgs/arrow-left.svg +0 -3
  55. package/src/components/icon/utils/svgs/arrow-move.svg +0 -15
  56. package/src/components/icon/utils/svgs/arrow-right.svg +0 -3
  57. package/src/components/icon/utils/svgs/arrow-sub.svg +0 -3
  58. package/src/components/icon/utils/svgs/arrow-trend.svg +0 -15
  59. package/src/components/icon/utils/svgs/arrow-up-plus.svg +0 -4
  60. package/src/components/icon/utils/svgs/arrow-up.svg +0 -3
  61. package/src/components/icon/utils/svgs/authority.svg +0 -5
  62. package/src/components/icon/utils/svgs/beams.svg +0 -5
  63. package/src/components/icon/utils/svgs/bell.svg +0 -15
  64. package/src/components/icon/utils/svgs/bold.svg +0 -3
  65. package/src/components/icon/utils/svgs/box.svg +0 -5
  66. package/src/components/icon/utils/svgs/building.svg +0 -15
  67. package/src/components/icon/utils/svgs/bullet-list.svg +0 -8
  68. package/src/components/icon/utils/svgs/calendar.svg +0 -21
  69. package/src/components/icon/utils/svgs/camera.svg +0 -5
  70. package/src/components/icon/utils/svgs/categories.svg +0 -3
  71. package/src/components/icon/utils/svgs/check-circled.svg +0 -16
  72. package/src/components/icon/utils/svgs/check-outline.svg +0 -15
  73. package/src/components/icon/utils/svgs/check.svg +0 -3
  74. package/src/components/icon/utils/svgs/chevron-down.svg +0 -3
  75. package/src/components/icon/utils/svgs/chevron-left-double.svg +0 -4
  76. package/src/components/icon/utils/svgs/chevron-left.svg +0 -3
  77. package/src/components/icon/utils/svgs/chevron-right-double.svg +0 -4
  78. package/src/components/icon/utils/svgs/chevron-right.svg +0 -3
  79. package/src/components/icon/utils/svgs/chevron-up.svg +0 -3
  80. package/src/components/icon/utils/svgs/clock.svg +0 -4
  81. package/src/components/icon/utils/svgs/close-outline.svg +0 -3
  82. package/src/components/icon/utils/svgs/close.svg +0 -3
  83. package/src/components/icon/utils/svgs/columns.svg +0 -3
  84. package/src/components/icon/utils/svgs/conclusion.svg +0 -17
  85. package/src/components/icon/utils/svgs/copy.svg +0 -16
  86. package/src/components/icon/utils/svgs/crosshair.svg +0 -15
  87. package/src/components/icon/utils/svgs/dash.svg +0 -3
  88. package/src/components/icon/utils/svgs/dashboard.svg +0 -3
  89. package/src/components/icon/utils/svgs/delete.svg +0 -4
  90. package/src/components/icon/utils/svgs/delta.svg +0 -3
  91. package/src/components/icon/utils/svgs/download.svg +0 -3
  92. package/src/components/icon/utils/svgs/drag.svg +0 -8
  93. package/src/components/icon/utils/svgs/drilldown.svg +0 -8
  94. package/src/components/icon/utils/svgs/edit.svg +0 -16
  95. package/src/components/icon/utils/svgs/envelope.svg +0 -3
  96. package/src/components/icon/utils/svgs/error.svg +0 -3
  97. package/src/components/icon/utils/svgs/export-document.svg +0 -16
  98. package/src/components/icon/utils/svgs/filter.svg +0 -6
  99. package/src/components/icon/utils/svgs/filters.svg +0 -4
  100. package/src/components/icon/utils/svgs/flag.svg +0 -3
  101. package/src/components/icon/utils/svgs/folder.svg +0 -15
  102. package/src/components/icon/utils/svgs/frequency.svg +0 -3
  103. package/src/components/icon/utils/svgs/fullscreen-off.svg +0 -3
  104. package/src/components/icon/utils/svgs/fullscreen-on.svg +0 -3
  105. package/src/components/icon/utils/svgs/graduate.svg +0 -3
  106. package/src/components/icon/utils/svgs/hamburger.svg +0 -5
  107. package/src/components/icon/utils/svgs/handshake.svg +0 -15
  108. package/src/components/icon/utils/svgs/heading-1.svg +0 -4
  109. package/src/components/icon/utils/svgs/heading-2.svg +0 -4
  110. package/src/components/icon/utils/svgs/heading.svg +0 -3
  111. package/src/components/icon/utils/svgs/home.svg +0 -3
  112. package/src/components/icon/utils/svgs/id-card.svg +0 -6
  113. package/src/components/icon/utils/svgs/id.svg +0 -4
  114. package/src/components/icon/utils/svgs/indent-left.svg +0 -7
  115. package/src/components/icon/utils/svgs/indent-right.svg +0 -7
  116. package/src/components/icon/utils/svgs/information.svg +0 -17
  117. package/src/components/icon/utils/svgs/italics.svg +0 -3
  118. package/src/components/icon/utils/svgs/itenary.svg +0 -11
  119. package/src/components/icon/utils/svgs/keyboard.svg +0 -11
  120. package/src/components/icon/utils/svgs/lightning.svg +0 -15
  121. package/src/components/icon/utils/svgs/link.svg +0 -4
  122. package/src/components/icon/utils/svgs/list-collapse.svg +0 -6
  123. package/src/components/icon/utils/svgs/list-expand.svg +0 -6
  124. package/src/components/icon/utils/svgs/location.svg +0 -4
  125. package/src/components/icon/utils/svgs/lock-locked.svg +0 -4
  126. package/src/components/icon/utils/svgs/lock-unlocked.svg +0 -4
  127. package/src/components/icon/utils/svgs/magnifying-glass.svg +0 -15
  128. package/src/components/icon/utils/svgs/map.svg +0 -3
  129. package/src/components/icon/utils/svgs/megaphone.svg +0 -3
  130. package/src/components/icon/utils/svgs/message.svg +0 -15
  131. package/src/components/icon/utils/svgs/microscope.svg +0 -3
  132. package/src/components/icon/utils/svgs/moon.svg +0 -3
  133. package/src/components/icon/utils/svgs/new-document.svg +0 -4
  134. package/src/components/icon/utils/svgs/news.svg +0 -15
  135. package/src/components/icon/utils/svgs/numbered-list.svg +0 -7
  136. package/src/components/icon/utils/svgs/open-link.svg +0 -16
  137. package/src/components/icon/utils/svgs/options.svg +0 -5
  138. package/src/components/icon/utils/svgs/page.svg +0 -7
  139. package/src/components/icon/utils/svgs/paper-plane.svg +0 -15
  140. package/src/components/icon/utils/svgs/paper.svg +0 -3
  141. package/src/components/icon/utils/svgs/pen-and-paper.svg +0 -4
  142. package/src/components/icon/utils/svgs/phase.svg +0 -15
  143. package/src/components/icon/utils/svgs/photo.svg +0 -4
  144. package/src/components/icon/utils/svgs/pie-chart.svg +0 -3
  145. package/src/components/icon/utils/svgs/plus.svg +0 -3
  146. package/src/components/icon/utils/svgs/point-left.svg +0 -3
  147. package/src/components/icon/utils/svgs/point-up.svg +0 -3
  148. package/src/components/icon/utils/svgs/popup.svg +0 -16
  149. package/src/components/icon/utils/svgs/question.svg +0 -17
  150. package/src/components/icon/utils/svgs/radio-tower.svg +0 -3
  151. package/src/components/icon/utils/svgs/recycle.svg +0 -3
  152. package/src/components/icon/utils/svgs/redo.svg +0 -3
  153. package/src/components/icon/utils/svgs/refresh.svg +0 -3
  154. package/src/components/icon/utils/svgs/route.svg +0 -3
  155. package/src/components/icon/utils/svgs/rows.svg +0 -3
  156. package/src/components/icon/utils/svgs/scope.svg +0 -7
  157. package/src/components/icon/utils/svgs/settings.svg +0 -16
  158. package/src/components/icon/utils/svgs/share.svg +0 -11
  159. package/src/components/icon/utils/svgs/sign-in.svg +0 -4
  160. package/src/components/icon/utils/svgs/sign-up.svg +0 -3
  161. package/src/components/icon/utils/svgs/sort-down.svg +0 -20
  162. package/src/components/icon/utils/svgs/sort-up.svg +0 -20
  163. package/src/components/icon/utils/svgs/sort.svg +0 -7
  164. package/src/components/icon/utils/svgs/square-solid.svg +0 -3
  165. package/src/components/icon/utils/svgs/star-solid.svg +0 -15
  166. package/src/components/icon/utils/svgs/star.svg +0 -15
  167. package/src/components/icon/utils/svgs/stop-watch.svg +0 -5
  168. package/src/components/icon/utils/svgs/structure.svg +0 -3
  169. package/src/components/icon/utils/svgs/sun.svg +0 -23
  170. package/src/components/icon/utils/svgs/table.svg +0 -3
  171. package/src/components/icon/utils/svgs/tag.svg +0 -15
  172. package/src/components/icon/utils/svgs/team.svg +0 -15
  173. package/src/components/icon/utils/svgs/telescope.svg +0 -15
  174. package/src/components/icon/utils/svgs/trash.svg +0 -6
  175. package/src/components/icon/utils/svgs/triangle-angle.svg +0 -3
  176. package/src/components/icon/utils/svgs/triangle-side.svg +0 -3
  177. package/src/components/icon/utils/svgs/underline.svg +0 -4
  178. package/src/components/icon/utils/svgs/undo.svg +0 -3
  179. package/src/components/icon/utils/svgs/user.svg +0 -16
  180. package/src/components/icon/utils/svgs/venn.svg +0 -3
  181. package/src/components/icon/utils/svgs/video.svg +0 -3
  182. package/src/components/icon/utils/svgs/visibility-off-alt.svg +0 -19
  183. package/src/components/icon/utils/svgs/visibility-off.svg +0 -3
  184. package/src/components/icon/utils/svgs/visibility-on.svg +0 -16
  185. package/src/components/icon/utils/svgs/warning.svg +0 -5
  186. package/src/components/index.ts +0 -38
  187. package/src/components/input/Input.vue +0 -87
  188. package/src/components/input/index.ts +0 -1
  189. package/src/components/load-spinner/LoadSpinner.vue +0 -13
  190. package/src/components/load-spinner/index.ts +0 -1
  191. package/src/components/modal/Modal.vue +0 -111
  192. package/src/components/modal/index.ts +0 -1
  193. package/src/components/nav-item/NavItem.vue +0 -62
  194. package/src/components/nav-item/index.ts +0 -1
  195. package/src/components/notification/Notification.vue +0 -34
  196. package/src/components/notification/index.ts +0 -1
  197. package/src/components/pagination/Pagination.vue +0 -72
  198. package/src/components/pagination/index.ts +0 -1
  199. package/src/components/pill/Pill.vue +0 -52
  200. package/src/components/pill/index.ts +0 -2
  201. package/src/components/pill/pill-types.ts +0 -2
  202. package/src/components/pop-confirm/PopConfirm.vue +0 -69
  203. package/src/components/pop-confirm/index.ts +0 -1
  204. package/src/components/pop-select/FooterButton.vue +0 -5
  205. package/src/components/pop-select/PopSelect.vue +0 -346
  206. package/src/components/pop-select/ResultFilters.vue +0 -31
  207. package/src/components/pop-select/enums.ts +0 -7
  208. package/src/components/pop-select/index.ts +0 -2
  209. package/src/components/pop-select/option.vue +0 -51
  210. package/src/components/popper/Popper.vue +0 -239
  211. package/src/components/popper/PopperContent.vue +0 -5
  212. package/src/components/popper/index.ts +0 -2
  213. package/src/components/popper/middleware.ts +0 -19
  214. package/src/components/screen-overlay/ScreenOverlay.vue +0 -53
  215. package/src/components/screen-overlay/index.ts +0 -1
  216. package/src/components/scrollbar/Bar.vue +0 -106
  217. package/src/components/scrollbar/ScrollBottomLoader.vue +0 -25
  218. package/src/components/scrollbar/Scrollbar.vue +0 -220
  219. package/src/components/scrollbar/enums.ts +0 -23
  220. package/src/components/scrollbar/index.ts +0 -2
  221. package/src/components/scrollbar/scrollbarWidth.ts +0 -26
  222. package/src/components/scrollbar/style.scss +0 -75
  223. package/src/components/scrollbar/types.ts +0 -32
  224. package/src/components/side-over/SideOver.vue +0 -87
  225. package/src/components/side-over/index.ts +0 -1
  226. package/src/components/status-select/StatusIndicator.vue +0 -78
  227. package/src/components/status-select/StatusSelect.vue +0 -62
  228. package/src/components/status-select/index.ts +0 -1
  229. package/src/components/switch/Switch.vue +0 -52
  230. package/src/components/switch/index.ts +0 -1
  231. package/src/components/tab/Tab.vue +0 -59
  232. package/src/components/tab/index.ts +0 -1
  233. package/src/components/tag/Tag.vue +0 -34
  234. package/src/components/tag/index.ts +0 -1
  235. package/src/components/text-editor/TextEditor.vue +0 -399
  236. package/src/components/text-editor/components/Dialog.vue +0 -11
  237. package/src/components/text-editor/components/FormattingButton.vue +0 -46
  238. package/src/components/text-editor/components/InsertLinkDialog.vue +0 -81
  239. package/src/components/text-editor/components/InsertTextDialog.vue +0 -36
  240. package/src/components/text-editor/components/index.ts +0 -3
  241. package/src/components/text-editor/index.ts +0 -1
  242. package/src/components/text-highlight/TextHighlight.vue +0 -113
  243. package/src/components/text-highlight/index.ts +0 -1
  244. package/src/components/text-viewer/TextViewer.vue +0 -5
  245. package/src/components/text-viewer/index.ts +0 -1
  246. package/src/components/tooltip/Tooltip.vue +0 -54
  247. package/src/components/tooltip/index.ts +0 -1
  248. package/src/components/types.ts +0 -221
  249. package/src/components/vertical-layout/RunningSection.vue +0 -54
  250. package/src/components/vertical-layout/VerticalLayout.vue +0 -37
  251. package/src/components/vertical-layout/index.ts +0 -3
  252. package/src/components/vertical-layout/types.ts +0 -2
  253. package/src/components/window-frame/WindowFrame.vue +0 -20
  254. package/src/components/window-frame/index.ts +0 -1
  255. package/src/composables/index.ts +0 -5
  256. package/src/composables/useClickOutside.ts +0 -48
  257. package/src/composables/useEscapeKey.ts +0 -12
  258. package/src/composables/useMounted.ts +0 -7
  259. package/src/composables/useNextFrame.ts +0 -10
  260. package/src/composables/useTrapFocus.ts +0 -61
  261. package/src/index.ts +0 -5
  262. package/src/main.css +0 -116
  263. package/src/utils/array.ts +0 -11
  264. package/src/utils/clamp.ts +0 -1
  265. package/src/utils/debounce.ts +0 -8
  266. package/src/utils/index.ts +0 -5
  267. package/src/utils/scrollIntoView.ts +0 -25
  268. package/src/utils/scrollbarWidth.ts +0 -27
  269. package/tsconfig.app.json +0 -4
  270. package/tsconfig.json +0 -11
  271. package/tsconfig.node.json +0 -21
  272. package/vite.config.ts +0 -27
@@ -1,239 +0,0 @@
1
- <script setup lang="ts">
2
- import type { Placement } from "@floating-ui/dom";
3
- import type { TPopperTrigger } from "../types";
4
- import { autoUpdate, computePosition, flip, offset, shift } from "@floating-ui/dom";
5
- import debounce from "debounce";
6
- import { nextTick, onMounted, onUnmounted, ref, useSlots, watch } from "vue";
7
- import { useClickOutside, useMounted } from "../../composables";
8
- import { sameWidthAsElementMiddleware, sameWidthAsTriggerMiddleware } from "./middleware";
9
-
10
- const props = withDefaults(
11
- defineProps<{
12
- closeDelay?: number;
13
- disabled?: boolean;
14
- offsetMain?: number;
15
- offsetCross?: number;
16
- openDelay?: number;
17
- placement?: Placement;
18
- popperWidthClass?: string;
19
- rootClass?: string | string[];
20
- sameWidthAsElement?: HTMLElement;
21
- sameWidthAsTrigger?: boolean;
22
- show?: boolean;
23
- trigger?: TPopperTrigger;
24
- triggerClass?: string | string[];
25
- useOverlay?: boolean;
26
- }>(),
27
- {
28
- closeDelay: 20,
29
- disabled: false,
30
- offsetMain: 0,
31
- offsetCross: 0,
32
- openDelay: 0,
33
- placement: "bottom-start",
34
- rootClass: "inline-flex",
35
- sameWidthAsTrigger: false,
36
- show: false,
37
- trigger: "hover",
38
- triggerClass: "flex",
39
- useOverlay: false,
40
- },
41
- );
42
-
43
- const emit = defineEmits(["open", "close", "updateClickOutside"]);
44
- const slots = useSlots();
45
-
46
- // eslint-disable-next-line ts/no-unsafe-function-type
47
- let cleanup: Function | null;
48
-
49
- const containerRef = ref<HTMLDivElement>();
50
- const popperRef = ref<HTMLDivElement>();
51
- const triggerRef = ref<HTMLDivElement>();
52
- const isOpen = ref(false);
53
-
54
- const { mounted } = useMounted();
55
- // eslint-disable-next-line ts/no-use-before-define
56
- const { disableClickOutside, enableClickOutside, updateClickOutside } = useClickOutside(() => closePopper());
57
-
58
- const update = async () => {
59
- if (triggerRef.value && popperRef.value) {
60
- const middleware = [
61
- offset({
62
- mainAxis: props.offsetMain,
63
- crossAxis: props.offsetCross,
64
- }),
65
- flip(),
66
- shift(),
67
- ];
68
-
69
- if (!props.popperWidthClass) {
70
- if (props.sameWidthAsTrigger) {
71
- middleware.push(sameWidthAsTriggerMiddleware);
72
- }
73
- else if (props.sameWidthAsElement) {
74
- middleware.push(sameWidthAsElementMiddleware(props.sameWidthAsElement));
75
- }
76
- }
77
-
78
- const position = await computePosition(triggerRef.value, popperRef.value, {
79
- placement: props.placement as Placement,
80
- middleware,
81
- });
82
-
83
- popperRef.value.style.left = `${position.x}px`;
84
- popperRef.value.style.top = `${position.y}px`;
85
- }
86
- };
87
-
88
- onMounted(() => {
89
- const children = slots.default && slots.default({ visible: isOpen.value });
90
-
91
- if (children && children.length > 1) {
92
- return console.error(`[Popper]: The <Popper> component expects only one child element at its root. You passed ${children.length} child nodes.`);
93
- }
94
-
95
- if (!props.popperWidthClass) {
96
- if (props.sameWidthAsElement && props.sameWidthAsTrigger) {
97
- console.warn(`[Popper]: The 'sameWidthAsElement' prop will be ignored because 'sameWidthAsTrigger' is set to true`);
98
- }
99
- }
100
- else if (props.sameWidthAsElement || props.sameWidthAsTrigger) {
101
- console.warn(`[Popper]: The props 'sameWidthAsElement' or 'sameWidthAsTrigger' will be ignored because the 'popperWidthClass' is set`);
102
- }
103
-
104
- if (props.trigger === "manual" && props.show) {
105
- // eslint-disable-next-line ts/no-use-before-define
106
- openPopperDebounce();
107
- }
108
- });
109
-
110
- onUnmounted(() => {
111
- // the openDelay might be triggered after the component is onUnmounted
112
- // eslint-disable-next-line ts/no-use-before-define
113
- openPopperDebounce.clear();
114
-
115
- if (cleanup) {
116
- cleanup();
117
- cleanup = null;
118
- }
119
- });
120
-
121
- const close = () => {
122
- if (!isOpen.value) return;
123
- isOpen.value = false;
124
- emit("close");
125
-
126
- !props.useOverlay && disableClickOutside();
127
-
128
- if (cleanup) {
129
- cleanup();
130
- cleanup = null;
131
- }
132
- };
133
-
134
- const open = async () => {
135
- if (isOpen.value) return;
136
- isOpen.value = true;
137
-
138
- await nextTick();
139
- emit("open", [triggerRef.value, popperRef.value]);
140
- cleanup = autoUpdate(triggerRef.value as HTMLElement, popperRef.value as HTMLElement, update);
141
-
142
- !props.useOverlay && popperRef.value && triggerRef.value && enableClickOutside([popperRef.value, triggerRef.value]);
143
- };
144
-
145
- const openPopperDebounce = debounce(open, props.openDelay);
146
- const closePopperDebounce = debounce(close, props.closeDelay);
147
-
148
- const openPopper = async () => {
149
- if (props.disabled) return;
150
- closePopperDebounce.clear();
151
- openPopperDebounce();
152
- };
153
-
154
- const closePopper = async () => {
155
- openPopperDebounce.clear();
156
- closePopperDebounce();
157
- };
158
-
159
- const onClick = (e: MouseEvent) => {
160
- if (props.trigger === "click") {
161
- e.preventDefault();
162
- e.stopPropagation();
163
- // eslint-disable-next-line ts/no-use-before-define
164
- togglePopper();
165
- }
166
- };
167
-
168
- const updateClickOutsideTargets = (targets: HTMLElement[]) => {
169
- if (popperRef.value && triggerRef.value) {
170
- updateClickOutside([popperRef.value, triggerRef.value, ...targets]);
171
- }
172
- };
173
-
174
- const togglePopper = () => (isOpen.value ? closePopper() : openPopper());
175
-
176
- /** If Popper is open, we automatically close it if if becomes disabled */
177
- watch(
178
- () => props.disabled,
179
- (newValue: boolean) => isOpen.value && newValue && close(),
180
- );
181
-
182
- /** If trigger is manual, we open/close popper when prop.show changes */
183
- watch(
184
- () => props.show,
185
- (newValue: boolean) => {
186
- if (props.trigger === "manual") {
187
- newValue ? openPopperDebounce() : closePopperDebounce();
188
- }
189
- else {
190
- console.warn(`[Popper]: The 'show' prop is only available when the 'trigger' prop is set to 'manual'`);
191
- }
192
- },
193
- );
194
-
195
- defineExpose({
196
- close,
197
- containerRef,
198
- open,
199
- updateClickOutsideTargets,
200
- });
201
- </script>
202
-
203
- <template>
204
- <div ref="containerRef" :class="rootClass" @mouseleave="trigger === 'hover' && closePopper()">
205
- <div
206
- ref="triggerRef"
207
- :class="triggerClass"
208
- @mouseover="trigger === 'hover' && openPopper()"
209
- @click="onClick"
210
- @focus="trigger === 'focus' && openPopper()"
211
- @keyup.esc="closePopper()"
212
- >
213
- <slot :visible="isOpen" />
214
- </div>
215
- <Teleport v-if="mounted" to="#poppers">
216
- <template v-if="!disabled && isOpen">
217
- <div
218
- v-if="useOverlay && trigger !== 'hover' && trigger !== 'manual'"
219
- class="pointer-events-auto absolute w-screen h-screen top-0 left-0 bg-transparent"
220
- @click="closePopper()"
221
- >
222
- <div v-show="!disabled && isOpen" ref="popperRef" class="absolute" :class="popperWidthClass">
223
- <slot name="content" :close="close" :is-open="isOpen" />
224
- </div>
225
- </div>
226
- <div
227
- v-else
228
- ref="popperRef"
229
- class="absolute"
230
- :class="popperWidthClass"
231
- @mouseover="trigger === 'hover' && openPopper()"
232
- @mouseleave="trigger === 'hover' && closePopper()"
233
- >
234
- <slot name="content" :close="close" :is-open="isOpen" />
235
- </div>
236
- </template>
237
- </Teleport>
238
- </div>
239
- </template>
@@ -1,5 +0,0 @@
1
- <template>
2
- <div class="pointer-events-auto rounded-lg overflow-hidden border border-default bg-primary shadow-sm">
3
- <slot />
4
- </div>
5
- </template>
@@ -1,2 +0,0 @@
1
- export { default as BPopper } from "./Popper.vue";
2
- export { default as BPopperContent } from "./PopperContent.vue";
@@ -1,19 +0,0 @@
1
- import { size } from "@floating-ui/dom";
2
-
3
- export const sameWidthAsTriggerMiddleware = size({
4
- apply({ rects, elements }) {
5
- Object.assign(elements.floating.style, {
6
- width: `${rects.reference.width}px`,
7
- });
8
- },
9
- });
10
-
11
- export const sameWidthAsElementMiddleware = (element: HTMLElement) => {
12
- return size({
13
- apply({ elements }) {
14
- Object.assign(elements.floating.style, {
15
- width: `${element.offsetWidth}px`,
16
- });
17
- },
18
- });
19
- };
@@ -1,53 +0,0 @@
1
- <script setup lang="ts">
2
- import type { TOverlayType } from "../types";
3
- import { onBeforeMount, reactive, ref } from "vue";
4
-
5
- const props = withDefaults(
6
- defineProps<{
7
- show?: boolean;
8
- type?: TOverlayType;
9
- }>(),
10
- {
11
- show: false,
12
- type: "default",
13
- },
14
- );
15
-
16
- const emit = defineEmits(["click", "close"]);
17
-
18
- const classes = ref("");
19
- const styles = reactive({ backdropFilter: "" });
20
-
21
- onBeforeMount(() => {
22
- if (props.type === "default") {
23
- classes.value = "bg-black/25 dark:bg-black/50";
24
- styles.backdropFilter = "";
25
- }
26
- else if (props.type === "blurred") {
27
- classes.value = "bg-black/25";
28
- styles.backdropFilter = "blur(3px)";
29
- }
30
- });
31
- </script>
32
-
33
- <template>
34
- <transition
35
- enter-active-class="transform transition ease-in-out duration-200"
36
- enter-from-class="opacity-0"
37
- enter-to-class=""
38
- leave-active-class="transform transition ease-in-out duration-500"
39
- leave-class="translate-y-0 opacity-100"
40
- leave-to-class="opacity-0"
41
- @after-leave="emit('close')"
42
- >
43
- <div
44
- v-show="show"
45
- class="z-40 fixed w-screen h-screen top-0 left-0 flex items-start justify-center pointer-events-auto"
46
- :class="classes"
47
- :style="styles"
48
- @mousedown.self="emit('click')"
49
- >
50
- <slot />
51
- </div>
52
- </transition>
53
- </template>
@@ -1 +0,0 @@
1
- export { default as BScreenOverlay } from "./ScreenOverlay.vue";
@@ -1,106 +0,0 @@
1
- <script setup lang="ts">
2
- import type { ThumbDragEvent } from "./types";
3
- import { ref } from "vue";
4
- import { horizontalProperties, verticalProperties } from "./enums";
5
-
6
- const props = defineProps({
7
- vertical: Boolean,
8
- size: String,
9
- move: Number,
10
- });
11
-
12
- const emit = defineEmits(["update"]);
13
-
14
- const scrollbarRef = ref<HTMLDivElement>();
15
- const thumbRef = ref<HTMLDivElement>();
16
- const dragging = ref(false);
17
- const bar = props.vertical ? verticalProperties : horizontalProperties;
18
- const position = ref(0);
19
-
20
- const onDocumentMouseMove = (event: MouseEvent) => {
21
- if (!dragging.value) return;
22
-
23
- const prevPage = position.value;
24
- if (!prevPage) return;
25
-
26
- const rect = scrollbarRef.value!.getBoundingClientRect();
27
- if (rect) {
28
- const offset = ((rect[bar.direction as keyof DOMRect] as number || 0) - (event[bar.client as keyof MouseEvent] as number || 0)) * -1;
29
- const thumbClickPosition = thumbRef.value && typeof thumbRef.value[bar.offset as keyof HTMLDivElement] === "number"
30
- ? (thumbRef.value[bar.offset as keyof HTMLDivElement] as number) - prevPage
31
- : 0;
32
- const scrollbarOffset = scrollbarRef.value ? Number(scrollbarRef.value[bar.offset as keyof HTMLDivElement]) : 0;
33
- const thumbPositionPercentage = scrollbarOffset ? ((offset - thumbClickPosition) * 100) / scrollbarOffset : 0;
34
-
35
- emit("update", {
36
- scrollReference: bar.scroll,
37
- positionPercentage: thumbPositionPercentage,
38
- scrollSize: bar.scrollSize,
39
- } as unknown as ThumbDragEvent);
40
- }
41
- };
42
-
43
- const onDocumentMouseUp = () => {
44
- dragging.value = false;
45
- position.value = 0;
46
- document.removeEventListener("mousemove", onDocumentMouseMove);
47
- document.onselectstart = null;
48
- };
49
-
50
- const startDrag = (event: MouseEvent) => {
51
- event.stopImmediatePropagation();
52
- dragging.value = true;
53
- document.addEventListener("mousemove", onDocumentMouseMove);
54
- document.addEventListener("mouseup", onDocumentMouseUp);
55
- document.onselectstart = () => false;
56
- };
57
-
58
- const onThumbClick = (event: MouseEvent) => {
59
- // prevent click event of right button
60
- if (event.ctrlKey || event.button === 2) return;
61
- startDrag(event);
62
-
63
- if (event.currentTarget) {
64
-
65
- const offset: number = (event.currentTarget as HTMLDivElement)[bar.offset as keyof HTMLDivElement] as number;
66
- const axis: number = event[bar.client as keyof MouseEvent] as number;
67
- const rect: DOMRect = (event.currentTarget as HTMLDivElement).getBoundingClientRect();
68
- const side = rect[bar.direction as keyof DOMRect] as unknown as number;
69
- position.value = offset - (axis - side);
70
- }
71
- };
72
-
73
- const onTrackClick = (event: MouseEvent) => {
74
- const rect = (event.target as HTMLDivElement).getBoundingClientRect();
75
- if (rect) {
76
- const rectDirection = rect[bar.direction as keyof DOMRect];
77
- const eventClient = event[bar.client as keyof MouseEvent];
78
- const offset = Math.abs((rectDirection ? Number(rectDirection) : 0) - (eventClient ? Number(eventClient) : 0));
79
- const thumbHalf = thumbRef.value![bar.offset as keyof HTMLDivElement] as number / 2;
80
- const scrollbarOffset = scrollbarRef.value ? Number(scrollbarRef.value[bar.offset as keyof HTMLDivElement]) : 0;
81
- const thumbPositionPercentage = scrollbarOffset ? ((offset - thumbHalf) * 100) / scrollbarOffset : 0;
82
-
83
- emit("update", {
84
- scrollReference: bar.scroll,
85
- positionPercentage: thumbPositionPercentage,
86
- scrollSize: bar.scrollSize,
87
- } as unknown as ThumbDragEvent);
88
- }
89
- };
90
-
91
- const renderThumbStyle = () => {
92
- const translate = `translate${bar.axis}(${props.move}%)`;
93
- return {
94
- [bar.size]: props.size,
95
- transform: translate,
96
- msTransform: translate,
97
- webkitTransform: translate,
98
- };
99
- };
100
- </script>
101
-
102
- <template>
103
- <div ref="scrollbarRef" :class="`scrollbar__bar is-${bar.key}`" @click.stop.prevent @mousedown.stop.prevent="onTrackClick">
104
- <div ref="thumbRef" :style="renderThumbStyle()" class="scrollbar__thumb" @click.stop.prevent @mousedown.stop.prevent="onThumbClick" />
105
- </div>
106
- </template>
@@ -1,25 +0,0 @@
1
- <script setup lang="ts">
2
- import { onMounted, onUnmounted, ref } from "vue";
3
- import { BLoadSpinner } from "../";
4
-
5
- const emit = defineEmits(["intersect"]);
6
- const triggerRef = ref<HTMLDivElement>();
7
- const observer = ref<IntersectionObserver | null>(null);
8
-
9
- onMounted(() => {
10
- observer.value = new IntersectionObserver(
11
- ([e]) => e.isIntersecting && emit("intersect"),
12
- { threshold: 0.01 },
13
- );
14
- observer.value.observe(triggerRef.value!);
15
- });
16
-
17
- onUnmounted(() => observer.value && observer.value.disconnect());
18
- </script>
19
-
20
- <template>
21
- <div ref="triggerRef" class="w-full h-16 flex items-center justify-center bg-white">
22
- <slot v-if="$slots.default" />
23
- <BLoadSpinner v-else class="w-6 h-6 text-granite-grey" />
24
- </div>
25
- </template>
@@ -1,220 +0,0 @@
1
- <script setup lang="ts">
2
- import type { ScrollIntersectionEvent, ScrollTrigger, ThumbDragEvent } from "./types";
3
- import { nextTick, onBeforeUnmount, onMounted, reactive, ref } from "vue";
4
- import Bar from "./Bar.vue";
5
- import { scrollbarWidth } from "./scrollbarWidth.ts";
6
- import "./style.scss";
7
-
8
- const props = withDefaults(
9
- defineProps<{
10
- disableX?: boolean;
11
- disableY?: boolean;
12
- wrapClass?: string;
13
- viewClass?: string;
14
- viewHeightClass?: string;
15
- noresize?: boolean;
16
- show?: boolean;
17
- tag?: string;
18
- triggers?: ScrollTrigger[];
19
- windowResize?: boolean;
20
- }>(),
21
- {
22
- disableX: false,
23
- disableY: false,
24
- wrapClass: "",
25
- viewClass: "h-full",
26
- viewHeightClass: "h-full",
27
- noresize: false,
28
- show: false,
29
- tag: "div",
30
- windowResize: false,
31
- },
32
- );
33
-
34
- const emit = defineEmits<{
35
- intersect: [ScrollIntersectionEvent];
36
- scroll: [value: number];
37
- scrollXActive: [value: boolean];
38
- scrollYActive: [value: boolean];
39
- }>();
40
-
41
- let mutationObserver: MutationObserver;
42
-
43
- const gutterWidth = ref(scrollbarWidth());
44
- const moveX = ref(0);
45
- const moveY = ref(0);
46
- const previousY = ref(0);
47
- const sizeHeight = ref("0");
48
- const sizeWidth = ref("0");
49
- const wrapStyle = reactive({
50
- marginRight: "",
51
- marginBottom: "",
52
- });
53
- const cachedSizePercentages = { height: 100, width: 100 };
54
-
55
- const wrapClasses = ["scrollbar__wrap"];
56
- !gutterWidth.value && wrapClasses.push("scrollbar__wrap--hidden-default");
57
- props.wrapClass && wrapClasses.push(props.wrapClass);
58
-
59
- const wrapRef = ref();
60
- const contentRef = ref();
61
-
62
- const onScroll = () => {
63
- moveY.value = (wrapRef.value.scrollTop * 100) / wrapRef.value.clientHeight;
64
- moveX.value = (wrapRef.value.scrollLeft * 100) / wrapRef.value.clientWidth;
65
- emit("scroll", wrapRef.value.scrollTop);
66
-
67
- const thumbBottomY = wrapRef.value.scrollTop + wrapRef.value.clientHeight;
68
- const scrollBottom = wrapRef.value.scrollHeight;
69
-
70
- if (previousY.value > 0 && wrapRef.value.scrollTop === 0) {
71
- emit("intersect", { edge: "top", hit: true });
72
- }
73
- else if (previousY.value === 0 && wrapRef.value.scrollTop > 0) {
74
- emit("intersect", { edge: "top", hit: false });
75
- }
76
- else if (previousY.value + wrapRef.value.clientHeight < scrollBottom && thumbBottomY === scrollBottom) {
77
- emit("intersect", { edge: "bottom", hit: true });
78
- }
79
- else if (previousY.value + wrapRef.value.clientHeight === scrollBottom && thumbBottomY < scrollBottom) {
80
- emit("intersect", { edge: "bottom", hit: false });
81
- }
82
-
83
- if (props.triggers) {
84
- for (const trigger of props.triggers) {
85
- if (previousY.value < trigger.px && wrapRef.value.scrollTop >= trigger.px) {
86
- trigger.callback(trigger, "down");
87
- }
88
- else if (previousY.value > trigger.px && wrapRef.value.scrollTop <= trigger.px) {
89
- trigger.callback(trigger, "up");
90
- }
91
- }
92
- }
93
-
94
- previousY.value = wrapRef.value.scrollTop;
95
- };
96
-
97
- const updateSizePercentages = () => {
98
- return {
99
- heightPercentage: (wrapRef.value.clientHeight * 100) / wrapRef.value.scrollHeight,
100
- widthPercentage: (wrapRef.value.clientWidth * 100) / wrapRef.value.scrollWidth,
101
- };
102
- };
103
-
104
- const update = async () => {
105
- if (!wrapRef.value) return;
106
-
107
- await nextTick();
108
-
109
- const { heightPercentage, widthPercentage } = updateSizePercentages();
110
-
111
- if (!heightPercentage && !widthPercentage) return;
112
-
113
- if (!props.disableX) {
114
- if (cachedSizePercentages.width === 100 && widthPercentage < 100) {
115
- emit("scrollXActive", true);
116
- }
117
- else if (widthPercentage === 100 && cachedSizePercentages.width < 100) {
118
- emit("scrollXActive", false);
119
- }
120
-
121
- if (widthPercentage === 100) {
122
- wrapStyle.marginBottom = `0px`;
123
- }
124
- else {
125
- if (gutterWidth.value) {
126
- wrapStyle.marginBottom = `-${gutterWidth.value}px`;
127
- }
128
- }
129
- cachedSizePercentages.width = widthPercentage;
130
- sizeWidth.value = widthPercentage < 100 ? `${widthPercentage}%` : "";
131
- }
132
-
133
- if (!props.disableY) {
134
- if (cachedSizePercentages.height === 100 && heightPercentage < 100) {
135
- emit("scrollYActive", true);
136
- }
137
- else if (heightPercentage === 100 && cachedSizePercentages.height < 100) {
138
- emit("scrollYActive", false);
139
- }
140
-
141
- if (heightPercentage === 100) {
142
- wrapStyle.marginRight = `0px`;
143
- }
144
- else {
145
- if (gutterWidth.value) {
146
- wrapStyle.marginRight = `-${gutterWidth.value}px`;
147
- }
148
- }
149
- cachedSizePercentages.height = heightPercentage;
150
- sizeHeight.value = heightPercentage < 100 ? `${heightPercentage}%` : "";
151
- }
152
-
153
- onScroll();
154
- };
155
-
156
- onMounted(async () => {
157
- await nextTick(update);
158
-
159
- if (cachedSizePercentages.height === 100) {
160
- emit("intersect", { edge: "top", hit: true });
161
- }
162
-
163
- props.windowResize && window.addEventListener("resize", update);
164
- if (!props.noresize) {
165
- mutationObserver = new MutationObserver(update);
166
- mutationObserver.observe(contentRef.value, {
167
- childList: true,
168
- subtree: true,
169
- });
170
- }
171
- });
172
-
173
- onBeforeUnmount(() => {
174
- !props.noresize && mutationObserver.disconnect();
175
- props.windowResize && window.removeEventListener("resize", update);
176
- });
177
-
178
- const onBarUpdate = (event: ThumbDragEvent) => {
179
- wrapRef.value[event.scrollReference] = (event.positionPercentage * wrapRef.value[event.scrollSize]) / 100;
180
- };
181
-
182
- const scrollToPercentage = (axis: "x" | "y", percentage: number) => {
183
- if (axis === "x") {
184
- wrapRef.value.scrollTo({ left: (wrapRef.value.scrollWidth * percentage) / 100, behavior: "smooth" });
185
- }
186
- else {
187
- wrapRef.value.scrollTo({ top: (wrapRef.value.scrollHeight * percentage) / 100, behavior: "smooth" });
188
- }
189
- onScroll();
190
- };
191
-
192
- const jumpToPercentage = (axis: "x" | "y", percentage: number) => {
193
- if (axis === "x") {
194
- wrapRef.value.scrollLeft = (wrapRef.value.scrollWidth * percentage) / 100;
195
- }
196
- else {
197
- wrapRef.value.scrollTop = (wrapRef.value.scrollHeight * percentage) / 100;
198
- }
199
- onScroll();
200
- };
201
-
202
- const reset = () => {
203
- wrapRef.value.scrollTop = 0;
204
- onScroll();
205
- };
206
-
207
- defineExpose({ handleScroll: onScroll, reset, jumpToPercentage, scrollToPercentage, update });
208
- </script>
209
-
210
- <template>
211
- <main class="scrollbar" :class="[viewHeightClass, { show }]">
212
- <div id="wrapRef" ref="wrapRef" :class="[wrapClasses]" :style="wrapStyle" @scroll="onScroll">
213
- <component :is="props.tag" ref="contentRef" class="scrollbar__view" :class="[viewClass]">
214
- <slot />
215
- </component>
216
- </div>
217
- <Bar v-if="!disableX" :move="moveX" :size="sizeWidth" @update="onBarUpdate" />
218
- <Bar v-if="!disableY" :move="moveY" :size="sizeHeight" vertical @update="onBarUpdate" />
219
- </main>
220
- </template>