@k2b/ui 0.33.0 → 0.35.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 +14 -1
- package/dist/browser/actions/ContextMenu.js +13 -0
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/Dropdown.js +16 -4
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/SelectionToolbar.js +129 -0
- package/dist/browser/actions/SelectionToolbar.js.map +1 -0
- package/dist/browser/actions/index.js +1 -0
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/charts.js +6 -0
- package/dist/browser/charts.js.map +1 -0
- package/dist/browser/chat/ChatComposer.js +525 -407
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/chat-messages.js +4 -0
- package/dist/browser/chat/chat-messages.js.map +1 -1
- package/dist/browser/chat/composer-document.js +19 -0
- package/dist/browser/chat/composer-document.js.map +1 -1
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/content/Chart.js +8 -0
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/FileGrid.js +231 -9
- package/dist/browser/content/FileGrid.js.map +1 -1
- package/dist/browser/content/FileTypeIcon.js +15 -0
- package/dist/browser/content/FileTypeIcon.js.map +1 -1
- package/dist/browser/content/FileView.js +11 -4
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/MatchText.js +61 -0
- package/dist/browser/content/MatchText.js.map +1 -0
- package/dist/browser/content/MessageRow.js +73 -53
- package/dist/browser/content/MessageRow.js.map +1 -1
- package/dist/browser/content/ReactionBar.js +3 -1
- package/dist/browser/content/ReactionBar.js.map +1 -1
- package/dist/browser/content/calendar-day-scroll.js +4 -3
- package/dist/browser/content/calendar-day-scroll.js.map +1 -1
- package/dist/browser/content/chart-bar.js +476 -0
- package/dist/browser/content/chart-bar.js.map +1 -0
- package/dist/browser/content/file-list-messages.js +52 -0
- package/dist/browser/content/file-list-messages.js.map +1 -0
- package/dist/browser/content/index.js +2 -1
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/feedback/Tooltip.js +31 -14
- package/dist/browser/feedback/Tooltip.js.map +1 -1
- package/dist/browser/inputs/ChoiceList.js +178 -0
- package/dist/browser/inputs/ChoiceList.js.map +1 -0
- package/dist/browser/inputs/ChoiceSlider.js +314 -0
- package/dist/browser/inputs/ChoiceSlider.js.map +1 -0
- package/dist/browser/inputs/ChoiceTiles.js +135 -0
- package/dist/browser/inputs/ChoiceTiles.js.map +1 -0
- package/dist/browser/inputs/ColorChoices.js +120 -0
- package/dist/browser/inputs/ColorChoices.js.map +1 -0
- package/dist/browser/inputs/QrScanner.js +95 -13
- package/dist/browser/inputs/QrScanner.js.map +1 -1
- package/dist/browser/inputs/TextInput.js +15 -13
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/index.js +4 -0
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/qr-messages.js +2 -0
- package/dist/browser/inputs/qr-messages.js.map +1 -1
- package/dist/browser/internal/radio-keys.js +13 -0
- package/dist/browser/internal/radio-keys.js.map +1 -0
- package/dist/browser/layout/AnchoredPopover.js +180 -0
- package/dist/browser/layout/AnchoredPopover.js.map +1 -0
- package/dist/browser/layout/AppWorkspace.js +155 -20
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js +443 -333
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/MobileShell.js +21 -7
- package/dist/browser/layout/MobileShell.js.map +1 -1
- package/dist/browser/layout/Settings.js +283 -175
- package/dist/browser/layout/Settings.js.map +1 -1
- package/dist/browser/layout/SidebarRailHint.js +79 -0
- package/dist/browser/layout/SidebarRailHint.js.map +1 -0
- package/dist/browser/layout/SidebarSwitcher.js +79 -66
- package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
- package/dist/browser/layout/TabBar.js +18 -4
- package/dist/browser/layout/TabBar.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js +11 -4
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/detail-panel-messages.js +4 -2
- package/dist/browser/layout/detail-panel-messages.js.map +1 -1
- package/dist/browser/layout/index.js +2 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/settings-messages.js +26 -2
- package/dist/browser/layout/settings-messages.js.map +1 -1
- package/dist/browser/surfaces/Avatar.js +2 -14
- package/dist/browser/surfaces/Avatar.js.map +1 -1
- package/dist/browser/surfaces/DotStrip.js +70 -0
- package/dist/browser/surfaces/DotStrip.js.map +1 -0
- package/dist/browser/surfaces/ProgressRing.js +3 -0
- package/dist/browser/surfaces/ProgressRing.js.map +1 -1
- package/dist/browser/surfaces/ResourceCard.js +125 -68
- package/dist/browser/surfaces/ResourceCard.js.map +1 -1
- package/dist/browser/surfaces/index.js +2 -0
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/browser/surfaces/person-color.js +18 -0
- package/dist/browser/surfaces/person-color.js.map +1 -0
- package/dist/browser/surfaces/resource-messages.js +6 -2
- package/dist/browser/surfaces/resource-messages.js.map +1 -1
- package/dist/browser/text-editor/TextEditor.js +1358 -0
- package/dist/browser/text-editor/TextEditor.js.map +1 -0
- package/dist/browser/text-editor/clipboard-html.js +152 -0
- package/dist/browser/text-editor/clipboard-html.js.map +1 -0
- package/dist/browser/text-editor/clipboard-loading.js +68 -0
- package/dist/browser/text-editor/clipboard-loading.js.map +1 -0
- package/dist/browser/text-editor/clipboard.js +51 -0
- package/dist/browser/text-editor/clipboard.js.map +1 -0
- package/dist/browser/text-editor/engine.js +125 -0
- package/dist/browser/text-editor/engine.js.map +1 -0
- package/dist/browser/text-editor/format.js +218 -0
- package/dist/browser/text-editor/format.js.map +1 -0
- package/dist/browser/text-editor/formatted.js +164 -0
- package/dist/browser/text-editor/formatted.js.map +1 -0
- package/dist/browser/text-editor/language.js +19 -0
- package/dist/browser/text-editor/language.js.map +1 -0
- package/dist/browser/text-editor/markdown-table.js +563 -0
- package/dist/browser/text-editor/markdown-table.js.map +1 -0
- package/dist/browser/text-editor/messages.js +233 -0
- package/dist/browser/text-editor/messages.js.map +1 -0
- package/dist/browser/text-editor/paste.js +115 -0
- package/dist/browser/text-editor/paste.js.map +1 -0
- package/dist/browser/text-editor/table.js +1760 -0
- package/dist/browser/text-editor/table.js.map +1 -0
- package/dist/browser/text-editor.js +5 -0
- package/dist/browser/text-editor.js.map +1 -0
- package/dist/browser/widgets/Widget.js +3 -2
- package/dist/browser/widgets/Widget.js.map +1 -1
- package/dist/ssr/actions/ContextMenu.js +9 -0
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +15 -4
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/SelectionToolbar.js +104 -0
- package/dist/ssr/actions/SelectionToolbar.js.map +1 -0
- package/dist/ssr/actions/index.js +1 -0
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/charts.js +6 -0
- package/dist/ssr/charts.js.map +1 -0
- package/dist/ssr/chat/ChatComposer.js +132 -53
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/chat-messages.js +4 -0
- package/dist/ssr/chat/chat-messages.js.map +1 -1
- package/dist/ssr/chat/composer-document.js +19 -0
- package/dist/ssr/chat/composer-document.js.map +1 -1
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/content/Chart.js +8 -0
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/FileGrid.js +132 -5
- package/dist/ssr/content/FileGrid.js.map +1 -1
- package/dist/ssr/content/FileTypeIcon.js +15 -0
- package/dist/ssr/content/FileTypeIcon.js.map +1 -1
- package/dist/ssr/content/FileView.js +11 -4
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/MatchText.js +56 -0
- package/dist/ssr/content/MatchText.js.map +1 -0
- package/dist/ssr/content/MessageRow.js +16 -6
- package/dist/ssr/content/MessageRow.js.map +1 -1
- package/dist/ssr/content/ReactionBar.js +3 -1
- package/dist/ssr/content/ReactionBar.js.map +1 -1
- package/dist/ssr/content/calendar-day-scroll.js +4 -3
- package/dist/ssr/content/calendar-day-scroll.js.map +1 -1
- package/dist/ssr/content/chart-bar.js +476 -0
- package/dist/ssr/content/chart-bar.js.map +1 -0
- package/dist/ssr/content/file-list-messages.js +52 -0
- package/dist/ssr/content/file-list-messages.js.map +1 -0
- package/dist/ssr/content/index.js +2 -1
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/feedback/Tooltip.js +31 -14
- package/dist/ssr/feedback/Tooltip.js.map +1 -1
- package/dist/ssr/inputs/ChoiceList.js +95 -0
- package/dist/ssr/inputs/ChoiceList.js.map +1 -0
- package/dist/ssr/inputs/ChoiceSlider.js +191 -0
- package/dist/ssr/inputs/ChoiceSlider.js.map +1 -0
- package/dist/ssr/inputs/ChoiceTiles.js +61 -0
- package/dist/ssr/inputs/ChoiceTiles.js.map +1 -0
- package/dist/ssr/inputs/ColorChoices.js +60 -0
- package/dist/ssr/inputs/ColorChoices.js.map +1 -0
- package/dist/ssr/inputs/QrScanner.js +89 -10
- package/dist/ssr/inputs/QrScanner.js.map +1 -1
- package/dist/ssr/inputs/TextInput.js +13 -1
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/index.js +4 -0
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/qr-messages.js +2 -0
- package/dist/ssr/inputs/qr-messages.js.map +1 -1
- package/dist/ssr/internal/radio-keys.js +13 -0
- package/dist/ssr/internal/radio-keys.js.map +1 -0
- package/dist/ssr/layout/AnchoredPopover.js +142 -0
- package/dist/ssr/layout/AnchoredPopover.js.map +1 -0
- package/dist/ssr/layout/AppWorkspace.js +154 -20
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +181 -108
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/MobileShell.js +20 -6
- package/dist/ssr/layout/MobileShell.js.map +1 -1
- package/dist/ssr/layout/Settings.js +122 -45
- package/dist/ssr/layout/Settings.js.map +1 -1
- package/dist/ssr/layout/SidebarRailHint.js +79 -0
- package/dist/ssr/layout/SidebarRailHint.js.map +1 -0
- package/dist/ssr/layout/SidebarSwitcher.js +13 -3
- package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
- package/dist/ssr/layout/TabBar.js +11 -3
- package/dist/ssr/layout/TabBar.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js +11 -4
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/detail-panel-messages.js +4 -2
- package/dist/ssr/layout/detail-panel-messages.js.map +1 -1
- package/dist/ssr/layout/index.js +2 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/settings-messages.js +26 -2
- package/dist/ssr/layout/settings-messages.js.map +1 -1
- package/dist/ssr/surfaces/Avatar.js +2 -14
- package/dist/ssr/surfaces/Avatar.js.map +1 -1
- package/dist/ssr/surfaces/DotStrip.js +31 -0
- package/dist/ssr/surfaces/DotStrip.js.map +1 -0
- package/dist/ssr/surfaces/ProgressRing.js +3 -0
- package/dist/ssr/surfaces/ProgressRing.js.map +1 -1
- package/dist/ssr/surfaces/ResourceCard.js +40 -15
- package/dist/ssr/surfaces/ResourceCard.js.map +1 -1
- package/dist/ssr/surfaces/index.js +2 -0
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/ssr/surfaces/person-color.js +18 -0
- package/dist/ssr/surfaces/person-color.js.map +1 -0
- package/dist/ssr/surfaces/resource-messages.js +6 -2
- package/dist/ssr/surfaces/resource-messages.js.map +1 -1
- package/dist/ssr/text-editor/TextEditor.js +1155 -0
- package/dist/ssr/text-editor/TextEditor.js.map +1 -0
- package/dist/ssr/text-editor/clipboard-html.js +152 -0
- package/dist/ssr/text-editor/clipboard-html.js.map +1 -0
- package/dist/ssr/text-editor/clipboard-loading.js +68 -0
- package/dist/ssr/text-editor/clipboard-loading.js.map +1 -0
- package/dist/ssr/text-editor/clipboard.js +51 -0
- package/dist/ssr/text-editor/clipboard.js.map +1 -0
- package/dist/ssr/text-editor/engine.js +125 -0
- package/dist/ssr/text-editor/engine.js.map +1 -0
- package/dist/ssr/text-editor/format.js +218 -0
- package/dist/ssr/text-editor/format.js.map +1 -0
- package/dist/ssr/text-editor/formatted.js +164 -0
- package/dist/ssr/text-editor/formatted.js.map +1 -0
- package/dist/ssr/text-editor/language.js +19 -0
- package/dist/ssr/text-editor/language.js.map +1 -0
- package/dist/ssr/text-editor/markdown-table.js +563 -0
- package/dist/ssr/text-editor/markdown-table.js.map +1 -0
- package/dist/ssr/text-editor/messages.js +233 -0
- package/dist/ssr/text-editor/messages.js.map +1 -0
- package/dist/ssr/text-editor/paste.js +115 -0
- package/dist/ssr/text-editor/paste.js.map +1 -0
- package/dist/ssr/text-editor/table.js +1760 -0
- package/dist/ssr/text-editor/table.js.map +1 -0
- package/dist/ssr/text-editor.js +5 -0
- package/dist/ssr/text-editor.js.map +1 -0
- package/dist/ssr/widgets/Widget.js +3 -2
- package/dist/ssr/widgets/Widget.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/ContextMenu.d.ts +5 -0
- package/dist/types/actions/Dropdown.d.ts +7 -0
- package/dist/types/actions/SelectionToolbar.d.ts +38 -0
- package/dist/types/actions/index.d.ts +2 -0
- package/dist/types/charts.d.ts +5 -0
- package/dist/types/chat/ChatComposer.d.ts +15 -0
- package/dist/types/chat/chat-messages.d.ts +2 -0
- package/dist/types/chat/composer-document.d.ts +5 -0
- package/dist/types/chat/index.d.ts +1 -1
- package/dist/types/content/Chart.d.ts +2 -1
- package/dist/types/content/FileGrid.d.ts +43 -3
- package/dist/types/content/FileTypeIcon.d.ts +10 -0
- package/dist/types/content/FileView.d.ts +5 -1
- package/dist/types/content/MatchText.d.ts +21 -0
- package/dist/types/content/MessageRow.d.ts +2 -0
- package/dist/types/content/calendar-day-scroll.d.ts +2 -1
- package/dist/types/content/chart-bar.d.ts +60 -0
- package/dist/types/content/file-list-messages.d.ts +24 -0
- package/dist/types/content/index.d.ts +3 -2
- package/dist/types/feedback/Tooltip.d.ts +8 -2
- package/dist/types/inputs/ChoiceList.d.ts +28 -0
- package/dist/types/inputs/ChoiceSlider.d.ts +36 -0
- package/dist/types/inputs/ChoiceTiles.d.ts +25 -0
- package/dist/types/inputs/ColorChoices.d.ts +19 -0
- package/dist/types/inputs/index.d.ts +8 -0
- package/dist/types/inputs/qr-messages.d.ts +1 -0
- package/dist/types/internal/radio-keys.d.ts +5 -0
- package/dist/types/layout/AnchoredPopover.d.ts +31 -0
- package/dist/types/layout/AppWorkspace.d.ts +10 -0
- package/dist/types/layout/DetailPanel.d.ts +17 -0
- package/dist/types/layout/MobileShell.d.ts +5 -2
- package/dist/types/layout/Settings.d.ts +22 -0
- package/dist/types/layout/SidebarRailHint.d.ts +26 -0
- package/dist/types/layout/TabBar.d.ts +5 -0
- package/dist/types/layout/detail-panel-messages.d.ts +1 -0
- package/dist/types/layout/index.d.ts +3 -2
- package/dist/types/layout/settings-messages.d.ts +12 -0
- package/dist/types/surfaces/DotStrip.d.ts +22 -0
- package/dist/types/surfaces/ProgressRing.d.ts +2 -1
- package/dist/types/surfaces/ResourceCard.d.ts +9 -0
- package/dist/types/surfaces/index.d.ts +4 -1
- package/dist/types/surfaces/person-color.d.ts +10 -0
- package/dist/types/surfaces/resource-messages.d.ts +2 -0
- package/dist/types/text-editor/TextEditor.d.ts +69 -0
- package/dist/types/text-editor/clipboard-html.d.ts +9 -0
- package/dist/types/text-editor/clipboard-loading.d.ts +8 -0
- package/dist/types/text-editor/clipboard.d.ts +20 -0
- package/dist/types/text-editor/engine.d.ts +34 -0
- package/dist/types/text-editor/format.d.ts +34 -0
- package/dist/types/text-editor/formatted.d.ts +1 -0
- package/dist/types/text-editor/language.d.ts +8 -0
- package/dist/types/text-editor/markdown-table.d.ts +105 -0
- package/dist/types/text-editor/messages.d.ts +113 -0
- package/dist/types/text-editor/paste.d.ts +6 -0
- package/dist/types/text-editor/table.d.ts +81 -0
- package/dist/types/text-editor.d.ts +4 -0
- package/dist/types/widgets/Widget.d.ts +3 -2
- package/package.json +28 -3
|
@@ -9,16 +9,18 @@ import { insert as _$insert } from "solid-js/web";
|
|
|
9
9
|
import { className as _$className } from "solid-js/web";
|
|
10
10
|
import { effect as _$effect } from "solid-js/web";
|
|
11
11
|
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
12
|
-
var _tmpl$ = /*#__PURE__*/_$template(`<span
|
|
12
|
+
var _tmpl$ = /*#__PURE__*/_$template(`<span aria-hidden=true><i>`),
|
|
13
13
|
_tmpl$2 = /*#__PURE__*/_$template(`<span class=k2b-resource-card__meta>`),
|
|
14
14
|
_tmpl$3 = /*#__PURE__*/_$template(`<span class=k2b-resource-card__preview>`),
|
|
15
|
-
_tmpl$4 = /*#__PURE__*/_$template(`<span class=k2b-resource-card__copy
|
|
16
|
-
_tmpl$5 = /*#__PURE__*/_$template(`<span class=k2b-resource-
|
|
17
|
-
_tmpl$6 = /*#__PURE__*/_$template(`<span class=k2b-resource-
|
|
18
|
-
_tmpl$7 = /*#__PURE__*/_$template(`<span class=k2b-resource-card__copy><span class=k2b-resource-
|
|
19
|
-
_tmpl$8 = /*#__PURE__*/_$template(`<
|
|
20
|
-
_tmpl$9 = /*#__PURE__*/_$template(`<
|
|
21
|
-
_tmpl$0 = /*#__PURE__*/_$template(`<
|
|
15
|
+
_tmpl$4 = /*#__PURE__*/_$template(`<span class=k2b-resource-card__copy><!$><!/><span class=k2b-resource-card__title></span><!$><!/><!$><!/>`),
|
|
16
|
+
_tmpl$5 = /*#__PURE__*/_$template(`<span class=k2b-resource-card__status>`),
|
|
17
|
+
_tmpl$6 = /*#__PURE__*/_$template(`<span class=k2b-resource-card__icon aria-hidden=true>`),
|
|
18
|
+
_tmpl$7 = /*#__PURE__*/_$template(`<span class=k2b-resource-card__copy><span class=k2b-resource-card__bar aria-hidden=true></span><span class=k2b-resource-card__bar aria-hidden=true></span><span class=k2b-sr-only>`),
|
|
19
|
+
_tmpl$8 = /*#__PURE__*/_$template(`<span class=k2b-resource-card__icon aria-hidden=true><i>`),
|
|
20
|
+
_tmpl$9 = /*#__PURE__*/_$template(`<span class=k2b-resource-card__copy><span class=k2b-resource-card__meta></span><span class=k2b-resource-card__label></span><!$><!/>`),
|
|
21
|
+
_tmpl$0 = /*#__PURE__*/_$template(`<div>`),
|
|
22
|
+
_tmpl$1 = /*#__PURE__*/_$template(`<a>`),
|
|
23
|
+
_tmpl$10 = /*#__PURE__*/_$template(`<button type=button>`);
|
|
22
24
|
import { Match, Show, Switch } from "solid-js";
|
|
23
25
|
import { useUiMessages } from "../intl/messages";
|
|
24
26
|
import { useResourceMessages } from "./resource-messages";
|
|
@@ -28,6 +30,8 @@ import { useResourceMessages } from "./resource-messages";
|
|
|
28
30
|
* why it cannot be shown.
|
|
29
31
|
*/
|
|
30
32
|
|
|
33
|
+
/** The icon chip's colour, from the same palette as `LinkCard`. */
|
|
34
|
+
|
|
31
35
|
const DEFAULT_ICON = "ti ti-file";
|
|
32
36
|
const LINK_PROTOCOLS = new Set(["https:", "http:"]);
|
|
33
37
|
const STATE_ICONS = {
|
|
@@ -73,51 +77,81 @@ export function ResourceCard(props) {
|
|
|
73
77
|
return [(() => {
|
|
74
78
|
var _el$ = _$getNextElement(_tmpl$),
|
|
75
79
|
_el$2 = _el$.firstChild;
|
|
76
|
-
_$effect(
|
|
80
|
+
_$effect(_p$ => {
|
|
81
|
+
var _v$ = `k2b-resource-card__icon${props.color ? " k2b-icon-tile" : ""}`,
|
|
82
|
+
_v$2 = props.icon ?? DEFAULT_ICON;
|
|
83
|
+
_v$ !== _p$.e && _$className(_el$, _p$.e = _v$);
|
|
84
|
+
_v$2 !== _p$.t && _$className(_el$2, _p$.t = _v$2);
|
|
85
|
+
return _p$;
|
|
86
|
+
}, {
|
|
87
|
+
e: undefined,
|
|
88
|
+
t: undefined
|
|
89
|
+
});
|
|
77
90
|
return _el$;
|
|
78
91
|
})(), (() => {
|
|
79
92
|
var _el$3 = _$getNextElement(_tmpl$4),
|
|
80
|
-
_el$
|
|
81
|
-
_el$
|
|
82
|
-
|
|
83
|
-
_el$
|
|
84
|
-
[_el$
|
|
85
|
-
|
|
93
|
+
_el$8 = _el$3.firstChild,
|
|
94
|
+
[_el$9, _co$] = _$getNextMarker(_el$8.nextSibling),
|
|
95
|
+
_el$5 = _el$9.nextSibling,
|
|
96
|
+
_el$0 = _el$5.nextSibling,
|
|
97
|
+
[_el$1, _co$2] = _$getNextMarker(_el$0.nextSibling),
|
|
98
|
+
_el$10 = _el$1.nextSibling,
|
|
99
|
+
[_el$11, _co$3] = _$getNextMarker(_el$10.nextSibling);
|
|
100
|
+
_$insert(_el$3, _$createComponent(Show, {
|
|
101
|
+
get when() {
|
|
102
|
+
return props.context?.trim();
|
|
103
|
+
},
|
|
104
|
+
get children() {
|
|
105
|
+
var _el$4 = _$getNextElement(_tmpl$2);
|
|
106
|
+
_$insert(_el$4, () => props.context);
|
|
107
|
+
return _el$4;
|
|
108
|
+
}
|
|
109
|
+
}), _el$9, _co$);
|
|
110
|
+
_$insert(_el$5, title);
|
|
86
111
|
_$insert(_el$3, _$createComponent(Show, {
|
|
87
112
|
get when() {
|
|
88
113
|
return meta();
|
|
89
114
|
},
|
|
90
115
|
get children() {
|
|
91
|
-
var _el$
|
|
92
|
-
_$insert(_el$
|
|
93
|
-
return _el$
|
|
116
|
+
var _el$6 = _$getNextElement(_tmpl$2);
|
|
117
|
+
_$insert(_el$6, meta);
|
|
118
|
+
return _el$6;
|
|
94
119
|
}
|
|
95
|
-
}), _el$
|
|
120
|
+
}), _el$1, _co$2);
|
|
96
121
|
_$insert(_el$3, _$createComponent(Show, {
|
|
97
122
|
get when() {
|
|
98
123
|
return props.preview?.trim();
|
|
99
124
|
},
|
|
100
125
|
get children() {
|
|
101
|
-
var _el$
|
|
102
|
-
_$insert(_el$
|
|
103
|
-
return _el$
|
|
126
|
+
var _el$7 = _$getNextElement(_tmpl$3);
|
|
127
|
+
_$insert(_el$7, () => props.preview);
|
|
128
|
+
return _el$7;
|
|
104
129
|
}
|
|
105
|
-
}), _el$
|
|
130
|
+
}), _el$11, _co$3);
|
|
106
131
|
return _el$3;
|
|
107
|
-
})()
|
|
132
|
+
})(), _$createComponent(Show, {
|
|
133
|
+
get when() {
|
|
134
|
+
return props.status?.trim();
|
|
135
|
+
},
|
|
136
|
+
get children() {
|
|
137
|
+
var _el$12 = _$getNextElement(_tmpl$5);
|
|
138
|
+
_$insert(_el$12, () => props.status);
|
|
139
|
+
return _el$12;
|
|
140
|
+
}
|
|
141
|
+
})];
|
|
108
142
|
}
|
|
109
143
|
}), _$createComponent(Match, {
|
|
110
144
|
get when() {
|
|
111
145
|
return state() === "loading";
|
|
112
146
|
},
|
|
113
147
|
get children() {
|
|
114
|
-
return [_$getNextElement(_tmpl$
|
|
115
|
-
var _el$
|
|
116
|
-
_el$
|
|
117
|
-
_el$
|
|
118
|
-
_el$
|
|
119
|
-
_$insert(_el$
|
|
120
|
-
return _el$
|
|
148
|
+
return [_$getNextElement(_tmpl$6), (() => {
|
|
149
|
+
var _el$14 = _$getNextElement(_tmpl$7),
|
|
150
|
+
_el$15 = _el$14.firstChild,
|
|
151
|
+
_el$16 = _el$15.nextSibling,
|
|
152
|
+
_el$17 = _el$16.nextSibling;
|
|
153
|
+
_$insert(_el$17, () => messages().loading);
|
|
154
|
+
return _el$14;
|
|
121
155
|
})()];
|
|
122
156
|
}
|
|
123
157
|
}), _$createComponent(Match, {
|
|
@@ -125,18 +159,32 @@ export function ResourceCard(props) {
|
|
|
125
159
|
return reason();
|
|
126
160
|
},
|
|
127
161
|
children: reason => [(() => {
|
|
128
|
-
var _el$
|
|
129
|
-
_el$
|
|
130
|
-
_$effect(() => _$className(_el$
|
|
131
|
-
return _el$
|
|
162
|
+
var _el$18 = _$getNextElement(_tmpl$8),
|
|
163
|
+
_el$19 = _el$18.firstChild;
|
|
164
|
+
_$effect(() => _$className(_el$19, STATE_ICONS[reason()]));
|
|
165
|
+
return _el$18;
|
|
132
166
|
})(), (() => {
|
|
133
|
-
var _el$
|
|
134
|
-
_el$
|
|
135
|
-
|
|
167
|
+
var _el$20 = _$getNextElement(_tmpl$9),
|
|
168
|
+
_el$21 = _el$20.firstChild,
|
|
169
|
+
_el$22 = _el$21.nextSibling,
|
|
170
|
+
_el$24 = _el$22.nextSibling,
|
|
171
|
+
[_el$25, _co$4] = _$getNextMarker(_el$24.nextSibling);
|
|
172
|
+
_$insert(_el$21, () => resourceMessages().resourceKind);
|
|
173
|
+
_$insert(_el$22, (() => {
|
|
136
174
|
var _c$ = _$memo(() => reason() === "no_access");
|
|
137
175
|
return () => _c$() ? resourceMessages().resourceNoAccess : _$memo(() => reason() === "deleted")() ? resourceMessages().resourceDeleted : resourceMessages().resourceUnavailable;
|
|
138
176
|
})());
|
|
139
|
-
|
|
177
|
+
_$insert(_el$20, _$createComponent(Show, {
|
|
178
|
+
get when() {
|
|
179
|
+
return reason() === "no_access";
|
|
180
|
+
},
|
|
181
|
+
get children() {
|
|
182
|
+
var _el$23 = _$getNextElement(_tmpl$2);
|
|
183
|
+
_$insert(_el$23, () => resourceMessages().resourceNoAccessHint);
|
|
184
|
+
return _el$23;
|
|
185
|
+
}
|
|
186
|
+
}), _el$25, _co$4);
|
|
187
|
+
return _el$20;
|
|
140
188
|
})()]
|
|
141
189
|
})];
|
|
142
190
|
}
|
|
@@ -152,60 +200,69 @@ export function ResourceCard(props) {
|
|
|
152
200
|
},
|
|
153
201
|
get fallback() {
|
|
154
202
|
return (() => {
|
|
155
|
-
var _el$
|
|
156
|
-
_$insert(_el$
|
|
203
|
+
var _el$26 = _$getNextElement(_tmpl$0);
|
|
204
|
+
_$insert(_el$26, content);
|
|
157
205
|
_$effect(_p$ => {
|
|
158
|
-
var _v$ = className(),
|
|
159
|
-
_v$
|
|
160
|
-
_v$
|
|
161
|
-
|
|
162
|
-
_v$
|
|
163
|
-
_v$
|
|
206
|
+
var _v$3 = className(),
|
|
207
|
+
_v$4 = state(),
|
|
208
|
+
_v$5 = ok() ? props.color : undefined,
|
|
209
|
+
_v$6 = state() === "loading" ? "true" : undefined;
|
|
210
|
+
_v$3 !== _p$.e && _$className(_el$26, _p$.e = _v$3);
|
|
211
|
+
_v$4 !== _p$.t && _$setAttribute(_el$26, "data-state", _p$.t = _v$4);
|
|
212
|
+
_v$5 !== _p$.a && _$setAttribute(_el$26, "data-color", _p$.a = _v$5);
|
|
213
|
+
_v$6 !== _p$.o && _$setAttribute(_el$26, "aria-busy", _p$.o = _v$6);
|
|
164
214
|
return _p$;
|
|
165
215
|
}, {
|
|
166
216
|
e: undefined,
|
|
167
217
|
t: undefined,
|
|
168
|
-
a: undefined
|
|
218
|
+
a: undefined,
|
|
219
|
+
o: undefined
|
|
169
220
|
});
|
|
170
|
-
return _el$
|
|
221
|
+
return _el$26;
|
|
171
222
|
})();
|
|
172
223
|
},
|
|
173
224
|
children: href => (() => {
|
|
174
|
-
var _el$
|
|
175
|
-
_$insert(_el$
|
|
225
|
+
var _el$27 = _$getNextElement(_tmpl$1);
|
|
226
|
+
_$insert(_el$27, content);
|
|
176
227
|
_$effect(_p$ => {
|
|
177
|
-
var _v$
|
|
178
|
-
_v$
|
|
179
|
-
_v$
|
|
180
|
-
|
|
181
|
-
_v$
|
|
182
|
-
_v$
|
|
228
|
+
var _v$7 = className(),
|
|
229
|
+
_v$8 = state(),
|
|
230
|
+
_v$9 = props.color,
|
|
231
|
+
_v$0 = href();
|
|
232
|
+
_v$7 !== _p$.e && _$className(_el$27, _p$.e = _v$7);
|
|
233
|
+
_v$8 !== _p$.t && _$setAttribute(_el$27, "data-state", _p$.t = _v$8);
|
|
234
|
+
_v$9 !== _p$.a && _$setAttribute(_el$27, "data-color", _p$.a = _v$9);
|
|
235
|
+
_v$0 !== _p$.o && _$setAttribute(_el$27, "href", _p$.o = _v$0);
|
|
183
236
|
return _p$;
|
|
184
237
|
}, {
|
|
185
238
|
e: undefined,
|
|
186
239
|
t: undefined,
|
|
187
|
-
a: undefined
|
|
240
|
+
a: undefined,
|
|
241
|
+
o: undefined
|
|
188
242
|
});
|
|
189
|
-
return _el$
|
|
243
|
+
return _el$27;
|
|
190
244
|
})()
|
|
191
245
|
});
|
|
192
246
|
},
|
|
193
247
|
children: open => (() => {
|
|
194
|
-
var _el$
|
|
195
|
-
_el$
|
|
196
|
-
_$insert(_el$
|
|
248
|
+
var _el$28 = _$getNextElement(_tmpl$10);
|
|
249
|
+
_el$28.$$click = () => open()();
|
|
250
|
+
_$insert(_el$28, content);
|
|
197
251
|
_$effect(_p$ => {
|
|
198
|
-
var _v$
|
|
199
|
-
_v$
|
|
200
|
-
|
|
201
|
-
_v$
|
|
252
|
+
var _v$1 = className(),
|
|
253
|
+
_v$10 = state(),
|
|
254
|
+
_v$11 = props.color;
|
|
255
|
+
_v$1 !== _p$.e && _$className(_el$28, _p$.e = _v$1);
|
|
256
|
+
_v$10 !== _p$.t && _$setAttribute(_el$28, "data-state", _p$.t = _v$10);
|
|
257
|
+
_v$11 !== _p$.a && _$setAttribute(_el$28, "data-color", _p$.a = _v$11);
|
|
202
258
|
return _p$;
|
|
203
259
|
}, {
|
|
204
260
|
e: undefined,
|
|
205
|
-
t: undefined
|
|
261
|
+
t: undefined,
|
|
262
|
+
a: undefined
|
|
206
263
|
});
|
|
207
264
|
_$runHydrationEvents();
|
|
208
|
-
return _el$
|
|
265
|
+
return _el$28;
|
|
209
266
|
})()
|
|
210
267
|
});
|
|
211
268
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["surfaces/ResourceCard.tsx"],"sourcesContent":["import { type JSX, Match, Show, Switch } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { useResourceMessages } from \"./resource-messages\";\n\n/**\n * What a card can show of the element it stands for: the element itself, a placeholder while it is being looked up, or\n * why it cannot be shown.\n */\nexport type ResourceCardState = \"ok\" | \"loading\" | \"no_access\" | \"deleted\" | \"unavailable\";\n\nexport type ResourceCardProps = {\n /** Defaults to `\"ok\"`. Every state has the same size, so a card that changes state moves nothing around it. */\n state?: ResourceCardState;\n /** The element's name. Shown only in state `\"ok\"`, as \"Untitled\" when blank, so a card that opens always has a name. */\n title?: string;\n /** Icon class of the element's kind, for example `ti ti-notebook`. Shown only in state `\"ok\"`. */\n icon?: string;\n /** What the element belongs to, for example the application or service. Shown only in state `\"ok\"`. */\n source?: string;\n /** Where the element lives within its source, for example a folder or a project. Shown only in state `\"ok\"`. */\n location?: string;\n /** One line of plain text from the element. Shown only in state `\"ok\"`. */\n preview?: string;\n /** Opens the element, for example in a panel. Takes precedence over `href`. Only in state `\"ok\"`. */\n onOpen?: () => void;\n /** Opens the element. Absolute `https` or `http`, or relative. Only in state `\"ok\"`. */\n href?: string;\n class?: string;\n};\n\nconst DEFAULT_ICON = \"ti ti-file\";\nconst LINK_PROTOCOLS = new Set([\"https:\", \"http:\"]);\nconst STATE_ICONS = { no_access: \"ti ti-lock\", deleted: \"ti ti-trash\", unavailable: \"ti ti-cloud-off\" } as const;\n\n/** A link the card may open: absolute with an allowed scheme, or relative to the page. */\nconst linkUrl = (href: string | undefined): string | undefined => {\n if (!href) return undefined;\n try {\n return LINK_PROTOCOLS.has(new URL(href, \"https://relative.invalid/\").protocol) ? href : undefined;\n } catch {\n return undefined;\n }\n};\n\n/**\n * A card for an element that something refers to, such as a task or a document, with the same size in every state.\n * Outside state `\"ok\"`, it shows none of the element's fields and opens nothing, whatever the caller passes.\n */\nexport function ResourceCard(props: ResourceCardProps): JSX.Element {\n const messages = useUiMessages();\n const resourceMessages = useResourceMessages();\n const state = () => props.state ?? \"ok\";\n const ok = () => state() === \"ok\";\n const title = () => (props.title?.trim() ? props.title : resourceMessages().resourceUntitled);\n const meta = () => [props.source, props.location].filter((part) => part?.trim()).join(\" · \");\n /** Why the element cannot be shown, outside `\"ok\"` and `\"loading\"`. */\n const reason = (): Exclude<ResourceCardState, \"ok\" | \"loading\"> | undefined => {\n const current = state();\n return current === \"ok\" || current === \"loading\" ? undefined : current;\n };\n const className = () => `k2b-resource-card${props.class ? ` ${props.class}` : \"\"}`;\n\n const content = () => (\n <Switch>\n <Match when={ok()}>\n <span class=\"k2b-resource-card__icon\" aria-hidden=\"true\">\n <i class={props.icon ?? DEFAULT_ICON} />\n </span>\n <span class=\"k2b-resource-card__copy\">\n <span class=\"k2b-resource-card__title\">{title()}</span>\n <Show when={meta()}>\n <span class=\"k2b-resource-card__meta\">{meta()}</span>\n </Show>\n <Show when={props.preview?.trim()}>\n <span class=\"k2b-resource-card__preview\">{props.preview}</span>\n </Show>\n </span>\n </Match>\n <Match when={state() === \"loading\"}>\n <span class=\"k2b-resource-card__icon\" aria-hidden=\"true\" />\n <span class=\"k2b-resource-card__copy\">\n <span class=\"k2b-resource-card__bar\" aria-hidden=\"true\" />\n <span class=\"k2b-resource-card__bar\" aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">{messages().loading}</span>\n </span>\n </Match>\n <Match when={reason()}>\n {(reason) => (\n <>\n <span class=\"k2b-resource-card__icon\" aria-hidden=\"true\">\n <i class={STATE_ICONS[reason()]} />\n </span>\n <span class=\"k2b-resource-card__copy\">\n <span class=\"k2b-resource-card__label\">\n {reason() === \"no_access\"\n ? resourceMessages().resourceNoAccess\n : reason() === \"deleted\"\n ? resourceMessages().resourceDeleted\n : resourceMessages().resourceUnavailable}\n </span>\n </span>\n </>\n )}\n </Match>\n </Switch>\n );\n\n return (\n <Show\n when={ok() && props.onOpen}\n fallback={\n <Show\n when={ok() && linkUrl(props.href)}\n fallback={\n <div class={className()} data-state={state()} aria-busy={state() === \"loading\" ? \"true\" : undefined}>\n {content()}\n </div>\n }\n >\n {(href) => (\n <a class={className()} data-state={state()} href={href()}>\n {content()}\n </a>\n )}\n </Show>\n }\n >\n {(open) => (\n <button type=\"button\" class={className()} data-state={state()} onClick={() => open()()}>\n {content()}\n </button>\n )}\n </Show>\n );\n}\n\nexport default ResourceCard;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/ResourceCard.tsx"],"sourcesContent":["import { type JSX, Match, Show, Switch } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { LinkCardColor } from \"./LinkCard\";\nimport { useResourceMessages } from \"./resource-messages\";\n\n/**\n * What a card can show of the element it stands for: the element itself, a placeholder while it is being looked up, or\n * why it cannot be shown.\n */\nexport type ResourceCardState = \"ok\" | \"loading\" | \"no_access\" | \"deleted\" | \"unavailable\";\n\n/** The icon chip's colour, from the same palette as `LinkCard`. */\nexport type ResourceCardColor = LinkCardColor;\n\nexport type ResourceCardProps = {\n /** Defaults to `\"ok\"`. Every state has the same size, so a card that changes state moves nothing around it. */\n state?: ResourceCardState;\n /** The element's name. Shown only in state `\"ok\"`, as \"Untitled\" when blank, so a card that opens always has a name. */\n title?: string;\n /** Icon class of the element's kind, for example `ti ti-notebook`. Shown only in state `\"ok\"`. */\n icon?: string;\n /** Colour of the icon chip, usually one per kind of element. Without it the chip stays neutral. Only in state `\"ok\"`. */\n color?: ResourceCardColor;\n /** One line above the title: what and where the element is, for example \"Task in IT planning · due 30 Oct\". Only in state `\"ok\"`. */\n context?: string;\n /** The element's current state as a short label, for example \"Open\", shown at the end. Only in state `\"ok\"`. */\n status?: string;\n /** What the element belongs to, for example the application or service. Shown only in state `\"ok\"`. */\n source?: string;\n /** Where the element lives within its source, for example a folder or a project. Shown only in state `\"ok\"`. */\n location?: string;\n /** One line of plain text from the element. Shown only in state `\"ok\"`. */\n preview?: string;\n /** Opens the element, for example in a panel. Takes precedence over `href`. Only in state `\"ok\"`. */\n onOpen?: () => void;\n /** Opens the element. Absolute `https` or `http`, or relative. Only in state `\"ok\"`. */\n href?: string;\n class?: string;\n};\n\nconst DEFAULT_ICON = \"ti ti-file\";\nconst LINK_PROTOCOLS = new Set([\"https:\", \"http:\"]);\nconst STATE_ICONS = { no_access: \"ti ti-lock\", deleted: \"ti ti-trash\", unavailable: \"ti ti-cloud-off\" } as const;\n\n/** A link the card may open: absolute with an allowed scheme, or relative to the page. */\nconst linkUrl = (href: string | undefined): string | undefined => {\n if (!href) return undefined;\n try {\n return LINK_PROTOCOLS.has(new URL(href, \"https://relative.invalid/\").protocol) ? href : undefined;\n } catch {\n return undefined;\n }\n};\n\n/**\n * A card for an element that something refers to, such as a task or a document, with the same size in every state.\n * Outside state `\"ok\"`, it shows none of the element's fields and opens nothing, whatever the caller passes.\n */\nexport function ResourceCard(props: ResourceCardProps): JSX.Element {\n const messages = useUiMessages();\n const resourceMessages = useResourceMessages();\n const state = () => props.state ?? \"ok\";\n const ok = () => state() === \"ok\";\n const title = () => (props.title?.trim() ? props.title : resourceMessages().resourceUntitled);\n const meta = () => [props.source, props.location].filter((part) => part?.trim()).join(\" · \");\n /** Why the element cannot be shown, outside `\"ok\"` and `\"loading\"`. */\n const reason = (): Exclude<ResourceCardState, \"ok\" | \"loading\"> | undefined => {\n const current = state();\n return current === \"ok\" || current === \"loading\" ? undefined : current;\n };\n const className = () => `k2b-resource-card${props.class ? ` ${props.class}` : \"\"}`;\n\n const content = () => (\n <Switch>\n <Match when={ok()}>\n <span class={`k2b-resource-card__icon${props.color ? \" k2b-icon-tile\" : \"\"}`} aria-hidden=\"true\">\n <i class={props.icon ?? DEFAULT_ICON} />\n </span>\n <span class=\"k2b-resource-card__copy\">\n <Show when={props.context?.trim()}>\n <span class=\"k2b-resource-card__meta\">{props.context}</span>\n </Show>\n <span class=\"k2b-resource-card__title\">{title()}</span>\n <Show when={meta()}>\n <span class=\"k2b-resource-card__meta\">{meta()}</span>\n </Show>\n <Show when={props.preview?.trim()}>\n <span class=\"k2b-resource-card__preview\">{props.preview}</span>\n </Show>\n </span>\n <Show when={props.status?.trim()}>\n <span class=\"k2b-resource-card__status\">{props.status}</span>\n </Show>\n </Match>\n <Match when={state() === \"loading\"}>\n <span class=\"k2b-resource-card__icon\" aria-hidden=\"true\" />\n <span class=\"k2b-resource-card__copy\">\n <span class=\"k2b-resource-card__bar\" aria-hidden=\"true\" />\n <span class=\"k2b-resource-card__bar\" aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">{messages().loading}</span>\n </span>\n </Match>\n <Match when={reason()}>\n {(reason) => (\n <>\n <span class=\"k2b-resource-card__icon\" aria-hidden=\"true\">\n <i class={STATE_ICONS[reason()]} />\n </span>\n <span class=\"k2b-resource-card__copy\">\n <span class=\"k2b-resource-card__meta\">{resourceMessages().resourceKind}</span>\n <span class=\"k2b-resource-card__label\">\n {reason() === \"no_access\"\n ? resourceMessages().resourceNoAccess\n : reason() === \"deleted\"\n ? resourceMessages().resourceDeleted\n : resourceMessages().resourceUnavailable}\n </span>\n <Show when={reason() === \"no_access\"}>\n <span class=\"k2b-resource-card__meta\">{resourceMessages().resourceNoAccessHint}</span>\n </Show>\n </span>\n </>\n )}\n </Match>\n </Switch>\n );\n\n return (\n <Show\n when={ok() && props.onOpen}\n fallback={\n <Show\n when={ok() && linkUrl(props.href)}\n fallback={\n <div\n class={className()}\n data-state={state()}\n data-color={ok() ? props.color : undefined}\n aria-busy={state() === \"loading\" ? \"true\" : undefined}\n >\n {content()}\n </div>\n }\n >\n {(href) => (\n <a class={className()} data-state={state()} data-color={props.color} href={href()}>\n {content()}\n </a>\n )}\n </Show>\n }\n >\n {(open) => (\n <button type=\"button\" class={className()} data-state={state()} data-color={props.color} onClick={() => open()()}>\n {content()}\n </button>\n )}\n </Show>\n );\n}\n\nexport default ResourceCard;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { Avatar } from "./Avatar";
|
|
2
2
|
export { AvatarStack } from "./AvatarStack";
|
|
3
3
|
export { DescriptionList } from "./DescriptionList";
|
|
4
|
+
export { DotStrip } from "./DotStrip";
|
|
4
5
|
export { LinkCard } from "./LinkCard";
|
|
5
6
|
export { NotFoundState } from "./NotFoundState";
|
|
6
7
|
export { NOTICE_CARD_CLASSES, NoticeCard } from "./NoticeCard";
|
|
@@ -8,6 +9,7 @@ export { Paper } from "./Paper";
|
|
|
8
9
|
export { default as Placeholder } from "./Placeholder";
|
|
9
10
|
export { ProgressBar } from "./ProgressBar";
|
|
10
11
|
export { ProgressRing } from "./ProgressRing";
|
|
12
|
+
export { PERSON_COLORS, personColor } from "./person-color";
|
|
11
13
|
export { ResourceCard } from "./ResourceCard";
|
|
12
14
|
export { Skeleton } from "./Skeleton";
|
|
13
15
|
export { StatCell } from "./StatCell";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["surfaces/index.ts"],"sourcesContent":["export type { AvatarProps, AvatarRing, AvatarShape, AvatarSize } from \"./Avatar\";\nexport { Avatar } from \"./Avatar\";\nexport type { AvatarStackPerson, AvatarStackProps } from \"./AvatarStack\";\nexport { AvatarStack } from \"./AvatarStack\";\nexport type { DescriptionListItem, DescriptionListProps } from \"./DescriptionList\";\nexport { DescriptionList } from \"./DescriptionList\";\nexport type { LinkCardColor, LinkCardProps } from \"./LinkCard\";\nexport { LinkCard } from \"./LinkCard\";\nexport type { NotFoundStateAction, NotFoundStateProps } from \"./NotFoundState\";\nexport { NotFoundState } from \"./NotFoundState\";\nexport type { NoticeCardProps, NoticeGridProps, NoticeTone } from \"./NoticeCard\";\nexport { NOTICE_CARD_CLASSES, NoticeCard } from \"./NoticeCard\";\nexport type { PaperProps, PaperTag } from \"./Paper\";\nexport { Paper } from \"./Paper\";\nexport type {\n PlaceholderAlign,\n PlaceholderProps,\n PlaceholderState,\n PlaceholderSurface,\n PlaceholderVariant,\n} from \"./Placeholder\";\nexport { default as Placeholder } from \"./Placeholder\";\nexport type { ProgressBarProps, ProgressBarTone } from \"./ProgressBar\";\nexport { ProgressBar } from \"./ProgressBar\";\nexport type { ProgressRingProps, ProgressRingTone } from \"./ProgressRing\";\nexport { ProgressRing } from \"./ProgressRing\";\nexport type { ResourceCardProps, ResourceCardState } from \"./ResourceCard\";\nexport { ResourceCard } from \"./ResourceCard\";\nexport { Skeleton, type SkeletonProps } from \"./Skeleton\";\nexport type { StatCellAccent, StatCellProps, StatCellTone } from \"./StatCell\";\nexport { StatCell } from \"./StatCell\";\nexport type {\n StatGridAction,\n StatGridColumns,\n StatGridProps,\n StatGridSize,\n StatGridSurface,\n} from \"./StatGrid\";\nexport { StatGrid } from \"./StatGrid\";\nexport type { StatusBadgeProps, StatusTone } from \"./StatusBadge\";\nexport { StatusBadge } from \"./StatusBadge\";\nexport type { TagProps, TagSize } from \"./Tag\";\nexport { Tag } from \"./Tag\";\n"],"mappings":"AACA,SAAS,MAAM,QAAQ,UAAU;AAEjC,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,eAAe,QAAQ,mBAAmB;AAEnD,SAAS,QAAQ,QAAQ,YAAY;AAErC,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,mBAAmB,EAAE,UAAU,QAAQ,cAAc;AAE9D,SAAS,KAAK,QAAQ,SAAS;AAQ/B,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,YAAY,QAAQ,gBAAgB;
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/index.ts"],"sourcesContent":["export type { AvatarProps, AvatarRing, AvatarShape, AvatarSize } from \"./Avatar\";\nexport { Avatar } from \"./Avatar\";\nexport type { AvatarStackPerson, AvatarStackProps } from \"./AvatarStack\";\nexport { AvatarStack } from \"./AvatarStack\";\nexport type { DescriptionListItem, DescriptionListProps } from \"./DescriptionList\";\nexport { DescriptionList } from \"./DescriptionList\";\nexport type { DotStripProps, DotStripTone } from \"./DotStrip\";\nexport { DotStrip } from \"./DotStrip\";\nexport type { LinkCardColor, LinkCardProps } from \"./LinkCard\";\nexport { LinkCard } from \"./LinkCard\";\nexport type { NotFoundStateAction, NotFoundStateProps } from \"./NotFoundState\";\nexport { NotFoundState } from \"./NotFoundState\";\nexport type { NoticeCardProps, NoticeGridProps, NoticeTone } from \"./NoticeCard\";\nexport { NOTICE_CARD_CLASSES, NoticeCard } from \"./NoticeCard\";\nexport type { PaperProps, PaperTag } from \"./Paper\";\nexport { Paper } from \"./Paper\";\nexport type {\n PlaceholderAlign,\n PlaceholderProps,\n PlaceholderState,\n PlaceholderSurface,\n PlaceholderVariant,\n} from \"./Placeholder\";\nexport { default as Placeholder } from \"./Placeholder\";\nexport type { ProgressBarProps, ProgressBarTone } from \"./ProgressBar\";\nexport { ProgressBar } from \"./ProgressBar\";\nexport type { ProgressRingProps, ProgressRingTone } from \"./ProgressRing\";\nexport { ProgressRing } from \"./ProgressRing\";\nexport { PERSON_COLORS, personColor } from \"./person-color\";\nexport type { ResourceCardColor, ResourceCardProps, ResourceCardState } from \"./ResourceCard\";\nexport { ResourceCard } from \"./ResourceCard\";\nexport { Skeleton, type SkeletonProps } from \"./Skeleton\";\nexport type { StatCellAccent, StatCellProps, StatCellTone } from \"./StatCell\";\nexport { StatCell } from \"./StatCell\";\nexport type {\n StatGridAction,\n StatGridColumns,\n StatGridProps,\n StatGridSize,\n StatGridSurface,\n} from \"./StatGrid\";\nexport { StatGrid } from \"./StatGrid\";\nexport type { StatusBadgeProps, StatusTone } from \"./StatusBadge\";\nexport { StatusBadge } from \"./StatusBadge\";\nexport type { TagProps, TagSize } from \"./Tag\";\nexport { Tag } from \"./Tag\";\n"],"mappings":"AACA,SAAS,MAAM,QAAQ,UAAU;AAEjC,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,eAAe,QAAQ,mBAAmB;AAEnD,SAAS,QAAQ,QAAQ,YAAY;AAErC,SAAS,QAAQ,QAAQ,YAAY;AAErC,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,mBAAmB,EAAE,UAAU,QAAQ,cAAc;AAE9D,SAAS,KAAK,QAAQ,SAAS;AAQ/B,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,YAAY,QAAQ,gBAAgB;AAC7C,SAAS,aAAa,EAAE,WAAW,QAAQ,gBAAgB;AAE3D,SAAS,YAAY,QAAQ,gBAAgB;AAC7C,SAAS,QAAQ,QAA4B,YAAY;AAEzD,SAAS,QAAQ,QAAQ,YAAY;AAQrC,SAAS,QAAQ,QAAQ,YAAY;AAErC,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,GAAG,QAAQ,OAAO","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The colors that stand for a person: the tint behind avatar initials, a collaborator's cursor, and the marks and
|
|
3
|
+
* comments a person leaves. The palette leaves out cyan, which means AI, and yellow, which reads as a text highlight.
|
|
4
|
+
* Several people can share a color, so a person's name always appears next to it.
|
|
5
|
+
*/
|
|
6
|
+
export const PERSON_COLORS = ["#3b82f6", "#6366f1", "#8b5cf6", "#c026d3", "#ec4899", "#e11d48", "#f97316", "#16a34a"];
|
|
7
|
+
|
|
8
|
+
/** The palette index for a name, the order of the `.k2b-avatar[data-tint]` rules. Surrounding spaces do not count. */
|
|
9
|
+
export const personTint = name => {
|
|
10
|
+
const trimmed = name.trim();
|
|
11
|
+
let hash = 0;
|
|
12
|
+
for (let index = 0; index < trimmed.length; index++) hash = hash * 31 + trimmed.charCodeAt(index) >>> 0;
|
|
13
|
+
return hash % PERSON_COLORS.length;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/** A person's color from their display name, the same wherever Cloud shows that person. */
|
|
17
|
+
export const personColor = name => PERSON_COLORS[personTint(name)];
|
|
18
|
+
//# sourceMappingURL=person-color.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/person-color.ts"],"sourcesContent":["/**\n * The colors that stand for a person: the tint behind avatar initials, a collaborator's cursor, and the marks and\n * comments a person leaves. The palette leaves out cyan, which means AI, and yellow, which reads as a text highlight.\n * Several people can share a color, so a person's name always appears next to it.\n */\nexport const PERSON_COLORS = [\"#3b82f6\", \"#6366f1\", \"#8b5cf6\", \"#c026d3\", \"#ec4899\", \"#e11d48\", \"#f97316\", \"#16a34a\"] as const;\n\n/** The palette index for a name, the order of the `.k2b-avatar[data-tint]` rules. Surrounding spaces do not count. */\nexport const personTint = (name: string): number => {\n const trimmed = name.trim();\n let hash = 0;\n for (let index = 0; index < trimmed.length; index++) hash = (hash * 31 + trimmed.charCodeAt(index)) >>> 0;\n return hash % PERSON_COLORS.length;\n};\n\n/** A person's color from their display name, the same wherever Cloud shows that person. */\nexport const personColor = (name: string): string => PERSON_COLORS[personTint(name)]!;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAU;;AAE9H;AACA,OAAO,MAAM,UAAU,GAAI,IAAY,IAAa;EAClD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;EAC3B,IAAI,IAAI,GAAG,CAAC;EACZ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,GAAI,IAAI,GAAG,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,KAAM,CAAC;EACzG,OAAO,IAAI,GAAG,aAAa,CAAC,MAAM;AACpC,CAAC;;AAED;AACA,OAAO,MAAM,WAAW,GAAI,IAAY,IAAa,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAE","ignoreList":[]}
|
|
@@ -7,13 +7,17 @@ const resourceMessages = i18n.define({
|
|
|
7
7
|
resourceUntitled: "Untitled",
|
|
8
8
|
resourceNoAccess: "Item not available",
|
|
9
9
|
resourceDeleted: "Item deleted",
|
|
10
|
-
resourceUnavailable: "Not available right now"
|
|
10
|
+
resourceUnavailable: "Not available right now",
|
|
11
|
+
resourceKind: "Cloud element",
|
|
12
|
+
resourceNoAccessHint: "You have no access. Title and content stay hidden."
|
|
11
13
|
},
|
|
12
14
|
de: {
|
|
13
15
|
resourceUntitled: "Ohne Titel",
|
|
14
16
|
resourceNoAccess: "Element nicht verfügbar",
|
|
15
17
|
resourceDeleted: "Element gelöscht",
|
|
16
|
-
resourceUnavailable: "Gerade nicht verfügbar"
|
|
18
|
+
resourceUnavailable: "Gerade nicht verfügbar",
|
|
19
|
+
resourceKind: "Cloud-Element",
|
|
20
|
+
resourceNoAccessHint: "Du hast keinen Zugriff. Titel und Inhalt bleiben verborgen."
|
|
17
21
|
}
|
|
18
22
|
}
|
|
19
23
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["surfaces/resource-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst resourceMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n resourceUntitled: \"Untitled\",\n resourceNoAccess: \"Item not available\",\n resourceDeleted: \"Item deleted\",\n resourceUnavailable: \"Not available right now\",\n },\n de: {\n resourceUntitled: \"Ohne Titel\",\n resourceNoAccess: \"Element nicht verfügbar\",\n resourceDeleted: \"Element gelöscht\",\n resourceUnavailable: \"Gerade nicht verfügbar\",\n },\n },\n});\n\nexport type ResourceMessages = ReturnType<(typeof resourceMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useResourceMessages = (): (() => ResourceMessages) => {\n const locale = useLocale();\n return () => resourceMessages.resolve([locale()]).t;\n};\n\nexport const checkResourceMessages = () => resourceMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;EACnC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,gBAAgB,EAAE,UAAU;MAC5B,gBAAgB,EAAE,oBAAoB;MACtC,eAAe,EAAE,cAAc;MAC/B,mBAAmB,EAAE;
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/resource-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst resourceMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n resourceUntitled: \"Untitled\",\n resourceNoAccess: \"Item not available\",\n resourceDeleted: \"Item deleted\",\n resourceUnavailable: \"Not available right now\",\n resourceKind: \"Cloud element\",\n resourceNoAccessHint: \"You have no access. Title and content stay hidden.\",\n },\n de: {\n resourceUntitled: \"Ohne Titel\",\n resourceNoAccess: \"Element nicht verfügbar\",\n resourceDeleted: \"Element gelöscht\",\n resourceUnavailable: \"Gerade nicht verfügbar\",\n resourceKind: \"Cloud-Element\",\n resourceNoAccessHint: \"Du hast keinen Zugriff. Titel und Inhalt bleiben verborgen.\",\n },\n },\n});\n\nexport type ResourceMessages = ReturnType<(typeof resourceMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useResourceMessages = (): (() => ResourceMessages) => {\n const locale = useLocale();\n return () => resourceMessages.resolve([locale()]).t;\n};\n\nexport const checkResourceMessages = () => resourceMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;EACnC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,gBAAgB,EAAE,UAAU;MAC5B,gBAAgB,EAAE,oBAAoB;MACtC,eAAe,EAAE,cAAc;MAC/B,mBAAmB,EAAE,yBAAyB;MAC9C,YAAY,EAAE,eAAe;MAC7B,oBAAoB,EAAE;IACxB,CAAC;IACD,EAAE,EAAE;MACF,gBAAgB,EAAE,YAAY;MAC9B,gBAAgB,EAAE,yBAAyB;MAC3C,eAAe,EAAE,kBAAkB;MACnC,mBAAmB,EAAE,wBAAwB;MAC7C,YAAY,EAAE,eAAe;MAC7B,oBAAoB,EAAE;IACxB;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,mBAAmB,GAAG,MAAgC;EACjE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,OAAO,MAAM,qBAAqB,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
|