@sankhyatronics/sankhya-cms 0.0.0-stage → 0.0.9
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/LICENSE +21 -0
- package/README.md +34 -3
- package/custom-elements.json +4008 -0
- package/dist/bento-grid/index.d.ts +27 -0
- package/dist/bento-grid/index.js +10 -0
- package/dist/bento-grid/index.js.map +1 -0
- package/dist/card/index.d.ts +20 -0
- package/dist/card/index.js +9 -0
- package/dist/card/index.js.map +1 -0
- package/dist/carousel/index.d.ts +44 -0
- package/dist/carousel/index.js +10 -0
- package/dist/carousel/index.js.map +1 -0
- package/dist/chunk-23IHTBAB.js +557 -0
- package/dist/chunk-23IHTBAB.js.map +1 -0
- package/dist/chunk-2VZFHTBC.js +203 -0
- package/dist/chunk-2VZFHTBC.js.map +1 -0
- package/dist/chunk-3ERKQNZT.js +155 -0
- package/dist/chunk-3ERKQNZT.js.map +1 -0
- package/dist/chunk-3JU3R22O.js +193 -0
- package/dist/chunk-3JU3R22O.js.map +1 -0
- package/dist/chunk-3TCP25JG.js +347 -0
- package/dist/chunk-3TCP25JG.js.map +1 -0
- package/dist/chunk-3VE6VFJ4.js +87 -0
- package/dist/chunk-3VE6VFJ4.js.map +1 -0
- package/dist/chunk-4HKSA5UT.js +312 -0
- package/dist/chunk-4HKSA5UT.js.map +1 -0
- package/dist/chunk-5REZSZCK.js +266 -0
- package/dist/chunk-5REZSZCK.js.map +1 -0
- package/dist/chunk-5UFRGZWG.js +268 -0
- package/dist/chunk-5UFRGZWG.js.map +1 -0
- package/dist/chunk-74MILER4.js +215 -0
- package/dist/chunk-74MILER4.js.map +1 -0
- package/dist/chunk-7PSYCTEN.js +118 -0
- package/dist/chunk-7PSYCTEN.js.map +1 -0
- package/dist/chunk-E52WO7R7.js +279 -0
- package/dist/chunk-E52WO7R7.js.map +1 -0
- package/dist/chunk-EUXUH3YW.js +15 -0
- package/dist/chunk-EUXUH3YW.js.map +1 -0
- package/dist/chunk-IMACP7HN.js +156 -0
- package/dist/chunk-IMACP7HN.js.map +1 -0
- package/dist/chunk-LHU23TF6.js +273 -0
- package/dist/chunk-LHU23TF6.js.map +1 -0
- package/dist/chunk-OEX5FDMR.js +250 -0
- package/dist/chunk-OEX5FDMR.js.map +1 -0
- package/dist/chunk-RHAOQ6K4.js +138 -0
- package/dist/chunk-RHAOQ6K4.js.map +1 -0
- package/dist/chunk-RMIJVTFS.js +397 -0
- package/dist/chunk-RMIJVTFS.js.map +1 -0
- package/dist/chunk-TIU73O7I.js +221 -0
- package/dist/chunk-TIU73O7I.js.map +1 -0
- package/dist/chunk-USNFT4DU.js +125 -0
- package/dist/chunk-USNFT4DU.js.map +1 -0
- package/dist/chunk-VYON56QO.js +90 -0
- package/dist/chunk-VYON56QO.js.map +1 -0
- package/dist/chunk-WCO7JAIK.js +195 -0
- package/dist/chunk-WCO7JAIK.js.map +1 -0
- package/dist/chunk-XHBC23TV.js +254 -0
- package/dist/chunk-XHBC23TV.js.map +1 -0
- package/dist/chunk-XXPBFHWR.js +70 -0
- package/dist/chunk-XXPBFHWR.js.map +1 -0
- package/dist/chunk-YYK4GQUW.js +299 -0
- package/dist/chunk-YYK4GQUW.js.map +1 -0
- package/dist/cms-theme.css +15 -0
- package/dist/content-block/index.d.ts +25 -0
- package/dist/content-block/index.js +11 -0
- package/dist/content-block/index.js.map +1 -0
- package/dist/cookie-consent/index.d.ts +33 -0
- package/dist/cookie-consent/index.js +9 -0
- package/dist/cookie-consent/index.js.map +1 -0
- package/dist/dropdown/index.d.ts +89 -0
- package/dist/dropdown/index.js +9 -0
- package/dist/dropdown/index.js.map +1 -0
- package/dist/feature-split/index.d.ts +38 -0
- package/dist/feature-split/index.js +11 -0
- package/dist/feature-split/index.js.map +1 -0
- package/dist/features-section/index.d.ts +50 -0
- package/dist/features-section/index.js +14 -0
- package/dist/features-section/index.js.map +1 -0
- package/dist/footer/index.d.ts +64 -0
- package/dist/footer/index.js +9 -0
- package/dist/footer/index.js.map +1 -0
- package/dist/header/index.d.ts +112 -0
- package/dist/header/index.js +10 -0
- package/dist/header/index.js.map +1 -0
- package/dist/hero/index.d.ts +32 -0
- package/dist/hero/index.js +10 -0
- package/dist/hero/index.js.map +1 -0
- package/dist/icon-button/index.d.ts +23 -0
- package/dist/icon-button/index.js +9 -0
- package/dist/icon-button/index.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/items-accordion/index.d.ts +31 -0
- package/dist/items-accordion/index.js +10 -0
- package/dist/items-accordion/index.js.map +1 -0
- package/dist/markdown/index.d.ts +33 -0
- package/dist/markdown/index.js +9 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/menu-grid/index.d.ts +21 -0
- package/dist/menu-grid/index.js +9 -0
- package/dist/menu-grid/index.js.map +1 -0
- package/dist/menu-grid-item/index.d.ts +53 -0
- package/dist/menu-grid-item/index.js +9 -0
- package/dist/menu-grid-item/index.js.map +1 -0
- package/dist/menu-item/index.d.ts +50 -0
- package/dist/menu-item/index.js +9 -0
- package/dist/menu-item/index.js.map +1 -0
- package/dist/promo-banner/index.d.ts +22 -0
- package/dist/promo-banner/index.js +10 -0
- package/dist/promo-banner/index.js.map +1 -0
- package/dist/schema/index.d.ts +72 -0
- package/dist/schema/index.js +75 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/select/index.d.ts +77 -0
- package/dist/select/index.js +10 -0
- package/dist/select/index.js.map +1 -0
- package/dist/shared/icons.d.ts +77 -0
- package/dist/shared/icons.js +64 -0
- package/dist/shared/icons.js.map +1 -0
- package/dist/shared/styles.d.ts +90 -0
- package/dist/shared/styles.js +48 -0
- package/dist/shared/styles.js.map +1 -0
- package/dist/stats/index.d.ts +17 -0
- package/dist/stats/index.js +9 -0
- package/dist/stats/index.js.map +1 -0
- package/dist/testimonials/index.d.ts +25 -0
- package/dist/testimonials/index.js +10 -0
- package/dist/testimonials/index.js.map +1 -0
- package/dist/theme.css +292 -0
- package/dist/themes.css +65 -0
- package/dist/theming/index.d.ts +28 -0
- package/dist/theming/index.js +53 -0
- package/dist/theming/index.js.map +1 -0
- package/package.json +160 -3
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Marketing-scale tokens for the CMS section components (hero, features, stats, ...).
|
|
3
|
+
* theme.css is tuned for dense app chrome (its largest text step is 20px), so
|
|
4
|
+
* the display sizes a content page needs live here. Import after theme.css (shipped in this package);
|
|
5
|
+
* override any of these at :root to rescale the CMS components.
|
|
6
|
+
*/
|
|
7
|
+
:root {
|
|
8
|
+
--st-cms-text-display: 3.75rem;
|
|
9
|
+
--st-cms-text-4xl: 2.25rem;
|
|
10
|
+
--st-cms-text-3xl: 1.875rem;
|
|
11
|
+
--st-cms-text-xl: 1.25rem;
|
|
12
|
+
--st-cms-text-lg: 1.125rem;
|
|
13
|
+
--st-cms-section-padding: 4rem;
|
|
14
|
+
--st-cms-container-max: 1200px;
|
|
15
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as lit from 'lit';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A long-form article section: centered title/subtitle, an optional featured image with caption,
|
|
6
|
+
* then Markdown body text. Ports `SankhyaUI`'s React `ContentBlock`. The body comes from
|
|
7
|
+
* `content-src` (a Markdown URL, as in the source) or an inline `content` string (added so the
|
|
8
|
+
* block works without a fetch); `content-src` wins when both are set.
|
|
9
|
+
*/
|
|
10
|
+
declare class ContentBlock extends LitElement {
|
|
11
|
+
static styles: lit.CSSResult;
|
|
12
|
+
title: string;
|
|
13
|
+
subtitle: string;
|
|
14
|
+
/** URL of a Markdown file. */
|
|
15
|
+
contentSrc: string;
|
|
16
|
+
/** Inline Markdown, used when `content-src` is not set. */
|
|
17
|
+
content: string;
|
|
18
|
+
imageSrc: string;
|
|
19
|
+
imageAlt: string;
|
|
20
|
+
imageCaption: string;
|
|
21
|
+
inverted: boolean;
|
|
22
|
+
render(): lit.TemplateResult<1>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { ContentBlock };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as lit from 'lit';
|
|
2
|
+
import { LitElement, nothing } from 'lit';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Fixed bottom consent bar. The source read/wrote consent through a React `UserContext`; here the
|
|
6
|
+
* element persists the choice itself in localStorage (`storage-key`, default the source's
|
|
7
|
+
* `sankhya_ui_cookie_consent`; storage errors are ignored) and renders nothing once a choice
|
|
8
|
+
* exists. Fires `cookie-consent-accept` / `cookie-consent-refuse` (detail `{ status }`). The
|
|
9
|
+
* default slot replaces the message text.
|
|
10
|
+
*/
|
|
11
|
+
declare class CookieConsent extends LitElement {
|
|
12
|
+
static styles: lit.CSSResult;
|
|
13
|
+
message: string;
|
|
14
|
+
acceptButtonText: string;
|
|
15
|
+
refuseButtonText: string;
|
|
16
|
+
privacyPolicyLink: string;
|
|
17
|
+
privacyPolicyText: string;
|
|
18
|
+
storageKey: string;
|
|
19
|
+
/** The stored choice, or `null` while undecided (the bar is only shown then). */
|
|
20
|
+
private consent;
|
|
21
|
+
connectedCallback(): void;
|
|
22
|
+
private readStored;
|
|
23
|
+
private choose;
|
|
24
|
+
render(): lit.TemplateResult<1> | typeof nothing;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
type CookieConsentStatus = 'accepted' | 'refused';
|
|
28
|
+
/** Detail of `cookie-consent-accept` / `cookie-consent-refuse` (source: `onAccept` / `onRefuse`). */
|
|
29
|
+
interface CookieConsentEventDetail {
|
|
30
|
+
status: CookieConsentStatus;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { CookieConsent, type CookieConsentEventDetail, type CookieConsentStatus };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import * as lit from 'lit';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A labeled trigger + slotted dropdown panel — nav menus (typically holding an `st-menu-grid`),
|
|
6
|
+
* action menus, anything "click a trigger, show content under it". A 1:1 port of `SankhyaUI`'s
|
|
7
|
+
* React `Dropdown` (`SankhyaCMS/SankhyaUI/src/components/Dropdown`): same markup
|
|
8
|
+
* (`.menu` > `.menu-title` + `.menu-dropdown`), sizes, 0.3s slide/fade, and behavior —
|
|
9
|
+
*
|
|
10
|
+
* - only one dropdown is open at a time (the source's `DropdownProvider`, built in here, so no
|
|
11
|
+
* provider element is needed);
|
|
12
|
+
* - a mousedown outside, Escape, or a click inside the panel closes it;
|
|
13
|
+
* - an `href` trigger toggles the panel when it has content, and is a plain link when it doesn't;
|
|
14
|
+
* - `inline` opens the panel in the flow, the source's `.touch-device` layout.
|
|
15
|
+
*
|
|
16
|
+
* Colors and the panel's surface come from the suite theme (the source left those to the
|
|
17
|
+
* consumer's `className`/`itemGroupClassName` utility classes). Two source rules are left out
|
|
18
|
+
* because they break existing suite uses (`st-source-bar`'s site/library menus): the 100vw panel
|
|
19
|
+
* at <=768px (overflows the screen from wherever the trigger sits; the header uses `inline`
|
|
20
|
+
* instead) and `overflow: hidden` on slotted children (clips their focus rings). Suite additions
|
|
21
|
+
* kept on top: `align`, `active`, `disabled`, `inline`, and the `dropdown-toggle` event.
|
|
22
|
+
*/
|
|
23
|
+
declare class Dropdown extends LitElement {
|
|
24
|
+
/** The open dropdown, if any — the source's `DropdownContext.activeDropdown`. */
|
|
25
|
+
private static openDropdown;
|
|
26
|
+
static styles: lit.CSSResult;
|
|
27
|
+
/** Trigger label text (source: `title`, renamed because `title` is the native tooltip
|
|
28
|
+
* attribute). Leave empty to show only `slot="icon"`. */
|
|
29
|
+
label: string;
|
|
30
|
+
/** Renders the trigger as an `<a href>`. With panel content the click toggles the panel (as in
|
|
31
|
+
* the source); with none it navigates. */
|
|
32
|
+
href: string;
|
|
33
|
+
iconPosition: 'left' | 'right';
|
|
34
|
+
/** Inline `width`/`height` of the `slot="icon"` wrapper (source: `iconSize`, default `1.2rem`). */
|
|
35
|
+
iconSize: string;
|
|
36
|
+
/** Inline `color` of the `slot="icon"` wrapper (source: `iconColor`). */
|
|
37
|
+
iconColor: string;
|
|
38
|
+
/** Which edge of the trigger the panel lines up with. */
|
|
39
|
+
align: 'left' | 'right';
|
|
40
|
+
/** `target` of an `href` trigger (source default `_self`). */
|
|
41
|
+
target: string;
|
|
42
|
+
/** Extra class(es) on the trigger (source: `className`; a `class` on `st-dropdown` styles the host). */
|
|
43
|
+
triggerClassName: string;
|
|
44
|
+
/** Extra class(es) on the panel (source: `itemGroupClassName`). */
|
|
45
|
+
itemGroupClassName: string;
|
|
46
|
+
/** Unused, as in the source (`itemClassName` is never read there); kept for prop parity. */
|
|
47
|
+
itemClassName: string;
|
|
48
|
+
disabled: boolean;
|
|
49
|
+
/** Highlights the trigger as the current section (e.g. the current page is one of its items). */
|
|
50
|
+
active: boolean;
|
|
51
|
+
/** Opens the panel in the flow under the trigger instead of floating over the page (see the
|
|
52
|
+
* styles). `st-header` sets this on its own menu's dropdowns while its hamburger panel shows. */
|
|
53
|
+
inline: boolean;
|
|
54
|
+
/** Whether the panel is showing. Follows user toggles; may also be set from outside. */
|
|
55
|
+
open: boolean;
|
|
56
|
+
/** Whether the default slot has content — the source's `children` check. */
|
|
57
|
+
private hasContent;
|
|
58
|
+
/** Whether `slot="icon"` has content. */
|
|
59
|
+
private hasIcon;
|
|
60
|
+
connectedCallback(): void;
|
|
61
|
+
disconnectedCallback(): void;
|
|
62
|
+
protected updated(changed: Map<string, unknown>): void;
|
|
63
|
+
private setOpen;
|
|
64
|
+
private closeOnOutsideMouseDown;
|
|
65
|
+
private closeOnEscape;
|
|
66
|
+
private trigger;
|
|
67
|
+
/** Keyboard-reachable entries in the panel, in order: menu items (they delegate focus to their
|
|
68
|
+
* own link) plus any plain links/buttons/tabbable elements a caller slots in. */
|
|
69
|
+
private panelItems;
|
|
70
|
+
/** Moves focus into the panel once it has become visible (it is `visibility: hidden` until the
|
|
71
|
+
* `show` class lands, and hidden elements can't take focus). */
|
|
72
|
+
private focusItem;
|
|
73
|
+
/** Enter/Space/ArrowDown open the panel and focus its first entry; ArrowUp its last. */
|
|
74
|
+
private onTitleKeyDown;
|
|
75
|
+
/** Arrow keys/Home/End move between the panel's entries; Tab closes the panel and moves on. */
|
|
76
|
+
private onPanelKeyDown;
|
|
77
|
+
private onTitleClick;
|
|
78
|
+
/** A click anywhere inside the panel closes it, as in the source. */
|
|
79
|
+
private onPanelClick;
|
|
80
|
+
private onContentSlotChange;
|
|
81
|
+
private onIconSlotChange;
|
|
82
|
+
render(): lit.TemplateResult<1>;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
interface DropdownToggleEventDetail {
|
|
86
|
+
open: boolean;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export { Dropdown, type DropdownToggleEventDetail };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as lit from 'lit';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
|
|
4
|
+
interface FeatureSplitItem {
|
|
5
|
+
/** Iconify icon name, e.g. `mdi:check`. */
|
|
6
|
+
icon?: string;
|
|
7
|
+
title: string;
|
|
8
|
+
/** Markdown. */
|
|
9
|
+
description: string;
|
|
10
|
+
}
|
|
11
|
+
type FeatureSplitImagePosition = 'left' | 'right' | 'top';
|
|
12
|
+
/** A title/markdown-subtitle/feature-list block beside (or under) an image. */
|
|
13
|
+
declare class FeatureSplit extends LitElement {
|
|
14
|
+
static styles: lit.CSSResult;
|
|
15
|
+
inverted: boolean;
|
|
16
|
+
title: string;
|
|
17
|
+
/** Markdown. */
|
|
18
|
+
subtitle: string;
|
|
19
|
+
items: FeatureSplitItem[];
|
|
20
|
+
imageSrc: string;
|
|
21
|
+
imageAlt: string;
|
|
22
|
+
imagePosition: FeatureSplitImagePosition;
|
|
23
|
+
actionLabel: string;
|
|
24
|
+
href: string;
|
|
25
|
+
private onAction;
|
|
26
|
+
render(): lit.TemplateResult<1>;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface FeatureSplitActionEventDetail {
|
|
30
|
+
href: string;
|
|
31
|
+
}
|
|
32
|
+
declare global {
|
|
33
|
+
interface HTMLElementEventMap {
|
|
34
|
+
'feature-split-action': CustomEvent<FeatureSplitActionEventDetail>;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export { FeatureSplit, type FeatureSplitActionEventDetail, type FeatureSplitImagePosition, type FeatureSplitItem };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as lit from 'lit';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* One feature tile for `st-features-section`: optional icon, title, Markdown description and an
|
|
6
|
+
* optional "Learn more" link, rendered on an `st-card`. `icon` is an Iconify name (e.g.
|
|
7
|
+
* `mdi:rocket`). The link is a plain `<a>` (the source used react-router's `Link` for non-http
|
|
8
|
+
* hrefs; there is no Lit equivalent). The click is composed, so an SPA router can intercept it
|
|
9
|
+
* (e.g. via `event.composedPath()`) and navigate client-side; `http(s)` links open in a new tab.
|
|
10
|
+
*/
|
|
11
|
+
declare class FeatureItem extends LitElement {
|
|
12
|
+
static styles: lit.CSSResult;
|
|
13
|
+
/** Iconify icon name, e.g. `mdi:rocket`. */
|
|
14
|
+
icon: string;
|
|
15
|
+
title: string;
|
|
16
|
+
/** Markdown. */
|
|
17
|
+
description: string;
|
|
18
|
+
href: string;
|
|
19
|
+
actionLabel: string;
|
|
20
|
+
inverted: boolean;
|
|
21
|
+
render(): lit.TemplateResult<1>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Data for one tile when using the `items` property (mirrors `st-feature-item`'s properties). */
|
|
25
|
+
interface FeatureItemData {
|
|
26
|
+
icon?: string;
|
|
27
|
+
title: string;
|
|
28
|
+
description: string;
|
|
29
|
+
href?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A titled grid of feature tiles. Ports `SankhyaUI`'s React `FeaturesSection`: tiles come from the
|
|
33
|
+
* `items` property, from slotted `st-feature-item` elements (the source's `children`), or both
|
|
34
|
+
* (slotted first). `columns` sets the grid width (default 2; one column below 768px). `inverted`
|
|
35
|
+
* is passed on to the `items` tiles; slotted tiles need their own `inverted` attribute.
|
|
36
|
+
*/
|
|
37
|
+
declare class FeaturesSection extends LitElement {
|
|
38
|
+
static styles: lit.CSSResult;
|
|
39
|
+
title: string;
|
|
40
|
+
subtitle: string;
|
|
41
|
+
/** Applied to every tile built from `items`. */
|
|
42
|
+
actionLabel: string;
|
|
43
|
+
columns: number;
|
|
44
|
+
inverted: boolean;
|
|
45
|
+
/** Tiles to render (property only). */
|
|
46
|
+
items: FeatureItemData[];
|
|
47
|
+
render(): lit.TemplateResult<1>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { FeatureItem, type FeatureItemData, FeaturesSection };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FeatureItem,
|
|
3
|
+
FeaturesSection
|
|
4
|
+
} from "../chunk-E52WO7R7.js";
|
|
5
|
+
import "../chunk-7PSYCTEN.js";
|
|
6
|
+
import "../chunk-3JU3R22O.js";
|
|
7
|
+
import "../chunk-3VE6VFJ4.js";
|
|
8
|
+
import "../chunk-RHAOQ6K4.js";
|
|
9
|
+
import "../chunk-EUXUH3YW.js";
|
|
10
|
+
export {
|
|
11
|
+
FeatureItem,
|
|
12
|
+
FeaturesSection
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import * as lit from 'lit';
|
|
2
|
+
import { LitElement, PropertyValues } from 'lit';
|
|
3
|
+
|
|
4
|
+
interface FooterLink {
|
|
5
|
+
label: string;
|
|
6
|
+
href: string;
|
|
7
|
+
}
|
|
8
|
+
interface FooterColumn {
|
|
9
|
+
title: string;
|
|
10
|
+
links: FooterLink[];
|
|
11
|
+
}
|
|
12
|
+
interface FooterSocialLink {
|
|
13
|
+
/** Iconify icon name, e.g. `mdi:github`. */
|
|
14
|
+
icon: string;
|
|
15
|
+
href: string;
|
|
16
|
+
}
|
|
17
|
+
/** Fired when an internal footer link is activated — cancelable, so an SPA can `preventDefault()` and route instead. */
|
|
18
|
+
interface FooterLinkEventDetail {
|
|
19
|
+
href: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The footer, in two layouts:
|
|
23
|
+
*
|
|
24
|
+
* - **Bar** (default): a copyright line plus an optional "powered by" link — what the suite's
|
|
25
|
+
* authenticated apps use.
|
|
26
|
+
* - **Site**: when `columns`, `socialLinks`, `description` or `imageSrc` is set, the footer becomes a
|
|
27
|
+
* marketing-site footer — brand (logo/company name, description, social icons), link columns and a
|
|
28
|
+
* bottom bar with the copyright and "powered by".
|
|
29
|
+
*
|
|
30
|
+
* Fires a cancelable `footer-link` event (detail `{ href }`) when an internal link is clicked.
|
|
31
|
+
*/
|
|
32
|
+
declare class Footer extends LitElement {
|
|
33
|
+
static styles: lit.CSSResult;
|
|
34
|
+
/** Inverts the footer's color roles (light-on-dark instead of dark-on-light) — matches the
|
|
35
|
+
* source component's `inverted` (from its shared `BaseProps`), same as `st-header`'s. */
|
|
36
|
+
inverted: boolean;
|
|
37
|
+
/** Used to build the default `copyright` line (`© {year} {companyName}`) when `copyright` isn't set explicitly. */
|
|
38
|
+
companyName: string;
|
|
39
|
+
/** Overrides the default computed copyright line entirely. */
|
|
40
|
+
copyright: string;
|
|
41
|
+
poweredBy: string;
|
|
42
|
+
poweredByLink: string;
|
|
43
|
+
/** App version, rendered as `v{version}` after the copyright line — for apps that show their own
|
|
44
|
+
* version in the footer rather than the header title. */
|
|
45
|
+
version: string;
|
|
46
|
+
/** Logo shown in the brand block (site layout). */
|
|
47
|
+
imageSrc: string;
|
|
48
|
+
/** Short blurb under the logo (site layout). */
|
|
49
|
+
description: string;
|
|
50
|
+
/** Link columns (site layout). */
|
|
51
|
+
columns: FooterColumn[];
|
|
52
|
+
/** Social icon links under the description (site layout). */
|
|
53
|
+
socialLinks: FooterSocialLink[];
|
|
54
|
+
private get isSite();
|
|
55
|
+
private get resolvedCopyright();
|
|
56
|
+
protected willUpdate(changed: PropertyValues): void;
|
|
57
|
+
private onLinkClick;
|
|
58
|
+
private renderLink;
|
|
59
|
+
private renderPoweredBy;
|
|
60
|
+
private renderSite;
|
|
61
|
+
render(): lit.TemplateResult<1>;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export { Footer, type FooterColumn, type FooterLink, type FooterLinkEventDetail, type FooterSocialLink };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import * as lit from 'lit';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The app-shell header bar — brand (image + title, or title alone) on the left, a `slot="menu"`
|
|
6
|
+
* for primary nav (e.g. `st-dropdown`/`st-menu-grid` mega-menus, or plain links) taking the
|
|
7
|
+
* middle, and a `slot="utility"` for account/app-switcher/theme controls on the right. Ported
|
|
8
|
+
* from `SankhyaUI`'s React `Header` (a separate, unrelated marketing-site project) to this
|
|
9
|
+
* package's Lit conventions and this workspace's actual needs — that source component takes an
|
|
10
|
+
* `imageSrc` logo with no text fallback, but none of this suite's apps has a logo image today, so
|
|
11
|
+
* `title` is the primary brand prop here and `brand-image-url` is optional, mirroring
|
|
12
|
+
* `st-app-header`'s own brand/title split (this component's slotted-menu/utility shape is a
|
|
13
|
+
* deliberately different, more generic surface than `st-app-header`'s fixed nav-links/user-menu
|
|
14
|
+
* props — pick whichever fits a given app's header).
|
|
15
|
+
*
|
|
16
|
+
* Layout follows the source's `Header.css`: the menu starts 4rem after the brand, the utility
|
|
17
|
+
* controls sit after a vertical divider, and below `BREAKPOINT_TABLET` (900px here; 768px in the
|
|
18
|
+
* source) `menu`/`utility` collapse behind a hamburger toggle into a full-screen layer under the
|
|
19
|
+
* toggle (closes on Escape or a click inside it), where the menu's `st-dropdown`s are switched to
|
|
20
|
+
* `inline` so they open in the flow — the same two slotted elements just get repositioned by CSS
|
|
21
|
+
* (`.mobile-panel`'s `display: contents` at desktop width vs. a real fixed-position box below
|
|
22
|
+
* `BREAKPOINT_TABLET`), rather than the slots being duplicated in the template, since a shadow
|
|
23
|
+
* root can only ever assign a given light-DOM child to the *first* slot of a given name.
|
|
24
|
+
*
|
|
25
|
+
* Also carries an optional built-in language switcher (`languages`/`currentLanguageCode`, fires
|
|
26
|
+
* `language-change`) — ported from `st-app-header`'s own implementation verbatim rather than
|
|
27
|
+
* rebuilt, since the source `Header`'s reference story shows an equivalent flag/language `Select`
|
|
28
|
+
* as a first-class header utility. Hidden entirely when `languages` has fewer than two entries.
|
|
29
|
+
* This component has no translation logic itself; the consuming app owns what a language `code`
|
|
30
|
+
* means and which content it re-renders in response.
|
|
31
|
+
*/
|
|
32
|
+
declare class Header extends LitElement {
|
|
33
|
+
static styles: lit.CSSResult;
|
|
34
|
+
title: string;
|
|
35
|
+
/** Optional logo image URL, shown before `title`. Omitted entirely when empty — none of this suite's apps has one today. Matches the source component's `imageSrc` (renamed here to pair with `title`/`logoHref`, since this component's only image use is the brand mark). */
|
|
36
|
+
brandImageUrl: string;
|
|
37
|
+
/** `alt` text for the brand image — matches the source component's `altText` (default `'Logo'`). */
|
|
38
|
+
altText: string;
|
|
39
|
+
/** Wraps the brand in an `<a>` when set (e.g. `/`); a plain non-link `<div>` otherwise. */
|
|
40
|
+
logoHref: string;
|
|
41
|
+
/** `target` for the brand `<a>` — matches the source component's `logoTarget` (default `_self`). No effect when `logoHref` isn't set. */
|
|
42
|
+
logoTarget: string;
|
|
43
|
+
/** Extra class(es) appended to the brand link/div — matches the source component's `logoClassName`. */
|
|
44
|
+
logoClassName: string;
|
|
45
|
+
/** Inverts the header's color roles (light-on-dark instead of dark-on-light) — matches the
|
|
46
|
+
* source component's `inverted` (from its shared `BaseProps`). */
|
|
47
|
+
inverted: boolean;
|
|
48
|
+
sticky: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Language switcher options, e.g. `[{ code: 'en', label: 'English' }, ...]` — hidden entirely
|
|
51
|
+
* when empty or when only one language is offered (same convention as `st-app-header`'s
|
|
52
|
+
* `languages`, which this reuses verbatim). This component has no translation logic itself —
|
|
53
|
+
* selecting an option fires `language-change` (detail: `{ code }`), and the consuming app owns
|
|
54
|
+
* what `code` actually means and which content it re-renders.
|
|
55
|
+
*/
|
|
56
|
+
languages: {
|
|
57
|
+
code: string;
|
|
58
|
+
label: string;
|
|
59
|
+
}[];
|
|
60
|
+
currentLanguageCode: string;
|
|
61
|
+
languageMenuLabel: string;
|
|
62
|
+
/** Internal open/closed state for the mobile nav overlay, reflected to an attribute purely so
|
|
63
|
+
* the `:host([mobile-open])` CSS selector above can react to it — not meant to be set from
|
|
64
|
+
* outside. */
|
|
65
|
+
mobileOpen: boolean;
|
|
66
|
+
/** True while the menu doesn't fit the bar at the current width: the header then shows the same
|
|
67
|
+
* hamburger layout it uses on a narrow screen. Set by `evaluateFit`, never from outside. */
|
|
68
|
+
compact: boolean;
|
|
69
|
+
private languageMenuOpen;
|
|
70
|
+
/** Whether `slot="utility"` has content — an empty utility row (and its divider) is hidden. */
|
|
71
|
+
private hasUtility;
|
|
72
|
+
private resizeObserver?;
|
|
73
|
+
/** Matches below BREAKPOINT_TABLET, where the hamburger layout is always on. */
|
|
74
|
+
private narrowQuery?;
|
|
75
|
+
/** The dropdowns this header switched to `inline` — only these are switched back, so a caller's
|
|
76
|
+
* own `inline` setting is left alone. */
|
|
77
|
+
private inlinedDropdowns;
|
|
78
|
+
/** While the hamburger layout is on, the dropdowns in the header open in the flow of the
|
|
79
|
+
* full-screen panel instead of floating over it (SankhyaUI's touch-device layout). */
|
|
80
|
+
private syncInlineDropdowns;
|
|
81
|
+
private onUtilitySlotChange;
|
|
82
|
+
private onMenuSlotChange;
|
|
83
|
+
protected updated(changed: Map<string, unknown>): void;
|
|
84
|
+
/** The bar width at which the menu last overflowed — the bar only expands again once it is
|
|
85
|
+
* clearly wider than this, so it can't flip back and forth right at the threshold. */
|
|
86
|
+
private collapsedAtWidth;
|
|
87
|
+
/** Collapses to the hamburger layout when the slotted menu overflows its row, and expands again
|
|
88
|
+
* once there is room. The collapsed layout hides the menu, so the room it needs can't be
|
|
89
|
+
* measured then; the width remembered when it collapsed stands in for it. */
|
|
90
|
+
private evaluateFit;
|
|
91
|
+
/** Whether the visible menu items reach past the right edge of the menu row. Measured from the
|
|
92
|
+
* items' own boxes (the slotted elements and their direct children), not the row's scrollWidth:
|
|
93
|
+
* a closed dropdown's absolutely positioned panel also counts towards scrollWidth, which would
|
|
94
|
+
* report overflow at any width. */
|
|
95
|
+
private menuOverflows;
|
|
96
|
+
protected firstUpdated(): void;
|
|
97
|
+
connectedCallback(): void;
|
|
98
|
+
private lightDomObserver?;
|
|
99
|
+
disconnectedCallback(): void;
|
|
100
|
+
private closeOnEscape;
|
|
101
|
+
private closeLanguageMenuOnOutsideClick;
|
|
102
|
+
private renderLanguageMenu;
|
|
103
|
+
private onLanguageSelect;
|
|
104
|
+
private renderBrand;
|
|
105
|
+
render(): lit.TemplateResult<1>;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
interface LanguageChangedEventDetail {
|
|
109
|
+
code: string;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export { Header, type LanguageChangedEventDetail };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as lit from 'lit';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Full-width hero banner: background image with a darkening overlay, title, optional subtitle and
|
|
6
|
+
* a call-to-action link. Port of `SankhyaUI`'s React `Hero`; the framer-motion entrance is redone
|
|
7
|
+
* as CSS keyframes (skipped under `prefers-reduced-motion`). The CTA fires a cancelable `action`
|
|
8
|
+
* event (detail `{ href }`) before navigating.
|
|
9
|
+
*/
|
|
10
|
+
declare class Hero extends LitElement {
|
|
11
|
+
static styles: lit.CSSResult;
|
|
12
|
+
title: string;
|
|
13
|
+
subtitle: string;
|
|
14
|
+
imageSrc: string;
|
|
15
|
+
actionLabel: string;
|
|
16
|
+
href: string;
|
|
17
|
+
textAlignment: 'left' | 'center' | 'right' | 'justify';
|
|
18
|
+
padding: 'none' | 'small' | 'medium' | 'large';
|
|
19
|
+
inverted: boolean;
|
|
20
|
+
focalPoint: 'top' | 'left' | 'right' | 'bottom' | 'center';
|
|
21
|
+
private static positions;
|
|
22
|
+
protected willUpdate(): void;
|
|
23
|
+
private onClick;
|
|
24
|
+
render(): lit.TemplateResult<1>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Fired by `st-hero` / `st-promo-banner` when the call-to-action is activated (source: `onAction`). */
|
|
28
|
+
interface HeroActionEventDetail {
|
|
29
|
+
href: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export { Hero, type HeroActionEventDetail };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as lit from 'lit';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A small, icon-only action button — ported from `SankhyaUI`'s React `IconButton` (a separate,
|
|
6
|
+
* unrelated marketing-site project; that source takes an iconify string `icon` prop, this package
|
|
7
|
+
* has no iconify dependency, so the icon is default-slotted content instead, same convention as
|
|
8
|
+
* `st-dropdown`/`st-menu-grid-item`'s `slot="icon"`).
|
|
9
|
+
*
|
|
10
|
+
* Fires a plain native `click` — no custom event, since a caller just wants an ordinary button.
|
|
11
|
+
*/
|
|
12
|
+
declare class IconButton extends LitElement {
|
|
13
|
+
static styles: lit.CSSResult;
|
|
14
|
+
/** Accessible name and tooltip — matches the source component's `ariaLabel` (renamed: modern
|
|
15
|
+
* browsers already expose a native `ariaLabel` reflected property on every `Element`, so reusing
|
|
16
|
+
* that exact name as a Lit reactive property would shadow it). Required for a control with no
|
|
17
|
+
* visible text. */
|
|
18
|
+
label: string;
|
|
19
|
+
disabled: boolean;
|
|
20
|
+
render(): lit.TemplateResult<1>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { IconButton };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export { BentoGrid, BentoGridItem } from './bento-grid/index.js';
|
|
2
|
+
export { Card } from './card/index.js';
|
|
3
|
+
export { Carousel, CarouselChangeEventDetail } from './carousel/index.js';
|
|
4
|
+
export { ContentBlock } from './content-block/index.js';
|
|
5
|
+
export { CookieConsent, CookieConsentEventDetail, CookieConsentStatus } from './cookie-consent/index.js';
|
|
6
|
+
export { Dropdown, DropdownToggleEventDetail } from './dropdown/index.js';
|
|
7
|
+
export { FeatureSplit, FeatureSplitActionEventDetail, FeatureSplitImagePosition, FeatureSplitItem } from './feature-split/index.js';
|
|
8
|
+
export { FeatureItem, FeatureItemData, FeaturesSection } from './features-section/index.js';
|
|
9
|
+
export { Footer, FooterColumn, FooterLink, FooterLinkEventDetail, FooterSocialLink } from './footer/index.js';
|
|
10
|
+
export { Header, LanguageChangedEventDetail } from './header/index.js';
|
|
11
|
+
export { Hero, HeroActionEventDetail } from './hero/index.js';
|
|
12
|
+
export { IconButton } from './icon-button/index.js';
|
|
13
|
+
export { AccordionItem, AccordionToggleEventDetail, ItemsAccordion } from './items-accordion/index.js';
|
|
14
|
+
export { Markdown, MarkdownErrorEventDetail } from './markdown/index.js';
|
|
15
|
+
export { MenuGrid } from './menu-grid/index.js';
|
|
16
|
+
export { MenuGridItem, MenuGridItemSelectEventDetail } from './menu-grid-item/index.js';
|
|
17
|
+
export { MenuItem, MenuItemSelectEventDetail } from './menu-item/index.js';
|
|
18
|
+
export { PromoBanner } from './promo-banner/index.js';
|
|
19
|
+
export { Select, SelectChangedEventDetail, SelectOption } from './select/index.js';
|
|
20
|
+
export { StatItem, Stats } from './stats/index.js';
|
|
21
|
+
export { TestimonialItem, Testimonials } from './testimonials/index.js';
|
|
22
|
+
import 'lit';
|