@parallelworks/ui 0.5.0 → 0.5.1

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/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { DEFAULT_PRESET, THEME_PRESETS, THEME_TOKENS, applyTheme, contrastRatio, deriveTheme, isDarkColor } from "./theme/index.js";
2
- import { AlertIcon, AngleRightIcon, EyeIcon, EyeOffIcon, FilterIcon, LoaderIcon, SortDownIcon, SortUnsortedIcon, SortUpIcon } from "./icons.js";
3
- import { a as CreateModalSwitch, c as ConfirmModal, d as primaryButtonClasses, f as Markdown, h as Callout, i as CreateModalSelect, l as dangerButtonClasses, m as CopyToClipboard, n as CreateModalAutocompleteField, o as CreateModalTextarea, p as CopyCodeBlock, r as CreateModalField, s as AddMenu, t as CreateModal, u as ghostButtonClasses } from "./chunks/CreateModal-6zZZHxCI.js";
4
- import { a as useProvisionCorsRules, c as useStrings, i as useNotify, l as useWorkflowJsonResolver, n as useLink, o as useRunFile, r as useNavigation, s as useSlots, t as UIProvider } from "./chunks/Provider-jQCAN3NN.js";
2
+ import { AddIcon, AlertIcon, AngleRightIcon, ChevronRightIcon, EditIcon, EyeIcon, EyeOffIcon, FilterIcon, LoaderIcon, MoreIcon, SortDownIcon, SortUnsortedIcon, SortUpIcon } from "./icons.js";
3
+ import { a as CreateModalSwitch, c as ConfirmModal, d as primaryButtonClasses, f as Markdown, h as Callout, i as CreateModalSelect, l as dangerButtonClasses, m as CopyToClipboard, n as CreateModalAutocompleteField, o as CreateModalTextarea, p as CopyCodeBlock, r as CreateModalField, s as AddMenu, t as CreateModal, u as ghostButtonClasses } from "./chunks/CreateModal-CXSi9ELO.js";
4
+ import { a as useProvisionCorsRules, c as useStrings, i as useNotify, l as useWorkflowJsonResolver, n as useLink, o as useRunFile, r as useNavigation, s as useSlots, t as UIProvider } from "./chunks/Provider-wC9G01Ou.js";
5
5
  import { i as formatTooltipContent, n as TOOLTIP_ID, r as TooltipInfo, t as GlobalTooltip } from "./chunks/Tooltip-WgbiC_nd.js";
6
- import { a as UncontrolledCollapsiblePanel, c as Dropdown, d as flattenOptions, f as isCategory, i as MaybeCollapsible, l as DropdownCaret, n as SectionHeader, o as MultiSelectDropdown, p as isOption, r as ControlledCollapsiblePanel, s as CustomListbox, t as SwitchToggle, u as filterOption } from "./chunks/SwitchToggle-D0ud8cd5.js";
6
+ import { a as UncontrolledCollapsiblePanel, c as Dropdown, d as flattenOptions, f as isCategory, i as MaybeCollapsible, l as DropdownCaret, n as SectionHeader, o as MultiSelectDropdown, p as isOption, r as ControlledCollapsiblePanel, s as CustomListbox, t as SwitchToggle, u as filterOption } from "./chunks/SwitchToggle-CkYT1isd.js";
7
7
  import { t as Loader } from "./chunks/Loader-BXoXTZGc.js";
8
8
  import { n as modalPanelClasses, t as BareModal } from "./chunks/BareModal-DBa84JZO.js";
9
9
  import { t as useCssIsDark } from "./chunks/useCssIsDark-DHr05dG2.js";
@@ -11,9 +11,11 @@ import { t as Indicator } from "./chunks/Indicator-hBSIxOPK.js";
11
11
  import { t as SwitchToggleSmall } from "./chunks/SwitchToggleSmall-FcsaYSTs.js";
12
12
  import { n as StatusDot, t as StatusBadge } from "./chunks/StatusBadge-DXp4zkSd.js";
13
13
  import { n as Table, t as CompactTable } from "./chunks/Table-ByziK93x.js";
