@gravitee/graphene-core 2.36.3-feat-password-input.378c7c6 → 2.36.3-feat-password-input.3dc4ccb

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/USAGE_GUIDE.md CHANGED
@@ -410,6 +410,7 @@ A few cases worth remembering:
410
410
  - **`RadioGroup` exposes two harnesses** — `radioGroupHarness` (group-level: `select(value)`, `getValue`, `getOptions`) and `radioHarness` (single radio: `select`, `isSelected`, `getValue`).
411
411
  - **`Table` returns a row sub-harness** — `tableHarness().getRow(matcher)` returns a `TableRowHarness` exposing `getCells`, `getCellText(header)`, `getCellElement(header)`. The cell element is the hook to scope another harness inside a specific row (see the **Tables** section below).
412
412
  - **`DataTable` is composed but exported via `/testing`** — most harnesses are for base primitives, but `dataTableHarness` is exposed because it adds sorting, selection, empty/loading state on top of the inner `<Table>`. Its rows extend `TableRowHarness` with `isSelected`, `select`, `unselect`.
413
+ - **`PasswordInput` is composed but exported via `/testing`** — `passwordInputHarness` wraps the inner `<input>` and its reveal toggle so you don't have to know the internal `data-slot`. Adds `toggle()`, `isMasked()`, `isRevealed()`, `hasToggle()`, `getToggleLabel()`, `isToggleDisabled()` on top of the usual `type`/`getValue`/`isDisabled`.
413
414
  - **Static primitives have no harness** — `Badge`, `Card`, `Skeleton`, `Avatar`, `Spinner`, `Separator`, `Label`, `Kbd`, `Alert`, etc. carry no behavior to drive. Query them directly with RTL's `getByRole` / `getByText`.
414
415
 
415
416
  ### Async data — wait before attaching
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordInput.d.ts","sourceRoot":"","sources":["../../../src/composed/PasswordInput/PasswordInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,UAAU,kBAAmB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC9E,sFAAsF;IACtF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,iGAAiG;IACjG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,kGAAkG;IAClG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,gEAAgE;IAChE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,iBAAS,aAAa,CAAC,EACrB,cAAc,EACd,SAA2B,EAC3B,SAA2B,EAC3B,UAAkB,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,kBAAkB,2CA+BpB;kBAvCQ,aAAa;;;AA2CtB,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"PasswordInput.d.ts","sourceRoot":"","sources":["../../../src/composed/PasswordInput/PasswordInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,UAAU,kBAAmB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC9E,sFAAsF;IACtF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,iGAAiG;IACjG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,kGAAkG;IAClG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,gEAAgE;IAChE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,iBAAS,aAAa,CAAC,EACrB,cAAc,EACd,SAA2B,EAC3B,SAA2B,EAC3B,UAAkB,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,kBAAkB,2CA2BpB;kBAnCQ,aAAa;;;AAuCtB,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { HarnessQuery } from '../../testing/harnessQuery';
2
+ interface PasswordInputHarness {
3
+ readonly type: (value: string) => Promise<void>;
4
+ readonly clear: () => Promise<void>;
5
+ readonly toggle: () => Promise<void>;
6
+ readonly getElement: () => HTMLInputElement;
7
+ readonly getValue: () => string;
8
+ readonly isMasked: () => boolean;
9
+ readonly isRevealed: () => boolean;
10
+ readonly hasToggle: () => boolean;
11
+ readonly getToggle: () => HTMLButtonElement;
12
+ readonly getToggleLabel: () => string | null;
13
+ readonly isToggleDisabled: () => boolean;
14
+ readonly isDisabled: () => boolean;
15
+ }
16
+ declare function passwordInputHarness(query?: HarnessQuery): PasswordInputHarness;
17
+ export { passwordInputHarness };
18
+ export type { PasswordInputHarness };
19
+ //# sourceMappingURL=PasswordInput.harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasswordInput.harness.d.ts","sourceRoot":"","sources":["../../../src/composed/PasswordInput/PasswordInput.harness.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,8CAA8C,CAAC;AAEjF,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,iBAAiB,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,OAAO,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC;CACpC;AAED,iBAAS,oBAAoB,CAAC,KAAK,GAAE,YAAiB,GAAG,oBAAoB,CA+B5E;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAChC,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -30480,10 +30480,7 @@ function $K({ groupClassName: e, showLabel: t = "Show password", hideLabel: n =
30480
30480
  "aria-pressed": s,
30481
30481
  disabled: a,
30482
30482
  onClick: () => c((e) => !e),
30483
- children: W(s ? m : f, {
30484
- className: "size-4",
30485
- "aria-hidden": "true"
30486
- })
30483
+ children: W(s ? m : f, { "aria-hidden": "true" })
30487
30484
  })
