@leavepulse/ui 0.31.1 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{LpDropzone-DVDC-ABU.css → LpDropzone-BBoWvi-J.css} +12 -12
- package/dist/assets/{LpImageEditor-DqP5JKCy.css → LpImageEditor-BsSwej47.css} +6 -6
- package/dist/chunks/{LpAddressInput-BDkp3-Bp.js → LpAddressInput-C35TsJXt.js} +19 -14
- package/dist/chunks/{LpAppShell-Chz8Vbtu.js → LpAppShell-lVvpENMH.js} +18 -13
- package/dist/chunks/{LpBreadcrumbs-5uvViCXi.js → LpBreadcrumbs-p4jHe_V-.js} +9 -7
- package/dist/chunks/{LpCalendar-B7ZL0ty3.js → LpCalendar-B7Ko5RdR.js} +12 -7
- package/dist/chunks/{LpCard-D0M2ZCnB.js → LpCard-1SeUYPBT.js} +36 -9
- package/dist/chunks/{LpCheckbox-BO0zuuPh.js → LpCheckbox-CVccKYaH.js} +9 -4
- package/dist/chunks/{LpCodeBlock-BWX1KZwk.js → LpCodeBlock-Bo0B4TFR.js} +37 -32
- package/dist/chunks/{LpDatePicker-dY2q4dr4.js → LpDatePicker-6JFXllj5.js} +1 -1
- package/dist/chunks/{LpDisclosure-B4kVAWfg.js → LpDisclosure-y7wDBgLa.js} +11 -6
- package/dist/chunks/{LpEmptyState-BV3q7Qyi.js → LpEmptyState-Dsdqz1Wj.js} +13 -5
- package/dist/chunks/{LpFileTree-DfFqY__1.js → LpFileTree-C-NFRT0H.js} +19 -14
- package/dist/chunks/{LpFileTreeNode-COchUMNn.js → LpFileTreeNode-DNJUJiiB.js} +13 -6
- package/dist/chunks/{LpFormField-fV_2ZdCk.js → LpFormField-CazBc2-a.js} +14 -9
- package/dist/chunks/{LpInput-Bt4J71xn.js → LpInput-9EXWUM9B.js} +1 -1
- package/dist/chunks/{LpLightbox-Ci35Y_xP.js → LpLightbox-oLqyjOln.js} +30 -7
- package/dist/chunks/{LpLink-BHZ1CLlF.js → LpLink-DCND-zyu.js} +16 -9
- package/dist/chunks/{LpLogViewer-TSRyt3t9.js → LpLogViewer-y53ZqSVq.js} +20 -10
- package/dist/chunks/{LpMapPicker-CXvoTrAe.js → LpMapPicker-ul4oYno6.js} +14 -9
- package/dist/chunks/LpMediaGallery-Cid7PGYx.js +214 -0
- package/dist/chunks/{LpNotificationBell-gdvQY89m.js → LpNotificationBell-lHePf89W.js} +1 -1
- package/dist/chunks/{LpNumberField-NPE8Bumx.js → LpNumberField-CWuX08iX.js} +12 -5
- package/dist/chunks/{LpOtpInput-DqaT0Z75.js → LpOtpInput-y2v-pmiN.js} +11 -6
- package/dist/chunks/{LpPagination-CeGuNe_q.js → LpPagination-5FxjmmB5.js} +21 -19
- package/dist/chunks/{LpPasswordInput-BqMAc5HA.js → LpPasswordInput--sjYCkLS.js} +1 -1
- package/dist/chunks/{LpPhoneInput-NXXjciJJ.js → LpPhoneInput-BDSKVl_z.js} +16 -9
- package/dist/chunks/{LpPie-BL1vTDSM.js → LpPie-c2-q4DJu.js} +14 -8
- package/dist/chunks/{LpRadio-CL-pI0_O.js → LpRadio-B5AfqTpZ.js} +13 -5
- package/dist/chunks/{LpRadioGroup-B4yDTmi6.js → LpRadioGroup-xPIuVDO_.js} +12 -5
- package/dist/chunks/{LpSegmented-BmpanyAo.js → LpSegmented-fV0Sk92p.js} +16 -6
- package/dist/chunks/{LpSidebar-BiWM_lDB.js → LpSidebar-DcYavim2.js} +2 -2
- package/dist/chunks/{LpSidebarNav-CsgeuGAu.js → LpSidebarNav-CqwvT4H8.js} +21 -16
- package/dist/chunks/{LpSlider-B1SF3pRV.js → LpSlider-BwNIBkAK.js} +12 -5
- package/dist/chunks/{LpStat-CDanpzU0.js → LpStat-CQaW8R--.js} +23 -18
- package/dist/chunks/{LpStepper-Wtl-6nUh.js → LpStepper-Bk-XaQYU.js} +15 -10
- package/dist/chunks/{LpSwitch-v6fnccSM.js → LpSwitch-xgnRU2k0.js} +12 -5
- package/dist/chunks/{LpTextarea-BMIOfw5l.js → LpTextarea-t7F6gv8E.js} +1 -1
- package/dist/chunks/{LpUptimeBar-DcQ8HikG.js → LpUptimeBar-DvAMno0S.js} +26 -21
- package/dist/component-names.d.ts +1 -1
- package/dist/components/LpAddressInput.vue.d.ts +34 -17
- package/dist/components/LpAddressInput.vue.js +1 -1
- package/dist/components/LpAppShell.vue.d.ts +65 -31
- package/dist/components/LpAppShell.vue.js +1 -1
- package/dist/components/LpBreadcrumbs.vue.d.ts +12 -6
- package/dist/components/LpBreadcrumbs.vue.js +1 -1
- package/dist/components/LpCalendar.vue.d.ts +15 -6
- package/dist/components/LpCalendar.vue.js +1 -1
- package/dist/components/LpCard.vue.d.ts +26 -0
- package/dist/components/LpCard.vue.js +1 -1
- package/dist/components/LpChart.vue.d.ts +54 -12
- package/dist/components/LpChart.vue.js +15 -9
- package/dist/components/LpCheckbox.vue.d.ts +16 -12
- package/dist/components/LpCheckbox.vue.js +1 -1
- package/dist/components/LpCodeBlock.vue.d.ts +25 -6
- package/dist/components/LpCodeBlock.vue.js +1 -1
- package/dist/components/LpDatePicker.vue.js +1 -1
- package/dist/components/LpDisclosure.vue.d.ts +24 -14
- package/dist/components/LpDisclosure.vue.js +1 -1
- package/dist/components/LpDropzone.vue.d.ts +38 -14
- package/dist/components/LpDropzone.vue.js +17 -11
- package/dist/components/LpEmptyState.vue.d.ts +15 -10
- package/dist/components/LpEmptyState.vue.js +1 -1
- package/dist/components/LpFileTree.vue.d.ts +51 -31
- package/dist/components/LpFileTree.vue.js +1 -1
- package/dist/components/LpFileTreeNode.vue.d.ts +31 -16
- package/dist/components/LpFileTreeNode.vue.js +1 -1
- package/dist/components/LpFormField.vue.d.ts +14 -13
- package/dist/components/LpFormField.vue.js +1 -1
- package/dist/components/LpImageEditor.vue.d.ts +33 -10
- package/dist/components/LpImageEditor.vue.js +13 -7
- package/dist/components/LpInput.vue.js +1 -1
- package/dist/components/LpLightbox.vue.js +1 -1
- package/dist/components/LpLink.vue.d.ts +46 -11
- package/dist/components/LpLink.vue.js +1 -1
- package/dist/components/LpLogViewer.vue.d.ts +63 -6
- package/dist/components/LpLogViewer.vue.js +1 -1
- package/dist/components/LpMapPicker.vue.d.ts +25 -10
- package/dist/components/LpMapPicker.vue.js +1 -1
- package/dist/components/LpMediaGallery.vue.d.ts +80 -0
- package/dist/components/LpMediaGallery.vue.js +4 -0
- package/dist/components/LpNotificationBell.vue.js +1 -1
- package/dist/components/LpNumberField.vue.d.ts +12 -6
- package/dist/components/LpNumberField.vue.js +1 -1
- package/dist/components/LpOtpInput.vue.d.ts +18 -6
- package/dist/components/LpOtpInput.vue.js +1 -1
- package/dist/components/LpPagination.vue.d.ts +16 -6
- package/dist/components/LpPagination.vue.js +1 -1
- package/dist/components/LpPasswordInput.vue.js +1 -1
- package/dist/components/LpPhoneInput.vue.d.ts +18 -6
- package/dist/components/LpPhoneInput.vue.js +1 -1
- package/dist/components/LpPie.vue.d.ts +96 -34
- package/dist/components/LpPie.vue.js +1 -1
- package/dist/components/LpRadio.vue.d.ts +10 -10
- package/dist/components/LpRadio.vue.js +1 -1
- package/dist/components/LpRadioGroup.vue.d.ts +12 -12
- package/dist/components/LpRadioGroup.vue.js +1 -1
- package/dist/components/LpSegmented.vue.d.ts +12 -6
- package/dist/components/LpSegmented.vue.js +1 -1
- package/dist/components/LpSidebar.vue.js +1 -1
- package/dist/components/LpSidebarNav.vue.d.ts +28 -17
- package/dist/components/LpSidebarNav.vue.js +1 -1
- package/dist/components/LpSlider.vue.d.ts +13 -6
- package/dist/components/LpSlider.vue.js +1 -1
- package/dist/components/LpStat.vue.d.ts +35 -11
- package/dist/components/LpStat.vue.js +1 -1
- package/dist/components/LpStepper.vue.d.ts +17 -5
- package/dist/components/LpStepper.vue.js +1 -1
- package/dist/components/LpSwitch.vue.d.ts +8 -6
- package/dist/components/LpSwitch.vue.js +1 -1
- package/dist/components/LpTable.vue.js +1 -1
- package/dist/components/LpTextarea.vue.js +1 -1
- package/dist/components/LpUptimeBar.vue.d.ts +21 -5
- package/dist/components/LpUptimeBar.vue.js +1 -1
- package/dist/components/lightbox.d.ts +10 -0
- package/dist/composables/useMergedClass.d.ts +20 -0
- package/dist/composables/useMergedClass.js +11 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +95 -89
- package/package.json +1 -3
- package/src/component-names.ts +1 -0
- package/src/components/LpAddressInput.vue +16 -1
- package/src/components/LpAppShell.vue +16 -1
- package/src/components/LpBreadcrumbs.vue +16 -1
- package/src/components/LpCalendar.vue +15 -1
- package/src/components/LpCard.vue +50 -5
- package/src/components/LpChart.vue +16 -1
- package/src/components/LpCheckbox.vue +16 -1
- package/src/components/LpCodeBlock.vue +16 -1
- package/src/components/LpDisclosure.vue +15 -1
- package/src/components/LpDropzone.vue +21 -6
- package/src/components/LpEmptyState.vue +21 -3
- package/src/components/LpFileTree.vue +16 -1
- package/src/components/LpFileTreeNode.vue +15 -1
- package/src/components/LpFormField.vue +16 -1
- package/src/components/LpImageEditor.vue +16 -1
- package/src/components/LpLightbox.vue +68 -3
- package/src/components/LpLink.vue +25 -9
- package/src/components/LpLogViewer.vue +20 -2
- package/src/components/LpMapPicker.vue +15 -1
- package/src/components/LpMediaGallery.vue +365 -0
- package/src/components/LpNumberField.vue +15 -1
- package/src/components/LpOtpInput.vue +15 -1
- package/src/components/LpPagination.vue +16 -1
- package/src/components/LpPhoneInput.vue +23 -8
- package/src/components/LpPie.vue +16 -1
- package/src/components/LpRadio.vue +20 -3
- package/src/components/LpRadioGroup.vue +15 -1
- package/src/components/LpSegmented.vue +21 -2
- package/src/components/LpSidebarNav.vue +16 -1
- package/src/components/LpSlider.vue +15 -1
- package/src/components/LpStat.vue +16 -1
- package/src/components/LpStepper.vue +16 -1
- package/src/components/LpSwitch.vue +15 -1
- package/src/components/LpUptimeBar.vue +16 -1
- package/src/components/lightbox.ts +10 -0
- package/src/composables/useMergedClass.ts +30 -0
- package/src/index.ts +2 -0
- package/src/tokens/tokens.css +29 -0
package/dist/index.js
CHANGED
|
@@ -1,90 +1,92 @@
|
|
|
1
1
|
import { _ } from "./chunks/LayoutCanvas-Dd20boUG.js";
|
|
2
|
-
import { _ as _2 } from "./chunks/LpAddressInput-
|
|
3
|
-
import { _ as _3 } from "./chunks/LpMapPicker-
|
|
2
|
+
import { _ as _2 } from "./chunks/LpAddressInput-C35TsJXt.js";
|
|
3
|
+
import { _ as _3 } from "./chunks/LpMapPicker-ul4oYno6.js";
|
|
4
4
|
import { OSM_TILES, createNominatimProvider, emptyAddress, formatAddress, project, tileUrl, unproject } from "./components/address.js";
|
|
5
5
|
import { _ as _4 } from "./chunks/LpActionBar-BlvtGB2P.js";
|
|
6
6
|
import { _ as _5 } from "./chunks/LpAlert-BAYHDSS1.js";
|
|
7
|
-
import { _ as _6 } from "./chunks/LpAppShell-
|
|
7
|
+
import { _ as _6 } from "./chunks/LpAppShell-lVvpENMH.js";
|
|
8
8
|
import { _ as _7 } from "./chunks/LpAutocomplete-DExlIZe_.js";
|
|
9
9
|
import { _ as _8 } from "./chunks/LpAvatar-D3l4nabg.js";
|
|
10
10
|
import { _ as _9 } from "./chunks/LpBadge-Fe0D1bYx.js";
|
|
11
|
-
import { _ as _10 } from "./chunks/LpBreadcrumbs-
|
|
11
|
+
import { _ as _10 } from "./chunks/LpBreadcrumbs-p4jHe_V-.js";
|
|
12
12
|
import { _ as _11 } from "./chunks/LpButton-5VXXCjwF.js";
|
|
13
|
-
import { _ as _12 } from "./chunks/LpCalendar-
|
|
14
|
-
import { _ as _13 } from "./chunks/LpCard-
|
|
13
|
+
import { _ as _12 } from "./chunks/LpCalendar-B7Ko5RdR.js";
|
|
14
|
+
import { _ as _13 } from "./chunks/LpCard-1SeUYPBT.js";
|
|
15
15
|
import { default as default2 } from "./components/LpChart.vue.js";
|
|
16
16
|
import { CHART_PALETTE, axisTicks, formatTick, niceScale, resolveSlices } from "./components/chart.js";
|
|
17
|
-
import { _ as _14 } from "./chunks/LpCheckbox-
|
|
18
|
-
import { _ as _15 } from "./chunks/LpCodeBlock-
|
|
17
|
+
import { _ as _14 } from "./chunks/LpCheckbox-CVccKYaH.js";
|
|
18
|
+
import { _ as _15 } from "./chunks/LpCodeBlock-Bo0B4TFR.js";
|
|
19
19
|
import { _ as _16 } from "./chunks/LpColorPicker-CFC6iaNK.js";
|
|
20
20
|
import { DEFAULT_SWATCHES, clampHsv, formatColor, hsvToHsl, hsvToRgb, isLight, normalizeHue, opaqueCss, parseColor, parseHex, rgbToHex, rgbToHsv } from "./components/color.js";
|
|
21
21
|
import { default as default3 } from "./components/LpCommandPalette.vue.js";
|
|
22
22
|
import { _ as _17 } from "./chunks/LpConfirmDialog-CjOGcj1e.js";
|
|
23
23
|
import { _ as _18 } from "./chunks/LpContextMenu-B6WBLleS.js";
|
|
24
|
-
import { _ as _19 } from "./chunks/LpDatePicker-
|
|
25
|
-
import { _ as _20 } from "./chunks/LpDisclosure-
|
|
24
|
+
import { _ as _19 } from "./chunks/LpDatePicker-6JFXllj5.js";
|
|
25
|
+
import { _ as _20 } from "./chunks/LpDisclosure-y7wDBgLa.js";
|
|
26
26
|
import { _ as _21 } from "./chunks/LpDivider-CUX46KR0.js";
|
|
27
27
|
import { _ as _22 } from "./chunks/LpDrawer-DAJN5rGK.js";
|
|
28
28
|
import { _ as _23 } from "./chunks/LpDropdownMenu-DJpoqRCb.js";
|
|
29
29
|
import { default as default4 } from "./components/LpDropzone.vue.js";
|
|
30
|
-
import { _ as _24 } from "./chunks/LpEmptyState-
|
|
31
|
-
import { _ as _25 } from "./chunks/LpFileTree-
|
|
30
|
+
import { _ as _24 } from "./chunks/LpEmptyState-Dsdqz1Wj.js";
|
|
31
|
+
import { _ as _25 } from "./chunks/LpFileTree-C-NFRT0H.js";
|
|
32
32
|
import { ancestorIds, checkStateOf, checkedCount, computeStats, fileIcon, formatModified, formatSize, sortNodes, subtreeIds, subtreeSize } from "./components/fileTree.js";
|
|
33
|
-
import { _ as _26 } from "./chunks/LpFormField-
|
|
33
|
+
import { _ as _26 } from "./chunks/LpFormField-CazBc2-a.js";
|
|
34
34
|
import { _ as _27 } from "./chunks/LpIcon-CCnX5_2j.js";
|
|
35
35
|
import { default as default5 } from "./components/LpImageEditor.vue.js";
|
|
36
36
|
import { _ as _28 } from "./chunks/LpInfraNode-Ds_8SZgN.js";
|
|
37
|
-
import { _ as _29 } from "./chunks/LpInput-
|
|
38
|
-
import { _ as _30 } from "./chunks/LpLightbox-
|
|
37
|
+
import { _ as _29 } from "./chunks/LpInput-9EXWUM9B.js";
|
|
38
|
+
import { _ as _30 } from "./chunks/LpLightbox-oLqyjOln.js";
|
|
39
39
|
import { fileNameOf } from "./components/lightbox.js";
|
|
40
|
-
import { _ as _31 } from "./chunks/LpLink-
|
|
41
|
-
import { _ as _32 } from "./chunks/LpLogViewer-
|
|
42
|
-
import { _ as _33 } from "./chunks/
|
|
43
|
-
import { _ as _34 } from "./chunks/
|
|
44
|
-
import { _ as _35 } from "./chunks/
|
|
45
|
-
import { _ as _36 } from "./chunks/
|
|
46
|
-
import { _ as _37 } from "./chunks/
|
|
47
|
-
import { _ as _38 } from "./chunks/
|
|
48
|
-
import { _ as _39 } from "./chunks/
|
|
49
|
-
import { _ as _40 } from "./chunks/
|
|
50
|
-
import { _ as _41 } from "./chunks/
|
|
40
|
+
import { _ as _31 } from "./chunks/LpLink-DCND-zyu.js";
|
|
41
|
+
import { _ as _32 } from "./chunks/LpLogViewer-y53ZqSVq.js";
|
|
42
|
+
import { _ as _33 } from "./chunks/LpMediaGallery-Cid7PGYx.js";
|
|
43
|
+
import { _ as _34 } from "./chunks/LpModal-D_o-56To.js";
|
|
44
|
+
import { _ as _35 } from "./chunks/LpNotificationBell-lHePf89W.js";
|
|
45
|
+
import { _ as _36 } from "./chunks/LpNumberField-CWuX08iX.js";
|
|
46
|
+
import { _ as _37 } from "./chunks/LpNumberFlow-amWYaeuA.js";
|
|
47
|
+
import { _ as _38 } from "./chunks/LpOtpInput-y2v-pmiN.js";
|
|
48
|
+
import { _ as _39 } from "./chunks/LpPagination-5FxjmmB5.js";
|
|
49
|
+
import { _ as _40 } from "./chunks/LpPasswordInput--sjYCkLS.js";
|
|
50
|
+
import { _ as _41 } from "./chunks/LpPie-c2-q4DJu.js";
|
|
51
|
+
import { _ as _42 } from "./chunks/LpPhoneInput-BDSKVl_z.js";
|
|
51
52
|
import { flagEmoji, loadCountries, matchCountryByValue } from "./components/countries.js";
|
|
52
|
-
import { _ as
|
|
53
|
-
import { _ as
|
|
54
|
-
import { _ as
|
|
55
|
-
import { _ as
|
|
56
|
-
import { _ as
|
|
57
|
-
import { _ as
|
|
58
|
-
import { _ as
|
|
59
|
-
import { _ as
|
|
60
|
-
import { _ as
|
|
61
|
-
import { _ as
|
|
62
|
-
import { _ as
|
|
53
|
+
import { _ as _43 } from "./chunks/LpPopover-8268UmlC.js";
|
|
54
|
+
import { _ as _44 } from "./chunks/LpProgress-Btq5W4Ut.js";
|
|
55
|
+
import { _ as _45 } from "./chunks/LpRadio-B5AfqTpZ.js";
|
|
56
|
+
import { _ as _46 } from "./chunks/LpRadioGroup-xPIuVDO_.js";
|
|
57
|
+
import { _ as _47 } from "./chunks/LpRollingText-CM5gkSeF.js";
|
|
58
|
+
import { _ as _48 } from "./chunks/LpScrollArea-D8xyKXcF.js";
|
|
59
|
+
import { _ as _49 } from "./chunks/LpSegmented-fV0Sk92p.js";
|
|
60
|
+
import { _ as _50 } from "./chunks/LpSection-aM6J_u51.js";
|
|
61
|
+
import { _ as _51 } from "./chunks/LpSelect-ANIVtrpM.js";
|
|
62
|
+
import { _ as _52 } from "./chunks/LpServiceNode-D8uJ8sGk.js";
|
|
63
|
+
import { _ as _53 } from "./chunks/LpShift-DXNsauQZ.js";
|
|
63
64
|
import { default as default6 } from "./components/LpShortcutsDialog.vue.js";
|
|
64
|
-
import { _ as
|
|
65
|
-
import { _ as
|
|
66
|
-
import { _ as
|
|
67
|
-
import { _ as
|
|
68
|
-
import { _ as
|
|
69
|
-
import { _ as
|
|
70
|
-
import { _ as
|
|
65
|
+
import { _ as _54 } from "./chunks/LpSidebar-DcYavim2.js";
|
|
66
|
+
import { _ as _55 } from "./chunks/LpSkeleton-CTI-vBgW.js";
|
|
67
|
+
import { _ as _56 } from "./chunks/LpSlider-BwNIBkAK.js";
|
|
68
|
+
import { _ as _57 } from "./chunks/LpSparkline-C6xQ2dwv.js";
|
|
69
|
+
import { _ as _58 } from "./chunks/LpStat-CQaW8R--.js";
|
|
70
|
+
import { _ as _59 } from "./chunks/LpStepper-Bk-XaQYU.js";
|
|
71
|
+
import { _ as _60 } from "./chunks/LpSwitch-xgnRU2k0.js";
|
|
71
72
|
import { default as default7 } from "./components/LpTable.vue.js";
|
|
72
|
-
import { _ as
|
|
73
|
-
import { _ as
|
|
74
|
-
import { _ as
|
|
73
|
+
import { _ as _61 } from "./chunks/LpTableOfContents-CjvxPMpU.js";
|
|
74
|
+
import { _ as _62 } from "./chunks/LpTabs-Cefe_lys.js";
|
|
75
|
+
import { _ as _63 } from "./chunks/LpTextarea-t7F6gv8E.js";
|
|
75
76
|
import { p as presets, a as parseTheme, s as serializeTheme } from "./chunks/LpThemeSwitcher-r1te9nB2.js";
|
|
76
|
-
import { D, _ as
|
|
77
|
-
import { _ as
|
|
78
|
-
import { _ as
|
|
79
|
-
import { _ as
|
|
80
|
-
import { _ as
|
|
81
|
-
import { _ as
|
|
77
|
+
import { D, _ as _64, N, T, b, c, d, e, f, g, i, l, h, j, n, r, t, k, m, u, v } from "./chunks/LpThemeSwitcher-r1te9nB2.js";
|
|
78
|
+
import { _ as _65 } from "./chunks/LpTilt-DuyKbpkA.js";
|
|
79
|
+
import { _ as _66 } from "./chunks/LpToaster-gDB1EaU3.js";
|
|
80
|
+
import { _ as _67 } from "./chunks/LpTooltip-hCLPAqMG.js";
|
|
81
|
+
import { _ as _68 } from "./chunks/LpTopologyCanvas-Cm1L39uL.js";
|
|
82
|
+
import { _ as _69 } from "./chunks/LpUptimeBar-DvAMno0S.js";
|
|
82
83
|
import { deserializeLayout, serializeLayout } from "./layout/tree.js";
|
|
83
84
|
import { addLeaf, addTab, countBlocks, countLeaves, makeLayout, moveLeaf, removeBlock, removeLeaf, reorderTab, resizeAt, setActiveTab } from "./layout/tree.js";
|
|
84
85
|
import { blockTitle, defineBlocks } from "./layout/registry.js";
|
|
85
86
|
import { useLayout } from "./layout/useLayout.js";
|
|
86
87
|
import { useClipboard } from "./composables/useClipboard.js";
|
|
87
88
|
import { appleModifierLabel, isAppleKeyboard, useHotkeys } from "./composables/useHotkeys.js";
|
|
89
|
+
import { mergeClass, useMergedAttrs, useMergedClass } from "./composables/useMergedClass.js";
|
|
88
90
|
import { useInputFilter } from "./composables/useInputFilter.js";
|
|
89
91
|
import { easeOut, easeTravel, easingToken, prefersReducedMotion } from "./composables/easing.js";
|
|
90
92
|
import { useReveal } from "./composables/useReveal.js";
|
|
@@ -165,44 +167,45 @@ export {
|
|
|
165
167
|
_31 as LpLink,
|
|
166
168
|
_32 as LpLogViewer,
|
|
167
169
|
_3 as LpMapPicker,
|
|
168
|
-
_33 as
|
|
169
|
-
_34 as
|
|
170
|
-
_35 as
|
|
171
|
-
_36 as
|
|
172
|
-
_37 as
|
|
173
|
-
_38 as
|
|
174
|
-
_39 as
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
_43 as
|
|
179
|
-
_44 as
|
|
180
|
-
_45 as
|
|
181
|
-
_46 as
|
|
182
|
-
_47 as
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
_51 as
|
|
187
|
-
_52 as
|
|
170
|
+
_33 as LpMediaGallery,
|
|
171
|
+
_34 as LpModal,
|
|
172
|
+
_35 as LpNotificationBell,
|
|
173
|
+
_36 as LpNumberField,
|
|
174
|
+
_37 as LpNumberFlow,
|
|
175
|
+
_38 as LpOtpInput,
|
|
176
|
+
_39 as LpPagination,
|
|
177
|
+
_40 as LpPasswordInput,
|
|
178
|
+
_42 as LpPhoneInput,
|
|
179
|
+
_41 as LpPie,
|
|
180
|
+
_43 as LpPopover,
|
|
181
|
+
_44 as LpProgress,
|
|
182
|
+
_45 as LpRadio,
|
|
183
|
+
_46 as LpRadioGroup,
|
|
184
|
+
_47 as LpRollingText,
|
|
185
|
+
_48 as LpScrollArea,
|
|
186
|
+
_50 as LpSection,
|
|
187
|
+
_49 as LpSegmented,
|
|
188
|
+
_51 as LpSelect,
|
|
189
|
+
_52 as LpServiceNode,
|
|
190
|
+
_53 as LpShift,
|
|
188
191
|
default6 as LpShortcutsDialog,
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
192
|
+
_54 as LpSidebar,
|
|
193
|
+
_55 as LpSkeleton,
|
|
194
|
+
_56 as LpSlider,
|
|
195
|
+
_57 as LpSparkline,
|
|
196
|
+
_58 as LpStat,
|
|
197
|
+
_59 as LpStepper,
|
|
198
|
+
_60 as LpSwitch,
|
|
196
199
|
default7 as LpTable,
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
200
|
+
_61 as LpTableOfContents,
|
|
201
|
+
_62 as LpTabs,
|
|
202
|
+
_63 as LpTextarea,
|
|
203
|
+
_64 as LpThemeSwitcher,
|
|
204
|
+
_65 as LpTilt,
|
|
205
|
+
_66 as LpToaster,
|
|
206
|
+
_67 as LpTooltip,
|
|
207
|
+
_68 as LpTopologyCanvas,
|
|
208
|
+
_69 as LpUptimeBar,
|
|
206
209
|
N as NO_BACKDROP_ATTR,
|
|
207
210
|
OSM_TILES,
|
|
208
211
|
T as THEME_COOKIE,
|
|
@@ -252,6 +255,7 @@ export {
|
|
|
252
255
|
loadCountries,
|
|
253
256
|
makeLayout,
|
|
254
257
|
matchCountryByValue,
|
|
258
|
+
mergeClass,
|
|
255
259
|
moveLeaf,
|
|
256
260
|
niceScale,
|
|
257
261
|
n as nord,
|
|
@@ -289,6 +293,8 @@ export {
|
|
|
289
293
|
useHotkeys,
|
|
290
294
|
useInputFilter,
|
|
291
295
|
useLayout,
|
|
296
|
+
useMergedAttrs,
|
|
297
|
+
useMergedClass,
|
|
292
298
|
useReveal,
|
|
293
299
|
useRovingFocus,
|
|
294
300
|
useSettled,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leavepulse/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.33.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "LeavePulse token-driven Vue component kit.",
|
|
6
6
|
"repository": {
|
|
@@ -61,7 +61,6 @@
|
|
|
61
61
|
"@vueuse/core": "^12.0.0 || ^13.0.0 || ^14.0.0",
|
|
62
62
|
"motion-v": "^2.2.0",
|
|
63
63
|
"reka-ui": "^2.9.0",
|
|
64
|
-
"tailwind-merge": "^3.0.0",
|
|
65
64
|
"tailwind-variants": "^3.0.0",
|
|
66
65
|
"tailwindcss": "^4.0.0",
|
|
67
66
|
"vue": "^3.5.0"
|
|
@@ -80,7 +79,6 @@
|
|
|
80
79
|
"motion-v": "^2.2.1",
|
|
81
80
|
"reka-ui": "^2.9.10",
|
|
82
81
|
"shiki": "^4.2.0",
|
|
83
|
-
"tailwind-merge": "^3.6.0",
|
|
84
82
|
"tailwind-variants": "^3.2.2",
|
|
85
83
|
"tailwindcss": "^4.2.4",
|
|
86
84
|
"typescript": "^5.6.3",
|
package/src/component-names.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// The consumer's `class` is merged into the root's own (below) rather than
|
|
3
|
+
// appended to it, so opt out of the automatic pass-through that would add it
|
|
4
|
+
// a second time, unmerged.
|
|
5
|
+
export default { inheritAttrs: false }
|
|
6
|
+
</script>
|
|
7
|
+
|
|
1
8
|
<script setup lang="ts">
|
|
2
9
|
/*
|
|
3
10
|
* Postal address form — street, optional second line, city, postcode and
|
|
@@ -33,6 +40,7 @@ import LpIcon from "./LpIcon.vue"
|
|
|
33
40
|
import LpInput from "./LpInput.vue"
|
|
34
41
|
import LpModal from "./LpModal.vue"
|
|
35
42
|
import LpSelect from "./LpSelect.vue"
|
|
43
|
+
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
36
44
|
|
|
37
45
|
const LpMapPicker = defineAsyncComponent(() => import("./LpMapPicker.vue"))
|
|
38
46
|
|
|
@@ -252,10 +260,17 @@ function confirmPoint() {
|
|
|
252
260
|
emit("pick", point.value)
|
|
253
261
|
mapOpen.value = false
|
|
254
262
|
}
|
|
263
|
+
|
|
264
|
+
// The group stacks its fields on a fixed gap that a tighter form has to close.
|
|
265
|
+
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
266
|
+
"flex flex-col gap-3",
|
|
267
|
+
)
|
|
255
268
|
</script>
|
|
256
269
|
|
|
257
270
|
<template>
|
|
258
|
-
<div
|
|
271
|
+
<div
|
|
272
|
+
:class="rootClass"
|
|
273
|
+
v-bind="rest">
|
|
259
274
|
<LpFormField :label="text.line">
|
|
260
275
|
<!-- Typing is the fast path and stands on its own; the map is one button
|
|
261
276
|
away for when an address is easier pointed at than spelled. -->
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// The consumer's `class` is merged into the root's own (below) rather than
|
|
3
|
+
// appended to it, so opt out of the automatic pass-through that would add it
|
|
4
|
+
// a second time, unmerged.
|
|
5
|
+
export default { inheritAttrs: false }
|
|
6
|
+
</script>
|
|
7
|
+
|
|
1
8
|
<script setup lang="ts">
|
|
2
9
|
/*
|
|
3
10
|
* Full application shell: a fixed-height (h-dvh) flex frame holding the side
|
|
@@ -31,6 +38,7 @@ import LpScrollArea from "./LpScrollArea.vue"
|
|
|
31
38
|
import LpShift from "./LpShift.vue"
|
|
32
39
|
import LpSidebar from "./LpSidebar.vue"
|
|
33
40
|
import type { SidebarItem, SidebarSection } from "./sidebar"
|
|
41
|
+
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
34
42
|
|
|
35
43
|
export type { SidebarItem, SidebarSection } from "./sidebar"
|
|
36
44
|
|
|
@@ -157,10 +165,17 @@ const burgerClass = computed(() => burgerHidden[props.mobileBreakpoint])
|
|
|
157
165
|
// Expose the burger trigger so a host can omit its own header entirely.
|
|
158
166
|
const _openDrawer = () => emit("update:open", true)
|
|
159
167
|
defineExpose({ openDrawer: _openDrawer })
|
|
168
|
+
|
|
169
|
+
// The shell claims the full viewport height, which is wrong when it is embedded in a page that already has a header of its own.
|
|
170
|
+
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
171
|
+
"flex h-dvh overflow-hidden bg-surface text-ink",
|
|
172
|
+
)
|
|
160
173
|
</script>
|
|
161
174
|
|
|
162
175
|
<template>
|
|
163
|
-
<div
|
|
176
|
+
<div
|
|
177
|
+
:class="rootClass"
|
|
178
|
+
v-bind="rest">
|
|
164
179
|
<LpSidebar
|
|
165
180
|
:model-value="modelValue"
|
|
166
181
|
:items="items"
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// The consumer's `class` is merged into the root's own (below) rather than
|
|
3
|
+
// appended to it, so opt out of the automatic pass-through that would add it
|
|
4
|
+
// a second time, unmerged.
|
|
5
|
+
export default { inheritAttrs: false }
|
|
6
|
+
</script>
|
|
7
|
+
|
|
1
8
|
<script setup lang="ts">
|
|
2
9
|
import type { Component } from "vue"
|
|
3
10
|
import LpIcon from "./LpIcon.vue"
|
|
11
|
+
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
4
12
|
|
|
5
13
|
export interface Crumb {
|
|
6
14
|
label: string
|
|
@@ -23,10 +31,17 @@ withDefaults(
|
|
|
23
31
|
{ as: "a" },
|
|
24
32
|
)
|
|
25
33
|
defineEmits<{ (e: "navigate", item: Crumb, index: number): void }>()
|
|
34
|
+
|
|
35
|
+
// The trail sets its own gap, which a dense header bar needs to reduce.
|
|
36
|
+
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
37
|
+
"flex items-center gap-1.5 text-sm",
|
|
38
|
+
)
|
|
26
39
|
</script>
|
|
27
40
|
|
|
28
41
|
<template>
|
|
29
|
-
<nav
|
|
42
|
+
<nav
|
|
43
|
+
:class="rootClass"
|
|
44
|
+
v-bind="rest" aria-label="Breadcrumb">
|
|
30
45
|
<template v-for="(item, i) in items" :key="i">
|
|
31
46
|
<LpIcon
|
|
32
47
|
v-if="i > 0"
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// The consumer's `class` is merged into the root's own (below) rather than
|
|
3
|
+
// appended to it, so opt out of the automatic pass-through that would add it
|
|
4
|
+
// a second time, unmerged.
|
|
5
|
+
export default { inheritAttrs: false }
|
|
6
|
+
</script>
|
|
7
|
+
|
|
1
8
|
<script setup lang="ts">
|
|
2
9
|
/*
|
|
3
10
|
* Inline month calendar (reka Calendar). The kit-facing model is an ISO date
|
|
@@ -23,6 +30,7 @@ import {
|
|
|
23
30
|
} from "reka-ui"
|
|
24
31
|
import { computed } from "vue"
|
|
25
32
|
import LpIcon from "./LpIcon.vue"
|
|
33
|
+
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
26
34
|
|
|
27
35
|
const props = withDefaults(
|
|
28
36
|
defineProps<{
|
|
@@ -68,6 +76,11 @@ function disabledFor(date: DateValue): boolean {
|
|
|
68
76
|
|
|
69
77
|
const navBtn =
|
|
70
78
|
"flex size-8 items-center justify-center rounded-control text-muted outline-none transition-[color,background-color,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] hover:bg-surface-soft hover:text-ink active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring"
|
|
79
|
+
|
|
80
|
+
// The calendar draws its own card frame, which has to give way when it is placed inside a popover that already has one.
|
|
81
|
+
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
82
|
+
"inline-block rounded-card border border-line bg-surface-raised p-3",
|
|
83
|
+
)
|
|
71
84
|
</script>
|
|
72
85
|
|
|
73
86
|
<template>
|
|
@@ -80,7 +93,8 @@ const navBtn =
|
|
|
80
93
|
:weekday-format="weekdayFormat"
|
|
81
94
|
:is-date-disabled="disabledFor"
|
|
82
95
|
fixed-weeks
|
|
83
|
-
class="
|
|
96
|
+
:class="rootClass"
|
|
97
|
+
v-bind="rest"
|
|
84
98
|
@update:model-value="onUpdate"
|
|
85
99
|
>
|
|
86
100
|
<CalendarHeader class="mb-2 flex items-center justify-between gap-2">
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
// Opt out of auto attr inheritance: the template has two root branches (menu /
|
|
3
3
|
// no-menu), so fallthrough class/attrs/events are bound explicitly onto the
|
|
4
|
-
// inner <div>
|
|
4
|
+
// inner <div> in both — keeping them on the card surface.
|
|
5
5
|
export default { inheritAttrs: false }
|
|
6
6
|
</script>
|
|
7
7
|
|
|
8
8
|
<script setup lang="ts">
|
|
9
9
|
import { tv, type VariantProps } from "tailwind-variants"
|
|
10
10
|
import { computed } from "vue"
|
|
11
|
+
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
11
12
|
import LpContextMenu, { type ContextMenuItemDef } from "./LpContextMenu.vue"
|
|
12
13
|
|
|
13
14
|
const card = tv({
|
|
@@ -35,6 +36,9 @@ const card = tv({
|
|
|
35
36
|
ghost: "border-transparent bg-transparent",
|
|
36
37
|
},
|
|
37
38
|
padded: { true: "p-5", false: "" },
|
|
39
|
+
// The stripe itself lives in .lp-card-accent (tokens.css), which composes
|
|
40
|
+
// it with the skin painter's shadows instead of overwriting them.
|
|
41
|
+
accent: { true: "lp-card-accent", false: "" },
|
|
38
42
|
// Lift on hover with a BRAND-tinted glow + brand border (a black drop-shadow
|
|
39
43
|
// was invisible on dark themes — it only showed on light). We write the glow
|
|
40
44
|
// through `--surface-panel-shadow`, the very variable the skin-painter feeds
|
|
@@ -45,6 +49,12 @@ const card = tv({
|
|
|
45
49
|
// (not `transform`), so the transition list MUST name `translate` explicitly
|
|
46
50
|
// or the lift snaps while the rest eases.
|
|
47
51
|
//
|
|
52
|
+
// `hover:shadow-*` sets box-shadow whole, which on an accented card dropped
|
|
53
|
+
// the stripe on hover — the card lit up and its colour went with it.
|
|
54
|
+
// .lp-card-accent is declared outside @layer, so it outranks the utility and
|
|
55
|
+
// keeps the stripe; the `--surface-panel-shadow` swap on the same line is
|
|
56
|
+
// what actually carries the glow there. See tokens.css.
|
|
57
|
+
//
|
|
48
58
|
// The glow reaches past the card, so a clipping ancestor (scroll area,
|
|
49
59
|
// dialog body) will slice it unless the list reserves room — see the
|
|
50
60
|
// `.lp-glow-room` helper in tokens.css, whose spread tokens describe exactly
|
|
@@ -68,12 +78,47 @@ const props = withDefaults(
|
|
|
68
78
|
menuItems?: ContextMenuItemDef[]
|
|
69
79
|
/** Element to render as. A card inside a <ul> has to be an `li` to be valid. */
|
|
70
80
|
as?: string
|
|
81
|
+
/**
|
|
82
|
+
* Colour of a stripe down the card's leading edge. ANY CSS colour — this is
|
|
83
|
+
* for sources that hand you an arbitrary value (a Discord role colour, a
|
|
84
|
+
* per-project hex out of a config), which is why it is a string and not a
|
|
85
|
+
* set of tonal variants. When the colour IS semantic, LpAlert's
|
|
86
|
+
* info/success/warning/danger say so in a way a raw hex cannot.
|
|
87
|
+
*
|
|
88
|
+
* The stripe costs no layout: content starts in the same place with and
|
|
89
|
+
* without it, and it rounds into `rounded-card` by itself.
|
|
90
|
+
*/
|
|
91
|
+
accent?: string
|
|
92
|
+
/** Width of the `accent` stripe. */
|
|
93
|
+
accentWidth?: string
|
|
71
94
|
}>(),
|
|
72
95
|
{ variant: "raised", padded: true, interactive: false, as: "div" },
|
|
73
96
|
)
|
|
74
97
|
|
|
75
|
-
|
|
76
|
-
|
|
98
|
+
// Merged rather than concatenated: binding the raw `$attrs` would otherwise put the
|
|
99
|
+
// consumer's `class` next to ours and leave the winner to stylesheet order —
|
|
100
|
+
// `class="p-1"` lost to the `p-5` of `padded`. useMergedAttrs merges it in and
|
|
101
|
+
// hands back the remaining attrs, so the class never arrives a second time.
|
|
102
|
+
const { class: classes, attrs: rest } = useMergedAttrs(() =>
|
|
103
|
+
card({
|
|
104
|
+
variant: props.variant,
|
|
105
|
+
padded: props.padded,
|
|
106
|
+
interactive: props.interactive,
|
|
107
|
+
accent: Boolean(props.accent),
|
|
108
|
+
}),
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
// Through custom properties rather than a box-shadow written here: the shadow
|
|
112
|
+
// list in .lp-card-accent also carries the skin painter's own shadows, and an
|
|
113
|
+
// inline box-shadow would replace all three — taking the card's elevation with
|
|
114
|
+
// it, and blocking the swap `interactive` makes on hover.
|
|
115
|
+
const accentStyle = computed(() =>
|
|
116
|
+
props.accent
|
|
117
|
+
? {
|
|
118
|
+
"--lp-card-accent": props.accent,
|
|
119
|
+
...(props.accentWidth ? { "--lp-card-accent-width": props.accentWidth } : {}),
|
|
120
|
+
}
|
|
121
|
+
: undefined,
|
|
77
122
|
)
|
|
78
123
|
</script>
|
|
79
124
|
|
|
@@ -82,11 +127,11 @@ const classes = computed(() =>
|
|
|
82
127
|
(inheritAttrs:false above), so the card surface looks identical whether or
|
|
83
128
|
not it's wrapped in a context menu. -->
|
|
84
129
|
<LpContextMenu v-if="menuItems?.length" :items="menuItems">
|
|
85
|
-
<component :is="as" :class="classes" v-bind="
|
|
130
|
+
<component :is="as" :class="classes" :style="accentStyle" v-bind="rest">
|
|
86
131
|
<slot />
|
|
87
132
|
</component>
|
|
88
133
|
</LpContextMenu>
|
|
89
|
-
<component :is="as" v-else :class="classes" v-bind="
|
|
134
|
+
<component :is="as" v-else :class="classes" :style="accentStyle" v-bind="rest">
|
|
90
135
|
<slot />
|
|
91
136
|
</component>
|
|
92
137
|
</template>
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// The consumer's `class` is merged into the root's own (below) rather than
|
|
3
|
+
// appended to it, so opt out of the automatic pass-through that would add it
|
|
4
|
+
// a second time, unmerged.
|
|
5
|
+
export default { inheritAttrs: false }
|
|
6
|
+
</script>
|
|
7
|
+
|
|
1
8
|
<script setup lang="ts">
|
|
2
9
|
/*
|
|
3
10
|
* Token-driven SVG chart: line, area and bar off one data shape. No charting
|
|
@@ -36,6 +43,7 @@ import {
|
|
|
36
43
|
import LpContextMenu, { type ContextMenuItemDef } from "./LpContextMenu.vue"
|
|
37
44
|
import LpIcon from "./LpIcon.vue"
|
|
38
45
|
import LpShift from "./LpShift.vue"
|
|
46
|
+
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
39
47
|
|
|
40
48
|
/** What was under the pointer when a point was clicked or right-clicked. */
|
|
41
49
|
export interface ChartPointEvent {
|
|
@@ -845,10 +853,17 @@ const clipId = `lp-chart-${Math.random().toString(36).slice(2, 9)}`
|
|
|
845
853
|
*/
|
|
846
854
|
const gradientId = (name: string, index: number) =>
|
|
847
855
|
`${clipId}-g-${index}-${name.replace(/[^a-zA-Z0-9_-]/g, "-")}`
|
|
856
|
+
|
|
857
|
+
// The chart fills its container's width and sets its own gap between plot and legend — both are layout decisions the page makes, not the chart.
|
|
858
|
+
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
859
|
+
"flex w-full flex-col gap-3",
|
|
860
|
+
)
|
|
848
861
|
</script>
|
|
849
862
|
|
|
850
863
|
<template>
|
|
851
|
-
<div ref="root"
|
|
864
|
+
<div ref="root"
|
|
865
|
+
:class="rootClass"
|
|
866
|
+
v-bind="rest">
|
|
852
867
|
<div v-if="title || subtitle || $slots.actions" class="flex items-start justify-between gap-3">
|
|
853
868
|
<div class="flex flex-col gap-0.5">
|
|
854
869
|
<span v-if="title" class="text-sm font-medium text-ink">{{ title }}</span>
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// The consumer's `class` is merged into the root's own (below) rather than
|
|
3
|
+
// appended to it, so opt out of the automatic pass-through that would add it
|
|
4
|
+
// a second time, unmerged.
|
|
5
|
+
export default { inheritAttrs: false }
|
|
6
|
+
</script>
|
|
7
|
+
|
|
1
8
|
<script setup lang="ts">
|
|
2
9
|
import { CheckboxIndicator, CheckboxRoot } from "reka-ui"
|
|
3
10
|
import LpIcon from "./LpIcon.vue"
|
|
11
|
+
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
4
12
|
|
|
5
13
|
defineProps<{
|
|
6
14
|
modelValue?: boolean
|
|
@@ -21,10 +29,17 @@ function onUpdate(v: boolean | "indeterminate") {
|
|
|
21
29
|
emit("update:modelValue", checked)
|
|
22
30
|
emit("change", checked)
|
|
23
31
|
}
|
|
32
|
+
|
|
33
|
+
// The label sits a fixed distance from the box; a dense list of options needs that closer.
|
|
34
|
+
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
35
|
+
"group inline-flex cursor-pointer items-center gap-2 text-sm text-ink",
|
|
36
|
+
)
|
|
24
37
|
</script>
|
|
25
38
|
|
|
26
39
|
<template>
|
|
27
|
-
<label
|
|
40
|
+
<label
|
|
41
|
+
:class="rootClass"
|
|
42
|
+
v-bind="rest">
|
|
28
43
|
<CheckboxRoot
|
|
29
44
|
:id="id"
|
|
30
45
|
:name="name"
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// The consumer's `class` is merged into the root's own (below) rather than
|
|
3
|
+
// appended to it, so opt out of the automatic pass-through that would add it
|
|
4
|
+
// a second time, unmerged.
|
|
5
|
+
export default { inheritAttrs: false }
|
|
6
|
+
</script>
|
|
7
|
+
|
|
1
8
|
<script setup lang="ts">
|
|
2
9
|
/*
|
|
3
10
|
* Code block with lightweight, theme-aware syntax highlighting (codeHighlight.ts
|
|
@@ -19,6 +26,7 @@ import { computed, reactive, ref, watch } from "vue"
|
|
|
19
26
|
import { useClipboard } from "../composables/useClipboard"
|
|
20
27
|
import { type CodeLang, tokenizeLine } from "./codeHighlight"
|
|
21
28
|
import LpIcon from "./LpIcon.vue"
|
|
29
|
+
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
22
30
|
|
|
23
31
|
const props = withDefaults(
|
|
24
32
|
defineProps<{
|
|
@@ -181,10 +189,17 @@ function toggleLock() {
|
|
|
181
189
|
function onInput(e: Event) {
|
|
182
190
|
emit("update:modelValue", (e.target as HTMLTextAreaElement).value)
|
|
183
191
|
}
|
|
192
|
+
|
|
193
|
+
// A code block is a framed panel; embedding one inside another panel means dropping its border or its radius, which a consumer can only do from the outside.
|
|
194
|
+
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
195
|
+
"overflow-hidden rounded-card border border-line bg-surface font-mono text-xs",
|
|
196
|
+
)
|
|
184
197
|
</script>
|
|
185
198
|
|
|
186
199
|
<template>
|
|
187
|
-
<div
|
|
200
|
+
<div
|
|
201
|
+
:class="rootClass"
|
|
202
|
+
v-bind="rest">
|
|
188
203
|
<!-- Header -->
|
|
189
204
|
<div
|
|
190
205
|
v-if="showHeader"
|