@estiva-app/ui 0.35.2 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/eslint/escape.d.ts +23 -6
- package/dist/eslint/escape.d.ts.map +1 -1
- package/dist/eslint/index.js +70 -9
- package/dist/eslint/index.js.map +2 -2
- package/dist/eslint/no-raw-element.d.ts +7 -0
- package/dist/eslint/no-raw-element.d.ts.map +1 -1
- package/dist/eslint/no-restyled-part.d.ts +8 -0
- package/dist/eslint/no-restyled-part.d.ts.map +1 -1
- package/dist/gates/app-checks.d.ts.map +1 -1
- package/dist/gates/{chunk-DRIHHXQK.js → chunk-CC6L4B5U.js} +23 -17
- package/dist/gates/chunk-CC6L4B5U.js.map +7 -0
- package/dist/gates/chunk-SYVKGOWM.js +1131 -0
- package/dist/gates/chunk-SYVKGOWM.js.map +7 -0
- package/dist/gates/ci.d.ts +18 -0
- package/dist/gates/ci.d.ts.map +1 -0
- package/dist/gates/cli.js +20 -3
- package/dist/gates/cli.js.map +2 -2
- package/dist/gates/create-app.d.ts.map +1 -1
- package/dist/gates/create-app.js +1 -1
- package/dist/gates/escapes.d.ts +23 -0
- package/dist/gates/escapes.d.ts.map +1 -0
- package/dist/gates/gate-config.d.ts.map +1 -1
- package/dist/gates/hook.d.ts +2 -0
- package/dist/gates/hook.d.ts.map +1 -1
- package/dist/gates/index.d.ts +5 -1
- package/dist/gates/index.d.ts.map +1 -1
- package/dist/gates/index.js +37 -183
- package/dist/gates/index.js.map +4 -4
- package/dist/gates/name-escapes.d.ts +14 -0
- package/dist/gates/name-escapes.d.ts.map +1 -0
- package/dist/gates/status.d.ts +3 -1
- package/dist/gates/status.d.ts.map +1 -1
- package/dist/gates/token-lint.d.ts.map +1 -1
- package/dist/gates/token-style.d.ts +21 -0
- package/dist/gates/token-style.d.ts.map +1 -0
- package/dist/index.js +13 -13
- package/dist/index.js.map +1 -1
- package/dist/registry/{app-3ALZE6XO.js → app-YMABQII6.js} +3 -3
- package/dist/registry/app.d.ts.map +1 -1
- package/dist/registry/behaviours.d.ts +71 -0
- package/dist/registry/behaviours.d.ts.map +1 -0
- package/dist/registry/{build-NDXMVFQ5.js → build-3EANARLQ.js} +2 -2
- package/dist/registry/build.d.ts.map +1 -1
- package/dist/registry/{chunk-3WJ7ZZ7Z.js → chunk-EVJW26UR.js} +51 -4
- package/dist/registry/chunk-EVJW26UR.js.map +7 -0
- package/dist/registry/{chunk-XVII7P6G.js → chunk-SIB44CES.js} +276 -90
- package/dist/registry/chunk-SIB44CES.js.map +7 -0
- package/dist/registry/{chunk-5K2TRR4X.js → chunk-XK747STJ.js} +18 -3
- package/dist/registry/chunk-XK747STJ.js.map +7 -0
- package/dist/registry/cli.js +7 -6
- package/dist/registry/cli.js.map +2 -2
- package/dist/registry/contract.d.ts +13 -1
- package/dist/registry/contract.d.ts.map +1 -1
- package/dist/registry/index.d.ts +1 -1
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +11 -5
- package/package.json +4 -1
- package/registry.json +293 -17
- package/skill/estiva-ui.md +2 -1
- package/src/AppShell.mdx +2 -1
- package/src/AttachmentCard.tsx +7 -7
- package/src/Button.tsx +1 -1
- package/src/Card.tsx +2 -2
- package/src/ChipInput.mdx +2 -0
- package/src/ChipInput.tsx +1 -1
- package/src/CommandPalette.tsx +3 -3
- package/src/DialogShell.tsx +1 -1
- package/src/EmptyState.mdx +4 -3
- package/src/Lightbox.tsx +1 -1
- package/src/NavItem.tsx +1 -1
- package/src/PersonTrigger.tsx +1 -1
- package/src/Reaction.tsx +1 -1
- package/src/ScrollArea.mdx +4 -0
- package/src/Select.tsx +1 -1
- package/src/TopBar.mdx +1 -1
- package/src/eslint/escape.ts +43 -14
- package/src/eslint/has-a-page-and-a-story.test.ts +1 -1
- package/src/eslint/index.test.ts +2 -2
- package/src/eslint/no-copied-look.test.ts +1 -1
- package/src/eslint/no-hand-rolled-behaviour.test.ts +3 -3
- package/src/eslint/no-handmade-empty-state.test.ts +2 -2
- package/src/eslint/no-handmade-header.test.ts +2 -2
- package/src/eslint/no-native-title.test.ts +2 -2
- package/src/eslint/no-raw-element.test.ts +47 -15
- package/src/eslint/no-raw-element.ts +53 -3
- package/src/eslint/no-rebuilt-behaviour.test.ts +9 -9
- package/src/eslint/no-restyled-part.test.ts +21 -2
- package/src/eslint/no-restyled-part.ts +30 -0
- package/src/eslint/raw-element-outside-a-wrapper.test.ts +3 -3
- package/src/gates/app-checks.ts +4 -3
- package/src/gates/ci.ts +152 -0
- package/src/gates/cli.ts +19 -3
- package/src/gates/count.ts +1 -1
- package/src/gates/create-app.test.ts +2 -2
- package/src/gates/create-app.ts +22 -16
- package/src/gates/escapes.ts +111 -0
- package/src/gates/gate-config.ts +2 -0
- package/src/gates/gates.test.ts +86 -1
- package/src/gates/hook.ts +38 -4
- package/src/gates/index.ts +5 -1
- package/src/gates/name-escapes.ts +77 -0
- package/src/gates/status.ts +45 -2
- package/src/gates/token-lint.ts +11 -4
- package/src/gates/token-style.ts +79 -0
- package/src/how.test.ts +282 -0
- package/src/pages.test.ts +6 -0
- package/src/registry/app.test.ts +34 -0
- package/src/registry/app.ts +52 -2
- package/src/registry/behaviours.ts +223 -0
- package/src/registry/build.ts +36 -0
- package/src/registry/cli.ts +5 -3
- package/src/registry/contract.test.ts +27 -2
- package/src/registry/contract.ts +28 -3
- package/src/registry/index.ts +1 -1
- package/src/registry/registry.test.ts +14 -0
- package/dist/gates/chunk-DBMUQAR6.js +0 -607
- package/dist/gates/chunk-DBMUQAR6.js.map +0 -7
- package/dist/gates/chunk-DRIHHXQK.js.map +0 -7
- package/dist/registry/chunk-3WJ7ZZ7Z.js.map +0 -7
- package/dist/registry/chunk-5K2TRR4X.js.map +0 -7
- package/dist/registry/chunk-XVII7P6G.js.map +0 -7
- /package/dist/registry/{app-3ALZE6XO.js.map → app-YMABQII6.js.map} +0 -0
- /package/dist/registry/{build-NDXMVFQ5.js.map → build-3EANARLQ.js.map} +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The token contract's inline-style check, where a selector cannot reach
|
|
3
|
+
* (the second review's R9, 25 September). `no-restricted-syntax` reads a
|
|
4
|
+
* `style={{ … }}` written in place; a style kept in a `const` and passed by name
|
|
5
|
+
* got through every lint in all three repos:
|
|
6
|
+
*
|
|
7
|
+
* const look = { background: 'red' }
|
|
8
|
+
* <div style={look} />
|
|
9
|
+
*
|
|
10
|
+
* This follows the name to its `const` in the same file and reads the keys
|
|
11
|
+
* there, quoted or not. It reports on the key, where the value is written, so
|
|
12
|
+
* an escape sits beside it. A style the code works out while it runs passes:
|
|
13
|
+
* nothing can read it.
|
|
14
|
+
*/
|
|
15
|
+
import type { ESLint } from 'eslint';
|
|
16
|
+
/** The style keys outside the token contract: colours, a font size, borders and shadows. */
|
|
17
|
+
export declare const INLINE_STYLE_TOKEN_KEYS: RegExp;
|
|
18
|
+
export declare const INLINE_STYLE_MESSAGE = "An inline style that sets a colour, a font size, a border or a shadow is outside the token contract: use a token class. If the value is computed (a palette, a size from a prop), say why in an eslint-disable comment. Width, height and transforms are fine.";
|
|
19
|
+
/** The plugin, as the token lint registers it: `token-style/no-token-style`. */
|
|
20
|
+
export declare const tokenStylePlugin: ESLint.Plugin;
|
|
21
|
+
//# sourceMappingURL=token-style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-style.d.ts","sourceRoot":"","sources":["../../src/gates/token-style.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,QAAQ,CAAA;AAEjD,4FAA4F;AAC5F,eAAO,MAAM,uBAAuB,QAAoM,CAAA;AAExO,eAAO,MAAM,oBAAoB,mQACiO,CAAA;AAwDlQ,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAsD,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -244,12 +244,12 @@ function Card({
|
|
|
244
244
|
if (href !== void 0) {
|
|
245
245
|
const { ref, ...anchorProps } = props;
|
|
246
246
|
return (
|
|
247
|
-
// @estiva-escape: a card that leads somewhere is drawn on Link's anchor (UIG-27 ruling 1), so this frame is Card's own look, not Link restyled
|
|
247
|
+
// @estiva-escape(no-copied-look, no-restyled-part): a card that leads somewhere is drawn on Link's anchor (UIG-27 ruling 1), so this frame is Card's own look, not Link restyled
|
|
248
248
|
/* @__PURE__ */ jsx5(Link, { href, variant: "plain", ref, className: classes, ...anchorProps, children })
|
|
249
249
|
);
|
|
250
250
|
}
|
|
251
251
|
return (
|
|
252
|
-
// @estiva-escape: N6 (Katerina, 24 September: leave alone): a card that cuts its content to its corners shares four words with the palette's window by coincidence
|
|
252
|
+
// @estiva-escape(no-copied-look): N6 (Katerina, 24 September: leave alone): a card that cuts its content to its corners shares four words with the palette's window by coincidence
|
|
253
253
|
/* @__PURE__ */ jsx5("div", { className: classes, ...props, children })
|
|
254
254
|
);
|
|
255
255
|
}
|
|
@@ -632,7 +632,7 @@ function AttachmentCard({
|
|
|
632
632
|
const failed = state === "failed";
|
|
633
633
|
const warning = state === "warning";
|
|
634
634
|
return (
|
|
635
|
-
// @estiva-escape: a failed or warning file's strong hairline is AttachmentCard's own state; Card's attention hairlines are the soft ones (UIG-9, Katerina 17 September)
|
|
635
|
+
// @estiva-escape(no-restyled-part): a failed or warning file's strong hairline is AttachmentCard's own state; Card's attention hairlines are the soft ones (UIG-9, Katerina 17 September)
|
|
636
636
|
/* @__PURE__ */ jsxs6(
|
|
637
637
|
Card,
|
|
638
638
|
{
|
|
@@ -652,7 +652,7 @@ function AttachmentCard({
|
|
|
652
652
|
}
|
|
653
653
|
)
|
|
654
654
|
] }),
|
|
655
|
-
onRemove && // @estiva-escape: N4 (Katerina, 24 September: record only): the small round button Lightbox's close also draws; a part if a third appears
|
|
655
|
+
onRemove && // @estiva-escape(no-copied-look): N4 (Katerina, 24 September: record only): the small round button Lightbox's close also draws; a part if a third appears
|
|
656
656
|
/* @__PURE__ */ jsx10(
|
|
657
657
|
BaseButton2,
|
|
658
658
|
{
|
|
@@ -672,7 +672,7 @@ function AttachmentCard({
|
|
|
672
672
|
);
|
|
673
673
|
}
|
|
674
674
|
const downloadControl = saving ? (
|
|
675
|
-
// @estiva-escape: Download shows when its card is pointed at or focused, AttachmentCard's own action; IconButton has no reveal on its card's hover (UIG-9, Katerina 17 September)
|
|
675
|
+
// @estiva-escape(no-restyled-part): Download shows when its card is pointed at or focused, AttachmentCard's own action; IconButton has no reveal on its card's hover (UIG-9, Katerina 17 September)
|
|
676
676
|
/* @__PURE__ */ jsx10(
|
|
677
677
|
IconButton,
|
|
678
678
|
{
|
|
@@ -692,13 +692,13 @@ function AttachmentCard({
|
|
|
692
692
|
return (
|
|
693
693
|
// `role="status"`: a plain box may not carry a name (axe, aria-prohibited-attr), and a
|
|
694
694
|
// status says what it is doing — loading — to a reader that cannot see the pulse.
|
|
695
|
-
// @estiva-escape: the loading pulse is AttachmentCard's own state; Card has no loading state (UIG-9, Katerina 17 September)
|
|
695
|
+
// @estiva-escape(no-restyled-part): the loading pulse is AttachmentCard's own state; Card has no loading state (UIG-9, Katerina 17 September)
|
|
696
696
|
/* @__PURE__ */ jsx10(Card, { role: "status", fill: "inset", "aria-busy": "true", "aria-label": `Loading ${name}`, className: cn("w-[180px] h-28 animate-pulse", className), ...props, children: null })
|
|
697
697
|
);
|
|
698
698
|
}
|
|
699
699
|
if (drawnState === "unreadable") {
|
|
700
700
|
return (
|
|
701
|
-
// @estiva-escape: a file that could not be read is faded as well as dashed, AttachmentCard's own state; Card has no faded state (UIG-9, Katerina 17 September)
|
|
701
|
+
// @estiva-escape(no-restyled-part): a file that could not be read is faded as well as dashed, AttachmentCard's own state; Card has no faded state (UIG-9, Katerina 17 September)
|
|
702
702
|
/* @__PURE__ */ jsxs6(Card, { fill: "inset", unreadable: true, className: cn("flex items-center gap-2 w-[240px] p-1.5 opacity-70", className), ...props, children: [
|
|
703
703
|
/* @__PURE__ */ jsx10("div", { className: TILE_CLASSES, children: /* @__PURE__ */ jsx10(TypeIcon, { name }) }),
|
|
704
704
|
/* @__PURE__ */ jsxs6("div", { className: "flex flex-col gap-[1px] min-w-0 text-left", children: [
|
|
@@ -741,7 +741,7 @@ function AttachmentCard({
|
|
|
741
741
|
] })
|
|
742
742
|
] });
|
|
743
743
|
return (
|
|
744
|
-
// @estiva-escape: a file that cannot be opened is faded, AttachmentCard's own state; Card has no faded state (UIG-9, Katerina 17 September)
|
|
744
|
+
// @estiva-escape(no-restyled-part): a file that cannot be opened is faded, AttachmentCard's own state; Card has no faded state (UIG-9, Katerina 17 September)
|
|
745
745
|
/* @__PURE__ */ jsxs6(Card, { fill: "inset", hover: address ? "hairline" : "none", className: cn("group flex items-center gap-2 w-[240px] p-1.5 pr-1", !address && "opacity-70", className), ...props, children: [
|
|
746
746
|
address ? /* @__PURE__ */ jsx10(Link, { href: address, external: true, variant: "plain", className: "flex items-center gap-2 min-w-0 flex-1", onClick: (event) => event.stopPropagation(), children: body }) : /* @__PURE__ */ jsx10("div", { className: "flex items-center gap-2 min-w-0 flex-1", children: body }),
|
|
747
747
|
downloadControl
|
|
@@ -876,7 +876,7 @@ function Button({
|
|
|
876
876
|
size === "default" && (hasLeadingIcon ? "pl-2 pr-3" : "px-2"),
|
|
877
877
|
size === "small" && (hasLeadingIcon ? "pl-1.5 pr-2" : "px-1.5"),
|
|
878
878
|
!state.disabled && (variant === "primary" || variant === "resolve") && "bg-accent-primary hover:bg-accent-hover text-text-inverse cursor-pointer signal:font-semibold",
|
|
879
|
-
// @estiva-escape: W2 (Katerina, 24 September: leave alone): an outlined button shares four words with Reaction's pill by coincidence
|
|
879
|
+
// @estiva-escape(no-copied-look): W2 (Katerina, 24 September: leave alone): an outlined button shares four words with Reaction's pill by coincidence
|
|
880
880
|
!state.disabled && variant === "outlined" && "border border-border-default hover:bg-bg-hover text-text-primary cursor-pointer",
|
|
881
881
|
!state.disabled && variant === "muted" && "hover:bg-bg-hover text-text-primary cursor-pointer",
|
|
882
882
|
!state.disabled && variant === "destructive" && "hover:bg-error-muted text-error-default cursor-pointer",
|
|
@@ -1970,7 +1970,7 @@ function PersonTrigger({ name, picture, fallback, size, open = false, compact =
|
|
|
1970
1970
|
);
|
|
1971
1971
|
}
|
|
1972
1972
|
return (
|
|
1973
|
-
// @estiva-escape: N5 (Katerina, 24 September: record only): a row that fills on hover, as NavItem also does
|
|
1973
|
+
// @estiva-escape(no-copied-look): N5 (Katerina, 24 September: record only): a row that fills on hover, as NavItem also does
|
|
1974
1974
|
/* @__PURE__ */ jsxs21(
|
|
1975
1975
|
BaseButton5,
|
|
1976
1976
|
{
|
|
@@ -2119,7 +2119,7 @@ function Select({ value, onChange, options, size = "default", ariaLabel, placeho
|
|
|
2119
2119
|
const selected = options.find((o) => o.value === value);
|
|
2120
2120
|
const held = Boolean(disabledReason);
|
|
2121
2121
|
const trigger = (
|
|
2122
|
-
// @estiva-escape: N1 (Katerina, 24 September: record only): Select's box drops the hover while held, so it cannot take FIELD_SHELL_CLASSES as it is
|
|
2122
|
+
// @estiva-escape(no-copied-look): N1 (Katerina, 24 September: record only): Select's box drops the hover while held, so it cannot take FIELD_SHELL_CLASSES as it is
|
|
2123
2123
|
/* @__PURE__ */ jsxs23(
|
|
2124
2124
|
BaseSelect.Trigger,
|
|
2125
2125
|
{
|
|
@@ -2612,7 +2612,7 @@ function Breadcrumb({ items, className }) {
|
|
|
2612
2612
|
import { jsx as jsx41, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
2613
2613
|
function NavItem({ label, href, count, countLabel, active = false, icon, className, ...props }) {
|
|
2614
2614
|
return (
|
|
2615
|
-
// @estiva-escape: N5 (Katerina, 24 September: record only): a row that fills on hover, as PersonTrigger's row also does
|
|
2615
|
+
// @estiva-escape(no-copied-look): N5 (Katerina, 24 September: record only): a row that fills on hover, as PersonTrigger's row also does
|
|
2616
2616
|
/* @__PURE__ */ jsxs28(
|
|
2617
2617
|
"a",
|
|
2618
2618
|
{
|
|
@@ -2883,7 +2883,7 @@ import { Toggle } from "@base-ui/react/toggle";
|
|
|
2883
2883
|
import { jsx as jsx50, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
2884
2884
|
function Reaction({ emoji, count, pressed = false, className, ...props }) {
|
|
2885
2885
|
return (
|
|
2886
|
-
// @estiva-escape: W1 (Katerina, 24 September: leave alone): a reaction pill shares four words with a field's box by coincidence
|
|
2886
|
+
// @estiva-escape(no-copied-look): W1 (Katerina, 24 September: leave alone): a reaction pill shares four words with a field's box by coincidence
|
|
2887
2887
|
/* @__PURE__ */ jsxs33(
|
|
2888
2888
|
Toggle,
|
|
2889
2889
|
{
|