30488
30485
  })]
30489
30486
  });
@@ -19,4 +19,6 @@ export { textareaHarness } from '../base/Textarea/Textarea.harness';
19
19
  export type { TextareaHarness } from '../base/Textarea/Textarea.harness';
20
20
  export { dataTableHarness } from '../composed/DataTable/DataTable.harness';
21
21
  export type { DataTableHarness, DataTableRowHarness, } from '../composed/DataTable/DataTable.harness';
22
+ export { passwordInputHarness } from '../composed/PasswordInput/PasswordInput.harness';
23
+ export type { PasswordInputHarness } from '../composed/PasswordInput/PasswordInput.harness';
22
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACnF,YAAY,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AACzF,YAAY,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAChF,YAAY,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,4DAA4D,CAAC;AAC7G,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,4DAA4D,CAAC;AAClH,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACnF,YAAY,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACnF,YAAY,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAChF,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACtG,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AACzF,YAAY,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AAE9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AAChG,YAAY,EACV,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,8DAA8D,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACnF,YAAY,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AACzF,YAAY,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAChF,YAAY,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,4DAA4D,CAAC;AAC7G,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,4DAA4D,CAAC;AAClH,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACnF,YAAY,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACnF,YAAY,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAChF,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACtG,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AACzF,YAAY,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AAE9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AAChG,YAAY,EACV,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,8DAA8D,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sEAAsE,CAAC;AAC5G,YAAY,EAAE,oBAAoB,EAAE,MAAM,sEAAsE,CAAC"}
@@ -345,4 +345,27 @@ function E(e = {}) {
345
345
  };
346
346
  }
347
347
  //#endregion
348
- export { l as buttonHarness, u as checkboxHarness, E as dataTableHarness, d as inputHarness, p as radioGroupHarness, m as radioHarness, o as renderWithGraphene, h as selectHarness, g as switchHarness, S as tableHarness, w as textareaHarness };
348
+ //#region src/composed/PasswordInput/PasswordInput.harness.tsx
349
+ function D(e = {}) {
350
+ let t = d(e), n = a.setup(), r = () => t.getElement().closest("[data-slot=\"input-group\"]")?.querySelector("[data-slot=\"password-toggle\"]") ?? null, i = () => {
351
+ let e = r();
352
+ if (e === null) throw Error("passwordInputHarness: no reveal toggle found (rendered with hideToggle?)");
353
+ return e;
354
+ };
355
+ return {
356
+ type: t.type,
357
+ clear: t.clear,
358
+ toggle: () => n.click(i()),
359
+ getElement: t.getElement,
360
+ getValue: t.getValue,
361
+ isMasked: () => t.getType() === "password",
362
+ isRevealed: () => t.getType() === "text",
363
+ hasToggle: () => r() !== null,
364
+ getToggle: i,
365
+ getToggleLabel: () => i().getAttribute("aria-label"),
366
+ isToggleDisabled: () => i().disabled,
367
+ isDisabled: t.isDisabled
368
+ };
369
+ }
370
+ //#endregion
371
+ export { l as buttonHarness, u as checkboxHarness, E as dataTableHarness, d as inputHarness, D as passwordInputHarness, p as radioGroupHarness, m as radioHarness, o as renderWithGraphene, h as selectHarness, g as switchHarness, S as tableHarness, w as textareaHarness };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravitee/graphene-core",
3
- "version": "2.36.3-feat-password-input.378c7c6",
3
+ "version": "2.36.3-feat-password-input.3dc4ccb",
4
4
  "type": "module",
5
5
  "description": "Gravitee's Graphene design system: accessible React components, design tokens, icons, and shared ESLint/TypeScript configs. Built on shadcn/ui and Tailwind.",
6
6
  "keywords": [
@@ -91,7 +91,7 @@
91
91
  },
92
92
  "peerDependencies": {
93
93
  "@fontsource/dm-sans": ">=5.0.0",
94
- "@gravitee/graphene-core": "2.36.3-feat-password-input.378c7c6",
94
+ "@gravitee/graphene-core": "2.36.3-feat-password-input.3dc4ccb",
95
95
  "@tanstack/react-table": "^8.0.0",
96
96
  "@testing-library/dom": ">=10.0.0",
97
97
  "@testing-library/react": ">=16.0.0",