14
+ import { s as useRowMenu } from "./chunks/RowContextMenu-D3G3DPQk.js";
14
15
  import cx from "classnames";
15
16
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
16
- import React, { forwardRef, useState } from "react";
17
+ import React, { Fragment as Fragment$1, createContext, forwardRef, useContext, useEffect, useLayoutEffect, useState } from "react";
18
+ import { createPortal } from "react-dom";
17
19
  import Skeleton from "react-loading-skeleton";
18
20
  //#region src/components/DescriptionList.tsx
19
21
  function DescriptionListItem({ label, children, tooltip, className, ...props }) {
@@ -188,7 +190,7 @@ function MethodButton({ icon, label, description, href, className = "", ...props
188
190
  //#region src/components/Card.tsx
189
191
  function Card({ children, className = "", wide, compact, interactive, authShadow }) {
190
192
  return /* @__PURE__ */ jsx("div", {
191
- className: cx("w-full bg-[var(--theme-panel-bg)] backdrop-blur-xl border border-[var(--theme-border)] rounded-2xl", authShadow ? "shadow-[0_25px_80px_-20px_rgba(0,0,0,0.4),0_10px_30px_-10px_rgba(0,0,0,0.25)]" : "shadow-md", wide && "max-w-[560px] p-8", compact && "max-w-[400px] p-6", !wide && !compact && "max-w-[520px] p-10", interactive && "ds-card-interactive cursor-pointer", className),
193
+ className: cx("w-full bg-[var(--theme-card-bg)] backdrop-blur-xl border border-[var(--theme-border)] rounded-2xl", authShadow ? "shadow-[var(--theme-auth-shadow)]" : "shadow-[var(--theme-shadow)]", wide && "max-w-[560px] p-8", compact && "max-w-[400px] p-6", !wide && !compact && "max-w-[520px] p-10", interactive && "ds-card-interactive cursor-pointer", className),
192
194
  children
193
195
  });
194
196
  }
@@ -535,4 +537,228 @@ function SettingModeOption({ name, checked, onSelect, label, description, isFirs
535
537
  });
536
538
  }
537
539
  //#endregion
538
- export { AddMenu, BareModal, Button, Callout, Card, CardHeader, CompactTable, ConfirmModal, ControlledCollapsiblePanel, CopyCodeBlock, CopyToClipboard, CreateModal, CreateModalAutocompleteField, CreateModalField, CreateModalSelect, CreateModalSwitch, CreateModalTextarea, CustomListbox, DEFAULT_PRESET, DescriptionList, DescriptionListItem, Dropdown, DropdownCaret, EmptyState, Filter, FilterPill, GlobalTooltip, IconButton, Indicator, Input, LetterBadge, Loader, Markdown, MaybeCollapsible, MethodButton, MultiSelectDropdown, Overview, Pagination, SectionHeader, SettingModeOption, SettingRow, SettingSection, SettingsCard, SettingsGroup, Sort, StatusBadge, StatusDot, SwitchToggle, SwitchToggleSmall, THEME_PRESETS, THEME_TOKENS, TOOLTIP_ID, Table, Textarea, Toggle, TooltipInfo, UIProvider, UncontrolledCollapsiblePanel, applyTheme, contrastRatio, dangerButtonClasses, deriveTheme, filterOption, flattenOptions, formatTooltipContent, ghostButtonClasses, inputClasses, isCategory, isDarkColor, isOption, modalPanelClasses, primaryButtonClasses, useCssIsDark, useNavigation, useNotify, useProvisionCorsRules, useRunFile, useSlots, useStrings, useWorkflowJsonResolver };
540
+ //#region src/components/Breadcrumbs.tsx
541
+ var BreadcrumbContext = createContext({
542
+ breadcrumbs: [],
543
+ setBreadcrumbs: () => {},
544
+ rightsideBreadcrumb: null,
545
+ setRightsideBreadcrumb: () => {},
546
+ hidden: false,
547
+ setHidden: () => {},
548
+ titleActionSlot: null,
549
+ setTitleActionSlot: () => {},
550
+ rightActionSlot: null,
551
+ setRightActionSlot: () => {}
552
+ });
553
+ var useBreadcrumb = () => useContext(BreadcrumbContext);
554
+ function BreadcrumbProvider({ children }) {
555
+ const [breadcrumbs, setBreadcrumbs] = React.useState([]);
556
+ const [rightsideBreadcrumb, setRightsideBreadcrumb] = React.useState(null);
557
+ const [hidden, setHidden] = React.useState(false);
558
+ const [titleActionSlot, setTitleActionSlot] = React.useState(null);
559
+ const [rightActionSlot, setRightActionSlot] = React.useState(null);
560
+ return /* @__PURE__ */ jsx(BreadcrumbContext.Provider, {
561
+ value: {
562
+ breadcrumbs,
563
+ setBreadcrumbs,
564
+ rightsideBreadcrumb,
565
+ setRightsideBreadcrumb,
566
+ hidden,
567
+ setHidden,
568
+ titleActionSlot,
569
+ setTitleActionSlot,
570
+ rightActionSlot,
571
+ setRightActionSlot
572
+ },
573
+ children
574
+ });
575
+ }
576
+ function useSetBreadcrumbs(getBreadcrumbs) {
577
+ const { setBreadcrumbs } = useBreadcrumb();
578
+ useLayoutEffect(() => {
579
+ setBreadcrumbs(typeof getBreadcrumbs === "function" ? getBreadcrumbs() : getBreadcrumbs);
580
+ }, [getBreadcrumbs, setBreadcrumbs]);
581
+ }
582
+ var EMPTY_BREADCRUMBS = [];
583
+ /** For pages that render their own header instead of the breadcrumb strip. */
584
+ function useClearBreadcrumbs() {
585
+ useSetBreadcrumbs(EMPTY_BREADCRUMBS);
586
+ }
587
+ function useHideBreadcrumbs(hidden) {
588
+ const { setHidden } = useBreadcrumb();
589
+ useEffect(() => {
590
+ setHidden(hidden);
591
+ return () => setHidden(false);
592
+ }, [hidden, setHidden]);
593
+ }
594
+ //#endregion
595
+ //#region src/components/PageHeader.tsx
596
+ var headerActionButtonClasses = "flex items-center justify-center w-6 h-6 rounded-md shrink-0 cursor-pointer text-(--theme-muted-text-color) hover:text-(--theme-app) hover:bg-(--theme-muted-panel-bg) transition-colors";
597
+ var headerAddButtonClasses = "inline-flex h-[26px] shrink-0 items-center gap-1.5 rounded-md border border-(--theme-border) px-2 text-xs font-medium cursor-pointer text-(--theme-muted-text-color) hover:bg-(--theme-muted-panel-bg) hover:text-(--theme-app) transition-colors";
598
+ /** With menu, the plus opens a chooser; otherwise navigates to or calls the
599
+ * single action. `word` is the visible verb; `label` stays the full action for
600
+ * the tooltip and screen readers. */
601
+ function HeaderAddButton({ to, onClick, label, word = "add", menu }) {
602
+ const { common } = useStrings();
603
+ const Link = useLink();
604
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(AddIcon, { className: "w-3 h-3" }), /* @__PURE__ */ jsx("span", { children: word === "create" ? common.create : common.add })] });
605
+ if (menu) return /* @__PURE__ */ jsx(AddMenu, {
606
+ items: menu,
607
+ label,
608
+ buttonClassName: headerAddButtonClasses,
609
+ children: content
610
+ });
611
+ if (to) return /* @__PURE__ */ jsx(Link, {
612
+ to,
613
+ "aria-label": label,
614
+ title: label,
615
+ className: headerAddButtonClasses,
616
+ children: content
617
+ });
618
+ return /* @__PURE__ */ jsx("button", {
619
+ type: "button",
620
+ onClick,
621
+ "aria-label": label,
622
+ title: label,
623
+ className: headerAddButtonClasses,
624
+ children: content
625
+ });
626
+ }
627
+ function HeaderActionMenu({ items, label = "Actions" }) {
628
+ if (items.length === 0) return null;
629
+ return /* @__PURE__ */ jsx(AddMenu, {
630
+ items,
631
+ label,
632
+ buttonClassName: headerActionButtonClasses,
633
+ children: /* @__PURE__ */ jsx(MoreIcon, { className: "w-3.5 h-3.5" })
634
+ });
635
+ }
636
+ /** The header "…" trigger for a RowMenuItem menu — same rendering (submenus,
637
+ * destructive styling) as the list pages' right-click context menus. */
638
+ function HeaderRowMenu({ items, label = "Actions" }) {
639
+ const { openMenu, contextMenu } = useRowMenu();
640
+ if (items.length === 0) return null;
641
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("button", {
642
+ type: "button",
643
+ "aria-label": label,
644
+ title: label,
645
+ className: headerActionButtonClasses,
646
+ onClick: (e) => {
647
+ const r = e.currentTarget.getBoundingClientRect();
648
+ openMenu(r.left, r.bottom + 4, items);
649
+ },
650
+ children: /* @__PURE__ */ jsx(MoreIcon, { className: "w-3.5 h-3.5" })
651
+ }), contextMenu] });
652
+ }
653
+ function HeaderEditButton({ to, onClick, label = "Edit", disabled, tooltip }) {
654
+ const Link = useLink();
655
+ const tooltipProps = tooltip ? {
656
+ "data-tooltip-id": TOOLTIP_ID,
657
+ "data-tooltip-content": tooltip
658
+ } : {};
659
+ if (to && !disabled) return /* @__PURE__ */ jsx(Link, {
660
+ to,
661
+ "aria-label": label,
662
+ ...tooltip ? {} : { title: label },
663
+ className: headerActionButtonClasses,
664
+ ...tooltipProps,
665
+ children: /* @__PURE__ */ jsx(EditIcon, { className: "w-3 h-3" })
666
+ });
667
+ return /* @__PURE__ */ jsx("button", {
668
+ type: "button",
669
+ onClick,
670
+ disabled,
671
+ "aria-label": label,
672
+ title: tooltip ? void 0 : label,
673
+ className: cx(headerActionButtonClasses, disabled && "opacity-50 cursor-not-allowed hover:bg-transparent"),
674
+ ...tooltipProps,
675
+ children: /* @__PURE__ */ jsx(EditIcon, { className: "w-3 h-3" })
676
+ });
677
+ }
678
+ /** Renders nothing when the modern breadcrumb strip isn't mounted (classic chrome or self-headered pages). */
679
+ function BreadcrumbsTitleAction({ children }) {
680
+ const { titleActionSlot } = useBreadcrumb();
681
+ if (!titleActionSlot) return null;
682
+ return createPortal(children, titleActionSlot);
683
+ }
684
+ function BreadcrumbsRightAction({ children }) {
685
+ const { rightActionSlot } = useBreadcrumb();
686
+ if (!rightActionSlot) return null;
687
+ return createPortal(children, rightActionSlot);
688
+ }
689
+ var breadcrumbsActionClasses = "flex items-center gap-1 link text-xs whitespace-nowrap disabled:opacity-50 disabled:cursor-not-allowed";
690
+ function BreadcrumbsActionButton({ icon: Icon, label, to, onClick, disabled, tooltip }) {
691
+ const Link = useLink();
692
+ const tip = tooltip ? {
693
+ "data-tooltip-id": TOOLTIP_ID,
694
+ "data-tooltip-content": tooltip
695
+ } : {};
696
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Icon, { className: "w-3 h-3" }), label] });
697
+ if (to && !disabled) return /* @__PURE__ */ jsx(Link, {
698
+ to,
699
+ className: breadcrumbsActionClasses,
700
+ ...tip,
701
+ children: content
702
+ });
703
+ return /* @__PURE__ */ jsx("button", {
704
+ type: "button",
705
+ onClick,
706
+ disabled,
707
+ className: breadcrumbsActionClasses,
708
+ ...tip,
709
+ children: content
710
+ });
711
+ }
712
+ function PageHeader({ breadcrumbs, title, titleAction, actions, toolbar, className, sticky = true, stickyTopClassName = "top-0" }) {
713
+ const { setHidden } = useBreadcrumb();
714
+ const Link = useLink();
715
+ const { breadcrumbPin } = useSlots();
716
+ useLayoutEffect(() => {
717
+ setHidden(true);
718
+ return () => setHidden(false);
719
+ }, [setHidden]);
720
+ const crumbs = [...breadcrumbs ?? []];
721
+ const lastLabel = crumbs[crumbs.length - 1]?.label;
722
+ if (title !== null && title !== void 0 && title !== lastLabel) crumbs.push({ label: title });
723
+ const crumbRow = crumbs.length > 0 && /* @__PURE__ */ jsxs("div", {
724
+ className: "flex items-center gap-1.5 min-w-0",
725
+ children: [
726
+ /* @__PURE__ */ jsx("nav", {
727
+ "aria-label": "Breadcrumb",
728
+ className: "flex items-center gap-2 min-w-0 text-[13px]",
729
+ children: crumbs.map((crumb, idx) => {
730
+ if (idx === crumbs.length - 1) return /* @__PURE__ */ jsx("h1", {
731
+ className: "m-0 text-[13px] font-medium leading-none text-(--theme-app) truncate",
732
+ children: crumb.label
733
+ }, `${crumb.label}-${idx}`);
734
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [crumb.href ? /* @__PURE__ */ jsx(Link, {
735
+ to: crumb.href,
736
+ className: "text-(--theme-muted-text-color) hover:text-(--theme-app) transition-colors cursor-pointer whitespace-nowrap",
737
+ children: crumb.label
738
+ }) : /* @__PURE__ */ jsx("span", {
739
+ className: "text-(--theme-muted-text-color) whitespace-nowrap",
740
+ children: crumb.label
741
+ }), /* @__PURE__ */ jsx(ChevronRightIcon, { className: "w-3 h-3 opacity-60 shrink-0 text-(--theme-muted-text-color)" })] }, `${crumb.label}-${idx}`);
742
+ })
743
+ }),
744
+ titleAction,
745
+ breadcrumbPin?.({ crumbs })
746
+ ]
747
+ });
748
+ const actionCluster = actions && /* @__PURE__ */ jsx("div", {
749
+ className: "flex items-center gap-1.5 shrink-0",
750
+ children: actions
751
+ });
752
+ return /* @__PURE__ */ jsxs("div", {
753
+ className: cx(sticky && cx("sticky z-20", stickyTopClassName), "w-full bg-(--theme-app-bg)", className),
754
+ children: [/* @__PURE__ */ jsxs("div", {
755
+ className: cx("flex items-center justify-between gap-6 px-4 h-11", crumbRow && "border-b border-(--theme-border)"),
756
+ children: [crumbRow || /* @__PURE__ */ jsx("div", {}), actionCluster]
757
+ }), toolbar && /* @__PURE__ */ jsx("div", {
758
+ className: "px-4",
759
+ children: toolbar
760
+ })]
761
+ });
762
+ }
763
+ //#endregion
764
+ export { AddMenu, BareModal, BreadcrumbProvider, BreadcrumbsActionButton, BreadcrumbsRightAction, BreadcrumbsTitleAction, Button, Callout, Card, CardHeader, CompactTable, ConfirmModal, ControlledCollapsiblePanel, CopyCodeBlock, CopyToClipboard, CreateModal, CreateModalAutocompleteField, CreateModalField, CreateModalSelect, CreateModalSwitch, CreateModalTextarea, CustomListbox, DEFAULT_PRESET, DescriptionList, DescriptionListItem, Dropdown, DropdownCaret, EmptyState, Filter, FilterPill, GlobalTooltip, HeaderActionMenu, HeaderAddButton, HeaderEditButton, HeaderRowMenu, IconButton, Indicator, Input, LetterBadge, Loader, Markdown, MaybeCollapsible, MethodButton, MultiSelectDropdown, Overview, PageHeader, Pagination, SectionHeader, SettingModeOption, SettingRow, SettingSection, SettingsCard, SettingsGroup, Sort, StatusBadge, StatusDot, SwitchToggle, SwitchToggleSmall, THEME_PRESETS, THEME_TOKENS, TOOLTIP_ID, Table, Textarea, Toggle, TooltipInfo, UIProvider, UncontrolledCollapsiblePanel, applyTheme, contrastRatio, dangerButtonClasses, deriveTheme, filterOption, flattenOptions, formatTooltipContent, ghostButtonClasses, inputClasses, isCategory, isDarkColor, isOption, modalPanelClasses, primaryButtonClasses, useBreadcrumb, useClearBreadcrumbs, useCssIsDark, useHideBreadcrumbs, useNavigation, useNotify, useProvisionCorsRules, useRunFile, useSetBreadcrumbs, useSlots, useStrings, useWorkflowJsonResolver };
@@ -1,2 +1,3 @@
1
- import { A as useRowMenu, C as listTableProps, D as rowContextMenuProps, E as copySubmenu, O as toRowMenuItem, S as listTableFixedProps, T as assembleRowMenu, _ as ListSkeleton, a as ListSearchControl, b as RowSelectCheckbox, c as ListFilterMenu, d as DEFAULT_ORDER, f as FAVORITE_ORDER, g as ListError, h as ListActionsHeader, i as ListCount, j as useRowMenuActive, k as toolbarActionToRowAction, l as listControlButtonClasses, m as GroupRow, n as useHoverCard, o as useListSearch, p as useListView, r as ListPager, s as ListDisplayMenu, t as HoverCardSurface, u as isTextEntryContext, v as NAME_MIN_WIDTH_PX, w as MoreButton, x as actionsColumnWidth, y as NameCell } from "../chunks/list-CvDWt0TC.js";
1
+ import { a as toRowMenuItem, c as useRowMenuActive, i as rowContextMenuProps, n as assembleRowMenu, o as toolbarActionToRowAction, r as copySubmenu, s as useRowMenu, t as MoreButton } from "../chunks/RowContextMenu-D3G3DPQk.js";
2
+ import { C as listTableProps, S as listTableFixedProps, _ as ListSkeleton, a as ListSearchControl, b as RowSelectCheckbox, c as ListFilterMenu, d as DEFAULT_ORDER, f as FAVORITE_ORDER, g as ListError, h as ListActionsHeader, i as ListCount, l as listControlButtonClasses, m as GroupRow, n as useHoverCard, o as useListSearch, p as useListView, r as ListPager, s as ListDisplayMenu, t as HoverCardSurface, u as isTextEntryContext, v as NAME_MIN_WIDTH_PX, x as actionsColumnWidth, y as NameCell } from "../chunks/list-CGbR-ueU.js";
2
3
  export { DEFAULT_ORDER, FAVORITE_ORDER, GroupRow, HoverCardSurface, ListActionsHeader, ListCount, ListDisplayMenu, ListError, ListFilterMenu, ListPager, ListSearchControl, ListSkeleton, MoreButton, NAME_MIN_WIDTH_PX, NameCell, RowSelectCheckbox, actionsColumnWidth, assembleRowMenu, copySubmenu, isTextEntryContext, listControlButtonClasses, listTableFixedProps, listTableProps, rowContextMenuProps, toRowMenuItem, toolbarActionToRowAction, useHoverCard, useListSearch, useListView, useRowMenu, useRowMenuActive };
@@ -1,5 +1,5 @@
1
1
  import { ArrowDownIcon, ArrowUpIcon, CheckIcon, ChevronDownIcon, ChevronRightIcon, CopyIcon, DownloadIcon, ExpandIcon, ShrinkIcon, XIcon } from "../icons.js";
2
- import { c as useStrings, i as useNotify } from "../chunks/Provider-jQCAN3NN.js";
2
+ import { c as useStrings, i as useNotify } from "../chunks/Provider-wC9G01Ou.js";
3
3
  import cx from "classnames";
4
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
5
  import { Fragment as Fragment$1, memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -46,6 +46,7 @@
46
46
  --theme-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04);
47
47
  --theme-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.07), 0 2px 4px -2px rgba(0, 0, 0, 0.05);
48
48
  --theme-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.08), 0 4px 6px -4px rgba(0, 0, 0, 0.04);
49
+ --theme-auth-shadow: 0 25px 80px -20px rgba(0, 0, 0, 0.2), 0 10px 30px -10px rgba(0, 0, 0, 0.1);
49
50
  }
50
51
 
51
52
  @utility theme-element {