@cognivo/components 0.8.1 → 0.8.3
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/chunks/{premium.css-DHekUEUt.js → premium.css-B0hBr_uS.js} +27 -27
- package/dist/chunks/{premium.css-DHekUEUt.js.map → premium.css-B0hBr_uS.js.map} +1 -1
- package/dist/cognivo.min.js +1876 -1227
- package/dist/cognivo.min.js.map +1 -1
- package/dist/components/ai-ab-test/ai-ab-test.js +1 -1
- package/dist/components/ai-accessibility-report/ai-accessibility-report.js +1 -1
- package/dist/components/ai-action-preview/ai-action-preview.js +1 -1
- package/dist/components/ai-agent-card/ai-agent-card.js +1 -1
- package/dist/components/ai-agent-steps/ai-agent-steps.js +1 -1
- package/dist/components/ai-alert-card/ai-alert-card.js +1 -1
- package/dist/components/ai-analytics-chart/ai-analytics-chart.js +1 -1
- package/dist/components/ai-annotation/ai-annotation.js +1 -1
- package/dist/components/ai-api-key-manager/ai-api-key-manager.js +1 -1
- package/dist/components/ai-app-sidebar/ai-app-sidebar.js +1 -1
- package/dist/components/ai-assistant-widget/ai-assistant-widget.js +1 -1
- package/dist/components/ai-audio-player/ai-audio-player.js +1 -1
- package/dist/components/ai-avatar/ai-avatar.js +1 -1
- package/dist/components/ai-badge/ai-badge.js +1 -1
- package/dist/components/ai-batch-progress/ai-batch-progress.js +1 -1
- package/dist/components/ai-cache-indicator/ai-cache-indicator.js +1 -1
- package/dist/components/ai-capture-flow/ai-capture-flow.js +1 -1
- package/dist/components/ai-changelog/ai-changelog.js +1 -1
- package/dist/components/ai-chart-summary/ai-chart-summary.js +1 -1
- package/dist/components/ai-chat/ai-chat.js +1 -1
- package/dist/components/ai-citation/ai-citation.js +1 -1
- package/dist/components/ai-collaborative-editor/ai-collaborative-editor.js +1 -1
- package/dist/components/ai-command-palette/ai-command-palette.js +1 -1
- package/dist/components/ai-confidence-badge/ai-confidence-badge.js +1 -1
- package/dist/components/ai-confidence-slider/ai-confidence-slider.js +1 -1
- package/dist/components/ai-consent-manager/ai-consent-manager.js +1 -1
- package/dist/components/ai-context-window/ai-context-window.js +1 -1
- package/dist/components/ai-copy-button/ai-copy-button.js +1 -1
- package/dist/components/ai-cost-dashboard/ai-cost-dashboard.js +1 -1
- package/dist/components/ai-data-card/ai-data-card.js +1 -1
- package/dist/components/ai-data-lineage/ai-data-lineage.js +1 -1
- package/dist/components/ai-data-preview/ai-data-preview.js +1 -1
- package/dist/components/ai-data-table/ai-data-table.js +1 -1
- package/dist/components/ai-debug-console/ai-debug-console.js +1 -1
- package/dist/components/ai-detection-canvas/ai-detection-canvas.js +1 -1
- package/dist/components/ai-diff-panel/ai-diff-panel.js +1 -1
- package/dist/components/ai-embedding-viz/ai-embedding-viz.js +1 -1
- package/dist/components/ai-empty-state/ai-empty-state.js +1 -1
- package/dist/components/ai-error-boundary/ai-error-boundary.js +1 -1
- package/dist/components/ai-eval-scorecard/ai-eval-scorecard.js +1 -1
- package/dist/components/ai-feature-flag/ai-feature-flag.js +1 -1
- package/dist/components/ai-feedback/ai-feedback.js +1 -1
- package/dist/components/ai-file-upload/ai-file-upload.js +1 -1
- package/dist/components/ai-form-generator/ai-form-generator.js +1 -1
- package/dist/components/ai-guardrail/ai-guardrail.js +1 -1
- package/dist/components/ai-heatmap/ai-heatmap.js +1 -1
- package/dist/components/ai-insight-card/ai-insight-card.js +1 -1
- package/dist/components/ai-json-viewer/ai-json-viewer.js +1 -1
- package/dist/components/ai-keyboard-shortcuts/ai-keyboard-shortcuts.js +1 -1
- package/dist/components/ai-kpi-grid/ai-kpi-grid.js +1 -1
- package/dist/components/ai-labeling-board/ai-labeling-board.js +1 -1
- package/dist/components/ai-memory-panel/ai-memory-panel.js +1 -1
- package/dist/components/ai-model-comparison/ai-model-comparison.js +1 -1
- package/dist/components/ai-model-selector/ai-model-selector.js +1 -1
- package/dist/components/ai-notification-center/ai-notification-center.js +1 -1
- package/dist/components/ai-onboarding/ai-onboarding.js +1 -1
- package/dist/components/ai-permission-gate/ai-permission-gate.js +1 -1
- package/dist/components/ai-personalization-dash/ai-personalization-dash.js +1 -1
- package/dist/components/ai-presence/ai-presence.js +1 -1
- package/dist/components/ai-progress-steps/ai-progress-steps.js +1 -1
- package/dist/components/ai-prompt-editor/ai-prompt-editor.js +1 -1
- package/dist/components/ai-prompt-template/ai-prompt-template.js +1 -1
- package/dist/components/ai-rag-panel/ai-rag-panel.js +1 -1
- package/dist/components/ai-reasoning-tree/ai-reasoning-tree.js +1 -1
- package/dist/components/ai-result-panel/ai-result-panel.js +1 -1
- package/dist/components/ai-reveal-animation/ai-reveal-animation.js +1 -1
- package/dist/components/ai-reward-signal/ai-reward-signal.js +1 -1
- package/dist/components/ai-rich-message/ai-rich-message.js +1 -1
- package/dist/components/ai-scenario-panel/ai-scenario-panel.js +1 -1
- package/dist/components/ai-search/ai-search.js +1 -1
- package/dist/components/ai-segmentation-viewer/ai-segmentation-viewer.js +1 -1
- package/dist/components/ai-sidebar/ai-sidebar.js +1 -1
- package/dist/components/ai-similarity-card/ai-similarity-card.js +1 -1
- package/dist/components/ai-source-graph/ai-source-graph.js +1 -1
- package/dist/components/ai-status-page/ai-status-page.js +1 -1
- package/dist/components/ai-streaming-text/ai-streaming-text.js +1 -1
- package/dist/components/ai-test-runner/ai-test-runner.js +1 -1
- package/dist/components/ai-thinking/ai-thinking.js +1 -1
- package/dist/components/ai-timeline/ai-timeline.js +1 -1
- package/dist/components/ai-token-tracker/ai-token-tracker.js +1 -1
- package/dist/components/ai-tool-card-resolver/ai-tool-card-resolver.js +1 -1
- package/dist/components/ai-tool-indicator/ai-tool-indicator.js +1 -1
- package/dist/components/ai-transform-slider/ai-transform-slider.js +1 -1
- package/dist/components/ai-translation-panel/ai-translation-panel.js +1 -1
- package/dist/components/ai-usage-meter/ai-usage-meter.js +1 -1
- package/dist/components/ai-validation-checklist/ai-validation-checklist.js +1 -1
- package/dist/components/ai-version-selector/ai-version-selector.js +1 -1
- package/dist/components/ai-voice-panel/ai-voice-panel.js +1 -1
- package/dist/components/ai-webhook-config/ai-webhook-config.js +1 -1
- package/dist/components/ai-workflow-builder/ai-workflow-builder.js +1 -1
- package/dist/components/bias-anchoring/bias-anchoring.js +1 -1
- package/dist/components/bias-authority/bias-authority.js +1 -1
- package/dist/components/bias-commitment/bias-commitment.js +1 -1
- package/dist/components/bias-reciprocity/bias-reciprocity.js +1 -1
- package/dist/components/bias-scarcity/bias-scarcity.js +1 -1
- package/dist/components/bias-social-proof/bias-social-proof.js +1 -1
- package/dist/components/cg-accordion/cg-accordion.js +1 -1
- package/dist/components/cg-alert-dialog/cg-alert-dialog.js +1 -1
- package/dist/components/cg-app-shell/cg-app-shell.d.ts +43 -0
- package/dist/components/cg-app-shell/cg-app-shell.d.ts.map +1 -0
- package/dist/components/cg-app-shell/cg-app-shell.js +170 -0
- package/dist/components/cg-app-shell/cg-app-shell.js.map +1 -0
- package/dist/components/cg-aspect-ratio/cg-aspect-ratio.js +1 -1
- package/dist/components/cg-autocomplete/cg-autocomplete.js +1 -1
- package/dist/components/cg-avatar/cg-avatar.js +1 -1
- package/dist/components/cg-avatar-group/cg-avatar-group.js +1 -1
- package/dist/components/cg-badge/cg-badge.js +1 -1
- package/dist/components/cg-badge-group/cg-badge-group.js +1 -1
- package/dist/components/cg-blockquote/cg-blockquote.d.ts +32 -0
- package/dist/components/cg-blockquote/cg-blockquote.d.ts.map +1 -0
- package/dist/components/cg-blockquote/cg-blockquote.js +108 -0
- package/dist/components/cg-blockquote/cg-blockquote.js.map +1 -0
- package/dist/components/cg-breadcrumbs/cg-breadcrumbs.js +1 -1
- package/dist/components/cg-button/cg-button.js +8 -8
- package/dist/components/cg-button/cg-button.js.map +1 -1
- package/dist/components/cg-button-group/cg-button-group.js +1 -1
- package/dist/components/cg-calendar/cg-calendar.js +1 -1
- package/dist/components/cg-callout/cg-callout.js +1 -1
- package/dist/components/cg-card/cg-card.js +1 -1
- package/dist/components/cg-carousel/cg-carousel.js +1 -1
- package/dist/components/cg-center/cg-center.d.ts +37 -0
- package/dist/components/cg-center/cg-center.d.ts.map +1 -0
- package/dist/components/cg-center/cg-center.js +74 -0
- package/dist/components/cg-center/cg-center.js.map +1 -0
- package/dist/components/cg-chart/cg-chart.js +1 -1
- package/dist/components/cg-checkbox/cg-checkbox.js +1 -1
- package/dist/components/cg-chip/cg-chip.js +1 -1
- package/dist/components/cg-code-block/cg-code-block.js +1 -1
- package/dist/components/cg-collapsible/cg-collapsible.js +1 -1
- package/dist/components/cg-color-picker/cg-color-picker.js +1 -1
- package/dist/components/cg-combobox/cg-combobox.js +1 -1
- package/dist/components/cg-command/cg-command.js +1 -1
- package/dist/components/cg-context-menu/cg-context-menu.js +1 -1
- package/dist/components/cg-date-picker/cg-date-picker.js +1 -1
- package/dist/components/cg-date-range-picker/cg-date-range-picker.js +1 -1
- package/dist/components/cg-date-time-picker/cg-date-time-picker.js +1 -1
- package/dist/components/cg-drawer/cg-drawer.js +1 -1
- package/dist/components/cg-dropdown/cg-dropdown.js +1 -1
- package/dist/components/cg-empty-state/cg-empty-state.js +1 -1
- package/dist/components/cg-file-input/cg-file-input.js +1 -1
- package/dist/components/cg-follow-up/cg-follow-up.js +1 -1
- package/dist/components/cg-form/cg-form.js +1 -1
- package/dist/components/cg-grid/cg-grid.d.ts +39 -0
- package/dist/components/cg-grid/cg-grid.d.ts.map +1 -0
- package/dist/components/cg-grid/cg-grid.js +78 -0
- package/dist/components/cg-grid/cg-grid.js.map +1 -0
- package/dist/components/cg-hover-card/cg-hover-card.js +1 -1
- package/dist/components/cg-icon/cg-icon.js +1 -1
- package/dist/components/cg-image/cg-image.js +1 -1
- package/dist/components/cg-image-block/cg-image-block.js +1 -1
- package/dist/components/cg-image-gallery/cg-image-gallery.js +1 -1
- package/dist/components/cg-input/cg-input.js +1 -1
- package/dist/components/cg-kbd/cg-kbd.js +1 -1
- package/dist/components/cg-label/cg-label.js +1 -1
- package/dist/components/cg-lightbox/cg-lightbox.d.ts +49 -0
- package/dist/components/cg-lightbox/cg-lightbox.d.ts.map +1 -0
- package/dist/components/cg-lightbox/cg-lightbox.js +203 -0
- package/dist/components/cg-lightbox/cg-lightbox.js.map +1 -0
- package/dist/components/cg-link/cg-link.js +1 -1
- package/dist/components/cg-list/cg-list.js +1 -1
- package/dist/components/cg-listbox/cg-listbox.js +1 -1
- package/dist/components/cg-markdown/cg-markdown.js +1 -1
- package/dist/components/cg-menubar/cg-menubar.js +1 -1
- package/dist/components/cg-meter/cg-meter.js +1 -1
- package/dist/components/cg-metric-card/cg-metric-card.js +1 -1
- package/dist/components/cg-modal/cg-modal.js +1 -1
- package/dist/components/cg-navbar/cg-navbar.js +1 -1
- package/dist/components/cg-navigation-menu/cg-navigation-menu.js +1 -1
- package/dist/components/cg-number-input/cg-number-input.js +1 -1
- package/dist/components/cg-otp-input/cg-otp-input.js +1 -1
- package/dist/components/cg-overflow-list/cg-overflow-list.d.ts +51 -0
- package/dist/components/cg-overflow-list/cg-overflow-list.d.ts.map +1 -0
- package/dist/components/cg-overflow-list/cg-overflow-list.js +212 -0
- package/dist/components/cg-overflow-list/cg-overflow-list.js.map +1 -0
- package/dist/components/cg-pagination/cg-pagination.js +1 -1
- package/dist/components/cg-password-input/cg-password-input.js +1 -1
- package/dist/components/cg-phone-input/cg-phone-input.js +1 -1
- package/dist/components/cg-popover/cg-popover.js +1 -1
- package/dist/components/cg-progress-bar/cg-progress-bar.js +1 -1
- package/dist/components/cg-radio/cg-radio.js +1 -1
- package/dist/components/cg-radio-group/cg-radio-group.js +1 -1
- package/dist/components/cg-rating/cg-rating.js +1 -1
- package/dist/components/cg-resizable/cg-resizable.js +1 -1
- package/dist/components/cg-scroll-area/cg-scroll-area.js +1 -1
- package/dist/components/cg-segmented-control/cg-segmented-control.js +1 -1
- package/dist/components/cg-select/cg-select.js +1 -1
- package/dist/components/cg-separator/cg-separator.js +1 -1
- package/dist/components/cg-sheet/cg-sheet.js +1 -1
- package/dist/components/cg-sidebar/cg-sidebar.js +1 -1
- package/dist/components/cg-skeleton/cg-skeleton.js +1 -1
- package/dist/components/cg-slider/cg-slider.js +1 -1
- package/dist/components/cg-spinner/cg-spinner.js +1 -1
- package/dist/components/cg-split-button/cg-split-button.js +1 -1
- package/dist/components/cg-stack/cg-stack.js +1 -1
- package/dist/components/cg-status-dot/cg-status-dot.d.ts +31 -0
- package/dist/components/cg-status-dot/cg-status-dot.d.ts.map +1 -0
- package/dist/components/cg-status-dot/cg-status-dot.js +89 -0
- package/dist/components/cg-status-dot/cg-status-dot.js.map +1 -0
- package/dist/components/cg-steps/cg-steps.js +1 -1
- package/dist/components/cg-switch/cg-switch.js +1 -1
- package/dist/components/cg-table/cg-table.js +1 -1
- package/dist/components/cg-tabs/cg-tabs.js +1 -1
- package/dist/components/cg-tag-input/cg-tag-input.js +1 -1
- package/dist/components/cg-text/cg-text.js +1 -1
- package/dist/components/cg-textarea/cg-textarea.js +1 -1
- package/dist/components/cg-thumbnail/cg-thumbnail.d.ts +39 -0
- package/dist/components/cg-thumbnail/cg-thumbnail.d.ts.map +1 -0
- package/dist/components/cg-thumbnail/cg-thumbnail.js +134 -0
- package/dist/components/cg-thumbnail/cg-thumbnail.js.map +1 -0
- package/dist/components/cg-time-picker/cg-time-picker.js +1 -1
- package/dist/components/cg-timestamp/cg-timestamp.d.ts +41 -0
- package/dist/components/cg-timestamp/cg-timestamp.d.ts.map +1 -0
- package/dist/components/cg-timestamp/cg-timestamp.js +81 -0
- package/dist/components/cg-timestamp/cg-timestamp.js.map +1 -0
- package/dist/components/cg-toaster/cg-toaster.js +1 -1
- package/dist/components/cg-toggle/cg-toggle.js +1 -1
- package/dist/components/cg-toggle-group/cg-toggle-group.js +1 -1
- package/dist/components/cg-toolbar/cg-toolbar.d.ts +51 -0
- package/dist/components/cg-toolbar/cg-toolbar.d.ts.map +1 -0
- package/dist/components/cg-toolbar/cg-toolbar.js +130 -0
- package/dist/components/cg-toolbar/cg-toolbar.js.map +1 -0
- package/dist/components/cg-tree-view/cg-tree-view.js +1 -1
- package/dist/foundation.d.ts +11 -1
- package/dist/foundation.d.ts.map +1 -1
- package/dist/foundation.js +88 -68
- package/dist/foundation.js.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +126 -106
- package/dist/index.js.map +1 -1
- package/package.json +13 -14
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css as g, LitElement as u, nothing as d, html as c } from "lit";
|
|
2
2
|
import { property as r, customElement as b } from "lit/decorators.js";
|
|
3
|
-
import { a as p, r as f } from "../../chunks/premium.css-
|
|
3
|
+
import { a as p, r as f } from "../../chunks/premium.css-B0hBr_uS.js";
|
|
4
4
|
var v = Object.defineProperty, k = Object.getOwnPropertyDescriptor, a = (e, o, l, i) => {
|
|
5
5
|
for (var s = i > 1 ? void 0 : i ? k(o, l) : o, n = e.length - 1, h; n >= 0; n--)
|
|
6
6
|
(h = e[n]) && (s = (i ? h(o, l, s) : h(s)) || s);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css as b, LitElement as p, nothing as h, html as d } from "lit";
|
|
2
2
|
import { property as l, state as g, customElement as u } from "lit/decorators.js";
|
|
3
|
-
import { h as v, r as f } from "../../chunks/premium.css-
|
|
3
|
+
import { h as v, r as f } from "../../chunks/premium.css-B0hBr_uS.js";
|
|
4
4
|
var y = Object.defineProperty, m = Object.getOwnPropertyDescriptor, a = (e, o, c, t) => {
|
|
5
5
|
for (var r = t > 1 ? void 0 : t ? m(o, c) : o, i = e.length - 1, n; i >= 0; i--)
|
|
6
6
|
(n = e[i]) && (r = (t ? n(o, c, r) : n(r)) || r);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css as u, LitElement as v, nothing as b, html as d } from "lit";
|
|
2
2
|
import { property as n, state as g, query as p, customElement as h } from "lit/decorators.js";
|
|
3
|
-
import { h as f, r as w } from "../../chunks/premium.css-
|
|
3
|
+
import { h as f, r as w } from "../../chunks/premium.css-B0hBr_uS.js";
|
|
4
4
|
var _ = Object.defineProperty, m = Object.getOwnPropertyDescriptor, o = (a, i, s, e) => {
|
|
5
5
|
for (var t = e > 1 ? void 0 : e ? m(i, s) : i, c = a.length - 1, l; c >= 0; c--)
|
|
6
6
|
(l = a[c]) && (t = (e ? l(i, s, t) : l(t)) || t);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css as d, LitElement as h, nothing as p, html as c } from "lit";
|
|
2
2
|
import { property as r, state as g, query as v, customElement as f } from "lit/decorators.js";
|
|
3
|
-
import { h as b, r as m } from "../../chunks/premium.css-
|
|
3
|
+
import { h as b, r as m } from "../../chunks/premium.css-B0hBr_uS.js";
|
|
4
4
|
var y = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, a = (e, o, n, s) => {
|
|
5
5
|
for (var i = s > 1 ? void 0 : s ? _(o, n) : o, l = e.length - 1, u; l >= 0; l--)
|
|
6
6
|
(u = e[l]) && (i = (s ? u(o, n, i) : u(i)) || i);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css as g, LitElement as f, html as r } from "lit";
|
|
2
2
|
import { property as i, customElement as p } from "lit/decorators.js";
|
|
3
|
-
import { h as u, r as m } from "../../chunks/premium.css-
|
|
3
|
+
import { h as u, r as m } from "../../chunks/premium.css-B0hBr_uS.js";
|
|
4
4
|
var v = Object.defineProperty, d = Object.getOwnPropertyDescriptor, o = (t, l, n, h) => {
|
|
5
5
|
for (var s = h > 1 ? void 0 : h ? d(l, n) : l, c = t.length - 1, a; c >= 0; c--)
|
|
6
6
|
(a = t[c]) && (s = (h ? a(l, n, s) : a(s)) || s);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css as p, LitElement as g, nothing as s, html as l } from "lit";
|
|
2
2
|
import { property as r, state as h, query as f, customElement as v } from "lit/decorators.js";
|
|
3
|
-
import { h as b, r as x } from "../../chunks/premium.css-
|
|
3
|
+
import { h as b, r as x } from "../../chunks/premium.css-B0hBr_uS.js";
|
|
4
4
|
var y = Object.defineProperty, m = Object.getOwnPropertyDescriptor, t = (a, o, c, n) => {
|
|
5
5
|
for (var i = n > 1 ? void 0 : n ? m(o, c) : o, d = a.length - 1, u; d >= 0; d--)
|
|
6
6
|
(u = a[d]) && (i = (n ? u(o, c, i) : u(i)) || i);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
/**
|
|
3
|
+
* @element cg-thumbnail
|
|
4
|
+
* A small, fixed-size preview image with optional selectable/clickable
|
|
5
|
+
* affordances. For large content images use `cg-image`.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```html
|
|
9
|
+
* <cg-thumbnail src="/preview.jpg" alt="Preview" size="md"></cg-thumbnail>
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* @example Selectable tile
|
|
13
|
+
* ```html
|
|
14
|
+
* <cg-thumbnail src="/a.jpg" alt="Option A" selectable></cg-thumbnail>
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @fires {CustomEvent<{selected: boolean}>} cg-thumbnail-select
|
|
18
|
+
*/
|
|
19
|
+
export declare class CgThumbnail extends LitElement {
|
|
20
|
+
static styles: import('lit').CSSResult[];
|
|
21
|
+
src: string;
|
|
22
|
+
alt: string;
|
|
23
|
+
size: 'sm' | 'md' | 'lg';
|
|
24
|
+
rounded: 'none' | 'sm' | 'md' | 'lg' | 'full';
|
|
25
|
+
selectable: boolean;
|
|
26
|
+
selected: boolean;
|
|
27
|
+
disabled: boolean;
|
|
28
|
+
private _placeholder;
|
|
29
|
+
private _inner;
|
|
30
|
+
private _toggle;
|
|
31
|
+
private _onKeydown;
|
|
32
|
+
render(): import('lit').TemplateResult<1>;
|
|
33
|
+
}
|
|
34
|
+
declare global {
|
|
35
|
+
interface HTMLElementTagNameMap {
|
|
36
|
+
'cg-thumbnail': CgThumbnail;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=cg-thumbnail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cg-thumbnail.d.ts","sourceRoot":"","sources":["../../../src/components/cg-thumbnail/cg-thumbnail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,KAAK,CAAC;AAI1D;;;;;;;;;;;;;;;;GAgBG;AACH,qBACa,WAAY,SAAQ,UAAU;IACzC,OAAgB,MAAM,4BA2DnB;IAES,GAAG,SAAM;IACT,GAAG,SAAM;IACQ,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAQ;IACtC,UAAU,UAAS;IACnB,QAAQ,UAAS;IACjB,QAAQ,UAAS;IAE7D,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,UAAU;IAOT,MAAM;CAiBhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,WAAW,CAAC;KAC7B;CACF"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { css as u, LitElement as h, svg as g, html as l, nothing as b } from "lit";
|
|
2
|
+
import { property as o, customElement as p } from "lit/decorators.js";
|
|
3
|
+
import { h as v, r as f, j as m } from "../../chunks/premium.css-B0hBr_uS.js";
|
|
4
|
+
var y = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, t = (i, s, c, a) => {
|
|
5
|
+
for (var r = a > 1 ? void 0 : a ? _(s, c) : s, d = i.length - 1, n; d >= 0; d--)
|
|
6
|
+
(n = i[d]) && (r = (a ? n(s, c, r) : n(r)) || r);
|
|
7
|
+
return a && r && y(s, c, r), r;
|
|
8
|
+
};
|
|
9
|
+
let e = class extends h {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments), this.src = "", this.alt = "", this.size = "md", this.rounded = "md", this.selectable = !1, this.selected = !1, this.disabled = !1;
|
|
12
|
+
}
|
|
13
|
+
_placeholder() {
|
|
14
|
+
return l`<span class="placeholder">${g`
|
|
15
|
+
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
|
|
16
|
+
<path d="M3 5.25A2.25 2.25 0 0 1 5.25 3h13.5A2.25 2.25 0 0 1 21 5.25v13.5A2.25 2.25 0 0 1 18.75 21H5.25A2.25 2.25 0 0 1 3 18.75V5.25Zm2.25-.75a.75.75 0 0 0-.75.75v9.44l3.22-3.22a.75.75 0 0 1 1.06 0l3.19 3.19 2.19-2.19a.75.75 0 0 1 1.06 0l3.22 3.22V5.25a.75.75 0 0 0-.75-.75H5.25ZM9 9a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Z" fill="currentColor"/>
|
|
17
|
+
</svg>`}</span>`;
|
|
18
|
+
}
|
|
19
|
+
_inner() {
|
|
20
|
+
return this.src ? l`<img src=${this.src} alt=${this.alt} loading="lazy" />` : this._placeholder();
|
|
21
|
+
}
|
|
22
|
+
_toggle() {
|
|
23
|
+
this.disabled || (this.selected = !this.selected, this.dispatchEvent(new CustomEvent("cg-thumbnail-select", {
|
|
24
|
+
detail: { selected: this.selected },
|
|
25
|
+
bubbles: !0,
|
|
26
|
+
composed: !0
|
|
27
|
+
})));
|
|
28
|
+
}
|
|
29
|
+
_onKeydown(i) {
|
|
30
|
+
(i.key === "Enter" || i.key === " ") && (i.preventDefault(), this._toggle());
|
|
31
|
+
}
|
|
32
|
+
render() {
|
|
33
|
+
return this.selectable ? l`
|
|
34
|
+
<button
|
|
35
|
+
class="tile"
|
|
36
|
+
type="button"
|
|
37
|
+
role="checkbox"
|
|
38
|
+
aria-checked=${this.selected ? "true" : "false"}
|
|
39
|
+
aria-label=${this.alt || b}
|
|
40
|
+
?disabled=${this.disabled}
|
|
41
|
+
@click=${this._toggle}
|
|
42
|
+
@keydown=${this._onKeydown}
|
|
43
|
+
>${this._inner()}</button>
|
|
44
|
+
` : l`<span class="tile">${this._inner()}</span>`;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
e.styles = [v, f, u`
|
|
48
|
+
:host { display: inline-block; }
|
|
49
|
+
|
|
50
|
+
.tile {
|
|
51
|
+
display: block;
|
|
52
|
+
overflow: hidden;
|
|
53
|
+
width: var(--_cg-thumb-size, 48px);
|
|
54
|
+
height: var(--_cg-thumb-size, 48px);
|
|
55
|
+
border-radius: var(--_cg-thumb-radius, var(--cg-border-radius-100));
|
|
56
|
+
background: var(--cg-color-surface-inset-background);
|
|
57
|
+
border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);
|
|
58
|
+
position: relative;
|
|
59
|
+
padding: 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
img {
|
|
63
|
+
width: 100%;
|
|
64
|
+
height: 100%;
|
|
65
|
+
object-fit: cover;
|
|
66
|
+
display: block;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* Sizes */
|
|
70
|
+
:host([size="sm"]) .tile { --_cg-thumb-size: var(--cg-spacing-32); }
|
|
71
|
+
:host([size="md"]) .tile { --_cg-thumb-size: var(--cg-spacing-48); }
|
|
72
|
+
:host([size="lg"]) .tile { --_cg-thumb-size: var(--cg-spacing-80); }
|
|
73
|
+
|
|
74
|
+
/* Rounded */
|
|
75
|
+
:host([rounded="none"]) .tile { --_cg-thumb-radius: 0; }
|
|
76
|
+
:host([rounded="sm"]) .tile { --_cg-thumb-radius: var(--cg-border-radius-100); }
|
|
77
|
+
:host([rounded="md"]) .tile { --_cg-thumb-radius: var(--cg-border-radius-150); }
|
|
78
|
+
:host([rounded="lg"]) .tile { --_cg-thumb-radius: var(--cg-border-radius-200); }
|
|
79
|
+
:host([rounded="full"]) .tile { --_cg-thumb-radius: var(--cg-border-radius-full); }
|
|
80
|
+
|
|
81
|
+
/* Placeholder */
|
|
82
|
+
.placeholder {
|
|
83
|
+
width: 100%; height: 100%;
|
|
84
|
+
display: flex; align-items: center; justify-content: center;
|
|
85
|
+
color: var(--cg-color-surface-container-outlined);
|
|
86
|
+
}
|
|
87
|
+
.placeholder svg { width: 40%; height: 40%; }
|
|
88
|
+
|
|
89
|
+
/* Selectable interactivity */
|
|
90
|
+
button.tile {
|
|
91
|
+
cursor: pointer;
|
|
92
|
+
transition:
|
|
93
|
+
border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),
|
|
94
|
+
transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default);
|
|
95
|
+
}
|
|
96
|
+
button.tile:hover:not(:disabled) { border-color: var(--cg-color-action-primary-border-default); }
|
|
97
|
+
button.tile:active:not(:disabled) { transform: scale(var(--cg-interaction-press-scale)); }
|
|
98
|
+
button.tile:focus-visible { ${m} }
|
|
99
|
+
|
|
100
|
+
:host([selected]) button.tile {
|
|
101
|
+
border-color: var(--cg-color-action-primary-border-default);
|
|
102
|
+
box-shadow: 0 0 0 var(--cg-border-width-100) var(--cg-color-action-primary-border-default) inset;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
:host([disabled]) .tile { opacity: 0.5; cursor: not-allowed; }
|
|
106
|
+
`];
|
|
107
|
+
t([
|
|
108
|
+
o()
|
|
109
|
+
], e.prototype, "src", 2);
|
|
110
|
+
t([
|
|
111
|
+
o()
|
|
112
|
+
], e.prototype, "alt", 2);
|
|
113
|
+
t([
|
|
114
|
+
o({ reflect: !0 })
|
|
115
|
+
], e.prototype, "size", 2);
|
|
116
|
+
t([
|
|
117
|
+
o({ reflect: !0 })
|
|
118
|
+
], e.prototype, "rounded", 2);
|
|
119
|
+
t([
|
|
120
|
+
o({ type: Boolean, reflect: !0 })
|
|
121
|
+
], e.prototype, "selectable", 2);
|
|
122
|
+
t([
|
|
123
|
+
o({ type: Boolean, reflect: !0 })
|
|
124
|
+
], e.prototype, "selected", 2);
|
|
125
|
+
t([
|
|
126
|
+
o({ type: Boolean, reflect: !0 })
|
|
127
|
+
], e.prototype, "disabled", 2);
|
|
128
|
+
e = t([
|
|
129
|
+
p("cg-thumbnail")
|
|
130
|
+
], e);
|
|
131
|
+
export {
|
|
132
|
+
e as CgThumbnail
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=cg-thumbnail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cg-thumbnail.js","sources":["../../../src/components/cg-thumbnail/cg-thumbnail.ts"],"sourcesContent":["import { LitElement, html, css, svg, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion, focusRingDual } from '../../styles/index.js';\n\n/**\n * @element cg-thumbnail\n * A small, fixed-size preview image with optional selectable/clickable\n * affordances. For large content images use `cg-image`.\n *\n * @example\n * ```html\n * <cg-thumbnail src=\"/preview.jpg\" alt=\"Preview\" size=\"md\"></cg-thumbnail>\n * ```\n *\n * @example Selectable tile\n * ```html\n * <cg-thumbnail src=\"/a.jpg\" alt=\"Option A\" selectable></cg-thumbnail>\n * ```\n *\n * @fires {CustomEvent<{selected: boolean}>} cg-thumbnail-select\n */\n@customElement('cg-thumbnail')\nexport class CgThumbnail extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n :host { display: inline-block; }\n\n .tile {\n display: block;\n overflow: hidden;\n width: var(--_cg-thumb-size, 48px);\n height: var(--_cg-thumb-size, 48px);\n border-radius: var(--_cg-thumb-radius, var(--cg-border-radius-100));\n background: var(--cg-color-surface-inset-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n position: relative;\n padding: 0;\n }\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n\n /* Sizes */\n :host([size=\"sm\"]) .tile { --_cg-thumb-size: var(--cg-spacing-32); }\n :host([size=\"md\"]) .tile { --_cg-thumb-size: var(--cg-spacing-48); }\n :host([size=\"lg\"]) .tile { --_cg-thumb-size: var(--cg-spacing-80); }\n\n /* Rounded */\n :host([rounded=\"none\"]) .tile { --_cg-thumb-radius: 0; }\n :host([rounded=\"sm\"]) .tile { --_cg-thumb-radius: var(--cg-border-radius-100); }\n :host([rounded=\"md\"]) .tile { --_cg-thumb-radius: var(--cg-border-radius-150); }\n :host([rounded=\"lg\"]) .tile { --_cg-thumb-radius: var(--cg-border-radius-200); }\n :host([rounded=\"full\"]) .tile { --_cg-thumb-radius: var(--cg-border-radius-full); }\n\n /* Placeholder */\n .placeholder {\n width: 100%; height: 100%;\n display: flex; align-items: center; justify-content: center;\n color: var(--cg-color-surface-container-outlined);\n }\n .placeholder svg { width: 40%; height: 40%; }\n\n /* Selectable interactivity */\n button.tile {\n cursor: pointer;\n transition:\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n button.tile:hover:not(:disabled) { border-color: var(--cg-color-action-primary-border-default); }\n button.tile:active:not(:disabled) { transform: scale(var(--cg-interaction-press-scale)); }\n button.tile:focus-visible { ${focusRingDual} }\n\n :host([selected]) button.tile {\n border-color: var(--cg-color-action-primary-border-default);\n box-shadow: 0 0 0 var(--cg-border-width-100) var(--cg-color-action-primary-border-default) inset;\n }\n\n :host([disabled]) .tile { opacity: 0.5; cursor: not-allowed; }\n `];\n\n @property() src = '';\n @property() alt = '';\n @property({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md';\n @property({ type: Boolean, reflect: true }) selectable = false;\n @property({ type: Boolean, reflect: true }) selected = false;\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n private _placeholder() {\n return html`<span class=\"placeholder\">${svg`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 5.25A2.25 2.25 0 0 1 5.25 3h13.5A2.25 2.25 0 0 1 21 5.25v13.5A2.25 2.25 0 0 1 18.75 21H5.25A2.25 2.25 0 0 1 3 18.75V5.25Zm2.25-.75a.75.75 0 0 0-.75.75v9.44l3.22-3.22a.75.75 0 0 1 1.06 0l3.19 3.19 2.19-2.19a.75.75 0 0 1 1.06 0l3.22 3.22V5.25a.75.75 0 0 0-.75-.75H5.25ZM9 9a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Z\" fill=\"currentColor\"/>\n </svg>`}</span>`;\n }\n\n private _inner() {\n return this.src\n ? html`<img src=${this.src} alt=${this.alt} loading=\"lazy\" />`\n : this._placeholder();\n }\n\n private _toggle(): void {\n if (this.disabled) return;\n this.selected = !this.selected;\n this.dispatchEvent(new CustomEvent('cg-thumbnail-select', {\n detail: { selected: this.selected },\n bubbles: true,\n composed: true,\n }));\n }\n\n private _onKeydown(e: KeyboardEvent): void {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this._toggle();\n }\n }\n\n override render() {\n if (!this.selectable) {\n return html`<span class=\"tile\">${this._inner()}</span>`;\n }\n return html`\n <button\n class=\"tile\"\n type=\"button\"\n role=\"checkbox\"\n aria-checked=${this.selected ? 'true' : 'false'}\n aria-label=${this.alt || nothing}\n ?disabled=${this.disabled}\n @click=${this._toggle}\n @keydown=${this._onKeydown}\n >${this._inner()}</button>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-thumbnail': CgThumbnail;\n }\n}\n"],"names":["CgThumbnail","LitElement","html","svg","e","nothing","hostBlock","reducedMotion","css","focusRingDual","__decorateClass","property","customElement"],"mappings":";;;;;;;;AAsBO,IAAMA,IAAN,cAA0BC,EAAW;AAAA,EAArC,cAAA;AAAA,UAAA,GAAA,SAAA,GA8DO,KAAA,MAAM,IACN,KAAA,MAAM,IACW,KAAA,OAA2B,MAC3B,KAAA,UAAgD,MACjC,KAAA,aAAa,IACb,KAAA,WAAW,IACX,KAAA,WAAW;AAAA,EAAA;AAAA,EAE/C,eAAe;AACrB,WAAOC,8BAAiCC;AAAA;AAAA;AAAA,aAG/B;AAAA,EACX;AAAA,EAEQ,SAAS;AACf,WAAO,KAAK,MACRD,aAAgB,KAAK,GAAG,QAAQ,KAAK,GAAG,uBACxC,KAAK,aAAA;AAAA,EACX;AAAA,EAEQ,UAAgB;AACtB,IAAI,KAAK,aACT,KAAK,WAAW,CAAC,KAAK,UACtB,KAAK,cAAc,IAAI,YAAY,uBAAuB;AAAA,MACxD,QAAQ,EAAE,UAAU,KAAK,SAAA;AAAA,MACzB,SAAS;AAAA,MACT,UAAU;AAAA,IAAA,CACX,CAAC;AAAA,EACJ;AAAA,EAEQ,WAAWE,GAAwB;AACzC,KAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjCA,EAAE,eAAA,GACF,KAAK,QAAA;AAAA,EAET;AAAA,EAES,SAAS;AAChB,WAAK,KAAK,aAGHF;AAAA;AAAA;AAAA;AAAA;AAAA,uBAKY,KAAK,WAAW,SAAS,OAAO;AAAA,qBAClC,KAAK,OAAOG,CAAO;AAAA,oBACpB,KAAK,QAAQ;AAAA,iBAChB,KAAK,OAAO;AAAA,mBACV,KAAK,UAAU;AAAA,SACzB,KAAK,QAAQ;AAAA,QAZTH,uBAA0B,KAAK,OAAA,CAAQ;AAAA,EAclD;AACF;AArHaF,EACK,SAAS,CAACM,GAAWC,GAAeC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAmDpBC,CAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQ5C;AAEWC,EAAA;AAAA,EAAXC,EAAA;AAAS,GA9DCX,EA8DC,WAAA,OAAA,CAAA;AACAU,EAAA;AAAA,EAAXC,EAAA;AAAS,GA/DCX,EA+DC,WAAA,OAAA,CAAA;AACiBU,EAAA;AAAA,EAA5BC,EAAS,EAAE,SAAS,GAAA,CAAM;AAAA,GAhEhBX,EAgEkB,WAAA,QAAA,CAAA;AACAU,EAAA;AAAA,EAA5BC,EAAS,EAAE,SAAS,GAAA,CAAM;AAAA,GAjEhBX,EAiEkB,WAAA,WAAA,CAAA;AACeU,EAAA;AAAA,EAA3CC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GAlE/BX,EAkEiC,WAAA,cAAA,CAAA;AACAU,EAAA;AAAA,EAA3CC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GAnE/BX,EAmEiC,WAAA,YAAA,CAAA;AACAU,EAAA;AAAA,EAA3CC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GApE/BX,EAoEiC,WAAA,YAAA,CAAA;AApEjCA,IAANU,EAAA;AAAA,EADNE,EAAc,cAAc;AAAA,GAChBZ,CAAA;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css as u, LitElement as h, nothing as p, html as n } from "lit";
|
|
2
2
|
import { property as a, state as l, customElement as v } from "lit/decorators.js";
|
|
3
|
-
import { h as f, r as b } from "../../chunks/premium.css-
|
|
3
|
+
import { h as f, r as b } from "../../chunks/premium.css-B0hBr_uS.js";
|
|
4
4
|
var m = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, o = (e, i, c, t) => {
|
|
5
5
|
for (var s = t > 1 ? void 0 : t ? _(i, c) : i, d = e.length - 1, g; d >= 0; d--)
|
|
6
6
|
(g = e[d]) && (s = (t ? g(i, c, s) : g(s)) || s);
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export type CgTimestampFormat = 'relative' | 'datetime' | 'date' | 'time';
|
|
3
|
+
/**
|
|
4
|
+
* @element cg-timestamp
|
|
5
|
+
* Renders a point in time as relative ("2h ago") or absolute text inside a
|
|
6
|
+
* semantic `<time>` element, auto-refreshing relative values when `live`.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```html
|
|
10
|
+
* <cg-timestamp datetime="2026-07-03T09:00:00Z" live></cg-timestamp>
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @example Absolute
|
|
14
|
+
* ```html
|
|
15
|
+
* <cg-timestamp datetime="2026-07-03T09:00:00Z" format="datetime"></cg-timestamp>
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare class CgTimestamp extends LitElement {
|
|
19
|
+
static styles: import('lit').CSSResult[];
|
|
20
|
+
datetime: string;
|
|
21
|
+
format: CgTimestampFormat;
|
|
22
|
+
live: boolean;
|
|
23
|
+
/** Tick counter forcing re-render on the live interval. */
|
|
24
|
+
private _tick;
|
|
25
|
+
private _timer;
|
|
26
|
+
connectedCallback(): void;
|
|
27
|
+
disconnectedCallback(): void;
|
|
28
|
+
updated(changed: Map<string, unknown>): void;
|
|
29
|
+
private _startTimer;
|
|
30
|
+
private _stopTimer;
|
|
31
|
+
private _parse;
|
|
32
|
+
private _relative;
|
|
33
|
+
private _absolute;
|
|
34
|
+
render(): import('lit').TemplateResult<1>;
|
|
35
|
+
}
|
|
36
|
+
declare global {
|
|
37
|
+
interface HTMLElementTagNameMap {
|
|
38
|
+
'cg-timestamp': CgTimestamp;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=cg-timestamp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cg-timestamp.d.ts","sourceRoot":"","sources":["../../../src/components/cg-timestamp/cg-timestamp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAI5C,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1E;;;;;;;;;;;;;;GAcG;AACH,qBACa,WAAY,SAAQ,UAAU;IACzC,OAAgB,MAAM,4BAInB;IAE0B,QAAQ,SAAM;IACd,MAAM,EAAE,iBAAiB,CAAc;IACxB,IAAI,UAAS;IAEzD,2DAA2D;IAClD,OAAO,CAAC,KAAK,CAAK;IAE3B,OAAO,CAAC,MAAM,CAA6C;IAElD,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAK5B,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAOrD,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,SAAS;IASR,MAAM;CAQhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,WAAW,CAAC;KAC7B;CACF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { css as h, LitElement as p, html as u } from "lit";
|
|
2
|
+
import { property as l, state as d, customElement as f } from "lit/decorators.js";
|
|
3
|
+
import { a as _ } from "../../chunks/premium.css-B0hBr_uS.js";
|
|
4
|
+
var v = Object.defineProperty, g = Object.getOwnPropertyDescriptor, m = (t, e, r, n) => {
|
|
5
|
+
for (var i = n > 1 ? void 0 : n ? g(e, r) : e, s = t.length - 1, a; s >= 0; s--)
|
|
6
|
+
(a = t[s]) && (i = (n ? a(e, r, i) : a(i)) || i);
|
|
7
|
+
return n && i && v(e, r, i), i;
|
|
8
|
+
};
|
|
9
|
+
let o = class extends p {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments), this.datetime = "", this.format = "relative", this.live = !1, this._tick = 0;
|
|
12
|
+
}
|
|
13
|
+
connectedCallback() {
|
|
14
|
+
super.connectedCallback(), this._startTimer();
|
|
15
|
+
}
|
|
16
|
+
disconnectedCallback() {
|
|
17
|
+
super.disconnectedCallback(), this._stopTimer();
|
|
18
|
+
}
|
|
19
|
+
updated(t) {
|
|
20
|
+
(t.has("live") || t.has("format")) && (this._stopTimer(), this._startTimer());
|
|
21
|
+
}
|
|
22
|
+
_startTimer() {
|
|
23
|
+
this.live && this.format === "relative" && !this._timer && (this._timer = setInterval(() => {
|
|
24
|
+
this._tick++;
|
|
25
|
+
}, 6e4));
|
|
26
|
+
}
|
|
27
|
+
_stopTimer() {
|
|
28
|
+
this._timer && (clearInterval(this._timer), this._timer = void 0);
|
|
29
|
+
}
|
|
30
|
+
_parse() {
|
|
31
|
+
if (!this.datetime) return null;
|
|
32
|
+
const t = Number(this.datetime), e = Number.isFinite(t) && this.datetime.trim() !== "" ? new Date(t) : new Date(this.datetime);
|
|
33
|
+
return isNaN(e.getTime()) ? null : e;
|
|
34
|
+
}
|
|
35
|
+
_relative(t) {
|
|
36
|
+
const e = t.getTime() - Date.now(), r = e > 0, n = Math.abs(e), i = Math.round(n / 1e3), s = Math.round(i / 60), a = Math.round(s / 60), c = Math.round(a / 24);
|
|
37
|
+
return i < 60 ? r ? "in a moment" : "just now" : s < 60 ? r ? `in ${s}m` : `${s}m ago` : a < 24 ? r ? `in ${a}h` : `${a}h ago` : c < 7 ? r ? `in ${c}d` : `${c}d ago` : t.toLocaleDateString(void 0, { month: "short", day: "numeric", year: "numeric" });
|
|
38
|
+
}
|
|
39
|
+
_absolute(t) {
|
|
40
|
+
switch (this.format) {
|
|
41
|
+
case "date":
|
|
42
|
+
return t.toLocaleDateString();
|
|
43
|
+
case "time":
|
|
44
|
+
return t.toLocaleTimeString(void 0, { hour: "numeric", minute: "2-digit" });
|
|
45
|
+
case "datetime":
|
|
46
|
+
default:
|
|
47
|
+
return t.toLocaleString();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
render() {
|
|
51
|
+
this._tick;
|
|
52
|
+
const t = this._parse();
|
|
53
|
+
if (!t) return u`<span aria-hidden="true">—</span>`;
|
|
54
|
+
const e = this.format === "relative" ? this._relative(t) : this._absolute(t);
|
|
55
|
+
return u`<time datetime=${t.toISOString()} title=${t.toLocaleString()}>${e}</time>`;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
o.styles = [_, h`
|
|
59
|
+
:host { display: inline; font-family: var(--cg-font-family-primary); }
|
|
60
|
+
time { color: inherit; white-space: nowrap; }
|
|
61
|
+
:host([muted]) time { color: var(--cg-color-surface-container-outlined); }
|
|
62
|
+
`];
|
|
63
|
+
m([
|
|
64
|
+
l({ reflect: !0 })
|
|
65
|
+
], o.prototype, "datetime", 2);
|
|
66
|
+
m([
|
|
67
|
+
l({ reflect: !0 })
|
|
68
|
+
], o.prototype, "format", 2);
|
|
69
|
+
m([
|
|
70
|
+
l({ type: Boolean, reflect: !0 })
|
|
71
|
+
], o.prototype, "live", 2);
|
|
72
|
+
m([
|
|
73
|
+
d()
|
|
74
|
+
], o.prototype, "_tick", 2);
|
|
75
|
+
o = m([
|
|
76
|
+
f("cg-timestamp")
|
|
77
|
+
], o);
|
|
78
|
+
export {
|
|
79
|
+
o as CgTimestamp
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=cg-timestamp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cg-timestamp.js","sources":["../../../src/components/cg-timestamp/cg-timestamp.ts"],"sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBase } from '../../styles/index.js';\n\nexport type CgTimestampFormat = 'relative' | 'datetime' | 'date' | 'time';\n\n/**\n * @element cg-timestamp\n * Renders a point in time as relative (\"2h ago\") or absolute text inside a\n * semantic `<time>` element, auto-refreshing relative values when `live`.\n *\n * @example\n * ```html\n * <cg-timestamp datetime=\"2026-07-03T09:00:00Z\" live></cg-timestamp>\n * ```\n *\n * @example Absolute\n * ```html\n * <cg-timestamp datetime=\"2026-07-03T09:00:00Z\" format=\"datetime\"></cg-timestamp>\n * ```\n */\n@customElement('cg-timestamp')\nexport class CgTimestamp extends LitElement {\n static override styles = [hostBase, css`\n :host { display: inline; font-family: var(--cg-font-family-primary); }\n time { color: inherit; white-space: nowrap; }\n :host([muted]) time { color: var(--cg-color-surface-container-outlined); }\n `];\n\n @property({ reflect: true }) datetime = '';\n @property({ reflect: true }) format: CgTimestampFormat = 'relative';\n @property({ type: Boolean, reflect: true }) live = false;\n\n /** Tick counter forcing re-render on the live interval. */\n @state() private _tick = 0;\n\n private _timer: ReturnType<typeof setInterval> | undefined;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._startTimer();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._stopTimer();\n }\n\n override updated(changed: Map<string, unknown>): void {\n if (changed.has('live') || changed.has('format')) {\n this._stopTimer();\n this._startTimer();\n }\n }\n\n private _startTimer(): void {\n if (this.live && this.format === 'relative' && !this._timer) {\n this._timer = setInterval(() => { this._tick++; }, 60_000);\n }\n }\n\n private _stopTimer(): void {\n if (this._timer) { clearInterval(this._timer); this._timer = undefined; }\n }\n\n private _parse(): Date | null {\n if (!this.datetime) return null;\n // Support epoch ms as a numeric string, otherwise defer to Date parsing.\n const asNumber = Number(this.datetime);\n const d = Number.isFinite(asNumber) && this.datetime.trim() !== ''\n ? new Date(asNumber)\n : new Date(this.datetime);\n return isNaN(d.getTime()) ? null : d;\n }\n\n private _relative(d: Date): string {\n const diffMs = d.getTime() - Date.now();\n const future = diffMs > 0;\n const abs = Math.abs(diffMs);\n const sec = Math.round(abs / 1000);\n const min = Math.round(sec / 60);\n const hr = Math.round(min / 60);\n const day = Math.round(hr / 24);\n\n if (sec < 60) return future ? 'in a moment' : 'just now';\n if (min < 60) return future ? `in ${min}m` : `${min}m ago`;\n if (hr < 24) return future ? `in ${hr}h` : `${hr}h ago`;\n if (day < 7) return future ? `in ${day}d` : `${day}d ago`;\n // Older than a week → short absolute date.\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });\n }\n\n private _absolute(d: Date): string {\n switch (this.format) {\n case 'date': return d.toLocaleDateString();\n case 'time': return d.toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit' });\n case 'datetime':\n default: return d.toLocaleString();\n }\n }\n\n override render() {\n void this._tick; // establish reactive dependency\n const d = this._parse();\n if (!d) return html`<span aria-hidden=\"true\">—</span>`;\n\n const display = this.format === 'relative' ? this._relative(d) : this._absolute(d);\n return html`<time datetime=${d.toISOString()} title=${d.toLocaleString()}>${display}</time>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-timestamp': CgTimestamp;\n }\n}\n"],"names":["CgTimestamp","LitElement","changed","asNumber","d","diffMs","future","abs","sec","min","hr","day","html","display","hostBase","css","__decorateClass","property","state","customElement"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css as m, LitElement as f, svg as c, nothing as g, html as l } from "lit";
|
|
2
2
|
import { property as u, state as p, customElement as v } from "lit/decorators.js";
|
|
3
|
-
import { r as h } from "../../chunks/premium.css-
|
|
3
|
+
import { r as h } from "../../chunks/premium.css-B0hBr_uS.js";
|
|
4
4
|
var b = Object.defineProperty, w = Object.getOwnPropertyDescriptor, d = (t, r, a, s) => {
|
|
5
5
|
for (var o = s > 1 ? void 0 : s ? w(r, a) : r, n = t.length - 1, i; n >= 0; n--)
|
|
6
6
|
(i = t[n]) && (o = (s ? i(r, a, o) : i(o)) || o);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css as l, LitElement as u, html as g } from "lit";
|
|
2
2
|
import { property as e, customElement as h } from "lit/decorators.js";
|
|
3
|
-
import { a as b, r as v } from "../../chunks/premium.css-
|
|
3
|
+
import { a as b, r as v } from "../../chunks/premium.css-B0hBr_uS.js";
|
|
4
4
|
var p = Object.defineProperty, f = Object.getOwnPropertyDescriptor, o = (a, s, i, n) => {
|
|
5
5
|
for (var r = n > 1 ? void 0 : n ? f(s, i) : s, c = a.length - 1, d; c >= 0; c--)
|
|
6
6
|
(d = a[c]) && (r = (n ? d(s, i, r) : d(r)) || r);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css as u, LitElement as c, html as h } from "lit";
|
|
2
2
|
import { property as a, queryAssignedElements as p, customElement as d } from "lit/decorators.js";
|
|
3
|
-
import { a as v, r as f } from "../../chunks/premium.css-
|
|
3
|
+
import { a as v, r as f } from "../../chunks/premium.css-B0hBr_uS.js";
|
|
4
4
|
var m = Object.defineProperty, y = Object.getOwnPropertyDescriptor, o = (s, t, e, r) => {
|
|
5
5
|
for (var l = r > 1 ? void 0 : r ? y(t, e) : t, n = s.length - 1, g; n >= 0; n--)
|
|
6
6
|
(g = s[n]) && (l = (r ? g(t, e, l) : g(l)) || l);
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
/**
|
|
3
|
+
* @element cg-toolbar
|
|
4
|
+
* Grouped-action container implementing the ARIA `toolbar` roving-tabindex pattern:
|
|
5
|
+
* a single tab stop, arrow keys move between actions.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```html
|
|
9
|
+
* <cg-toolbar label="Text formatting">
|
|
10
|
+
* <cg-button>Bold</cg-button>
|
|
11
|
+
* <cg-button>Italic</cg-button>
|
|
12
|
+
* <cg-separator orientation="vertical"></cg-separator>
|
|
13
|
+
* <cg-button>Link</cg-button>
|
|
14
|
+
* </cg-toolbar>
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @slot - Interactive actions (cg-button, cg-toggle, cg-separator, …).
|
|
18
|
+
*/
|
|
19
|
+
export declare class CgToolbar extends LitElement {
|
|
20
|
+
static styles: import('lit').CSSResult[];
|
|
21
|
+
/** Arrow-key axis + flex direction. */
|
|
22
|
+
orientation: 'horizontal' | 'vertical';
|
|
23
|
+
/** aria-label for the toolbar landmark. */
|
|
24
|
+
label: string;
|
|
25
|
+
/** Gap/padding scale. */
|
|
26
|
+
size: 'sm' | 'md' | 'lg';
|
|
27
|
+
/** Allow items to wrap. */
|
|
28
|
+
wrap: boolean;
|
|
29
|
+
private _items;
|
|
30
|
+
/** Index of the current roving item within _focusable(). */
|
|
31
|
+
private _rovingIndex;
|
|
32
|
+
connectedCallback(): void;
|
|
33
|
+
disconnectedCallback(): void;
|
|
34
|
+
/** Focusable items = slotted, not disabled, not aria-hidden, not a separator. */
|
|
35
|
+
private _focusable;
|
|
36
|
+
/** Apply roving tabindex: only the roving item is tabbable. */
|
|
37
|
+
private _syncTabindex;
|
|
38
|
+
firstUpdated(): void;
|
|
39
|
+
private _onSlotChange;
|
|
40
|
+
private _onFocusIn;
|
|
41
|
+
private _onKeydown;
|
|
42
|
+
/** Move focus to the current roving item (or the first focusable item). */
|
|
43
|
+
focus(): void;
|
|
44
|
+
render(): import('lit').TemplateResult<1>;
|
|
45
|
+
}
|
|
46
|
+
declare global {
|
|
47
|
+
interface HTMLElementTagNameMap {
|
|
48
|
+
'cg-toolbar': CgToolbar;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=cg-toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cg-toolbar.d.ts","sourceRoot":"","sources":["../../../src/components/cg-toolbar/cg-toolbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAI5C;;;;;;;;;;;;;;;;GAgBG;AACH,qBACa,SAAU,SAAQ,UAAU;IACvC,OAAgB,MAAM,4BAkCnB;IAEH,uCAAuC;IACV,WAAW,EAAE,YAAY,GAAG,UAAU,CAAgB;IAEnF,2CAA2C;IAC/B,KAAK,SAAM;IAEvB,yBAAyB;IACI,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAE7D,2BAA2B;IACiB,IAAI,UAAS;IAEf,OAAO,CAAC,MAAM,CAAiB;IAEzE,4DAA4D;IAC5D,OAAO,CAAC,YAAY,CAAK;IAEhB,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAMrC,iFAAiF;IACjF,OAAO,CAAC,UAAU;IAYlB,+DAA+D;IAC/D,OAAO,CAAC,aAAa;IASZ,YAAY,IAAI,IAAI;IAK7B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,UAAU,CAShB;IAEF,OAAO,CAAC,UAAU,CAmBhB;IAEF,2EAA2E;IAClE,KAAK,IAAI,IAAI;IAOb,MAAM;CAYhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,SAAS,CAAC;KACzB;CACF"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { css as d, LitElement as h, html as g } from "lit";
|
|
2
|
+
import { property as l, queryAssignedElements as p, customElement as f } from "lit/decorators.js";
|
|
3
|
+
import { a as u, r as b } from "../../chunks/premium.css-B0hBr_uS.js";
|
|
4
|
+
var m = Object.defineProperty, v = Object.getOwnPropertyDescriptor, a = (t, e, o, s) => {
|
|
5
|
+
for (var r = s > 1 ? void 0 : s ? v(e, o) : e, n = t.length - 1, c; n >= 0; n--)
|
|
6
|
+
(c = t[n]) && (r = (s ? c(e, o, r) : c(r)) || r);
|
|
7
|
+
return s && r && m(e, o, r), r;
|
|
8
|
+
};
|
|
9
|
+
let i = class extends h {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments), this.orientation = "horizontal", this.label = "", this.size = "md", this.wrap = !1, this._rovingIndex = 0, this._onFocusIn = (t) => {
|
|
12
|
+
const e = this._focusable(), o = t.target, s = e.findIndex((r) => r === o || r.contains(o));
|
|
13
|
+
s >= 0 && (this._rovingIndex = s, this._syncTabindex());
|
|
14
|
+
}, this._onKeydown = (t) => {
|
|
15
|
+
const e = this._focusable();
|
|
16
|
+
if (e.length === 0) return;
|
|
17
|
+
const o = this.orientation !== "vertical", s = o ? "ArrowRight" : "ArrowDown", r = o ? "ArrowLeft" : "ArrowUp";
|
|
18
|
+
let n = -1;
|
|
19
|
+
if (t.key === s) n = (this._rovingIndex + 1) % e.length;
|
|
20
|
+
else if (t.key === r) n = (this._rovingIndex - 1 + e.length) % e.length;
|
|
21
|
+
else if (t.key === "Home") n = 0;
|
|
22
|
+
else if (t.key === "End") n = e.length - 1;
|
|
23
|
+
else return;
|
|
24
|
+
t.preventDefault(), this._rovingIndex = n, this._syncTabindex(), e[n]?.focus();
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
connectedCallback() {
|
|
28
|
+
super.connectedCallback(), this.addEventListener("focusin", this._onFocusIn), this.addEventListener("keydown", this._onKeydown);
|
|
29
|
+
}
|
|
30
|
+
disconnectedCallback() {
|
|
31
|
+
super.disconnectedCallback(), this.removeEventListener("focusin", this._onFocusIn), this.removeEventListener("keydown", this._onKeydown);
|
|
32
|
+
}
|
|
33
|
+
/** Focusable items = slotted, not disabled, not aria-hidden, not a separator. */
|
|
34
|
+
_focusable() {
|
|
35
|
+
return (this._items ?? []).filter((t) => {
|
|
36
|
+
if (t.hasAttribute("disabled") || t.getAttribute("aria-disabled") === "true" || t.hasAttribute("aria-hidden")) return !1;
|
|
37
|
+
const e = t.getAttribute("role"), o = t.tagName.toLowerCase();
|
|
38
|
+
return !(e === "separator" || o === "cg-separator");
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/** Apply roving tabindex: only the roving item is tabbable. */
|
|
42
|
+
_syncTabindex() {
|
|
43
|
+
const t = this._focusable();
|
|
44
|
+
t.length !== 0 && (this._rovingIndex >= t.length && (this._rovingIndex = 0), t.forEach((e, o) => {
|
|
45
|
+
e.tabIndex = o === this._rovingIndex ? 0 : -1;
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
firstUpdated() {
|
|
49
|
+
this._syncTabindex();
|
|
50
|
+
}
|
|
51
|
+
_onSlotChange() {
|
|
52
|
+
this._syncTabindex();
|
|
53
|
+
}
|
|
54
|
+
/** Move focus to the current roving item (or the first focusable item). */
|
|
55
|
+
focus() {
|
|
56
|
+
const t = this._focusable();
|
|
57
|
+
if (t.length === 0) return;
|
|
58
|
+
const e = this._rovingIndex < t.length ? this._rovingIndex : 0;
|
|
59
|
+
t[e]?.focus();
|
|
60
|
+
}
|
|
61
|
+
render() {
|
|
62
|
+
return g`
|
|
63
|
+
<div
|
|
64
|
+
class="root"
|
|
65
|
+
role="toolbar"
|
|
66
|
+
aria-label=${this.label || "Toolbar"}
|
|
67
|
+
aria-orientation=${this.orientation}
|
|
68
|
+
>
|
|
69
|
+
<slot @slotchange=${this._onSlotChange}></slot>
|
|
70
|
+
</div>
|
|
71
|
+
`;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
i.styles = [u, b, d`
|
|
75
|
+
:host {
|
|
76
|
+
display: inline-flex;
|
|
77
|
+
align-items: center;
|
|
78
|
+
gap: var(--cg-component-toolbar-gap-md);
|
|
79
|
+
padding: var(--cg-component-toolbar-padding-md);
|
|
80
|
+
background: var(--cg-color-surface-cards-background);
|
|
81
|
+
border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);
|
|
82
|
+
border-radius: var(--cg-component-toolbar-radius);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* ── Orientation ── */
|
|
86
|
+
:host([orientation="vertical"]) {
|
|
87
|
+
display: inline-flex;
|
|
88
|
+
flex-direction: column;
|
|
89
|
+
align-items: stretch;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* ── Wrap ── */
|
|
93
|
+
:host([wrap]) { flex-wrap: wrap; }
|
|
94
|
+
|
|
95
|
+
/* ── Sizes ── */
|
|
96
|
+
:host([size="sm"]) {
|
|
97
|
+
gap: var(--cg-component-toolbar-gap-sm);
|
|
98
|
+
padding: var(--cg-component-toolbar-padding-sm);
|
|
99
|
+
}
|
|
100
|
+
:host([size="lg"]) {
|
|
101
|
+
gap: var(--cg-component-toolbar-gap-lg);
|
|
102
|
+
padding: var(--cg-component-toolbar-padding-lg);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.root {
|
|
106
|
+
display: contents;
|
|
107
|
+
}
|
|
108
|
+
`];
|
|
109
|
+
a([
|
|
110
|
+
l({ reflect: !0 })
|
|
111
|
+
], i.prototype, "orientation", 2);
|
|
112
|
+
a([
|
|
113
|
+
l()
|
|
114
|
+
], i.prototype, "label", 2);
|
|
115
|
+
a([
|
|
116
|
+
l({ reflect: !0 })
|
|
117
|
+
], i.prototype, "size", 2);
|
|
118
|
+
a([
|
|
119
|
+
l({ type: Boolean, reflect: !0 })
|
|
120
|
+
], i.prototype, "wrap", 2);
|
|
121
|
+
a([
|
|
122
|
+
p({ flatten: !0 })
|
|
123
|
+
], i.prototype, "_items", 2);
|
|
124
|
+
i = a([
|
|
125
|
+
f("cg-toolbar")
|
|
126
|
+
], i);
|
|
127
|
+
export {
|
|
128
|
+
i as CgToolbar
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=cg-toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cg-toolbar.js","sources":["../../../src/components/cg-toolbar/cg-toolbar.ts"],"sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js';\nimport { hostBase, reducedMotion } from '../../styles/index.js';\n\n/**\n * @element cg-toolbar\n * Grouped-action container implementing the ARIA `toolbar` roving-tabindex pattern:\n * a single tab stop, arrow keys move between actions.\n *\n * @example\n * ```html\n * <cg-toolbar label=\"Text formatting\">\n * <cg-button>Bold</cg-button>\n * <cg-button>Italic</cg-button>\n * <cg-separator orientation=\"vertical\"></cg-separator>\n * <cg-button>Link</cg-button>\n * </cg-toolbar>\n * ```\n *\n * @slot - Interactive actions (cg-button, cg-toggle, cg-separator, …).\n */\n@customElement('cg-toolbar')\nexport class CgToolbar extends LitElement {\n static override styles = [hostBase, reducedMotion, css`\n :host {\n display: inline-flex;\n align-items: center;\n gap: var(--cg-component-toolbar-gap-md);\n padding: var(--cg-component-toolbar-padding-md);\n background: var(--cg-color-surface-cards-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-component-toolbar-radius);\n }\n\n /* ── Orientation ── */\n :host([orientation=\"vertical\"]) {\n display: inline-flex;\n flex-direction: column;\n align-items: stretch;\n }\n\n /* ── Wrap ── */\n :host([wrap]) { flex-wrap: wrap; }\n\n /* ── Sizes ── */\n :host([size=\"sm\"]) {\n gap: var(--cg-component-toolbar-gap-sm);\n padding: var(--cg-component-toolbar-padding-sm);\n }\n :host([size=\"lg\"]) {\n gap: var(--cg-component-toolbar-gap-lg);\n padding: var(--cg-component-toolbar-padding-lg);\n }\n\n .root {\n display: contents;\n }\n `];\n\n /** Arrow-key axis + flex direction. */\n @property({ reflect: true }) orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /** aria-label for the toolbar landmark. */\n @property() label = '';\n\n /** Gap/padding scale. */\n @property({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n\n /** Allow items to wrap. */\n @property({ type: Boolean, reflect: true }) wrap = false;\n\n @queryAssignedElements({ flatten: true }) private _items!: HTMLElement[];\n\n /** Index of the current roving item within _focusable(). */\n private _rovingIndex = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('focusin', this._onFocusIn);\n this.addEventListener('keydown', this._onKeydown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('focusin', this._onFocusIn);\n this.removeEventListener('keydown', this._onKeydown);\n }\n\n /** Focusable items = slotted, not disabled, not aria-hidden, not a separator. */\n private _focusable(): HTMLElement[] {\n return (this._items ?? []).filter((el) => {\n if (el.hasAttribute('disabled')) return false;\n if (el.getAttribute('aria-disabled') === 'true') return false;\n if (el.hasAttribute('aria-hidden')) return false;\n const role = el.getAttribute('role');\n const tag = el.tagName.toLowerCase();\n if (role === 'separator' || tag === 'cg-separator') return false;\n return true;\n });\n }\n\n /** Apply roving tabindex: only the roving item is tabbable. */\n private _syncTabindex(): void {\n const items = this._focusable();\n if (items.length === 0) return;\n if (this._rovingIndex >= items.length) this._rovingIndex = 0;\n items.forEach((el, i) => {\n el.tabIndex = i === this._rovingIndex ? 0 : -1;\n });\n }\n\n override firstUpdated(): void {\n // slotchange is unreliable in some test environments; sync once on first paint.\n this._syncTabindex();\n }\n\n private _onSlotChange(): void {\n this._syncTabindex();\n }\n\n private _onFocusIn = (e: FocusEvent): void => {\n const items = this._focusable();\n const target = e.target as HTMLElement;\n // Map the focused element (or its host ancestor) to a roving index.\n const idx = items.findIndex((el) => el === target || el.contains(target));\n if (idx >= 0) {\n this._rovingIndex = idx;\n this._syncTabindex();\n }\n };\n\n private _onKeydown = (e: KeyboardEvent): void => {\n const items = this._focusable();\n if (items.length === 0) return;\n\n const horizontal = this.orientation !== 'vertical';\n const next = horizontal ? 'ArrowRight' : 'ArrowDown';\n const prev = horizontal ? 'ArrowLeft' : 'ArrowUp';\n\n let target = -1;\n if (e.key === next) target = (this._rovingIndex + 1) % items.length;\n else if (e.key === prev) target = (this._rovingIndex - 1 + items.length) % items.length;\n else if (e.key === 'Home') target = 0;\n else if (e.key === 'End') target = items.length - 1;\n else return;\n\n e.preventDefault();\n this._rovingIndex = target;\n this._syncTabindex();\n items[target]?.focus();\n };\n\n /** Move focus to the current roving item (or the first focusable item). */\n override focus(): void {\n const items = this._focusable();\n if (items.length === 0) return;\n const index = this._rovingIndex < items.length ? this._rovingIndex : 0;\n items[index]?.focus();\n }\n\n override render() {\n return html`\n <div\n class=\"root\"\n role=\"toolbar\"\n aria-label=${this.label || 'Toolbar'}\n aria-orientation=${this.orientation}\n >\n <slot @slotchange=${this._onSlotChange}></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-toolbar': CgToolbar;\n }\n}\n"],"names":["CgToolbar","LitElement","e","items","target","idx","el","horizontal","next","prev","role","tag","i","index","html","hostBase","reducedMotion","css","__decorateClass","property","queryAssignedElements","customElement"],"mappings":"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"}
|