@k2b/ui 0.48.0 → 0.50.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/base.css +40 -2
- package/dist/browser/actions/ContextMenu.js +3 -0
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/CopyButton.js +26 -18
- package/dist/browser/actions/CopyButton.js.map +1 -1
- package/dist/browser/charts/core/area.js +190 -0
- package/dist/browser/charts/core/area.js.map +1 -0
- package/dist/browser/charts/core/calendar.js +186 -0
- package/dist/browser/charts/core/calendar.js.map +1 -0
- package/dist/browser/charts/core/chart-map-data.js +9 -0
- package/dist/browser/charts/core/chart-map-data.js.map +1 -0
- package/dist/browser/charts/core/index.js +12 -0
- package/dist/browser/charts/core/index.js.map +1 -0
- package/dist/browser/charts/core/inspection.js +9 -0
- package/dist/browser/charts/core/inspection.js.map +1 -0
- package/dist/browser/charts/core/registry.js +28 -0
- package/dist/browser/charts/core/registry.js.map +1 -0
- package/dist/browser/charts/core/render.js +103 -0
- package/dist/browser/charts/core/render.js.map +1 -0
- package/dist/browser/charts/core/snapshot.js +65 -0
- package/dist/browser/charts/core/snapshot.js.map +1 -0
- package/dist/browser/charts/core/svg.js +2542 -0
- package/dist/browser/charts/core/svg.js.map +1 -0
- package/dist/browser/charts/core/termination.test-fixture.js +162 -0
- package/dist/browser/charts/core/termination.test-fixture.js.map +1 -0
- package/dist/browser/charts/core/text.js +13 -0
- package/dist/browser/charts/core/text.js.map +1 -0
- package/dist/browser/charts/core/types.js +8 -0
- package/dist/browser/charts/core/types.js.map +1 -0
- package/dist/browser/charts.js +4 -2
- package/dist/browser/charts.js.map +1 -1
- package/dist/browser/content/BalanceSummary.js +106 -0
- package/dist/browser/content/BalanceSummary.js.map +1 -0
- package/dist/browser/content/Chart.js +134 -115
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js +366 -122
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/ChartSnapshotView.js +16 -9
- package/dist/browser/content/ChartSnapshotView.js.map +1 -1
- package/dist/browser/content/DataTable.js +676 -293
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/DataTableTools.js +119 -0
- package/dist/browser/content/DataTableTools.js.map +1 -0
- package/dist/browser/content/FlowAmount.js +82 -0
- package/dist/browser/content/FlowAmount.js.map +1 -0
- package/dist/browser/content/balance-summary-messages.js +26 -0
- package/dist/browser/content/balance-summary-messages.js.map +1 -0
- package/dist/browser/content/chart-bar.js +6 -6
- package/dist/browser/content/chart-bar.js.map +1 -1
- package/dist/browser/content/chart-calendar.js +43 -0
- package/dist/browser/content/chart-calendar.js.map +1 -0
- package/dist/browser/content/chart-inspection-core.js +164 -37
- package/dist/browser/content/chart-inspection-core.js.map +1 -1
- package/dist/browser/content/chart-inspection.js.map +1 -1
- package/dist/browser/content/chart-line-gaps.js +2 -2
- package/dist/browser/content/chart-line-gaps.js.map +1 -1
- package/dist/browser/content/chart-map-viewport.js.map +1 -1
- package/dist/browser/content/chart-message-catalog.js +164 -0
- package/dist/browser/content/chart-message-catalog.js.map +1 -0
- package/dist/browser/content/chart-messages.js +2 -138
- package/dist/browser/content/chart-messages.js.map +1 -1
- package/dist/browser/content/chart-snapshot.js +1 -62
- package/dist/browser/content/chart-snapshot.js.map +1 -1
- package/dist/browser/content/chart-state-timeline.js +1 -1
- package/dist/browser/content/chart-state-timeline.js.map +1 -1
- package/dist/browser/content/chart-svg.js +2 -1
- package/dist/browser/content/chart-svg.js.map +1 -1
- package/dist/browser/content/chart-time-axis.js +139 -0
- package/dist/browser/content/chart-time-axis.js.map +1 -0
- package/dist/browser/content/data-table-columns.js +160 -0
- package/dist/browser/content/data-table-columns.js.map +1 -0
- package/dist/browser/content/data-table-messages.js +38 -2
- package/dist/browser/content/data-table-messages.js.map +1 -1
- package/dist/browser/content/flow-amount-messages.js +26 -0
- package/dist/browser/content/flow-amount-messages.js.map +1 -0
- package/dist/browser/content/index.js +4 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/feedback/prompt-confirm.js +7 -4
- package/dist/browser/feedback/prompt-confirm.js.map +1 -1
- package/dist/browser/feedback/prompts.js +3 -3
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js +5 -4
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/NumberInput.js +17 -5
- package/dist/browser/inputs/NumberInput.js.map +1 -1
- package/dist/browser/inputs/SelectChip.js +50 -17
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/inputs/date-picker.js +13 -0
- package/dist/browser/inputs/date-picker.js.map +1 -1
- package/dist/browser/intl/Format.js +31 -8
- package/dist/browser/intl/Format.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +580 -522
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/MobileShell.js +26 -0
- package/dist/browser/layout/MobileShell.js.map +1 -1
- package/dist/browser/layout/index.js +1 -0
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/sheet-handle.js +155 -0
- package/dist/browser/layout/sheet-handle.js.map +1 -0
- package/dist/browser/surfaces/BudgetList.js +281 -0
- package/dist/browser/surfaces/BudgetList.js.map +1 -0
- package/dist/browser/surfaces/NoticeCard.js +48 -29
- package/dist/browser/surfaces/NoticeCard.js.map +1 -1
- package/dist/browser/surfaces/ProgressBar.js +134 -21
- package/dist/browser/surfaces/ProgressBar.js.map +1 -1
- package/dist/browser/surfaces/StatCell.js +320 -144
- package/dist/browser/surfaces/StatCell.js.map +1 -1
- package/dist/browser/surfaces/StatGrid.js +75 -57
- package/dist/browser/surfaces/StatGrid.js.map +1 -1
- package/dist/browser/surfaces/budget-messages.js +64 -0
- package/dist/browser/surfaces/budget-messages.js.map +1 -0
- package/dist/browser/surfaces/delta-badge.js +65 -0
- package/dist/browser/surfaces/delta-badge.js.map +1 -0
- package/dist/browser/surfaces/index.js +2 -1
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/browser/surfaces/person-color.js +2 -2
- package/dist/browser/surfaces/person-color.js.map +1 -1
- package/dist/browser/surfaces/stat-cell-messages.js +41 -0
- package/dist/browser/surfaces/stat-cell-messages.js.map +1 -0
- package/dist/browser/widgets/Dashboard.js +137 -0
- package/dist/browser/widgets/Dashboard.js.map +1 -0
- package/dist/browser/widgets/index.js +1 -0
- package/dist/browser/widgets/index.js.map +1 -1
- package/dist/ssr/actions/ContextMenu.js +3 -0
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/CopyButton.js +13 -8
- package/dist/ssr/actions/CopyButton.js.map +1 -1
- package/dist/ssr/charts/core/area.js +190 -0
- package/dist/ssr/charts/core/area.js.map +1 -0
- package/dist/ssr/charts/core/calendar.js +186 -0
- package/dist/ssr/charts/core/calendar.js.map +1 -0
- package/dist/ssr/charts/core/chart-map-data.js +9 -0
- package/dist/ssr/charts/core/chart-map-data.js.map +1 -0
- package/dist/ssr/charts/core/index.js +12 -0
- package/dist/ssr/charts/core/index.js.map +1 -0
- package/dist/ssr/charts/core/inspection.js +9 -0
- package/dist/ssr/charts/core/inspection.js.map +1 -0
- package/dist/ssr/charts/core/registry.js +28 -0
- package/dist/ssr/charts/core/registry.js.map +1 -0
- package/dist/ssr/charts/core/render.js +103 -0
- package/dist/ssr/charts/core/render.js.map +1 -0
- package/dist/ssr/charts/core/snapshot.js +65 -0
- package/dist/ssr/charts/core/snapshot.js.map +1 -0
- package/dist/ssr/charts/core/svg.js +2542 -0
- package/dist/ssr/charts/core/svg.js.map +1 -0
- package/dist/ssr/charts/core/termination.test-fixture.js +162 -0
- package/dist/ssr/charts/core/termination.test-fixture.js.map +1 -0
- package/dist/ssr/charts/core/text.js +13 -0
- package/dist/ssr/charts/core/text.js.map +1 -0
- package/dist/ssr/charts/core/types.js +8 -0
- package/dist/ssr/charts/core/types.js.map +1 -0
- package/dist/ssr/charts.js +4 -2
- package/dist/ssr/charts.js.map +1 -1
- package/dist/ssr/content/BalanceSummary.js +75 -0
- package/dist/ssr/content/BalanceSummary.js.map +1 -0
- package/dist/ssr/content/Chart.js +90 -95
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js +190 -46
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/ChartSnapshotView.js +5 -1
- package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
- package/dist/ssr/content/DataTable.js +287 -78
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/DataTableTools.js +106 -0
- package/dist/ssr/content/DataTableTools.js.map +1 -0
- package/dist/ssr/content/FlowAmount.js +58 -0
- package/dist/ssr/content/FlowAmount.js.map +1 -0
- package/dist/ssr/content/balance-summary-messages.js +26 -0
- package/dist/ssr/content/balance-summary-messages.js.map +1 -0
- package/dist/ssr/content/chart-bar.js +6 -6
- package/dist/ssr/content/chart-bar.js.map +1 -1
- package/dist/ssr/content/chart-calendar.js +43 -0
- package/dist/ssr/content/chart-calendar.js.map +1 -0
- package/dist/ssr/content/chart-inspection-core.js +164 -37
- package/dist/ssr/content/chart-inspection-core.js.map +1 -1
- package/dist/ssr/content/chart-inspection.js.map +1 -1
- package/dist/ssr/content/chart-line-gaps.js +2 -2
- package/dist/ssr/content/chart-line-gaps.js.map +1 -1
- package/dist/ssr/content/chart-map-viewport.js.map +1 -1
- package/dist/ssr/content/chart-message-catalog.js +164 -0
- package/dist/ssr/content/chart-message-catalog.js.map +1 -0
- package/dist/ssr/content/chart-messages.js +2 -138
- package/dist/ssr/content/chart-messages.js.map +1 -1
- package/dist/ssr/content/chart-snapshot.js +1 -62
- package/dist/ssr/content/chart-snapshot.js.map +1 -1
- package/dist/ssr/content/chart-state-timeline.js +1 -1
- package/dist/ssr/content/chart-state-timeline.js.map +1 -1
- package/dist/ssr/content/chart-svg.js +2 -1
- package/dist/ssr/content/chart-svg.js.map +1 -1
- package/dist/ssr/content/chart-time-axis.js +139 -0
- package/dist/ssr/content/chart-time-axis.js.map +1 -0
- package/dist/ssr/content/data-table-columns.js +160 -0
- package/dist/ssr/content/data-table-columns.js.map +1 -0
- package/dist/ssr/content/data-table-messages.js +38 -2
- package/dist/ssr/content/data-table-messages.js.map +1 -1
- package/dist/ssr/content/flow-amount-messages.js +26 -0
- package/dist/ssr/content/flow-amount-messages.js.map +1 -0
- package/dist/ssr/content/index.js +4 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/feedback/prompt-confirm.js +7 -4
- package/dist/ssr/feedback/prompt-confirm.js.map +1 -1
- package/dist/ssr/feedback/prompts.js +3 -3
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +5 -4
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/NumberInput.js +17 -5
- package/dist/ssr/inputs/NumberInput.js.map +1 -1
- package/dist/ssr/inputs/SelectChip.js +26 -9
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/inputs/date-picker.js +13 -0
- package/dist/ssr/inputs/date-picker.js.map +1 -1
- package/dist/ssr/intl/Format.js +22 -2
- package/dist/ssr/intl/Format.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +158 -114
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/MobileShell.js +26 -0
- package/dist/ssr/layout/MobileShell.js.map +1 -1
- package/dist/ssr/layout/index.js +1 -0
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/sheet-handle.js +155 -0
- package/dist/ssr/layout/sheet-handle.js.map +1 -0
- package/dist/ssr/surfaces/BudgetList.js +170 -0
- package/dist/ssr/surfaces/BudgetList.js.map +1 -0
- package/dist/ssr/surfaces/NoticeCard.js +25 -10
- package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
- package/dist/ssr/surfaces/ProgressBar.js +96 -5
- package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
- package/dist/ssr/surfaces/StatCell.js +157 -51
- package/dist/ssr/surfaces/StatCell.js.map +1 -1
- package/dist/ssr/surfaces/StatGrid.js +24 -35
- package/dist/ssr/surfaces/StatGrid.js.map +1 -1
- package/dist/ssr/surfaces/budget-messages.js +64 -0
- package/dist/ssr/surfaces/budget-messages.js.map +1 -0
- package/dist/ssr/surfaces/delta-badge.js +41 -0
- package/dist/ssr/surfaces/delta-badge.js.map +1 -0
- package/dist/ssr/surfaces/index.js +2 -1
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/ssr/surfaces/person-color.js +2 -2
- package/dist/ssr/surfaces/person-color.js.map +1 -1
- package/dist/ssr/surfaces/stat-cell-messages.js +41 -0
- package/dist/ssr/surfaces/stat-cell-messages.js.map +1 -0
- package/dist/ssr/widgets/Dashboard.js +84 -0
- package/dist/ssr/widgets/Dashboard.js.map +1 -0
- package/dist/ssr/widgets/index.js +1 -0
- package/dist/ssr/widgets/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/charts/core/area.d.ts +62 -0
- package/dist/types/charts/core/calendar.d.ts +57 -0
- package/dist/types/charts/core/chart-map-data.d.ts +3 -0
- package/dist/types/charts/core/index.d.ts +11 -0
- package/dist/types/charts/core/inspection.d.ts +16 -0
- package/dist/types/charts/core/registry.d.ts +27 -0
- package/dist/types/charts/core/render.d.ts +40 -0
- package/dist/types/charts/core/snapshot.d.ts +27 -0
- package/dist/types/charts/core/svg.d.ts +714 -0
- package/dist/types/charts/core/termination.test-fixture.d.ts +1 -0
- package/dist/types/charts/core/text.d.ts +5 -0
- package/dist/types/charts/core/types.d.ts +31 -0
- package/dist/types/charts.d.ts +4 -2
- package/dist/types/content/BalanceSummary.d.ts +29 -0
- package/dist/types/content/Chart.d.ts +26 -36
- package/dist/types/content/ChartExplorer.d.ts +43 -2
- package/dist/types/content/ChartSnapshotView.d.ts +1 -0
- package/dist/types/content/DataTable.d.ts +28 -0
- package/dist/types/content/DataTableTools.d.ts +44 -0
- package/dist/types/content/FlowAmount.d.ts +28 -0
- package/dist/types/content/balance-summary-messages.d.ts +11 -0
- package/dist/types/content/chart-bar.d.ts +1 -1
- package/dist/types/content/chart-calendar.d.ts +4 -0
- package/dist/types/content/chart-inspection-core.d.ts +21 -16
- package/dist/types/content/chart-inspection.d.ts +5 -1
- package/dist/types/content/chart-map-viewport.d.ts +1 -1
- package/dist/types/content/chart-message-catalog.d.ts +84 -0
- package/dist/types/content/chart-messages.d.ts +2 -33
- package/dist/types/content/chart-snapshot.d.ts +1 -26
- package/dist/types/content/chart-svg.d.ts +1 -1
- package/dist/types/content/chart-time-axis.d.ts +26 -0
- package/dist/types/content/data-table-columns.d.ts +72 -0
- package/dist/types/content/data-table-messages.d.ts +18 -0
- package/dist/types/content/flow-amount-messages.d.ts +11 -0
- package/dist/types/content/index.d.ts +10 -2
- package/dist/types/feedback/prompt-confirm.d.ts +3 -1
- package/dist/types/feedback/prompts.d.ts +2 -2
- package/dist/types/inputs/NumberInput.d.ts +1 -1
- package/dist/types/inputs/SelectChip.d.ts +2 -0
- package/dist/types/inputs/date-picker.d.ts +6 -0
- package/dist/types/intl/Format.d.ts +5 -0
- package/dist/types/layout/AppWorkspace.d.ts +21 -1
- package/dist/types/layout/MobileShell.d.ts +5 -0
- package/dist/types/layout/index.d.ts +2 -1
- package/dist/types/layout/sheet-handle.d.ts +21 -0
- package/dist/types/surfaces/BudgetList.d.ts +42 -0
- package/dist/types/surfaces/NoticeCard.d.ts +5 -2
- package/dist/types/surfaces/ProgressBar.d.ts +38 -2
- package/dist/types/surfaces/StatCell.d.ts +35 -2
- package/dist/types/surfaces/StatGrid.d.ts +3 -1
- package/dist/types/surfaces/budget-messages.d.ts +30 -0
- package/dist/types/surfaces/delta-badge.d.ts +10 -0
- package/dist/types/surfaces/index.d.ts +4 -3
- package/dist/types/surfaces/person-color.d.ts +2 -2
- package/dist/types/surfaces/stat-cell-messages.d.ts +19 -0
- package/dist/types/widgets/Dashboard.d.ts +42 -0
- package/dist/types/widgets/index.d.ts +1 -0
- package/package.json +7 -1
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { template as _$template } from "solid-js/web";
|
|
2
|
+
import { setAttribute as _$setAttribute } from "solid-js/web";
|
|
3
|
+
import { memo as _$memo } from "solid-js/web";
|
|
4
|
+
import { className as _$className } from "solid-js/web";
|
|
5
|
+
import { effect as _$effect } from "solid-js/web";
|
|
6
|
+
import { getNextMarker as _$getNextMarker } from "solid-js/web";
|
|
7
|
+
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
8
|
+
import { insert as _$insert } from "solid-js/web";
|
|
9
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
10
|
+
var _tmpl$ = /*#__PURE__*/_$template(`<ul class=k2b-budget__list>`),
|
|
11
|
+
_tmpl$2 = /*#__PURE__*/_$template(`<li><span class=k2b-budget__swatch data-pattern=hatched></span><!$><!/>`),
|
|
12
|
+
_tmpl$3 = /*#__PURE__*/_$template(`<li><span class=k2b-budget__swatch data-pattern=over></span><!$><!/>`),
|
|
13
|
+
_tmpl$4 = /*#__PURE__*/_$template(`<ul class=k2b-budget__legend aria-hidden=true><li><span class=k2b-budget__swatch data-pattern=solid></span><!$><!/></li><!$><!/><!$><!/>`),
|
|
14
|
+
_tmpl$5 = /*#__PURE__*/_$template(`<div>`),
|
|
15
|
+
_tmpl$6 = /*#__PURE__*/_$template(`<p class=k2b-budget__empty>`),
|
|
16
|
+
_tmpl$7 = /*#__PURE__*/_$template(`<span class=k2b-budget__label>`),
|
|
17
|
+
_tmpl$8 = /*#__PURE__*/_$template(`<span class=k2b-budget__amount><!$><!/> <span>`),
|
|
18
|
+
_tmpl$9 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
|
|
19
|
+
_tmpl$0 = /*#__PURE__*/_$template(`<span class=k2b-budget__hint><!$><!/><!$><!/>`),
|
|
20
|
+
_tmpl$1 = /*#__PURE__*/_$template(`<li class=k2b-budget__row>`),
|
|
21
|
+
_tmpl$10 = /*#__PURE__*/_$template(`<span><!$><!/> <b>`),
|
|
22
|
+
_tmpl$11 = /*#__PURE__*/_$template(`<span class=k2b-budget__tip><b></b><span><!$><!/> <b></b></span><!$><!/><span><!$><!/> <b></b></span><span><!$><!/> <b>`);
|
|
23
|
+
import { For, Show } from "solid-js";
|
|
24
|
+
import { Tooltip } from "../feedback/Tooltip";
|
|
25
|
+
import { useLocale } from "../intl/locale";
|
|
26
|
+
import { useBudgetMessages } from "./budget-messages";
|
|
27
|
+
import { budgetOverrun, budgetRatio, ProgressBar } from "./ProgressBar";
|
|
28
|
+
|
|
29
|
+
/** One budget: `used` is booked, `expected` comes on top; over the budget is `used + expected - limit`. */
|
|
30
|
+
|
|
31
|
+
/** "near" from 80 % of the budget, "over" beyond it. */
|
|
32
|
+
|
|
33
|
+
/** The figures of one budget row; the share counts booked and expected together. */
|
|
34
|
+
export const budgetState = item => {
|
|
35
|
+
const used = Number.isFinite(item.used) ? Math.max(0, item.used) : 0;
|
|
36
|
+
const expected = item.expected !== undefined && Number.isFinite(item.expected) ? Math.max(0, item.expected) : 0;
|
|
37
|
+
const limit = Number.isFinite(item.limit) ? Math.max(0, item.limit) : 0;
|
|
38
|
+
const total = used + expected;
|
|
39
|
+
const over = budgetOverrun(total, limit);
|
|
40
|
+
const ratio = budgetRatio(total, limit);
|
|
41
|
+
// The same float tolerance as the overrun: 0.7 + 0.1 of 1 is exactly 80 %.
|
|
42
|
+
const level = over > 0 ? "over" : ratio >= 0.8 - 1e-9 ? "near" : "ok";
|
|
43
|
+
return {
|
|
44
|
+
used,
|
|
45
|
+
expected,
|
|
46
|
+
limit,
|
|
47
|
+
total,
|
|
48
|
+
over,
|
|
49
|
+
free: over > 0 ? 0 : Math.max(0, limit - total),
|
|
50
|
+
ratio,
|
|
51
|
+
level
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Budgets as rows: label and "spent of budget", a bar with booked (solid), expected (hatched) and over the budget
|
|
57
|
+
* (red, with a mark at the limit), and a hint that turns amber from 80 % and red beyond the budget.
|
|
58
|
+
*/
|
|
59
|
+
export function BudgetList(props) {
|
|
60
|
+
const locale = useLocale();
|
|
61
|
+
const t = useBudgetMessages(() => props.locale);
|
|
62
|
+
const money = value => new Intl.NumberFormat(props.locale ?? locale(), {
|
|
63
|
+
style: "currency",
|
|
64
|
+
currency: props.currency,
|
|
65
|
+
minimumFractionDigits: props.decimals ?? 0,
|
|
66
|
+
maximumFractionDigits: props.decimals ?? 0
|
|
67
|
+
}).format(value);
|
|
68
|
+
const states = () => props.items.map(item => ({
|
|
69
|
+
item,
|
|
70
|
+
state: budgetState(item)
|
|
71
|
+
}));
|
|
72
|
+
const anyExpected = () => states().some(({
|
|
73
|
+
state
|
|
74
|
+
}) => state.expected > 0);
|
|
75
|
+
const anyOver = () => states().some(({
|
|
76
|
+
state
|
|
77
|
+
}) => state.over > 0);
|
|
78
|
+
return (() => {
|
|
79
|
+
var _el$ = _$getNextElement(_tmpl$5);
|
|
80
|
+
_$insert(_el$, _$createComponent(Show, {
|
|
81
|
+
get when() {
|
|
82
|
+
return props.items.length;
|
|
83
|
+
},
|
|
84
|
+
get fallback() {
|
|
85
|
+
return (() => {
|
|
86
|
+
var _el$18 = _$getNextElement(_tmpl$6);
|
|
87
|
+
_$insert(_el$18, () => props.empty);
|
|
88
|
+
return _el$18;
|
|
89
|
+
})();
|
|
90
|
+
},
|
|
91
|
+
get children() {
|
|
92
|
+
return [(() => {
|
|
93
|
+
var _el$2 = _$getNextElement(_tmpl$);
|
|
94
|
+
_$insert(_el$2, _$createComponent(For, {
|
|
95
|
+
get each() {
|
|
96
|
+
return states();
|
|
97
|
+
},
|
|
98
|
+
children: ({
|
|
99
|
+
item,
|
|
100
|
+
state
|
|
101
|
+
}) => (() => {
|
|
102
|
+
var _el$19 = _$getNextElement(_tmpl$1);
|
|
103
|
+
_$insert(_el$19, _$createComponent(Tooltip.Anchor, {
|
|
104
|
+
"class": "k2b-budget__anchor",
|
|
105
|
+
tabIndex: 0,
|
|
106
|
+
get content() {
|
|
107
|
+
return (() => {
|
|
108
|
+
var _el$32 = _$getNextElement(_tmpl$11),
|
|
109
|
+
_el$33 = _el$32.firstChild,
|
|
110
|
+
_el$34 = _el$33.nextSibling,
|
|
111
|
+
_el$37 = _el$34.firstChild,
|
|
112
|
+
[_el$38, _co$9] = _$getNextMarker(_el$37.nextSibling),
|
|
113
|
+
_el$35 = _el$38.nextSibling,
|
|
114
|
+
_el$36 = _el$35.nextSibling,
|
|
115
|
+
_el$54 = _el$34.nextSibling,
|
|
116
|
+
[_el$55, _co$11] = _$getNextMarker(_el$54.nextSibling),
|
|
117
|
+
_el$44 = _el$55.nextSibling,
|
|
118
|
+
_el$47 = _el$44.firstChild,
|
|
119
|
+
[_el$48, _co$1] = _$getNextMarker(_el$47.nextSibling),
|
|
120
|
+
_el$45 = _el$48.nextSibling,
|
|
121
|
+
_el$46 = _el$45.nextSibling,
|
|
122
|
+
_el$49 = _el$44.nextSibling,
|
|
123
|
+
_el$52 = _el$49.firstChild,
|
|
124
|
+
[_el$53, _co$10] = _$getNextMarker(_el$52.nextSibling),
|
|
125
|
+
_el$50 = _el$53.nextSibling,
|
|
126
|
+
_el$51 = _el$50.nextSibling;
|
|
127
|
+
_$insert(_el$33, () => item.label);
|
|
128
|
+
_$insert(_el$34, () => t().used, _el$38, _co$9);
|
|
129
|
+
_$insert(_el$36, () => money(state.used));
|
|
130
|
+
_$insert(_el$32, _$createComponent(Show, {
|
|
131
|
+
get when() {
|
|
132
|
+
return state.expected > 0;
|
|
133
|
+
},
|
|
134
|
+
get children() {
|
|
135
|
+
var _el$39 = _$getNextElement(_tmpl$10),
|
|
136
|
+
_el$42 = _el$39.firstChild,
|
|
137
|
+
[_el$43, _co$0] = _$getNextMarker(_el$42.nextSibling),
|
|
138
|
+
_el$40 = _el$43.nextSibling,
|
|
139
|
+
_el$41 = _el$40.nextSibling;
|
|
140
|
+
_$insert(_el$39, () => t().expected, _el$43, _co$0);
|
|
141
|
+
_$insert(_el$41, () => money(state.expected));
|
|
142
|
+
return _el$39;
|
|
143
|
+
}
|
|
144
|
+
}), _el$55, _co$11);
|
|
145
|
+
_$insert(_el$44, () => t().budget, _el$48, _co$1);
|
|
146
|
+
_$insert(_el$46, () => money(state.limit));
|
|
147
|
+
_$insert(_el$49, (() => {
|
|
148
|
+
var _c$2 = _$memo(() => state.over > 0);
|
|
149
|
+
return () => _c$2() ? t().overBy : t().left;
|
|
150
|
+
})(), _el$53, _co$10);
|
|
151
|
+
_$insert(_el$51, () => money(state.over > 0 ? state.over : state.free));
|
|
152
|
+
return _el$32;
|
|
153
|
+
})();
|
|
154
|
+
},
|
|
155
|
+
get children() {
|
|
156
|
+
return [(() => {
|
|
157
|
+
var _el$20 = _$getNextElement(_tmpl$7);
|
|
158
|
+
_$insert(_el$20, () => item.label);
|
|
159
|
+
return _el$20;
|
|
160
|
+
})(), (() => {
|
|
161
|
+
var _el$21 = _$getNextElement(_tmpl$8),
|
|
162
|
+
_el$24 = _el$21.firstChild,
|
|
163
|
+
[_el$25, _co$6] = _$getNextMarker(_el$24.nextSibling),
|
|
164
|
+
_el$22 = _el$25.nextSibling,
|
|
165
|
+
_el$23 = _el$22.nextSibling;
|
|
166
|
+
_$insert(_el$21, () => money(state.total), _el$25, _co$6);
|
|
167
|
+
_$insert(_el$23, () => t().of({
|
|
168
|
+
limit: money(state.limit)
|
|
169
|
+
}));
|
|
170
|
+
return _el$21;
|
|
171
|
+
})(), _$createComponent(ProgressBar, {
|
|
172
|
+
"class": "k2b-budget__bar",
|
|
173
|
+
size: "sm",
|
|
174
|
+
get label() {
|
|
175
|
+
return item.label;
|
|
176
|
+
},
|
|
177
|
+
get segments() {
|
|
178
|
+
return [{
|
|
179
|
+
value: state.used
|
|
180
|
+
}, {
|
|
181
|
+
value: state.expected,
|
|
182
|
+
pattern: "hatched"
|
|
183
|
+
}];
|
|
184
|
+
},
|
|
185
|
+
get limit() {
|
|
186
|
+
return state.limit;
|
|
187
|
+
},
|
|
188
|
+
get valueText() {
|
|
189
|
+
return t().valueText({
|
|
190
|
+
used: money(state.used),
|
|
191
|
+
expected: state.expected > 0 ? money(state.expected) : undefined,
|
|
192
|
+
limit: money(state.limit)
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
}), (() => {
|
|
196
|
+
var _el$26 = _$getNextElement(_tmpl$0),
|
|
197
|
+
_el$28 = _el$26.firstChild,
|
|
198
|
+
[_el$29, _co$7] = _$getNextMarker(_el$28.nextSibling),
|
|
199
|
+
_el$30 = _el$29.nextSibling,
|
|
200
|
+
[_el$31, _co$8] = _$getNextMarker(_el$30.nextSibling);
|
|
201
|
+
_$insert(_el$26, _$createComponent(Show, {
|
|
202
|
+
get when() {
|
|
203
|
+
return state.level !== "ok";
|
|
204
|
+
},
|
|
205
|
+
get children() {
|
|
206
|
+
var _el$27 = _$getNextElement(_tmpl$9);
|
|
207
|
+
_$effect(() => _$className(_el$27, state.level === "over" ? "ti ti-alert-circle" : "ti ti-alert-triangle"));
|
|
208
|
+
return _el$27;
|
|
209
|
+
}
|
|
210
|
+
}), _el$29, _co$7);
|
|
211
|
+
_$insert(_el$26, (() => {
|
|
212
|
+
var _c$ = _$memo(() => state.level === "over");
|
|
213
|
+
return () => _c$() ? t().over({
|
|
214
|
+
amount: money(state.over)
|
|
215
|
+
}) : _$memo(() => state.level === "near")() ? t().near({
|
|
216
|
+
amount: money(state.free)
|
|
217
|
+
}) : t().free({
|
|
218
|
+
amount: money(state.free)
|
|
219
|
+
});
|
|
220
|
+
})(), _el$31, _co$8);
|
|
221
|
+
return _el$26;
|
|
222
|
+
})()];
|
|
223
|
+
}
|
|
224
|
+
}));
|
|
225
|
+
_$effect(() => _$setAttribute(_el$19, "data-level", state.level));
|
|
226
|
+
return _el$19;
|
|
227
|
+
})()
|
|
228
|
+
}));
|
|
229
|
+
return _el$2;
|
|
230
|
+
})(), _$createComponent(Show, {
|
|
231
|
+
get when() {
|
|
232
|
+
return props.legend !== false;
|
|
233
|
+
},
|
|
234
|
+
get children() {
|
|
235
|
+
var _el$3 = _$getNextElement(_tmpl$4),
|
|
236
|
+
_el$4 = _el$3.firstChild,
|
|
237
|
+
_el$5 = _el$4.firstChild,
|
|
238
|
+
_el$6 = _el$5.nextSibling,
|
|
239
|
+
[_el$7, _co$] = _$getNextMarker(_el$6.nextSibling),
|
|
240
|
+
_el$14 = _el$4.nextSibling,
|
|
241
|
+
[_el$15, _co$4] = _$getNextMarker(_el$14.nextSibling),
|
|
242
|
+
_el$16 = _el$15.nextSibling,
|
|
243
|
+
[_el$17, _co$5] = _$getNextMarker(_el$16.nextSibling);
|
|
244
|
+
_$insert(_el$4, () => t().used, _el$7, _co$);
|
|
245
|
+
_$insert(_el$3, _$createComponent(Show, {
|
|
246
|
+
get when() {
|
|
247
|
+
return anyExpected();
|
|
248
|
+
},
|
|
249
|
+
get children() {
|
|
250
|
+
var _el$8 = _$getNextElement(_tmpl$2),
|
|
251
|
+
_el$9 = _el$8.firstChild,
|
|
252
|
+
_el$0 = _el$9.nextSibling,
|
|
253
|
+
[_el$1, _co$2] = _$getNextMarker(_el$0.nextSibling);
|
|
254
|
+
_$insert(_el$8, () => t().expected, _el$1, _co$2);
|
|
255
|
+
return _el$8;
|
|
256
|
+
}
|
|
257
|
+
}), _el$15, _co$4);
|
|
258
|
+
_$insert(_el$3, _$createComponent(Show, {
|
|
259
|
+
get when() {
|
|
260
|
+
return anyOver();
|
|
261
|
+
},
|
|
262
|
+
get children() {
|
|
263
|
+
var _el$10 = _$getNextElement(_tmpl$3),
|
|
264
|
+
_el$11 = _el$10.firstChild,
|
|
265
|
+
_el$12 = _el$11.nextSibling,
|
|
266
|
+
[_el$13, _co$3] = _$getNextMarker(_el$12.nextSibling);
|
|
267
|
+
_$insert(_el$10, () => t().overLegend, _el$13, _co$3);
|
|
268
|
+
return _el$10;
|
|
269
|
+
}
|
|
270
|
+
}), _el$17, _co$5);
|
|
271
|
+
return _el$3;
|
|
272
|
+
}
|
|
273
|
+
})];
|
|
274
|
+
}
|
|
275
|
+
}));
|
|
276
|
+
_$effect(() => _$className(_el$, `k2b-budget ${props.class ?? ""}`));
|
|
277
|
+
return _el$;
|
|
278
|
+
})();
|
|
279
|
+
}
|
|
280
|
+
export default BudgetList;
|
|
281
|
+
//# sourceMappingURL=BudgetList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/BudgetList.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\nimport { Tooltip } from \"../feedback/Tooltip\";\nimport { useLocale } from \"../intl/locale\";\nimport { useBudgetMessages } from \"./budget-messages\";\nimport { budgetOverrun, budgetRatio, ProgressBar } from \"./ProgressBar\";\n\n/** One budget: `used` is booked, `expected` comes on top; over the budget is `used + expected - limit`. */\nexport type BudgetItem = { id?: string; label: string; used: number; expected?: number; limit: number };\n\nexport type BudgetListProps = {\n items: readonly BudgetItem[];\n /** ISO 4217 currency code, e.g. `\"EUR\"`. */\n currency: string;\n /** Explicit locale override; defaults to the inherited render locale. */\n locale?: string;\n /** Fixed fraction digits. Defaults to 0. */\n decimals?: number;\n /** The sentence shown when there is no budget. */\n empty?: string;\n /** Hides the legend under the rows when the host explains the colours elsewhere. */\n legend?: boolean;\n class?: string;\n};\n\n/** \"near\" from 80 % of the budget, \"over\" beyond it. */\nexport type BudgetLevel = \"ok\" | \"near\" | \"over\";\n\n/** The figures of one budget row; the share counts booked and expected together. */\nexport const budgetState = (item: Pick<BudgetItem, \"used\" | \"expected\" | \"limit\">) => {\n const used = Number.isFinite(item.used) ? Math.max(0, item.used) : 0;\n const expected = item.expected !== undefined && Number.isFinite(item.expected) ? Math.max(0, item.expected) : 0;\n const limit = Number.isFinite(item.limit) ? Math.max(0, item.limit) : 0;\n const total = used + expected;\n const over = budgetOverrun(total, limit);\n const ratio = budgetRatio(total, limit);\n // The same float tolerance as the overrun: 0.7 + 0.1 of 1 is exactly 80 %.\n const level: BudgetLevel = over > 0 ? \"over\" : ratio >= 0.8 - 1e-9 ? \"near\" : \"ok\";\n return { used, expected, limit, total, over, free: over > 0 ? 0 : Math.max(0, limit - total), ratio, level };\n};\n\n/**\n * Budgets as rows: label and \"spent of budget\", a bar with booked (solid), expected (hatched) and over the budget\n * (red, with a mark at the limit), and a hint that turns amber from 80 % and red beyond the budget.\n */\nexport function BudgetList(props: BudgetListProps): JSX.Element {\n const locale = useLocale();\n const t = useBudgetMessages(() => props.locale);\n const money = (value: number) =>\n new Intl.NumberFormat(props.locale ?? locale(), {\n style: \"currency\",\n currency: props.currency,\n minimumFractionDigits: props.decimals ?? 0,\n maximumFractionDigits: props.decimals ?? 0,\n }).format(value);\n const states = () => props.items.map((item) => ({ item, state: budgetState(item) }));\n const anyExpected = () => states().some(({ state }) => state.expected > 0);\n const anyOver = () => states().some(({ state }) => state.over > 0);\n return (\n <div class={`k2b-budget ${props.class ?? \"\"}`}>\n <Show when={props.items.length} fallback={<p class=\"k2b-budget__empty\">{props.empty}</p>}>\n <ul class=\"k2b-budget__list\">\n <For each={states()}>\n {({ item, state }) => (\n <li class=\"k2b-budget__row\" data-level={state.level}>\n <Tooltip.Anchor\n class=\"k2b-budget__anchor\"\n tabIndex={0}\n content={\n <span class=\"k2b-budget__tip\">\n <b>{item.label}</b>\n <span>\n {t().used} <b>{money(state.used)}</b>\n </span>\n <Show when={state.expected > 0}>\n <span>\n {t().expected} <b>{money(state.expected)}</b>\n </span>\n </Show>\n <span>\n {t().budget} <b>{money(state.limit)}</b>\n </span>\n <span>\n {state.over > 0 ? t().overBy : t().left} <b>{money(state.over > 0 ? state.over : state.free)}</b>\n </span>\n </span>\n }\n >\n <span class=\"k2b-budget__label\">{item.label}</span>\n <span class=\"k2b-budget__amount\">\n {money(state.total)} <span>{t().of({ limit: money(state.limit) })}</span>\n </span>\n <ProgressBar\n class=\"k2b-budget__bar\"\n size=\"sm\"\n label={item.label}\n segments={[{ value: state.used }, { value: state.expected, pattern: \"hatched\" }]}\n limit={state.limit}\n valueText={t().valueText({\n used: money(state.used),\n expected: state.expected > 0 ? money(state.expected) : undefined,\n limit: money(state.limit),\n })}\n />\n <span class=\"k2b-budget__hint\">\n <Show when={state.level !== \"ok\"}>\n <i class={state.level === \"over\" ? \"ti ti-alert-circle\" : \"ti ti-alert-triangle\"} aria-hidden=\"true\" />\n </Show>\n {state.level === \"over\"\n ? t().over({ amount: money(state.over) })\n : state.level === \"near\"\n ? t().near({ amount: money(state.free) })\n : t().free({ amount: money(state.free) })}\n </span>\n </Tooltip.Anchor>\n </li>\n )}\n </For>\n </ul>\n <Show when={props.legend !== false}>\n <ul class=\"k2b-budget__legend\" aria-hidden=\"true\">\n <li>\n <span class=\"k2b-budget__swatch\" data-pattern=\"solid\" />\n {t().used}\n </li>\n <Show when={anyExpected()}>\n <li>\n <span class=\"k2b-budget__swatch\" data-pattern=\"hatched\" />\n {t().expected}\n </li>\n </Show>\n <Show when={anyOver()}>\n <li>\n <span class=\"k2b-budget__swatch\" data-pattern=\"over\" />\n {t().overLegend}\n </li>\n </Show>\n </ul>\n </Show>\n </Show>\n </div>\n );\n}\n\nexport default BudgetList;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -13,10 +13,13 @@ import { memo as _$memo } from "solid-js/web";
|
|
|
13
13
|
var _tmpl$ = /*#__PURE__*/_$template(`<div>`),
|
|
14
14
|
_tmpl$2 = /*#__PURE__*/_$template(`<article><!$><!/><div><!$><!/><!$><!/><!$><!/>`),
|
|
15
15
|
_tmpl$3 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
|
|
16
|
-
_tmpl$4 = /*#__PURE__*/_$template(`<
|
|
17
|
-
_tmpl$5 = /*#__PURE__*/_$template(`<
|
|
18
|
-
_tmpl$6 = /*#__PURE__*/_$template(`<
|
|
16
|
+
_tmpl$4 = /*#__PURE__*/_$template(`<span class=k2b-sr-only>`),
|
|
17
|
+
_tmpl$5 = /*#__PURE__*/_$template(`<div><p></p><!$><!/>`),
|
|
18
|
+
_tmpl$6 = /*#__PURE__*/_$template(`<span>`),
|
|
19
|
+
_tmpl$7 = /*#__PURE__*/_$template(`<p>`);
|
|
19
20
|
import { children, For, Show, splitProps } from "solid-js";
|
|
21
|
+
import { dialogToneIcon, dialogToneLabel } from "../feedback/dialog-tone";
|
|
22
|
+
import { useUiMessages } from "../intl/messages";
|
|
20
23
|
export const NOTICE_CARD_CLASSES = {
|
|
21
24
|
root: "k2b-notice-card",
|
|
22
25
|
icon: "k2b-notice-card__icon",
|
|
@@ -32,6 +35,18 @@ function NoticeCardComponent(props) {
|
|
|
32
35
|
// Children that render nothing, such as a Show whose condition is false, add no body and no gap.
|
|
33
36
|
const body = children(() => local.children);
|
|
34
37
|
const hasBody = () => body.toArray().some(node => node != null && node !== false && node !== "");
|
|
38
|
+
const messages = useUiMessages();
|
|
39
|
+
/** The tone a dialog also knows, so `icon` true shows the same icon and word; info and neutral have no word. */
|
|
40
|
+
const dialogTone = () => local.tone === "success" || local.tone === "warning" || local.tone === "danger" ? local.tone : undefined;
|
|
41
|
+
const icon = () => {
|
|
42
|
+
if (local.icon !== true) return local.icon;
|
|
43
|
+
const tone = dialogTone();
|
|
44
|
+
return tone ? dialogToneIcon(tone) : "ti ti-info-circle";
|
|
45
|
+
};
|
|
46
|
+
const toneWord = () => {
|
|
47
|
+
const tone = local.icon === true ? dialogTone() : undefined;
|
|
48
|
+
return tone ? `${dialogToneLabel(messages(), tone)}: ` : undefined;
|
|
49
|
+
};
|
|
35
50
|
return (() => {
|
|
36
51
|
var _el$ = _$getNextElement(_tmpl$2),
|
|
37
52
|
_el$0 = _el$.firstChild,
|
|
@@ -55,46 +70,50 @@ function NoticeCardComponent(props) {
|
|
|
55
70
|
} : {}), false, true);
|
|
56
71
|
_$insert(_el$, _$createComponent(Show, {
|
|
57
72
|
get when() {
|
|
58
|
-
return
|
|
73
|
+
return icon();
|
|
59
74
|
},
|
|
60
|
-
children: icon => (() => {
|
|
75
|
+
children: icon => [(() => {
|
|
61
76
|
var _el$10 = _$getNextElement(_tmpl$3);
|
|
62
77
|
_$effect(() => _$className(_el$10, `${icon()} ${NOTICE_CARD_CLASSES.icon}`));
|
|
63
78
|
return _el$10;
|
|
64
|
-
})()
|
|
79
|
+
})(), _$memo(() => _$memo(() => !!toneWord())() ? (() => {
|
|
80
|
+
var _el$11 = _$getNextElement(_tmpl$4);
|
|
81
|
+
_$insert(_el$11, toneWord);
|
|
82
|
+
return _el$11;
|
|
83
|
+
})() : null)]
|
|
65
84
|
}), _el$1, _co$4);
|
|
66
85
|
_$insert(_el$2, _$createComponent(Show, {
|
|
67
86
|
get when() {
|
|
68
87
|
return local.title;
|
|
69
88
|
},
|
|
70
89
|
children: title => (() => {
|
|
71
|
-
var _el$
|
|
72
|
-
_el$
|
|
73
|
-
_el$
|
|
74
|
-
[_el$
|
|
75
|
-
_$insert(_el$
|
|
76
|
-
_$insert(_el$
|
|
90
|
+
var _el$12 = _$getNextElement(_tmpl$5),
|
|
91
|
+
_el$13 = _el$12.firstChild,
|
|
92
|
+
_el$14 = _el$13.nextSibling,
|
|
93
|
+
[_el$15, _co$5] = _$getNextMarker(_el$14.nextSibling);
|
|
94
|
+
_$insert(_el$13, title);
|
|
95
|
+
_$insert(_el$12, _$createComponent(Show, {
|
|
77
96
|
get when() {
|
|
78
97
|
return local.meta;
|
|
79
98
|
},
|
|
80
99
|
children: meta => (() => {
|
|
81
|
-
var _el$
|
|
82
|
-
_$insert(_el$
|
|
83
|
-
_$effect(() => _$className(_el$
|
|
84
|
-
return _el$
|
|
100
|
+
var _el$16 = _$getNextElement(_tmpl$6);
|
|
101
|
+
_$insert(_el$16, meta);
|
|
102
|
+
_$effect(() => _$className(_el$16, NOTICE_CARD_CLASSES.meta));
|
|
103
|
+
return _el$16;
|
|
85
104
|
})()
|
|
86
|
-
}), _el$
|
|
105
|
+
}), _el$15, _co$5);
|
|
87
106
|
_$effect(_p$ => {
|
|
88
107
|
var _v$ = NOTICE_CARD_CLASSES.head,
|
|
89
108
|
_v$2 = NOTICE_CARD_CLASSES.title;
|
|
90
|
-
_v$ !== _p$.e && _$className(_el$
|
|
91
|
-
_v$2 !== _p$.t && _$className(_el$
|
|
109
|
+
_v$ !== _p$.e && _$className(_el$12, _p$.e = _v$);
|
|
110
|
+
_v$2 !== _p$.t && _$className(_el$13, _p$.t = _v$2);
|
|
92
111
|
return _p$;
|
|
93
112
|
}, {
|
|
94
113
|
e: undefined,
|
|
95
114
|
t: undefined
|
|
96
115
|
});
|
|
97
|
-
return _el$
|
|
116
|
+
return _el$12;
|
|
98
117
|
})()
|
|
99
118
|
}), _el$5, _co$);
|
|
100
119
|
_$insert(_el$2, _$createComponent(Show, {
|
|
@@ -102,10 +121,10 @@ function NoticeCardComponent(props) {
|
|
|
102
121
|
return local.detail;
|
|
103
122
|
},
|
|
104
123
|
children: detail => (() => {
|
|
105
|
-
var _el$
|
|
106
|
-
_$insert(_el$
|
|
107
|
-
_$effect(() => _$className(_el$
|
|
108
|
-
return _el$
|
|
124
|
+
var _el$17 = _$getNextElement(_tmpl$7);
|
|
125
|
+
_$insert(_el$17, detail);
|
|
126
|
+
_$effect(() => _$className(_el$17, NOTICE_CARD_CLASSES.description));
|
|
127
|
+
return _el$17;
|
|
109
128
|
})()
|
|
110
129
|
}), _el$7, _co$2);
|
|
111
130
|
_$insert(_el$2, _$createComponent(Show, {
|
|
@@ -131,8 +150,8 @@ function NoticeGrid(props) {
|
|
|
131
150
|
return props.items.length > 0;
|
|
132
151
|
},
|
|
133
152
|
get children() {
|
|
134
|
-
var _el$
|
|
135
|
-
_$insert(_el$
|
|
153
|
+
var _el$18 = _$getNextElement(_tmpl$);
|
|
154
|
+
_$insert(_el$18, _$createComponent(For, {
|
|
136
155
|
get each() {
|
|
137
156
|
return props.items;
|
|
138
157
|
},
|
|
@@ -141,14 +160,14 @@ function NoticeGrid(props) {
|
|
|
141
160
|
_$effect(_p$ => {
|
|
142
161
|
var _v$3 = `k2b-notice-grid ${props.class ?? ""}`,
|
|
143
162
|
_v$4 = columns();
|
|
144
|
-
_v$3 !== _p$.e && _$className(_el$
|
|
145
|
-
_v$4 !== _p$.t && _$setAttribute(_el$
|
|
163
|
+
_v$3 !== _p$.e && _$className(_el$18, _p$.e = _v$3);
|
|
164
|
+
_v$4 !== _p$.t && _$setAttribute(_el$18, "data-columns", _p$.t = _v$4);
|
|
146
165
|
return _p$;
|
|
147
166
|
}, {
|
|
148
167
|
e: undefined,
|
|
149
168
|
t: undefined
|
|
150
169
|
});
|
|
151
|
-
return _el$
|
|
170
|
+
return _el$18;
|
|
152
171
|
}
|
|
153
172
|
});
|
|
154
173
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["surfaces/NoticeCard.tsx"],"sourcesContent":["import { children, For, type JSX, Show, splitProps } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type NoticeTone = Extract<IntentTone, \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\">;\n\ntype NoticeCardContentProps =\n | { title: JSX.Element; detail?: JSX.Element; meta?: JSX.Element; children?: JSX.Element }\n | { title?: never; detail?: never; meta?: never; children: JSX.Element };\n\nexport type NoticeCardProps = Omit<JSX.HTMLAttributes<HTMLElement>, \"children\" | \"class\" | \"title\"> &\n NoticeCardContentProps & {\n tone?: NoticeTone;\n
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/NoticeCard.tsx"],"sourcesContent":["import { children, For, type JSX, Show, splitProps } from \"solid-js\";\nimport { dialogToneIcon, dialogToneLabel } from \"../feedback/dialog-tone\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type NoticeTone = Extract<IntentTone, \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\">;\n\ntype NoticeCardContentProps =\n | { title: JSX.Element; detail?: JSX.Element; meta?: JSX.Element; children?: JSX.Element }\n | { title?: never; detail?: never; meta?: never; children: JSX.Element };\n\nexport type NoticeCardProps = Omit<JSX.HTMLAttributes<HTMLElement>, \"children\" | \"class\" | \"title\"> &\n NoticeCardContentProps & {\n tone?: NoticeTone;\n /**\n * A Tabler icon class. Turns the notice into a compact status line whose icon and text take the tone colour. `true`\n * takes the tone's own icon, the one a toned dialog shows, and names the tone for screen readers.\n */\n icon?: string | true;\n class?: string;\n bodyClass?: string;\n };\n\nexport const NOTICE_CARD_CLASSES = {\n root: \"k2b-notice-card\",\n icon: \"k2b-notice-card__icon\",\n content: \"k2b-notice-card__content\",\n head: \"k2b-notice-card__head\",\n title: \"k2b-notice-card__title\",\n meta: \"k2b-notice-card__meta\",\n description: \"k2b-notice-card__description\",\n body: \"k2b-notice-card__body\",\n} as const;\n\nfunction NoticeCardComponent(props: NoticeCardProps): JSX.Element {\n const [local, articleProps] = splitProps(props, [\"tone\", \"icon\", \"title\", \"detail\", \"meta\", \"children\", \"class\", \"bodyClass\"]);\n // Children that render nothing, such as a Show whose condition is false, add no body and no gap.\n const body = children(() => local.children);\n const hasBody = () => body.toArray().some((node) => node != null && node !== false && node !== \"\");\n const messages = useUiMessages();\n /** The tone a dialog also knows, so `icon` true shows the same icon and word; info and neutral have no word. */\n const dialogTone = () => (local.tone === \"success\" || local.tone === \"warning\" || local.tone === \"danger\" ? local.tone : undefined);\n const icon = () => {\n if (local.icon !== true) return local.icon;\n const tone = dialogTone();\n return tone ? dialogToneIcon(tone) : \"ti ti-info-circle\";\n };\n const toneWord = () => {\n const tone = local.icon === true ? dialogTone() : undefined;\n return tone ? `${dialogToneLabel(messages(), tone)}: ` : undefined;\n };\n return (\n <article\n {...articleProps}\n class={`${NOTICE_CARD_CLASSES.root} ${local.class ?? \"\"}`}\n data-tone={local.tone ?? \"neutral\"}\n {...(local.icon ? { \"data-icon\": \"\" } : {})}\n >\n <Show when={icon()}>\n {(icon) => (\n <>\n <i class={`${icon()} ${NOTICE_CARD_CLASSES.icon}`} aria-hidden=\"true\" />\n {/* Inside the icon's branch, so a notice without one keeps its markup. */}\n {toneWord() ? <span class=\"k2b-sr-only\">{toneWord()}</span> : null}\n </>\n )}\n </Show>\n <div class={NOTICE_CARD_CLASSES.content}>\n <Show when={local.title}>\n {(title) => (\n <div class={NOTICE_CARD_CLASSES.head}>\n <p class={NOTICE_CARD_CLASSES.title}>{title()}</p>\n <Show when={local.meta}>{(meta) => <span class={NOTICE_CARD_CLASSES.meta}>{meta()}</span>}</Show>\n </div>\n )}\n </Show>\n <Show when={local.detail}>{(detail) => <p class={NOTICE_CARD_CLASSES.description}>{detail()}</p>}</Show>\n <Show when={hasBody()}>\n <div class={`${NOTICE_CARD_CLASSES.body} ${local.bodyClass ?? \"\"}`}>{body()}</div>\n </Show>\n </div>\n </article>\n );\n}\n\nexport type NoticeGridProps<T> = {\n items: readonly T[];\n children: (item: T) => JSX.Element;\n class?: string;\n};\n\nfunction NoticeGrid<T>(props: NoticeGridProps<T>): JSX.Element {\n const columns = () => (props.items.length <= 1 ? \"one\" : props.items.length === 2 ? \"two\" : \"three\");\n return (\n <Show when={props.items.length > 0}>\n <div class={`k2b-notice-grid ${props.class ?? \"\"}`} data-columns={columns()}>\n <For each={props.items}>{(item) => props.children(item)}</For>\n </div>\n </Show>\n );\n}\n\nexport const NoticeCard = Object.assign(NoticeCardComponent, { Grid: NoticeGrid });\nexport default NoticeCard;\n"],"mappings":"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","ignoreList":[]}
|