bitboss-ui 3.0.0-beta.21 → 3.0.0-beta.22
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/README.md +55 -3
- package/bin/bitboss-ui-mcp.mjs +419 -9
- package/bin/bitboss-ui.mjs +293 -22
- package/dist/ai/BbAccordion.md +21 -23
- package/dist/ai/BbAlert.md +6 -12
- package/dist/ai/BbAvatar.md +60 -24
- package/dist/ai/BbBadge.md +12 -20
- package/dist/ai/BbBaseButton.md +14 -16
- package/dist/ai/BbBaseCheckboxIcon.md +6 -10
- package/dist/ai/BbBaseRadioIcon.md +6 -10
- package/dist/ai/BbBaseSwitchIcon.md +5 -9
- package/dist/ai/BbBreadcrumbs.md +23 -34
- package/dist/ai/BbButton.md +35 -47
- package/dist/ai/BbCheckbox.md +21 -37
- package/dist/ai/BbCheckboxGroup.md +13 -13
- package/dist/ai/BbCollapsible.md +14 -26
- package/dist/ai/BbColorInput.md +13 -23
- package/dist/ai/BbColorPalette.md +23 -35
- package/dist/ai/BbConfirm.md +17 -32
- package/dist/ai/BbDatePickerInput.md +15 -21
- package/dist/ai/BbDialog.md +159 -62
- package/dist/ai/BbDropdown.md +21 -25
- package/dist/ai/BbDropdownButton.md +13 -30
- package/dist/ai/BbDropzone.md +9 -11
- package/dist/ai/BbIcon.md +44 -33
- package/dist/ai/BbIndicator.md +2 -2
- package/dist/ai/BbNumberInput.md +18 -20
- package/dist/ai/BbOffCanvas.md +42 -42
- package/dist/ai/BbPagination.md +21 -23
- package/dist/ai/BbPopover.md +15 -17
- package/dist/ai/BbProgress.md +40 -51
- package/dist/ai/BbRadio.md +9 -9
- package/dist/ai/BbRadioGroup.md +7 -11
- package/dist/ai/BbRating.md +8 -12
- package/dist/ai/BbSelect.md +32 -36
- package/dist/ai/BbSelectPopover.md +19 -31
- package/dist/ai/BbSlider.md +15 -19
- package/dist/ai/BbSmoothHeight.md +16 -31
- package/dist/ai/BbSpinner.md +118 -74
- package/dist/ai/BbSwitch.md +25 -18
- package/dist/ai/BbSwitchGroup.md +9 -14
- package/dist/ai/BbTable.md +102 -55
- package/dist/ai/BbTabs.md +59 -82
- package/dist/ai/BbTag.md +12 -23
- package/dist/ai/BbTextInput.md +20 -26
- package/dist/ai/BbTextarea.md +28 -34
- package/dist/ai/BbToast.md +14 -34
- package/dist/ai/BbTooltip.md +22 -20
- package/dist/ai/BbTree.md +46 -72
- package/dist/ai/changelog.json +169 -62
- package/dist/ai/components.json +1467 -9
- package/dist/ai/composables/useConfirm.md +5 -2
- package/dist/ai/composables/useToast.md +4 -2
- package/dist/ai/guides/agent-contract.md +7 -4
- package/dist/ai/guides/ai-router.md +37 -22
- package/dist/ai/guides/component-picker.md +23 -18
- package/dist/ai/guides/design-language.md +141 -13
- package/dist/ai/guides/design-tokens.md +29 -4
- package/dist/ai/guides/icons-policy.md +46 -21
- package/dist/ai/guides/installation-and-plugin-setup.md +253 -17
- package/dist/ai/guides/migration/components/bb-rating.md +26 -1
- package/dist/ai/guides/migration/components/bb-tooltip.md +18 -0
- package/dist/ai/guides/migration/v2-to-v3.md +50 -23
- package/dist/ai/index.md +1 -1
- package/dist/ai/recipes/inertia/approvals-inbox.md +3 -3
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +2 -2
- package/dist/ai/recipes/inertia/onboarding.md +2 -2
- package/dist/ai/recipes/inertia/ownership-atlas.md +6 -6
- package/dist/ai/recipes/inertia/record-form.md +5 -5
- package/dist/ai/recipes/inertia/records-workspace.md +4 -4
- package/dist/ai/recipes/inertia/upload-center.md +6 -6
- package/dist/ai/recipes/inertia/wizard-form.md +5 -5
- package/dist/ai/recipes/nuxt/approvals-inbox.md +3 -3
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +2 -2
- package/dist/ai/recipes/nuxt/onboarding.md +2 -2
- package/dist/ai/recipes/nuxt/record-form.md +5 -5
- package/dist/ai/recipes/nuxt/records-workspace.md +4 -4
- package/dist/ai/recipes/nuxt/upload-center.md +6 -6
- package/dist/ai/recipes/nuxt/wizard-form.md +5 -5
- package/dist/ai/recipes/vue/approvals-inbox.md +3 -3
- package/dist/ai/recipes/vue/inline-edit-workspace.md +2 -2
- package/dist/ai/recipes/vue/onboarding.md +2 -2
- package/dist/ai/recipes/vue/record-form.md +10 -10
- package/dist/ai/recipes/vue/records-workspace.md +4 -4
- package/dist/ai/recipes/vue/upload-center.md +6 -6
- package/dist/ai/recipes/vue/wizard-form.md +5 -5
- package/dist/ai/source/BbBadge.md +1 -1
- package/dist/ai/source/BbBaseCheckbox.md +1 -1
- package/dist/ai/source/BbBaseDatePicker.md +5 -5
- package/dist/ai/source/BbBaseDatePickerInput.md +2 -2
- package/dist/ai/source/BbBaseRadio.md +1 -1
- package/dist/ai/source/BbBaseRating.md +5 -5
- package/dist/ai/source/BbBaseSelect.md +1 -1
- package/dist/ai/source/BbBaseSlider.md +5 -5
- package/dist/ai/source/BbBaseSwitch.md +1 -1
- package/dist/ai/source/BbBaseTimePickerInput.md +1 -1
- package/dist/ai/source/BbBreadcrumbs.md +20 -1
- package/dist/ai/source/BbButton.md +2 -2
- package/dist/ai/source/BbDialog.md +39 -8
- package/dist/ai/source/BbDropdown.md +1 -1
- package/dist/ai/source/BbDropzone.md +5 -5
- package/dist/ai/source/BbIcon.md +23 -10
- package/dist/ai/source/BbOffCanvas.md +50 -28
- package/dist/ai/source/BbPagination.md +2 -2
- package/dist/ai/source/BbPopover.md +12 -1
- package/dist/ai/source/BbSelectPopover.md +45 -7
- package/dist/ai/source/BbSpinner.md +2 -2
- package/dist/ai/source/BbTable.md +11 -11
- package/dist/ai/source/BbTooltip.md +57 -10
- package/dist/ai/source/ChipsBox.md +1 -1
- package/dist/ai/source/CommaBox.md +1 -1
- package/dist/ai/source/GuidesComponent.md +14 -7
- package/dist/ai/source/OptionsContainer.md +1 -1
- package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.d.ts +1 -1
- package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +71 -71
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +102 -97
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +58 -58
- package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +33 -35
- package/dist/components/BbIcon/iconCache.d.ts +30 -0
- package/dist/components/BbIcon/iconCache.js +21 -3
- package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +57 -56
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +138 -138
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +43 -43
- package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbSpinner/types.d.ts +1 -1
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/BbTable/BbTableDataRow.js +2 -2
- package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +62 -62
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +81 -78
- package/dist/components/BbTooltip/types.d.ts +8 -1
- package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/composables/useConfirm.d.ts +22 -0
- package/dist/composables/useConfirm.js +43 -40
- package/dist/composables/useSafeAreaInternal.js +1 -1
- package/dist/composables/useToast.d.ts +16 -0
- package/dist/composables/useToast.js +20 -16
- package/dist/composables/useViewportWidth.d.ts +20 -6
- package/dist/composables/useViewportWidth.js +8 -7
- package/dist/icon-scan.d.ts +276 -0
- package/dist/icon-scan.js +485 -0
- package/dist/icons-whitelist.d.ts +5 -4
- package/dist/llms-full.txt +1979 -1527
- package/dist/llms-medium.txt +461 -74
- package/dist/llms.txt +1 -1
- package/dist/nuxt.js +10 -7
- package/dist/plugin.js +1 -0
- package/dist/runtime/nuxt-plugin.js +2 -1
- package/dist/styles.css +1 -1
- package/dist/types/Config.d.ts +18 -0
- package/dist/utils/cssLayers.d.ts +91 -0
- package/dist/utils/cssLayers.js +43 -0
- package/dist/utils/injectLibraryStyles.d.ts +3 -1
- package/dist/utils/injectLibraryStyles.js +24 -23
- package/dist/vite-plugin.d.ts +74 -11
- package/dist/vite.js +292 -253
- package/llms.txt +1 -1
- package/package.json +7 -5
- package/scripts/lib/ensure-manifest.mjs +28 -5
- package/scripts/lib/eslint-plugin.d.ts +35 -0
- package/scripts/lib/eslint-plugin.mjs +299 -3
- package/scripts/lib/hand-roll-hints.mjs +50 -6
- package/scripts/lib/html-attributes.mjs +42 -0
- package/scripts/lib/mcp-config.mjs +38 -34
- package/scripts/lib/public-type-exports.mjs +246 -0
- package/scripts/lib/validate-bb-markup.mjs +205 -12
|
@@ -1122,7 +1122,7 @@ const onTransfer = (value: unknown) => {
|
|
|
1122
1122
|
|
|
1123
1123
|
<section v-if="owner.notes" class="flex flex-col gap-1.5">
|
|
1124
1124
|
<h3
|
|
1125
|
-
class="text-xs font-semibold
|
|
1125
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1126
1126
|
>
|
|
1127
1127
|
Notes
|
|
1128
1128
|
</h3>
|
|
@@ -1132,7 +1132,7 @@ const onTransfer = (value: unknown) => {
|
|
|
1132
1132
|
<!-- Rollup by holding type. -->
|
|
1133
1133
|
<section class="flex flex-col gap-1.5">
|
|
1134
1134
|
<h3
|
|
1135
|
-
class="text-xs font-semibold
|
|
1135
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1136
1136
|
>
|
|
1137
1137
|
By type
|
|
1138
1138
|
</h3>
|
|
@@ -1144,11 +1144,11 @@ const onTransfer = (value: unknown) => {
|
|
|
1144
1144
|
>
|
|
1145
1145
|
<span class="min-w-0">{{ KIND_LABEL[row.kind] }}</span>
|
|
1146
1146
|
<span
|
|
1147
|
-
class="text-xs
|
|
1147
|
+
class="text-xs text-[color:var(--bb-text-muted)] tabular-nums"
|
|
1148
1148
|
>{{ row.count }}</span
|
|
1149
1149
|
>
|
|
1150
1150
|
<span
|
|
1151
|
-
class="text-xs
|
|
1151
|
+
class="text-xs text-[color:var(--bb-text-muted)] tabular-nums"
|
|
1152
1152
|
>{{ money(row.monthlyCost) }}</span
|
|
1153
1153
|
>
|
|
1154
1154
|
</li>
|
|
@@ -1158,7 +1158,7 @@ const onTransfer = (value: unknown) => {
|
|
|
1158
1158
|
<!-- The holdings themselves — a real list, not a summary sentence. -->
|
|
1159
1159
|
<section class="flex flex-col gap-1.5">
|
|
1160
1160
|
<h3
|
|
1161
|
-
class="text-xs font-semibold
|
|
1161
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1162
1162
|
>
|
|
1163
1163
|
Holdings
|
|
1164
1164
|
</h3>
|
|
@@ -1179,7 +1179,7 @@ const onTransfer = (value: unknown) => {
|
|
|
1179
1179
|
{{ STATUS_LABEL[holding.status] }}
|
|
1180
1180
|
</BbBadge>
|
|
1181
1181
|
<span
|
|
1182
|
-
class="text-xs
|
|
1182
|
+
class="text-xs text-[color:var(--bb-text-muted)] tabular-nums"
|
|
1183
1183
|
>{{ money(holding.monthlyCost) }}</span
|
|
1184
1184
|
>
|
|
1185
1185
|
</div>
|
|
@@ -686,7 +686,7 @@ const trail = computed(() => [
|
|
|
686
686
|
<template>
|
|
687
687
|
<section class="flex flex-col gap-3">
|
|
688
688
|
<h2
|
|
689
|
-
class="text-xs font-semibold
|
|
689
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
690
690
|
>
|
|
691
691
|
Details
|
|
692
692
|
</h2>
|
|
@@ -801,7 +801,7 @@ const ctx = useInvoiceForm();
|
|
|
801
801
|
<section class="flex flex-col gap-3">
|
|
802
802
|
<div class="flex items-center justify-between">
|
|
803
803
|
<h2
|
|
804
|
-
class="text-xs font-semibold
|
|
804
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
805
805
|
>
|
|
806
806
|
Line items
|
|
807
807
|
</h2>
|
|
@@ -1288,7 +1288,7 @@ const ctx = useInvoiceForm();
|
|
|
1288
1288
|
<!-- Billing profile: exactly the fields this form negotiates. -->
|
|
1289
1289
|
<section class="flex flex-col gap-1.5">
|
|
1290
1290
|
<h3
|
|
1291
|
-
class="text-xs font-semibold
|
|
1291
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1292
1292
|
>
|
|
1293
1293
|
Billing profile
|
|
1294
1294
|
</h3>
|
|
@@ -1318,7 +1318,7 @@ const ctx = useInvoiceForm();
|
|
|
1318
1318
|
through the route-leave guard. -->
|
|
1319
1319
|
<section class="flex flex-col gap-1.5">
|
|
1320
1320
|
<h3
|
|
1321
|
-
class="text-xs font-semibold
|
|
1321
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1322
1322
|
>
|
|
1323
1323
|
Recent invoices
|
|
1324
1324
|
</h3>
|
|
@@ -1332,7 +1332,7 @@ const ctx = useInvoiceForm();
|
|
|
1332
1332
|
{{ recent.number }}
|
|
1333
1333
|
</BbBaseButton>
|
|
1334
1334
|
<BbBadge variant="outline">{{ recent.status }}</BbBadge>
|
|
1335
|
-
<span class="text-xs
|
|
1335
|
+
<span class="text-xs text-[color:var(--bb-text-muted)] tabular-nums">
|
|
1336
1336
|
{{ currency.format(recent.amount) }}
|
|
1337
1337
|
</span>
|
|
1338
1338
|
</li>
|
|
@@ -1156,7 +1156,7 @@ const selectedCount = computed(() =>
|
|
|
1156
1156
|
<!-- Line items: a real mini-table, not a summary sentence. -->
|
|
1157
1157
|
<section class="flex flex-col gap-1.5">
|
|
1158
1158
|
<h3
|
|
1159
|
-
class="text-xs font-semibold
|
|
1159
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1160
1160
|
>
|
|
1161
1161
|
Line items
|
|
1162
1162
|
</h3>
|
|
@@ -1180,7 +1180,7 @@ const selectedCount = computed(() =>
|
|
|
1180
1180
|
<!-- Payments so far. -->
|
|
1181
1181
|
<section v-if="invoice.payments.length" class="flex flex-col gap-1.5">
|
|
1182
1182
|
<h3
|
|
1183
|
-
class="text-xs font-semibold
|
|
1183
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1184
1184
|
>
|
|
1185
1185
|
Payments
|
|
1186
1186
|
</h3>
|
|
@@ -1203,7 +1203,7 @@ const selectedCount = computed(() =>
|
|
|
1203
1203
|
<!-- Activity feed. -->
|
|
1204
1204
|
<section class="flex flex-col gap-1.5">
|
|
1205
1205
|
<h3
|
|
1206
|
-
class="text-xs font-semibold
|
|
1206
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1207
1207
|
>
|
|
1208
1208
|
Activity
|
|
1209
1209
|
</h3>
|
|
@@ -1353,7 +1353,7 @@ const longDate = (value: string) =>
|
|
|
1353
1353
|
variant — same identity-cell rule as the invoices table. -->
|
|
1354
1354
|
<section class="flex flex-col gap-1.5">
|
|
1355
1355
|
<h3
|
|
1356
|
-
class="text-xs font-semibold
|
|
1356
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1357
1357
|
>
|
|
1358
1358
|
Recent invoices
|
|
1359
1359
|
</h3>
|
|
@@ -1174,7 +1174,7 @@ const formattedSize = computed(() => {
|
|
|
1174
1174
|
class="flex-1"
|
|
1175
1175
|
:model-value="upload.progress"
|
|
1176
1176
|
/>
|
|
1177
|
-
<span class="text-xs
|
|
1177
|
+
<span class="text-xs text-[color:var(--bb-text-muted)] tabular-nums"
|
|
1178
1178
|
>{{ upload.progress }}%</span
|
|
1179
1179
|
>
|
|
1180
1180
|
</div>
|
|
@@ -1631,7 +1631,7 @@ const selectedCount = computed(() =>
|
|
|
1631
1631
|
<section class="flex flex-col gap-1.5">
|
|
1632
1632
|
<div class="flex items-center justify-between">
|
|
1633
1633
|
<h3
|
|
1634
|
-
class="text-xs font-semibold
|
|
1634
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1635
1635
|
>
|
|
1636
1636
|
Extracted fields
|
|
1637
1637
|
</h3>
|
|
@@ -1671,7 +1671,7 @@ const selectedCount = computed(() =>
|
|
|
1671
1671
|
one-click cell as in the table. -->
|
|
1672
1672
|
<section class="flex flex-col gap-1.5">
|
|
1673
1673
|
<h3
|
|
1674
|
-
class="text-xs font-semibold
|
|
1674
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1675
1675
|
>
|
|
1676
1676
|
Details
|
|
1677
1677
|
</h3>
|
|
@@ -1688,7 +1688,7 @@ const selectedCount = computed(() =>
|
|
|
1688
1688
|
<!-- Activity feed. -->
|
|
1689
1689
|
<section class="flex flex-col gap-1.5">
|
|
1690
1690
|
<h3
|
|
1691
|
-
class="text-xs font-semibold
|
|
1691
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1692
1692
|
>
|
|
1693
1693
|
Activity
|
|
1694
1694
|
</h3>
|
|
@@ -1840,7 +1840,7 @@ const longDate = (value: string) =>
|
|
|
1840
1840
|
<!-- Recent receipts: names drill down again — the stack keeps growing. -->
|
|
1841
1841
|
<section class="flex flex-col gap-1.5">
|
|
1842
1842
|
<h3
|
|
1843
|
-
class="text-xs font-semibold
|
|
1843
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1844
1844
|
>
|
|
1845
1845
|
Recent receipts
|
|
1846
1846
|
</h3>
|
|
@@ -1860,7 +1860,7 @@ const longDate = (value: string) =>
|
|
|
1860
1860
|
<BbBadge :variant="STATUS_VARIANT[recent.status]">{{
|
|
1861
1861
|
STATUS_LABEL[recent.status]
|
|
1862
1862
|
}}</BbBadge>
|
|
1863
|
-
<span class="text-xs
|
|
1863
|
+
<span class="text-xs text-[color:var(--bb-text-muted)] tabular-nums">
|
|
1864
1864
|
{{ currency.format(recent.amount) }}
|
|
1865
1865
|
</span>
|
|
1866
1866
|
</li>
|
|
@@ -1087,7 +1087,7 @@ const today = new Date().toISOString().slice(0, 10);
|
|
|
1087
1087
|
>
|
|
1088
1088
|
<div class="flex items-center justify-between gap-2">
|
|
1089
1089
|
<h3
|
|
1090
|
-
class="text-xs font-semibold
|
|
1090
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1091
1091
|
>
|
|
1092
1092
|
Audience
|
|
1093
1093
|
</h3>
|
|
@@ -1134,7 +1134,7 @@ const today = new Date().toISOString().slice(0, 10);
|
|
|
1134
1134
|
>
|
|
1135
1135
|
<div class="flex items-center justify-between gap-2">
|
|
1136
1136
|
<h3
|
|
1137
|
-
class="text-xs font-semibold
|
|
1137
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1138
1138
|
>
|
|
1139
1139
|
Content
|
|
1140
1140
|
</h3>
|
|
@@ -1165,7 +1165,7 @@ const today = new Date().toISOString().slice(0, 10);
|
|
|
1165
1165
|
>
|
|
1166
1166
|
<div class="flex items-center justify-between gap-2">
|
|
1167
1167
|
<h3
|
|
1168
|
-
class="text-xs font-semibold
|
|
1168
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1169
1169
|
>
|
|
1170
1170
|
Schedule
|
|
1171
1171
|
</h3>
|
|
@@ -1331,7 +1331,7 @@ const isReview = computed(() => ctx.step.value === 'review');
|
|
|
1331
1331
|
<!-- The segment's definition, so "who is in here" is answerable in place. -->
|
|
1332
1332
|
<section class="flex flex-col gap-1.5">
|
|
1333
1333
|
<h3
|
|
1334
|
-
class="text-xs font-semibold
|
|
1334
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1335
1335
|
>
|
|
1336
1336
|
Conditions
|
|
1337
1337
|
</h3>
|
|
@@ -1350,7 +1350,7 @@ const isReview = computed(() => ctx.step.value === 'review');
|
|
|
1350
1350
|
<!-- Recent campaigns to this segment: fatigue check before sending. -->
|
|
1351
1351
|
<section class="flex flex-col gap-1.5">
|
|
1352
1352
|
<h3
|
|
1353
|
-
class="text-xs font-semibold
|
|
1353
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1354
1354
|
>
|
|
1355
1355
|
Recent campaigns
|
|
1356
1356
|
</h3>
|
|
@@ -1234,7 +1234,7 @@ const clearSelection = () => {
|
|
|
1234
1234
|
<!-- Receipt: bigger than the row thumbnail, with a full-size link out. -->
|
|
1235
1235
|
<section class="flex flex-col gap-1.5">
|
|
1236
1236
|
<h3
|
|
1237
|
-
class="text-xs font-semibold
|
|
1237
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1238
1238
|
>
|
|
1239
1239
|
Receipt
|
|
1240
1240
|
</h3>
|
|
@@ -1281,7 +1281,7 @@ const clearSelection = () => {
|
|
|
1281
1281
|
<!-- Activity feed. -->
|
|
1282
1282
|
<section class="flex flex-col gap-1.5">
|
|
1283
1283
|
<h3
|
|
1284
|
-
class="text-xs font-semibold
|
|
1284
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1285
1285
|
>
|
|
1286
1286
|
Activity
|
|
1287
1287
|
</h3>
|
|
@@ -1435,7 +1435,7 @@ const statusLabel = (status: ExpenseStatus) =>
|
|
|
1435
1435
|
<!-- Recent expenses: names drill down again — the stack keeps growing. -->
|
|
1436
1436
|
<section class="flex flex-col gap-1.5">
|
|
1437
1437
|
<h3
|
|
1438
|
-
class="text-xs font-semibold
|
|
1438
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1439
1439
|
>
|
|
1440
1440
|
Recent expenses
|
|
1441
1441
|
</h3>
|
|
@@ -1548,7 +1548,7 @@ const clearSelection = () => {
|
|
|
1548
1548
|
<!-- Description. -->
|
|
1549
1549
|
<section class="flex flex-col gap-1.5">
|
|
1550
1550
|
<h3
|
|
1551
|
-
class="text-xs font-semibold
|
|
1551
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1552
1552
|
>
|
|
1553
1553
|
Description
|
|
1554
1554
|
</h3>
|
|
@@ -1560,7 +1560,7 @@ const clearSelection = () => {
|
|
|
1560
1560
|
<!-- Activity feed. -->
|
|
1561
1561
|
<section class="flex flex-col gap-1.5">
|
|
1562
1562
|
<h3
|
|
1563
|
-
class="text-xs font-semibold
|
|
1563
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1564
1564
|
>
|
|
1565
1565
|
Activity
|
|
1566
1566
|
</h3>
|
|
@@ -808,7 +808,7 @@ const ctx = useOnboardingWorkspace();
|
|
|
808
808
|
</span>
|
|
809
809
|
<span
|
|
810
810
|
v-if="step.status === 'skipped'"
|
|
811
|
-
class="shrink-0 text-xs
|
|
811
|
+
class="shrink-0 text-xs tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
812
812
|
>
|
|
813
813
|
Skipped
|
|
814
814
|
</span>
|
|
@@ -1414,7 +1414,7 @@ const cadences: { value: ReminderCadence; label: string }[] = [
|
|
|
1414
1414
|
<!-- What you'll get. -->
|
|
1415
1415
|
<section class="flex flex-col gap-2.5">
|
|
1416
1416
|
<h3
|
|
1417
|
-
class="text-xs font-semibold
|
|
1417
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1418
1418
|
>
|
|
1419
1419
|
What you'll get
|
|
1420
1420
|
</h3>
|
|
@@ -715,7 +715,7 @@ const trail = computed(() => [
|
|
|
715
715
|
<template>
|
|
716
716
|
<section class="flex flex-col gap-3">
|
|
717
717
|
<h2
|
|
718
|
-
class="text-xs font-semibold
|
|
718
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
719
719
|
>
|
|
720
720
|
Details
|
|
721
721
|
</h2>
|
|
@@ -830,7 +830,7 @@ const ctx = useInvoiceForm();
|
|
|
830
830
|
<section class="flex flex-col gap-3">
|
|
831
831
|
<div class="flex items-center justify-between">
|
|
832
832
|
<h2
|
|
833
|
-
class="text-xs font-semibold
|
|
833
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
834
834
|
>
|
|
835
835
|
Line items
|
|
836
836
|
</h2>
|
|
@@ -1317,7 +1317,7 @@ const ctx = useInvoiceForm();
|
|
|
1317
1317
|
<!-- Billing profile: exactly the fields this form negotiates. -->
|
|
1318
1318
|
<section class="flex flex-col gap-1.5">
|
|
1319
1319
|
<h3
|
|
1320
|
-
class="text-xs font-semibold
|
|
1320
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1321
1321
|
>
|
|
1322
1322
|
Billing profile
|
|
1323
1323
|
</h3>
|
|
@@ -1347,7 +1347,7 @@ const ctx = useInvoiceForm();
|
|
|
1347
1347
|
through the route-leave guard. -->
|
|
1348
1348
|
<section class="flex flex-col gap-1.5">
|
|
1349
1349
|
<h3
|
|
1350
|
-
class="text-xs font-semibold
|
|
1350
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1351
1351
|
>
|
|
1352
1352
|
Recent invoices
|
|
1353
1353
|
</h3>
|
|
@@ -1361,7 +1361,7 @@ const ctx = useInvoiceForm();
|
|
|
1361
1361
|
{{ recent.number }}
|
|
1362
1362
|
</BbBaseButton>
|
|
1363
1363
|
<BbBadge variant="outline">{{ recent.status }}</BbBadge>
|
|
1364
|
-
<span class="text-xs
|
|
1364
|
+
<span class="text-xs text-[color:var(--bb-text-muted)] tabular-nums">
|
|
1365
1365
|
{{ currency.format(recent.amount) }}
|
|
1366
1366
|
</span>
|
|
1367
1367
|
</li>
|
|
@@ -1141,7 +1141,7 @@ const clearSelection = () => {
|
|
|
1141
1141
|
<!-- Line items: a real mini-table, not a summary sentence. -->
|
|
1142
1142
|
<section class="flex flex-col gap-1.5">
|
|
1143
1143
|
<h3
|
|
1144
|
-
class="text-xs font-semibold
|
|
1144
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1145
1145
|
>
|
|
1146
1146
|
Line items
|
|
1147
1147
|
</h3>
|
|
@@ -1165,7 +1165,7 @@ const clearSelection = () => {
|
|
|
1165
1165
|
<!-- Payments so far. -->
|
|
1166
1166
|
<section v-if="invoice.payments.length" class="flex flex-col gap-1.5">
|
|
1167
1167
|
<h3
|
|
1168
|
-
class="text-xs font-semibold
|
|
1168
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1169
1169
|
>
|
|
1170
1170
|
Payments
|
|
1171
1171
|
</h3>
|
|
@@ -1188,7 +1188,7 @@ const clearSelection = () => {
|
|
|
1188
1188
|
<!-- Activity feed. -->
|
|
1189
1189
|
<section class="flex flex-col gap-1.5">
|
|
1190
1190
|
<h3
|
|
1191
|
-
class="text-xs font-semibold
|
|
1191
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1192
1192
|
>
|
|
1193
1193
|
Activity
|
|
1194
1194
|
</h3>
|
|
@@ -1311,7 +1311,7 @@ const longDate = (value: string) =>
|
|
|
1311
1311
|
variant — same identity-cell rule as the invoices table. -->
|
|
1312
1312
|
<section class="flex flex-col gap-1.5">
|
|
1313
1313
|
<h3
|
|
1314
|
-
class="text-xs font-semibold
|
|
1314
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1315
1315
|
>
|
|
1316
1316
|
Recent invoices
|
|
1317
1317
|
</h3>
|
|
@@ -1102,7 +1102,7 @@ const formattedSize = computed(() => {
|
|
|
1102
1102
|
class="flex-1"
|
|
1103
1103
|
:model-value="upload.progress"
|
|
1104
1104
|
/>
|
|
1105
|
-
<span class="text-xs
|
|
1105
|
+
<span class="text-xs text-[color:var(--bb-text-muted)] tabular-nums"
|
|
1106
1106
|
>{{ upload.progress }}%</span
|
|
1107
1107
|
>
|
|
1108
1108
|
</div>
|
|
@@ -1539,7 +1539,7 @@ const clearSelection = () => {
|
|
|
1539
1539
|
<section class="flex flex-col gap-1.5">
|
|
1540
1540
|
<div class="flex items-center justify-between">
|
|
1541
1541
|
<h3
|
|
1542
|
-
class="text-xs font-semibold
|
|
1542
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1543
1543
|
>
|
|
1544
1544
|
Extracted fields
|
|
1545
1545
|
</h3>
|
|
@@ -1579,7 +1579,7 @@ const clearSelection = () => {
|
|
|
1579
1579
|
one-click cell as in the table. -->
|
|
1580
1580
|
<section class="flex flex-col gap-1.5">
|
|
1581
1581
|
<h3
|
|
1582
|
-
class="text-xs font-semibold
|
|
1582
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1583
1583
|
>
|
|
1584
1584
|
Details
|
|
1585
1585
|
</h3>
|
|
@@ -1596,7 +1596,7 @@ const clearSelection = () => {
|
|
|
1596
1596
|
<!-- Activity feed. -->
|
|
1597
1597
|
<section class="flex flex-col gap-1.5">
|
|
1598
1598
|
<h3
|
|
1599
|
-
class="text-xs font-semibold
|
|
1599
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1600
1600
|
>
|
|
1601
1601
|
Activity
|
|
1602
1602
|
</h3>
|
|
@@ -1746,7 +1746,7 @@ const longDate = (value: string) =>
|
|
|
1746
1746
|
<!-- Recent receipts: names drill down again — the stack keeps growing. -->
|
|
1747
1747
|
<section class="flex flex-col gap-1.5">
|
|
1748
1748
|
<h3
|
|
1749
|
-
class="text-xs font-semibold
|
|
1749
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1750
1750
|
>
|
|
1751
1751
|
Recent receipts
|
|
1752
1752
|
</h3>
|
|
@@ -1764,7 +1764,7 @@ const longDate = (value: string) =>
|
|
|
1764
1764
|
{{ recent.filename }}
|
|
1765
1765
|
</BbButton>
|
|
1766
1766
|
<BbBadge variant="outline">{{ recent.status }}</BbBadge>
|
|
1767
|
-
<span class="text-xs
|
|
1767
|
+
<span class="text-xs text-[color:var(--bb-text-muted)] tabular-nums">
|
|
1768
1768
|
{{ currency.format(recent.amount) }}
|
|
1769
1769
|
</span>
|
|
1770
1770
|
</li>
|
|
@@ -1108,7 +1108,7 @@ const today = new Date().toISOString().slice(0, 10);
|
|
|
1108
1108
|
>
|
|
1109
1109
|
<div class="flex items-center justify-between gap-2">
|
|
1110
1110
|
<h3
|
|
1111
|
-
class="text-xs font-semibold
|
|
1111
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1112
1112
|
>
|
|
1113
1113
|
Audience
|
|
1114
1114
|
</h3>
|
|
@@ -1155,7 +1155,7 @@ const today = new Date().toISOString().slice(0, 10);
|
|
|
1155
1155
|
>
|
|
1156
1156
|
<div class="flex items-center justify-between gap-2">
|
|
1157
1157
|
<h3
|
|
1158
|
-
class="text-xs font-semibold
|
|
1158
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1159
1159
|
>
|
|
1160
1160
|
Content
|
|
1161
1161
|
</h3>
|
|
@@ -1186,7 +1186,7 @@ const today = new Date().toISOString().slice(0, 10);
|
|
|
1186
1186
|
>
|
|
1187
1187
|
<div class="flex items-center justify-between gap-2">
|
|
1188
1188
|
<h3
|
|
1189
|
-
class="text-xs font-semibold
|
|
1189
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1190
1190
|
>
|
|
1191
1191
|
Schedule
|
|
1192
1192
|
</h3>
|
|
@@ -1352,7 +1352,7 @@ const isReview = computed(() => ctx.step.value === 'review');
|
|
|
1352
1352
|
<!-- The segment's definition, so "who is in here" is answerable in place. -->
|
|
1353
1353
|
<section class="flex flex-col gap-1.5">
|
|
1354
1354
|
<h3
|
|
1355
|
-
class="text-xs font-semibold
|
|
1355
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1356
1356
|
>
|
|
1357
1357
|
Conditions
|
|
1358
1358
|
</h3>
|
|
@@ -1371,7 +1371,7 @@ const isReview = computed(() => ctx.step.value === 'review');
|
|
|
1371
1371
|
<!-- Recent campaigns to this segment: fatigue check before sending. -->
|
|
1372
1372
|
<section class="flex flex-col gap-1.5">
|
|
1373
1373
|
<h3
|
|
1374
|
-
class="text-xs font-semibold
|
|
1374
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1375
1375
|
>
|
|
1376
1376
|
Recent campaigns
|
|
1377
1377
|
</h3>
|
|
@@ -1174,7 +1174,7 @@ const clearSelection = () => {
|
|
|
1174
1174
|
<!-- Receipt: bigger than the row thumbnail, with a full-size link out. -->
|
|
1175
1175
|
<section class="flex flex-col gap-1.5">
|
|
1176
1176
|
<h3
|
|
1177
|
-
class="text-xs font-semibold
|
|
1177
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1178
1178
|
>
|
|
1179
1179
|
Receipt
|
|
1180
1180
|
</h3>
|
|
@@ -1221,7 +1221,7 @@ const clearSelection = () => {
|
|
|
1221
1221
|
<!-- Activity feed. -->
|
|
1222
1222
|
<section class="flex flex-col gap-1.5">
|
|
1223
1223
|
<h3
|
|
1224
|
-
class="text-xs font-semibold
|
|
1224
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1225
1225
|
>
|
|
1226
1226
|
Activity
|
|
1227
1227
|
</h3>
|
|
@@ -1373,7 +1373,7 @@ const statusLabel = (status: ExpenseStatus) =>
|
|
|
1373
1373
|
<!-- Recent expenses: names drill down again — the stack keeps growing. -->
|
|
1374
1374
|
<section class="flex flex-col gap-1.5">
|
|
1375
1375
|
<h3
|
|
1376
|
-
class="text-xs font-semibold
|
|
1376
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1377
1377
|
>
|
|
1378
1378
|
Recent expenses
|
|
1379
1379
|
</h3>
|
|
@@ -1455,7 +1455,7 @@ const clearSelection = () => {
|
|
|
1455
1455
|
<!-- Description. -->
|
|
1456
1456
|
<section class="flex flex-col gap-1.5">
|
|
1457
1457
|
<h3
|
|
1458
|
-
class="text-xs font-semibold
|
|
1458
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1459
1459
|
>
|
|
1460
1460
|
Description
|
|
1461
1461
|
</h3>
|
|
@@ -1467,7 +1467,7 @@ const clearSelection = () => {
|
|
|
1467
1467
|
<!-- Activity feed. -->
|
|
1468
1468
|
<section class="flex flex-col gap-1.5">
|
|
1469
1469
|
<h3
|
|
1470
|
-
class="text-xs font-semibold
|
|
1470
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1471
1471
|
>
|
|
1472
1472
|
Activity
|
|
1473
1473
|
</h3>
|
|
@@ -769,7 +769,7 @@ const ctx = useOnboardingWorkspace();
|
|
|
769
769
|
</span>
|
|
770
770
|
<span
|
|
771
771
|
v-if="step.status === 'skipped'"
|
|
772
|
-
class="shrink-0 text-xs
|
|
772
|
+
class="shrink-0 text-xs tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
773
773
|
>
|
|
774
774
|
Skipped
|
|
775
775
|
</span>
|
|
@@ -1375,7 +1375,7 @@ const cadences: { value: ReminderCadence; label: string }[] = [
|
|
|
1375
1375
|
<!-- What you'll get. -->
|
|
1376
1376
|
<section class="flex flex-col gap-2.5">
|
|
1377
1377
|
<h3
|
|
1378
|
-
class="text-xs font-semibold
|
|
1378
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1379
1379
|
>
|
|
1380
1380
|
What you'll get
|
|
1381
1381
|
</h3>
|
|
@@ -712,7 +712,7 @@ const trail = computed(() => [
|
|
|
712
712
|
<template>
|
|
713
713
|
<section class="flex flex-col gap-3">
|
|
714
714
|
<h2
|
|
715
|
-
class="text-xs font-semibold
|
|
715
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
716
716
|
>
|
|
717
717
|
Details
|
|
718
718
|
</h2>
|
|
@@ -834,7 +834,7 @@ const ctx = useInvoiceForm();
|
|
|
834
834
|
<section class="flex flex-col gap-3">
|
|
835
835
|
<div class="flex items-center justify-between">
|
|
836
836
|
<h2
|
|
837
|
-
class="text-xs font-semibold
|
|
837
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
838
838
|
>
|
|
839
839
|
Line items
|
|
840
840
|
</h2>
|
|
@@ -926,7 +926,7 @@ const currency = new Intl.NumberFormat('en-US', {
|
|
|
926
926
|
<div class="grid min-w-0 flex-1 grid-cols-3 gap-3">
|
|
927
927
|
<div>
|
|
928
928
|
<p
|
|
929
|
-
class="mb-1 text-right text-xs font-semibold
|
|
929
|
+
class="mb-1 text-right text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
930
930
|
>
|
|
931
931
|
Qty
|
|
932
932
|
</p>
|
|
@@ -934,7 +934,7 @@ const currency = new Intl.NumberFormat('en-US', {
|
|
|
934
934
|
</div>
|
|
935
935
|
<div>
|
|
936
936
|
<p
|
|
937
|
-
class="mb-1 text-right text-xs font-semibold
|
|
937
|
+
class="mb-1 text-right text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
938
938
|
>
|
|
939
939
|
Unit price
|
|
940
940
|
</p>
|
|
@@ -942,7 +942,7 @@ const currency = new Intl.NumberFormat('en-US', {
|
|
|
942
942
|
</div>
|
|
943
943
|
<div>
|
|
944
944
|
<p
|
|
945
|
-
class="mb-1 text-right text-xs font-semibold
|
|
945
|
+
class="mb-1 text-right text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
946
946
|
>
|
|
947
947
|
Amount
|
|
948
948
|
</p>
|
|
@@ -975,7 +975,7 @@ const currency = new Intl.NumberFormat('en-US', {
|
|
|
975
975
|
|
|
976
976
|
<div>
|
|
977
977
|
<p
|
|
978
|
-
class="mb-1 text-xs font-semibold
|
|
978
|
+
class="mb-1 text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
979
979
|
>
|
|
980
980
|
Description
|
|
981
981
|
</p>
|
|
@@ -1024,7 +1024,7 @@ const currency = new Intl.NumberFormat('en-US', {
|
|
|
1024
1024
|
/>
|
|
1025
1025
|
<button
|
|
1026
1026
|
v-else
|
|
1027
|
-
class="w-full
|
|
1027
|
+
class="w-full rounded-[var(--bb-radius)] px-1 py-0.5 text-left whitespace-pre-wrap hover:bg-[color:var(--bb-hover)]"
|
|
1028
1028
|
:class="{
|
|
1029
1029
|
'text-[color:var(--bb-text-muted)]': !line.description,
|
|
1030
1030
|
'text-[color:var(--bb-danger)]': hasError,
|
|
@@ -1409,7 +1409,7 @@ const ctx = useInvoiceForm();
|
|
|
1409
1409
|
<!-- Billing profile: exactly the fields this form negotiates. -->
|
|
1410
1410
|
<section class="flex flex-col gap-1.5">
|
|
1411
1411
|
<h3
|
|
1412
|
-
class="text-xs font-semibold
|
|
1412
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1413
1413
|
>
|
|
1414
1414
|
Billing profile
|
|
1415
1415
|
</h3>
|
|
@@ -1439,7 +1439,7 @@ const ctx = useInvoiceForm();
|
|
|
1439
1439
|
through the route-leave guard. -->
|
|
1440
1440
|
<section class="flex flex-col gap-1.5">
|
|
1441
1441
|
<h3
|
|
1442
|
-
class="text-xs font-semibold
|
|
1442
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1443
1443
|
>
|
|
1444
1444
|
Recent invoices
|
|
1445
1445
|
</h3>
|
|
@@ -1453,7 +1453,7 @@ const ctx = useInvoiceForm();
|
|
|
1453
1453
|
{{ recent.number }}
|
|
1454
1454
|
</BbBaseButton>
|
|
1455
1455
|
<BbBadge variant="outline">{{ recent.status }}</BbBadge>
|
|
1456
|
-
<span class="text-xs
|
|
1456
|
+
<span class="text-xs text-[color:var(--bb-text-muted)] tabular-nums">
|
|
1457
1457
|
{{ currency.format(recent.amount) }}
|
|
1458
1458
|
</span>
|
|
1459
1459
|
</li>
|
|
@@ -1074,7 +1074,7 @@ const clearSelection = () => {
|
|
|
1074
1074
|
<!-- Line items: a real mini-table, not a summary sentence. -->
|
|
1075
1075
|
<section class="flex flex-col gap-1.5">
|
|
1076
1076
|
<h3
|
|
1077
|
-
class="text-xs font-semibold
|
|
1077
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1078
1078
|
>
|
|
1079
1079
|
Line items
|
|
1080
1080
|
</h3>
|
|
@@ -1098,7 +1098,7 @@ const clearSelection = () => {
|
|
|
1098
1098
|
<!-- Payments so far. -->
|
|
1099
1099
|
<section v-if="invoice.payments.length" class="flex flex-col gap-1.5">
|
|
1100
1100
|
<h3
|
|
1101
|
-
class="text-xs font-semibold
|
|
1101
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1102
1102
|
>
|
|
1103
1103
|
Payments
|
|
1104
1104
|
</h3>
|
|
@@ -1121,7 +1121,7 @@ const clearSelection = () => {
|
|
|
1121
1121
|
<!-- Activity feed. -->
|
|
1122
1122
|
<section class="flex flex-col gap-1.5">
|
|
1123
1123
|
<h3
|
|
1124
|
-
class="text-xs font-semibold
|
|
1124
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1125
1125
|
>
|
|
1126
1126
|
Activity
|
|
1127
1127
|
</h3>
|
|
@@ -1242,7 +1242,7 @@ const longDate = (value: string) =>
|
|
|
1242
1242
|
variant — same identity-cell rule as the invoices table. -->
|
|
1243
1243
|
<section class="flex flex-col gap-1.5">
|
|
1244
1244
|
<h3
|
|
1245
|
-
class="text-xs font-semibold
|
|
1245
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1246
1246
|
>
|
|
1247
1247
|
Recent invoices
|
|
1248
1248
|
</h3>
|