@hjmds/design-contracts 1.46.1 → 1.48.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/behaviors.d.ts +2 -1
- package/dist/behaviors.d.ts.map +1 -1
- package/dist/bottom-navigation.d.ts +4 -0
- package/dist/bottom-navigation.d.ts.map +1 -1
- package/dist/bottom-navigation.js +12 -0
- package/dist/bottom-navigation.js.map +1 -1
- package/dist/card.d.ts +2 -2
- package/dist/card.d.ts.map +1 -1
- package/dist/card.js +3 -2
- package/dist/card.js.map +1 -1
- package/dist/carousel.d.ts +1 -0
- package/dist/carousel.d.ts.map +1 -1
- package/dist/carousel.js +1 -0
- package/dist/carousel.js.map +1 -1
- package/dist/catalog.d.ts +151 -31
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +14 -13
- package/dist/catalog.js.map +1 -1
- package/dist/color-picker.d.ts +51 -1
- package/dist/color-picker.d.ts.map +1 -1
- package/dist/color-picker.js +56 -2
- package/dist/color-picker.js.map +1 -1
- package/dist/component-recipes.d.ts +28 -10
- package/dist/component-recipes.d.ts.map +1 -1
- package/dist/component-recipes.js +28 -20
- package/dist/component-recipes.js.map +1 -1
- package/dist/conversation-row.d.ts +1 -1
- package/dist/conversation-row.d.ts.map +1 -1
- package/dist/conversation-row.js +2 -1
- package/dist/conversation-row.js.map +1 -1
- package/dist/data-table.d.ts +12 -0
- package/dist/data-table.d.ts.map +1 -1
- package/dist/data-table.js +2 -0
- package/dist/data-table.js.map +1 -1
- package/dist/date-range.d.ts +122 -3
- package/dist/date-range.d.ts.map +1 -1
- package/dist/date-range.js +139 -5
- package/dist/date-range.js.map +1 -1
- package/dist/icon.d.ts +2 -1
- package/dist/icon.d.ts.map +1 -1
- package/dist/icon.js +2 -0
- package/dist/icon.js.map +1 -1
- package/dist/recipes.d.ts +1 -0
- package/dist/recipes.d.ts.map +1 -1
- package/dist/recipes.js +1 -0
- package/dist/recipes.js.map +1 -1
- package/dist/screen-patterns.d.ts +33 -2
- package/dist/screen-patterns.d.ts.map +1 -1
- package/dist/screen-patterns.js +27 -2
- package/dist/screen-patterns.js.map +1 -1
- package/dist/share-sheet.d.ts +115 -0
- package/dist/share-sheet.d.ts.map +1 -0
- package/dist/share-sheet.js +62 -0
- package/dist/share-sheet.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/docs/bottom-navigation.md +16 -0
- package/docs/color-picker.md +24 -19
- package/docs/dialog.md +2 -3
- package/docs/generated/component-maturity.md +12 -12
- package/docs/generated/renderer-evidence.json +71 -19
- package/docs/generated/renderer-evidence.md +15 -14
- package/docs/generated/showcase-manifest.json +35 -21
- package/docs/optional-adapters.md +21 -5
- package/docs/stable-core.md +37 -0
- package/docs/usage/README.md +14 -10
- package/docs/usage/SELECTION.md +109 -0
- package/docs/usage/components/avatar.md +31 -6
- package/docs/usage/components/badge.md +10 -1
- package/docs/usage/components/bottom-navigation.md +16 -0
- package/docs/usage/components/button.md +11 -0
- package/docs/usage/components/card.md +6 -0
- package/docs/usage/components/chat-message.md +9 -1
- package/docs/usage/components/chat-room-members.md +4 -0
- package/docs/usage/components/chat-screen.md +10 -1
- package/docs/usage/components/color-picker.md +65 -28
- package/docs/usage/components/comment-thread-screen.md +16 -1
- package/docs/usage/components/conversation-list-screen.md +81 -0
- package/docs/usage/components/conversation-row.md +5 -1
- package/docs/usage/components/data-table.md +2 -0
- package/docs/usage/components/date-range-picker.md +15 -5
- package/docs/usage/components/dialog.md +3 -3
- package/docs/usage/components/event-attendance-card.md +4 -0
- package/docs/usage/components/follow-list-screen.md +109 -0
- package/docs/usage/components/follow-profile-card.md +4 -0
- package/docs/usage/components/list-row.md +6 -0
- package/docs/usage/components/menu.md +12 -0
- package/docs/usage/components/notice.md +8 -3
- package/docs/usage/components/notification-inbox-screen.md +10 -0
- package/docs/usage/components/notification-row.md +4 -0
- package/docs/usage/components/page-indicator.md +1 -0
- package/docs/usage/components/profile-summary.md +32 -3
- package/docs/usage/components/section.md +2 -2
- package/docs/usage/components/settings-screen.md +1 -1
- package/docs/usage/components/share-sheet.md +139 -0
- package/docs/usage/components/shared-transition-element.md +1 -1
- package/docs/usage/components/sheet.md +1 -0
- package/docs/usage/components/statistic.md +1 -1
- package/docs/usage/compositions/interaction-adapters.md +2 -2
- package/docs/usage/compositions/optional-adapters.md +2 -2
- package/docs/usage/compositions/web-additions.md +5 -5
- package/docs/usage/screens/common-comments.md +1 -0
- package/docs/usage/screens/common-conversation-list.md +22 -1
- package/docs/usage/screens/common-follow-list.md +87 -0
- package/docs/usage/screens/common-settings.md +23 -0
- package/package.json +7 -1
package/dist/behaviors.d.ts
CHANGED
|
@@ -401,6 +401,7 @@ export declare const behaviorRegistry: {
|
|
|
401
401
|
readonly labels: "visible";
|
|
402
402
|
readonly selection: "emphasis";
|
|
403
403
|
readonly surface: "flat";
|
|
404
|
+
readonly tone: "brand";
|
|
404
405
|
readonly iconSize: "standard";
|
|
405
406
|
readonly shape: "standard";
|
|
406
407
|
readonly iconEmphasis: "scale";
|
|
@@ -941,7 +942,7 @@ export declare const behaviorRegistry: {
|
|
|
941
942
|
readonly states: readonly ["selected", "disabled"];
|
|
942
943
|
readonly actions: readonly ["select"];
|
|
943
944
|
};
|
|
944
|
-
readonly scenarios: readonly ["a-click-on-a-complete-range-starts-a-new-one-instead-of-guessing-which-end-to-move", "picking-an-earlier-date-while-selecting-swaps-the-two-instead-of-rejecting-it", "the-selecting-state-is-start-without-end-not-a-separate-flag", "a-hovered-date-previews-the-end-through-the-same-cell-state-function", "an-end-without-a-start-is-rejected-by-validation-not-rendered-as-something", "calendar-keeps-single-selection-this-module-never-adds-a-mode-axis-to-it"];
|
|
945
|
+
readonly scenarios: readonly ["a-click-on-a-complete-range-starts-a-new-one-instead-of-guessing-which-end-to-move", "picking-an-earlier-date-while-selecting-swaps-the-two-instead-of-rejecting-it", "the-selecting-state-is-start-without-end-not-a-separate-flag", "a-hovered-date-previews-the-end-through-the-same-cell-state-function", "an-end-without-a-start-is-rejected-by-validation-not-rendered-as-something", "calendar-keeps-single-selection-this-module-never-adds-a-mode-axis-to-it", "the-range-is-one-band-between-two-filled-edges-and-a-one-day-range-has-no-band", "the-summary-marks-the-edge-being-picked-and-nothing-once-complete", "a-preset-ends-today-and-is-selected-only-while-the-value-equals-it"];
|
|
945
946
|
};
|
|
946
947
|
readonly textFormat: {
|
|
947
948
|
readonly controlled: readonly [];
|
package/dist/behaviors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behaviors.d.ts","sourceRoot":"","sources":["../src/behaviors.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
1
|
+
{"version":3,"file":"behaviors.d.ts","sourceRoot":"","sources":["../src/behaviors.ts"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,uBAAuB,GAC7B,MAAM,wBAAwB,CAAC;AAEhC,gFAAgF;AAChF,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,OAAO,GACP,cAAc,GACd,SAAS,GACT,SAAS,CAAC;AACd,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAC7E,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,QAAQ,GACR,SAAS,GACT,OAAO,GACP,UAAU,GACV,MAAM,GACN,UAAU,CAAC;AACf,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,SAAS,CAAC;AAClD,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,SAAS,GACT,aAAa,GACb,OAAO,GACP,OAAO,GACP,UAAU,CAAC;AACf,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAChD,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,CAAC;AACxD,MAAM,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,UAAU,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAEvD,8EAA8E;AAC9E,MAAM,MAAM,uBAAuB,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IAC1E,EAAE,EAAE,GAAG,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEH,wEAAwE;AACxE,MAAM,MAAM,mBAAmB,GAC3B,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACxD,QAAQ,CAAC;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE5D,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAC7C,OAAO,EAAE,aAAa,CAAC;IACvB,cAAc,CAAC,EAAE,KAAK,CAAC;IACvB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzC,CAAC,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAC/C,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C,CAAC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,GAAG,yBAAyB,CAAC;AAEpF,MAAM,MAAM,gCAAgC,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IACnF,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACxB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CAC9C,CAAC,CAAC;AACH,MAAM,MAAM,kCAAkC,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IACrF,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,YAAY,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;CACnD,CAAC,CAAC;AACH,MAAM,MAAM,sBAAsB,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IAC1D,gCAAgC,CAAC,GAAG,CAAC,GACrC,kCAAkC,CAAC,GAAG,CAAC,CAAC;AAE5C,MAAM,MAAM,6BAA6B,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IAChF,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;CACjC,CAAC,CAAC;AACH,MAAM,MAAM,+BAA+B,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IAClF,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,YAAY,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CACtC,CAAC,CAAC;AACH,MAAM,MAAM,mBAAmB,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IACvD,6BAA6B,CAAC,GAAG,CAAC,GAClC,+BAA+B,CAAC,GAAG,CAAC,CAAC;AAEzC,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAE/E,iFAAiF;AACjF,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,kBAAkB,EAAE,MAAM,GAAG,SAAS,EACtC,WAAW,SAAY,GACtB,MAAM,CAeR;AAED,eAAO,MAAM,8BAA8B;;;CAMzC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;CAOrC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;CAMjC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;CAMnC,CAAC;AAEH,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,GAAG,SAAS,MAAM,EACvD,KAAK,EAAE,SAAS,uBAAuB,CAAC,GAAG,CAAC,EAAE,GAC7C,IAAI,CAuBN;AAED,wBAAgB,yBAAyB,CAAC,GAAG,SAAS,MAAM,EAC1D,KAAK,EAAE,SAAS,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAC9C,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,GACxB,IAAI,CAQN;AAED,wBAAgB,wBAAwB,CAAC,GAAG,SAAS,MAAM,EACzD,KAAK,EAAE,SAAS,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAC9C,cAAc,EAAE,GAAG,GAAG,IAAI,GAAG,SAAS,EACtC,QAAQ,UAAQ,GACf,GAAG,GAAG,IAAI,CASZ;AAED,wBAAgB,sBAAsB,CAAC,GAAG,SAAS,MAAM,EACvD,KAAK,EAAE,SAAS,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAC9C,OAAO,EAAE,GAAG,GAAG,IAAI,GAClB,IAAI,CAKN;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,GAAG,SAAS,MAAM,EACpD,KAAK,EAAE,SAAS,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAC9C,aAAa,EAAE,GAAG,GAAG,IAAI,GACxB,GAAG,GAAG,SAAS,CAKjB;AAED,qFAAqF;AACrF,wBAAgB,uBAAuB,CAAC,GAAG,SAAS,MAAM,EACxD,KAAK,EAAE,SAAS,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAC9C,OAAO,EAAE,GAAG,GAAG,IAAI,EACnB,QAAQ,UAAQ,GACf,GAAG,GAAG,IAAI,CAIZ;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,oBAAoB,EACjC,SAAS,EAAE,kBAAkB,GAC5B,yBAAyB,GAAG,SAAS,CAWvC;AAED,wBAAgB,wBAAwB,CAAC,GAAG,SAAS,MAAM,EACzD,KAAK,EAAE,SAAS,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAC9C,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,SAAS,EACjC,MAAM,EAAE,yBAAyB,EACjC,IAAI,UAAO,GACV,GAAG,GAAG,SAAS,CAYjB;AAED,6EAA6E;AAC7E,MAAM,MAAM,aAAa,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IAChE,EAAE,EAAE,GAAG,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AACH,MAAM,MAAM,uBAAuB,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IAC1E,KAAK,EAAE,GAAG,CAAC;IACX,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;CACjC,CAAC,CAAC;AACH,MAAM,MAAM,yBAAyB,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IAC5E,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CACtC,CAAC,CAAC;AACH,MAAM,MAAM,aAAa,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IACjD,uBAAuB,CAAC,GAAG,CAAC,GAC5B,yBAAyB,CAAC,GAAG,CAAC,CAAC;AACnC,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzE,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,eAAe,EAC5B,SAAS,EAAE,aAAa,GACvB,mBAAmB,GAAG,SAAS,CAWjC;AAED,kFAAkF;AAClF,wBAAgB,sBAAsB,CAAC,GAAG,SAAS,MAAM,EACvD,KAAK,EAAE,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EACpC,cAAc,CAAC,EAAE,GAAG,GACnB,GAAG,GAAG,SAAS,CAgBjB;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,GAAG,SAAS,MAAM,EACvD,KAAK,EAAE,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EACpC,SAAS,EAAE,GAAG,EACd,MAAM,EAAE,mBAAmB,EAC3B,IAAI,UAAO,GACV,GAAG,GAAG,SAAS,CAWjB;AAED,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb,cAAc,GACd,OAAO,GACP,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,MAAM,cAAc,GACtB,KAAK,GACL,OAAO,GACP,OAAO,GACP,QAAQ,GACR,SAAS,GACT,WAAW,GACX,WAAW,GACX,YAAY,GACZ,MAAM,GACN,KAAK;AACP,sFAAsF;GACpF,WAAW,GACX,QAAQ,GACR,UAAU,GACV,IAAI,GACJ,WAAW,CAAC;AAEhB,MAAM,MAAM,wBAAwB,GAChC,UAAU,GACV,UAAU,GACV,SAAS,GACT,MAAM,GACN,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,mDAAmD;IACnD,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,kEAAkE;IAClE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,wDAAwD;IACxD,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAC/D,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,GAAG,EAAE,QAAQ,CAAC;QACZ,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QACzB,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;QACpC,KAAK,EACD,QAAQ,GACR,QAAQ,GACR,kBAAkB,GAClB,MAAM,GACN,SAAS,GACT,MAAM,CAAC;QACX,OAAO,CAAC,EAAE,SAAS,CACf,QAAQ,GACR,SAAS,GACT,WAAW,GACX,MAAM,GACN,SAAS,GACT,QAAQ,GACR,OAAO,GACP,cAAc,GACd,OAAO,GACP,cAAc,CACjB,EAAE,CAAC;KACL,CAAC,CAAC;IACH,MAAM,EAAE,QAAQ,CAAC;QACf,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QACzB,MAAM,EAAE,SAAS,wBAAwB,EAAE,CAAC;QAC5C,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,EAAE,SAAS,CACf,MAAM,GACN,OAAO,GACP,SAAS,GACT,WAAW,GACX,SAAS,GACT,QAAQ,GACR,OAAO,GACP,cAAc,GACd,cAAc,CACjB,EAAE,CAAC;KACL,CAAC,CAAC;IACH,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B,CAAC,CAAC;AAEH,iFAAiF;AACjF,eAAO,MAAM,oBAAoB;;;;;;;CAc/B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
@@ -28,6 +28,8 @@ export type BottomNavigationConfiguration = Readonly<{
|
|
|
28
28
|
* product supplies colors through palette roles instead of deprecated styles.
|
|
29
29
|
*/
|
|
30
30
|
surface?: BottomNavigationSurface;
|
|
31
|
+
/** Flat tile background only. Neutral keeps the selected brand tile on a theme surface (2026-10-25 오늘야구). */
|
|
32
|
+
tone?: "brand" | "neutral";
|
|
31
33
|
/**
|
|
32
34
|
* Icon slot size. `standard` keeps the density glyph; `large`/`xlarge` reserve an app-icon sized slot
|
|
33
35
|
* (`bottomNavigationRecipe.iconSizes`) for artwork rendered through `renderIcon`. Added 2026-10-18 for
|
|
@@ -61,6 +63,7 @@ export type ResolvedBottomNavigationConfiguration = Readonly<{
|
|
|
61
63
|
labels: BottomNavigationLabels;
|
|
62
64
|
selection: "emphasis" | "tile";
|
|
63
65
|
surface: BottomNavigationSurface;
|
|
66
|
+
tone: "brand" | "neutral";
|
|
64
67
|
iconSize: BottomNavigationIconSize;
|
|
65
68
|
shape: BottomNavigationShape;
|
|
66
69
|
iconEmphasis: BottomNavigationIconEmphasis;
|
|
@@ -157,6 +160,7 @@ export declare const bottomNavigationBehaviorDefaults: {
|
|
|
157
160
|
readonly labels: "visible";
|
|
158
161
|
readonly selection: "emphasis";
|
|
159
162
|
readonly surface: "flat";
|
|
163
|
+
readonly tone: "brand";
|
|
160
164
|
readonly iconSize: "standard";
|
|
161
165
|
readonly shape: "standard";
|
|
162
166
|
readonly iconEmphasis: "scale";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bottom-navigation.d.ts","sourceRoot":"","sources":["../src/bottom-navigation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bottom-navigation.d.ts","sourceRoot":"","sources":["../src/bottom-navigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ export const bottomNavigationBehaviorDefaults = {
|
|
|
13
13
|
labels: "visible",
|
|
14
14
|
selection: "emphasis",
|
|
15
15
|
surface: "flat",
|
|
16
|
+
tone: "brand",
|
|
16
17
|
iconSize: "standard",
|
|
17
18
|
shape: "standard",
|
|
18
19
|
iconEmphasis: "scale",
|
|
@@ -39,6 +40,7 @@ const configurationKeys = new Set([
|
|
|
39
40
|
"labels",
|
|
40
41
|
"selection",
|
|
41
42
|
"surface",
|
|
43
|
+
"tone",
|
|
42
44
|
"iconSize",
|
|
43
45
|
"shape",
|
|
44
46
|
"iconEmphasis",
|
|
@@ -168,6 +170,15 @@ export function validateBottomNavigationConfiguration(configuration, itemCount)
|
|
|
168
170
|
if (configuration.surface === "raised" && configuration.selection !== "tile") {
|
|
169
171
|
throw new TypeError("BottomNavigation raised surface requires tile selection");
|
|
170
172
|
}
|
|
173
|
+
if (configuration.tone !== undefined) {
|
|
174
|
+
if (!["brand", "neutral"].includes(configuration.tone)) {
|
|
175
|
+
throw new TypeError("Unsupported BottomNavigation tone");
|
|
176
|
+
}
|
|
177
|
+
// Raised surfaces own their sunken fill; accepting tone there would silently ignore the requested background.
|
|
178
|
+
if (configuration.selection !== "tile" || configuration.surface === "raised") {
|
|
179
|
+
throw new TypeError("BottomNavigation tone requires flat tile selection");
|
|
180
|
+
}
|
|
181
|
+
}
|
|
171
182
|
// Capsule actions sit beside the destination surface, so reserving a central gap would duplicate their space.
|
|
172
183
|
if (configuration.presentation === "capsule" && configuration.distribution === "center-gap") {
|
|
173
184
|
throw new TypeError("BottomNavigation capsule uses an adjacent action, not center-gap");
|
|
@@ -204,6 +215,7 @@ export function resolveBottomNavigationConfiguration(configuration, itemCount) {
|
|
|
204
215
|
labels: configuration.labels ?? bottomNavigationBehaviorDefaults.labels,
|
|
205
216
|
selection: configuration.selection ?? bottomNavigationBehaviorDefaults.selection,
|
|
206
217
|
surface: configuration.surface ?? bottomNavigationBehaviorDefaults.surface,
|
|
218
|
+
tone: configuration.tone ?? bottomNavigationBehaviorDefaults.tone,
|
|
207
219
|
iconSize: configuration.iconSize ?? bottomNavigationBehaviorDefaults.iconSize,
|
|
208
220
|
shape: configuration.shape ?? bottomNavigationBehaviorDefaults.shape,
|
|
209
221
|
iconEmphasis: configuration.iconEmphasis ?? bottomNavigationBehaviorDefaults.iconEmphasis,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bottom-navigation.js","sourceRoot":"","sources":["../src/bottom-navigation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type BottomNavigationDensity,\n type BottomNavigationDistribution,\n type BottomNavigationPresentation,\n bottomNavigationRecipeDefaults,\n} from \"./bottom-navigation-defaults.js\";\nimport { formatCounterBadgeCount } from \"./counter-badge.js\";\nimport {\n type SemanticIconName,\n} from \"./icon.js\";\nimport type { DesignSystemDirection } from \"./design-system-provider.js\";\n\nexport type BottomNavigationDirection = DesignSystemDirection;\nexport type BottomNavigationKeyboardBehavior = \"hide\" | \"remain\";\n/**\n * `hidden` drops the visible destination name and keeps it as the item's\n * accessible name. Icon-only bars rely on the icon stroke/scale emphasis (and\n * any product selection mark) for non-color selected evidence, so products\n * choose it deliberately; the default keeps labels visible. Added 2026-10-10\n * for BurnTok's icon-only dock instead of letting the app hide labels with\n * deprecated styles or transparent palette overrides.\n */\nexport type BottomNavigationLabels = \"visible\" | \"hidden\";\n\nexport type BottomNavigationConfiguration = Readonly<{\n presentation?: BottomNavigationPresentation;\n distribution?: BottomNavigationDistribution;\n density?: BottomNavigationDensity;\n direction?: BottomNavigationDirection;\n keyboardBehavior?: BottomNavigationKeyboardBehavior;\n labels?: BottomNavigationLabels;\n /** Inset selected destination card, with equal widths and persistent labels. Floating only. */\n selection?: \"emphasis\" | \"tile\";\n /**\n * `raised` paints the tile bar as a thick plank: a sunken surface role with a\n * control-colored lower edge, and a darker lower edge under the selected tile.\n * Tile selection only. Added 2026-10-13 for Spint's wooden-sign tab bar so the\n * product supplies colors through palette roles instead of deprecated styles.\n */\n surface?: BottomNavigationSurface;\n /**\n * Icon slot size. `standard` keeps the density glyph; `large`/`xlarge` reserve an app-icon sized slot\n * (`bottomNavigationRecipe.iconSizes`) for artwork rendered through `renderIcon`. Added 2026-10-18 for\n * Utilverse's dock, which drew its own Surface/Button row to show 38-54pt app icons.\n */\n iconSize?: BottomNavigationIconSize;\n /**\n * Frame of the floating surface (`bottomNavigationRecipe.shapes`): corner radius and the inner padding between\n * the frame and the destinations. `standard` keeps the floating recipe. Floating + emphasis selection only.\n * Added 2026-10-18 for Utilverse's home shells (iPhone rounded dock, Android pill, macOS compact dock,\n * Linux/Windows square taskbar), which otherwise assembled their own Surface/Button bar per shell.\n */\n shape?: BottomNavigationShape;\n /**\n * Selected icon emphasis (`bottomNavigationRecipe.icon`). `scale` is the default glyph emphasis; `lift` also\n * raises the selected icon and dims idle icons, the non-color cue for full-color artwork from `renderIcon` that\n * cannot take the selected tint. Added 2026-10-18 with `shape` for the same Utilverse dock.\n */\n iconEmphasis?: BottomNavigationIconEmphasis;\n}>;\n\nexport type BottomNavigationSurface = \"flat\" | \"raised\";\nexport type BottomNavigationIconSize = \"standard\" | \"large\" | \"xlarge\";\nexport type BottomNavigationShape = \"standard\" | \"rounded\" | \"pill\" | \"compact\" | \"square\";\nexport type BottomNavigationIconEmphasis = \"scale\" | \"lift\";\n\nexport type ResolvedBottomNavigationConfiguration = Readonly<{\n presentation: BottomNavigationPresentation;\n distribution: BottomNavigationDistribution;\n density: BottomNavigationDensity;\n direction: BottomNavigationDirection;\n keyboardBehavior: BottomNavigationKeyboardBehavior;\n labels: BottomNavigationLabels;\n selection: \"emphasis\" | \"tile\";\n surface: BottomNavigationSurface;\n iconSize: BottomNavigationIconSize;\n shape: BottomNavigationShape;\n iconEmphasis: BottomNavigationIconEmphasis;\n}>;\n\n/**\n * Bottom navigation only accepts numeric counters. A silent status dot is too\n * ambiguous for a persistent, top-level destination.\n */\nexport type BottomNavigationCounterBadge = Readonly<{\n count: number;\n max?: number;\n /** Product-localized copy, for example \"3 unread messages\". */\n accessibilityLabel: string;\n}>;\n\n/**\n * BottomNavigation owns icon appearance through its density and state recipe.\n * Products may extend the semantic name registry, but never override size,\n * tone, stroke weight, accessibility, or logical direction at the call site.\n */\nexport type BottomNavigationIconDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n name: IconName;\n decorative?: true;\n accessibilityLabel?: never;\n size?: never;\n tone?: never;\n weight?: never;\n directionality?: never;\n}>;\n\nexport type ResolvedBottomNavigationIconDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n name: IconName;\n decorative: true;\n}>;\n\n/**\n * Items are stable top-level destinations, never actions. The icon is always\n * decorative because the visible/item accessibility label already names it.\n */\nexport type BottomNavigationItemDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n id: Key;\n label: string;\n accessibilityLabel?: string;\n icon: BottomNavigationIconDescriptor<IconName>;\n badge?: BottomNavigationCounterBadge;\n disabled?: boolean;\n /**\n * Raised center destination: a selectable route drawn as a lifted brand circle above the bar, with its label\n * below. Only the middle item of an odd item count may be prominent. Unlike `primaryAction` it is a real\n * destination (selected state, reselect, router-owned). Added 2026-10-18 for Diairy's \"write\" tab, which\n * replaced the shared bar with Expo Router's default tab bar to draw it.\n */\n prominent?: boolean;\n}>;\n\n/** The router owns selectedKey; the design-system never keeps a second copy. */\nexport type BottomNavigationDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n accessibilityLabel: string;\n items: readonly BottomNavigationItemDescriptor<Key, IconName>[];\n selectedKey: Key;\n}>;\n\n/**\n * The resolved badge intentionally has no accessible label. Renderers hide its\n * subtree and use only the item's resolvedAccessibilityLabel, preventing the\n * counter from being announced twice.\n */\nexport type ResolvedBottomNavigationCounterBadge = Readonly<{\n visibleLabel: string;\n hiddenFromAccessibility: true;\n}>;\n\nexport type ResolvedBottomNavigationItemDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n id: Key;\n label: string;\n icon: ResolvedBottomNavigationIconDescriptor<IconName>;\n disabled: boolean;\n badge: ResolvedBottomNavigationCounterBadge | null;\n resolvedAccessibilityLabel: string;\n prominent: boolean;\n}>;\n\nexport type ResolvedBottomNavigationDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n accessibilityLabel: string;\n items: readonly ResolvedBottomNavigationItemDescriptor<Key, IconName>[];\n selectedKey: Key;\n}>;\n\nexport type BottomNavigationActivation<Key extends string = string> = Readonly<{\n key: Key;\n reason: \"navigate\" | \"reselect\";\n}>;\n\n/**\n * `maxItems` follows the platform bars rather than Material's five-destination\n * guidance: iOS tab bars and Android navigation bars both render six labelled\n * destinations without collapsing, and products that ship six need the shared\n * contract to describe them instead of routing around it.\n */\nexport const bottomNavigationBehaviorDefaults = {\n direction: \"ltr\",\n keyboardBehavior: \"hide\",\n labels: \"visible\",\n selection: \"emphasis\",\n surface: \"flat\",\n iconSize: \"standard\",\n shape: \"standard\",\n iconEmphasis: \"scale\",\n minItems: 2,\n maxItems: 6,\n} as const satisfies Readonly<{\n direction: BottomNavigationDirection;\n keyboardBehavior: BottomNavigationKeyboardBehavior;\n labels: BottomNavigationLabels;\n selection: \"emphasis\" | \"tile\";\n surface: BottomNavigationSurface;\n iconSize: BottomNavigationIconSize;\n shape: BottomNavigationShape;\n iconEmphasis: BottomNavigationIconEmphasis;\n minItems: number;\n maxItems: number;\n}>;\n\nfunction validateTrimmedCopy(value: unknown, field: string): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`${field} must not be empty`);\n }\n if (value !== value.trim()) {\n throw new TypeError(`${field} must not start or end with whitespace`);\n }\n}\n\nfunction isObject(value: unknown): value is Readonly<Record<string, unknown>> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nconst configurationKeys = new Set([\n \"presentation\",\n \"distribution\",\n \"density\",\n \"direction\",\n \"keyboardBehavior\",\n \"labels\",\n \"selection\",\n \"surface\",\n \"iconSize\",\n \"shape\",\n \"iconEmphasis\",\n]);\nconst descriptorKeys = new Set([\"accessibilityLabel\", \"items\", \"selectedKey\"]);\nconst itemKeys = new Set([\n \"id\",\n \"label\",\n \"accessibilityLabel\",\n \"icon\",\n \"badge\",\n \"disabled\",\n \"prominent\",\n]);\nconst iconKeys = new Set([\"name\", \"decorative\"]);\nconst badgeKeys = new Set([\"count\", \"max\", \"accessibilityLabel\"]);\n\nfunction rejectUnknownKeys(\n value: Readonly<Record<string, unknown>>,\n allowed: ReadonlySet<string>,\n field: string,\n): void {\n for (const key of Object.keys(value)) {\n if (!allowed.has(key)) {\n throw new TypeError(`Unsupported BottomNavigation ${field} field: ${key}`);\n }\n }\n}\n\nfunction normalizedCopy(value: string): string {\n return value.normalize(\"NFKC\").toLocaleLowerCase();\n}\n\nfunction validateBadge(badge: BottomNavigationCounterBadge): void {\n if (!isObject(badge)) {\n throw new TypeError(\"BottomNavigation badge must be an object\");\n }\n rejectUnknownKeys(badge, badgeKeys, \"badge\");\n if (!Number.isSafeInteger(badge.count) || badge.count < 0) {\n throw new TypeError(\"BottomNavigation badge count must be a non-negative safe integer\");\n }\n if (\n badge.max !== undefined &&\n (!Number.isSafeInteger(badge.max) || badge.max < 1)\n ) {\n throw new TypeError(\"BottomNavigation badge max must be a positive safe integer\");\n }\n validateTrimmedCopy(\n badge.accessibilityLabel,\n \"BottomNavigation badge accessibilityLabel\",\n );\n}\n\nfunction validateItem<Key extends string, IconName extends string>(\n item: BottomNavigationItemDescriptor<Key, IconName>,\n): void {\n if (!isObject(item)) {\n throw new TypeError(\"BottomNavigation item must be an object\");\n }\n rejectUnknownKeys(item, itemKeys, \"item\");\n validateTrimmedCopy(item.id, \"BottomNavigation item id\");\n validateTrimmedCopy(item.label, \"BottomNavigation item label\");\n if (item.accessibilityLabel !== undefined) {\n validateTrimmedCopy(\n item.accessibilityLabel,\n \"BottomNavigation item accessibilityLabel\",\n );\n if (\n !normalizedCopy(item.accessibilityLabel).includes(\n normalizedCopy(item.label),\n )\n ) {\n throw new TypeError(\n \"BottomNavigation item accessibilityLabel must include the visible label\",\n );\n }\n }\n if (!isObject(item.icon)) {\n throw new TypeError(\"BottomNavigation item icon must be an object\");\n }\n if (item.icon.decorative !== undefined && item.icon.decorative !== true) {\n throw new TypeError(\"BottomNavigation item icon must be decorative\");\n }\n rejectUnknownKeys(item.icon, iconKeys, \"item icon\");\n validateTrimmedCopy(item.icon.name, \"BottomNavigation item icon name\");\n if (item.disabled !== undefined && typeof item.disabled !== \"boolean\") {\n throw new TypeError(\"BottomNavigation item disabled must be a boolean\");\n }\n if (item.badge !== undefined) validateBadge(item.badge);\n if (item.prominent !== undefined && typeof item.prominent !== \"boolean\") {\n throw new TypeError(\"BottomNavigation item prominent must be a boolean\");\n }\n}\n\nconst presentations = new Set<BottomNavigationPresentation>([\"bar\", \"floating\", \"capsule\"]);\nconst distributions = new Set<BottomNavigationDistribution>([\"equal\", \"center-gap\"]);\nconst densities = new Set<BottomNavigationDensity>([\"compact\", \"regular\"]);\nconst directions = new Set<BottomNavigationDirection>([\"ltr\", \"rtl\"]);\nconst keyboardBehaviors = new Set<BottomNavigationKeyboardBehavior>([\n \"hide\",\n \"remain\",\n]);\nconst labelModes = new Set<BottomNavigationLabels>([\"visible\", \"hidden\"]);\nconst iconSizes = new Set<BottomNavigationIconSize>([\"standard\", \"large\", \"xlarge\"]);\nconst shapes = new Set<BottomNavigationShape>([\"standard\", \"rounded\", \"pill\", \"compact\", \"square\"]);\nconst iconEmphases = new Set<BottomNavigationIconEmphasis>([\"scale\", \"lift\"]);\n\nexport function validateBottomNavigationConfiguration(\n configuration: BottomNavigationConfiguration,\n itemCount: number,\n): void {\n if (!isObject(configuration)) {\n throw new TypeError(\"BottomNavigation configuration must be an object\");\n }\n rejectUnknownKeys(configuration, configurationKeys, \"configuration\");\n if (\n !Number.isSafeInteger(itemCount) ||\n itemCount < bottomNavigationBehaviorDefaults.minItems ||\n itemCount > bottomNavigationBehaviorDefaults.maxItems\n ) {\n throw new RangeError(\n `BottomNavigation configuration requires ${bottomNavigationBehaviorDefaults.minItems} to ${bottomNavigationBehaviorDefaults.maxItems} destinations`,\n );\n }\n if (\n configuration.presentation !== undefined &&\n !presentations.has(configuration.presentation)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation presentation: ${String(configuration.presentation)}`,\n );\n }\n if (\n configuration.distribution !== undefined &&\n !distributions.has(configuration.distribution)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation distribution: ${String(configuration.distribution)}`,\n );\n }\n if (configuration.density !== undefined && !densities.has(configuration.density)) {\n throw new TypeError(\n `Unsupported BottomNavigation density: ${String(configuration.density)}`,\n );\n }\n if (\n configuration.direction !== undefined &&\n !directions.has(configuration.direction)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation direction: ${String(configuration.direction)}`,\n );\n }\n if (\n configuration.keyboardBehavior !== undefined &&\n !keyboardBehaviors.has(configuration.keyboardBehavior)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation keyboardBehavior: ${String(configuration.keyboardBehavior)}`,\n );\n }\n if (configuration.labels !== undefined && !labelModes.has(configuration.labels)) {\n throw new TypeError(\n `Unsupported BottomNavigation labels: ${String(configuration.labels)}`,\n );\n }\n if (configuration.selection !== undefined && ![\"emphasis\", \"tile\"].includes(configuration.selection)) {\n throw new TypeError(\"Unsupported BottomNavigation selection\");\n }\n // Spint's selected card must not inherit capsule's hidden names or unequal widths.\n if (configuration.selection === \"tile\" &&\n (configuration.presentation !== \"floating\" || configuration.distribution === \"center-gap\" || configuration.labels === \"hidden\")) {\n throw new TypeError(\"BottomNavigation tile selection requires floating, equal distribution and visible labels\");\n }\n if (configuration.surface !== undefined && ![\"flat\", \"raised\"].includes(configuration.surface)) {\n throw new TypeError(\"Unsupported BottomNavigation surface\");\n }\n // The lower edges belong to the tile row; an emphasis bar has no selected card to lift.\n if (configuration.surface === \"raised\" && configuration.selection !== \"tile\") {\n throw new TypeError(\"BottomNavigation raised surface requires tile selection\");\n }\n // Capsule actions sit beside the destination surface, so reserving a central gap would duplicate their space.\n if (configuration.presentation === \"capsule\" && configuration.distribution === \"center-gap\") {\n throw new TypeError(\"BottomNavigation capsule uses an adjacent action, not center-gap\");\n }\n if (configuration.iconSize !== undefined && !iconSizes.has(configuration.iconSize)) {\n throw new TypeError(\n `Unsupported BottomNavigation iconSize: ${String(configuration.iconSize)}`,\n );\n }\n if (configuration.shape !== undefined && !shapes.has(configuration.shape)) {\n throw new TypeError(`Unsupported BottomNavigation shape: ${String(configuration.shape)}`);\n }\n // A shape reframes the floating surface only: bar spans the viewport, capsule is already a pill, and the tile\n // row owns its own inner padding and card radius.\n if (\n configuration.shape !== undefined &&\n configuration.shape !== \"standard\" &&\n (configuration.presentation !== \"floating\" || configuration.selection === \"tile\")\n ) {\n throw new TypeError(\"BottomNavigation shape requires floating presentation and emphasis selection\");\n }\n if (configuration.iconEmphasis !== undefined && !iconEmphases.has(configuration.iconEmphasis)) {\n throw new TypeError(\n `Unsupported BottomNavigation iconEmphasis: ${String(configuration.iconEmphasis)}`,\n );\n }\n if (configuration.distribution === \"center-gap\" && itemCount % 2 !== 0) {\n throw new RangeError(\n \"BottomNavigation center-gap distribution requires an even destination count\",\n );\n }\n}\n\nexport function resolveBottomNavigationConfiguration(\n configuration: BottomNavigationConfiguration,\n itemCount: number,\n): ResolvedBottomNavigationConfiguration {\n validateBottomNavigationConfiguration(configuration, itemCount);\n return {\n presentation:\n configuration.presentation ?? bottomNavigationRecipeDefaults.presentation,\n distribution:\n configuration.distribution ?? bottomNavigationRecipeDefaults.distribution,\n density: configuration.density ?? bottomNavigationRecipeDefaults.density,\n direction: configuration.direction ?? bottomNavigationBehaviorDefaults.direction,\n keyboardBehavior:\n configuration.keyboardBehavior ??\n bottomNavigationBehaviorDefaults.keyboardBehavior,\n labels: configuration.labels ?? bottomNavigationBehaviorDefaults.labels,\n selection: configuration.selection ?? bottomNavigationBehaviorDefaults.selection,\n surface: configuration.surface ?? bottomNavigationBehaviorDefaults.surface,\n iconSize: configuration.iconSize ?? bottomNavigationBehaviorDefaults.iconSize,\n shape: configuration.shape ?? bottomNavigationBehaviorDefaults.shape,\n iconEmphasis: configuration.iconEmphasis ?? bottomNavigationBehaviorDefaults.iconEmphasis,\n };\n}\n\nexport function validateBottomNavigationDescriptor<\n Key extends string,\n IconName extends string,\n>(descriptor: BottomNavigationDescriptor<Key, IconName>): void {\n if (!isObject(descriptor)) {\n throw new TypeError(\"BottomNavigation descriptor must be an object\");\n }\n rejectUnknownKeys(descriptor, descriptorKeys, \"descriptor\");\n validateTrimmedCopy(\n descriptor.accessibilityLabel,\n \"BottomNavigation accessibilityLabel\",\n );\n if (!Array.isArray(descriptor.items)) {\n throw new TypeError(\"BottomNavigation items must be an array\");\n }\n validateTrimmedCopy(\n descriptor.selectedKey,\n \"BottomNavigation selectedKey\",\n );\n if (\n descriptor.items.length < bottomNavigationBehaviorDefaults.minItems ||\n descriptor.items.length > bottomNavigationBehaviorDefaults.maxItems\n ) {\n throw new RangeError(\n `BottomNavigation must contain ${bottomNavigationBehaviorDefaults.minItems} to ${bottomNavigationBehaviorDefaults.maxItems} destinations`,\n );\n }\n\n const ids = new Set<Key>();\n for (const item of descriptor.items) {\n validateItem(item);\n if (ids.has(item.id)) {\n throw new TypeError(`Duplicate BottomNavigation item id: ${item.id}`);\n }\n ids.add(item.id);\n }\n\n const selected = descriptor.items.find(\n (item) => item.id === descriptor.selectedKey,\n );\n if (!selected) {\n throw new RangeError(\n `BottomNavigation selectedKey must exist: ${descriptor.selectedKey}`,\n );\n }\n if (selected.disabled) {\n throw new RangeError(\"BottomNavigation selected destination must be enabled\");\n }\n const prominentIndex = descriptor.items.findIndex((item) => item.prominent === true);\n if (prominentIndex !== -1) {\n // The lifted circle is centered over the bar; any other slot would sit off-center and overlap a neighbour.\n if (\n descriptor.items.length % 2 === 0 ||\n prominentIndex !== (descriptor.items.length - 1) / 2 ||\n descriptor.items.filter((item) => item.prominent === true).length > 1\n ) {\n throw new RangeError(\n \"BottomNavigation prominent destination must be the single middle item of an odd item count\",\n );\n }\n }\n}\n\n/**\n * A prominent destination needs the plain row: center-gap reserves the same slot for a primaryAction, capsule\n * places actions beside the surface, and a tile card would paint behind the lifted circle.\n */\nexport function validateBottomNavigationProminence(\n items: readonly Readonly<{ prominent?: boolean }>[],\n configuration: ResolvedBottomNavigationConfiguration,\n): void {\n if (!items.some((item) => item.prominent === true)) return;\n if (\n configuration.distribution !== \"equal\" ||\n configuration.presentation === \"capsule\" ||\n configuration.selection === \"tile\"\n ) {\n throw new TypeError(\n \"BottomNavigation prominent destination requires equal distribution, bar or floating presentation and emphasis selection\",\n );\n }\n}\n\nexport function resolveBottomNavigationItem<\n Key extends string,\n IconName extends string,\n>(\n item: BottomNavigationItemDescriptor<Key, IconName>,\n): ResolvedBottomNavigationItemDescriptor<Key, IconName> {\n validateItem(item);\n const baseAccessibilityLabel = item.accessibilityLabel ?? item.label;\n const visibleBadgeLabel = item.badge\n ? formatCounterBadgeCount(item.badge.count, item.badge.max)\n : null;\n const badge = visibleBadgeLabel\n ? ({\n visibleLabel: visibleBadgeLabel,\n hiddenFromAccessibility: true,\n } as const)\n : null;\n\n return {\n id: item.id,\n label: item.label,\n icon: { name: item.icon.name, decorative: true },\n disabled: item.disabled ?? false,\n prominent: item.prominent ?? false,\n badge,\n resolvedAccessibilityLabel:\n badge && item.badge\n ? `${baseAccessibilityLabel}, ${item.badge.accessibilityLabel}`\n : baseAccessibilityLabel,\n };\n}\n\nexport function resolveBottomNavigationDescriptor<\n Key extends string,\n IconName extends string,\n>(\n descriptor: BottomNavigationDescriptor<Key, IconName>,\n): ResolvedBottomNavigationDescriptor<Key, IconName> {\n validateBottomNavigationDescriptor(descriptor);\n return {\n accessibilityLabel: descriptor.accessibilityLabel,\n items: descriptor.items.map(resolveBottomNavigationItem),\n selectedKey: descriptor.selectedKey,\n };\n}\n\n/**\n * Produces navigation intent without mutating selectedKey. A renderer forwards\n * the request to its router, which updates selectedKey only after navigation.\n */\nexport function resolveBottomNavigationActivation<\n Key extends string,\n IconName extends string,\n>(\n descriptor: BottomNavigationDescriptor<Key, IconName>,\n key: Key,\n): BottomNavigationActivation<Key> | null {\n validateBottomNavigationDescriptor(descriptor);\n const item = descriptor.items.find((candidate) => candidate.id === key);\n if (!item || item.disabled) return null;\n return {\n key,\n reason: key === descriptor.selectedKey ? \"reselect\" : \"navigate\",\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bottom-navigation.js","sourceRoot":"","sources":["../src/bottom-navigation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type BottomNavigationDensity,\n type BottomNavigationDistribution,\n type BottomNavigationPresentation,\n bottomNavigationRecipeDefaults,\n} from \"./bottom-navigation-defaults.js\";\nimport { formatCounterBadgeCount } from \"./counter-badge.js\";\nimport {\n type SemanticIconName,\n} from \"./icon.js\";\nimport type { DesignSystemDirection } from \"./design-system-provider.js\";\n\nexport type BottomNavigationDirection = DesignSystemDirection;\nexport type BottomNavigationKeyboardBehavior = \"hide\" | \"remain\";\n/**\n * `hidden` drops the visible destination name and keeps it as the item's\n * accessible name. Icon-only bars rely on the icon stroke/scale emphasis (and\n * any product selection mark) for non-color selected evidence, so products\n * choose it deliberately; the default keeps labels visible. Added 2026-10-10\n * for BurnTok's icon-only dock instead of letting the app hide labels with\n * deprecated styles or transparent palette overrides.\n */\nexport type BottomNavigationLabels = \"visible\" | \"hidden\";\n\nexport type BottomNavigationConfiguration = Readonly<{\n presentation?: BottomNavigationPresentation;\n distribution?: BottomNavigationDistribution;\n density?: BottomNavigationDensity;\n direction?: BottomNavigationDirection;\n keyboardBehavior?: BottomNavigationKeyboardBehavior;\n labels?: BottomNavigationLabels;\n /** Inset selected destination card, with equal widths and persistent labels. Floating only. */\n selection?: \"emphasis\" | \"tile\";\n /**\n * `raised` paints the tile bar as a thick plank: a sunken surface role with a\n * control-colored lower edge, and a darker lower edge under the selected tile.\n * Tile selection only. Added 2026-10-13 for Spint's wooden-sign tab bar so the\n * product supplies colors through palette roles instead of deprecated styles.\n */\n surface?: BottomNavigationSurface;\n /** Flat tile background only. Neutral keeps the selected brand tile on a theme surface (2026-10-25 오늘야구). */\n tone?: \"brand\" | \"neutral\";\n /**\n * Icon slot size. `standard` keeps the density glyph; `large`/`xlarge` reserve an app-icon sized slot\n * (`bottomNavigationRecipe.iconSizes`) for artwork rendered through `renderIcon`. Added 2026-10-18 for\n * Utilverse's dock, which drew its own Surface/Button row to show 38-54pt app icons.\n */\n iconSize?: BottomNavigationIconSize;\n /**\n * Frame of the floating surface (`bottomNavigationRecipe.shapes`): corner radius and the inner padding between\n * the frame and the destinations. `standard` keeps the floating recipe. Floating + emphasis selection only.\n * Added 2026-10-18 for Utilverse's home shells (iPhone rounded dock, Android pill, macOS compact dock,\n * Linux/Windows square taskbar), which otherwise assembled their own Surface/Button bar per shell.\n */\n shape?: BottomNavigationShape;\n /**\n * Selected icon emphasis (`bottomNavigationRecipe.icon`). `scale` is the default glyph emphasis; `lift` also\n * raises the selected icon and dims idle icons, the non-color cue for full-color artwork from `renderIcon` that\n * cannot take the selected tint. Added 2026-10-18 with `shape` for the same Utilverse dock.\n */\n iconEmphasis?: BottomNavigationIconEmphasis;\n}>;\n\nexport type BottomNavigationSurface = \"flat\" | \"raised\";\nexport type BottomNavigationIconSize = \"standard\" | \"large\" | \"xlarge\";\nexport type BottomNavigationShape = \"standard\" | \"rounded\" | \"pill\" | \"compact\" | \"square\";\nexport type BottomNavigationIconEmphasis = \"scale\" | \"lift\";\n\nexport type ResolvedBottomNavigationConfiguration = Readonly<{\n presentation: BottomNavigationPresentation;\n distribution: BottomNavigationDistribution;\n density: BottomNavigationDensity;\n direction: BottomNavigationDirection;\n keyboardBehavior: BottomNavigationKeyboardBehavior;\n labels: BottomNavigationLabels;\n selection: \"emphasis\" | \"tile\";\n surface: BottomNavigationSurface;\n tone: \"brand\" | \"neutral\";\n iconSize: BottomNavigationIconSize;\n shape: BottomNavigationShape;\n iconEmphasis: BottomNavigationIconEmphasis;\n}>;\n\n/**\n * Bottom navigation only accepts numeric counters. A silent status dot is too\n * ambiguous for a persistent, top-level destination.\n */\nexport type BottomNavigationCounterBadge = Readonly<{\n count: number;\n max?: number;\n /** Product-localized copy, for example \"3 unread messages\". */\n accessibilityLabel: string;\n}>;\n\n/**\n * BottomNavigation owns icon appearance through its density and state recipe.\n * Products may extend the semantic name registry, but never override size,\n * tone, stroke weight, accessibility, or logical direction at the call site.\n */\nexport type BottomNavigationIconDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n name: IconName;\n decorative?: true;\n accessibilityLabel?: never;\n size?: never;\n tone?: never;\n weight?: never;\n directionality?: never;\n}>;\n\nexport type ResolvedBottomNavigationIconDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n name: IconName;\n decorative: true;\n}>;\n\n/**\n * Items are stable top-level destinations, never actions. The icon is always\n * decorative because the visible/item accessibility label already names it.\n */\nexport type BottomNavigationItemDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n id: Key;\n label: string;\n accessibilityLabel?: string;\n icon: BottomNavigationIconDescriptor<IconName>;\n badge?: BottomNavigationCounterBadge;\n disabled?: boolean;\n /**\n * Raised center destination: a selectable route drawn as a lifted brand circle above the bar, with its label\n * below. Only the middle item of an odd item count may be prominent. Unlike `primaryAction` it is a real\n * destination (selected state, reselect, router-owned). Added 2026-10-18 for Diairy's \"write\" tab, which\n * replaced the shared bar with Expo Router's default tab bar to draw it.\n */\n prominent?: boolean;\n}>;\n\n/** The router owns selectedKey; the design-system never keeps a second copy. */\nexport type BottomNavigationDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n accessibilityLabel: string;\n items: readonly BottomNavigationItemDescriptor<Key, IconName>[];\n selectedKey: Key;\n}>;\n\n/**\n * The resolved badge intentionally has no accessible label. Renderers hide its\n * subtree and use only the item's resolvedAccessibilityLabel, preventing the\n * counter from being announced twice.\n */\nexport type ResolvedBottomNavigationCounterBadge = Readonly<{\n visibleLabel: string;\n hiddenFromAccessibility: true;\n}>;\n\nexport type ResolvedBottomNavigationItemDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n id: Key;\n label: string;\n icon: ResolvedBottomNavigationIconDescriptor<IconName>;\n disabled: boolean;\n badge: ResolvedBottomNavigationCounterBadge | null;\n resolvedAccessibilityLabel: string;\n prominent: boolean;\n}>;\n\nexport type ResolvedBottomNavigationDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n accessibilityLabel: string;\n items: readonly ResolvedBottomNavigationItemDescriptor<Key, IconName>[];\n selectedKey: Key;\n}>;\n\nexport type BottomNavigationActivation<Key extends string = string> = Readonly<{\n key: Key;\n reason: \"navigate\" | \"reselect\";\n}>;\n\n/**\n * `maxItems` follows the platform bars rather than Material's five-destination\n * guidance: iOS tab bars and Android navigation bars both render six labelled\n * destinations without collapsing, and products that ship six need the shared\n * contract to describe them instead of routing around it.\n */\nexport const bottomNavigationBehaviorDefaults = {\n direction: \"ltr\",\n keyboardBehavior: \"hide\",\n labels: \"visible\",\n selection: \"emphasis\",\n surface: \"flat\",\n tone: \"brand\",\n iconSize: \"standard\",\n shape: \"standard\",\n iconEmphasis: \"scale\",\n minItems: 2,\n maxItems: 6,\n} as const satisfies Readonly<{\n direction: BottomNavigationDirection;\n keyboardBehavior: BottomNavigationKeyboardBehavior;\n labels: BottomNavigationLabels;\n selection: \"emphasis\" | \"tile\";\n surface: BottomNavigationSurface;\n tone: \"brand\" | \"neutral\";\n iconSize: BottomNavigationIconSize;\n shape: BottomNavigationShape;\n iconEmphasis: BottomNavigationIconEmphasis;\n minItems: number;\n maxItems: number;\n}>;\n\nfunction validateTrimmedCopy(value: unknown, field: string): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`${field} must not be empty`);\n }\n if (value !== value.trim()) {\n throw new TypeError(`${field} must not start or end with whitespace`);\n }\n}\n\nfunction isObject(value: unknown): value is Readonly<Record<string, unknown>> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nconst configurationKeys = new Set([\n \"presentation\",\n \"distribution\",\n \"density\",\n \"direction\",\n \"keyboardBehavior\",\n \"labels\",\n \"selection\",\n \"surface\",\n \"tone\",\n \"iconSize\",\n \"shape\",\n \"iconEmphasis\",\n]);\nconst descriptorKeys = new Set([\"accessibilityLabel\", \"items\", \"selectedKey\"]);\nconst itemKeys = new Set([\n \"id\",\n \"label\",\n \"accessibilityLabel\",\n \"icon\",\n \"badge\",\n \"disabled\",\n \"prominent\",\n]);\nconst iconKeys = new Set([\"name\", \"decorative\"]);\nconst badgeKeys = new Set([\"count\", \"max\", \"accessibilityLabel\"]);\n\nfunction rejectUnknownKeys(\n value: Readonly<Record<string, unknown>>,\n allowed: ReadonlySet<string>,\n field: string,\n): void {\n for (const key of Object.keys(value)) {\n if (!allowed.has(key)) {\n throw new TypeError(`Unsupported BottomNavigation ${field} field: ${key}`);\n }\n }\n}\n\nfunction normalizedCopy(value: string): string {\n return value.normalize(\"NFKC\").toLocaleLowerCase();\n}\n\nfunction validateBadge(badge: BottomNavigationCounterBadge): void {\n if (!isObject(badge)) {\n throw new TypeError(\"BottomNavigation badge must be an object\");\n }\n rejectUnknownKeys(badge, badgeKeys, \"badge\");\n if (!Number.isSafeInteger(badge.count) || badge.count < 0) {\n throw new TypeError(\"BottomNavigation badge count must be a non-negative safe integer\");\n }\n if (\n badge.max !== undefined &&\n (!Number.isSafeInteger(badge.max) || badge.max < 1)\n ) {\n throw new TypeError(\"BottomNavigation badge max must be a positive safe integer\");\n }\n validateTrimmedCopy(\n badge.accessibilityLabel,\n \"BottomNavigation badge accessibilityLabel\",\n );\n}\n\nfunction validateItem<Key extends string, IconName extends string>(\n item: BottomNavigationItemDescriptor<Key, IconName>,\n): void {\n if (!isObject(item)) {\n throw new TypeError(\"BottomNavigation item must be an object\");\n }\n rejectUnknownKeys(item, itemKeys, \"item\");\n validateTrimmedCopy(item.id, \"BottomNavigation item id\");\n validateTrimmedCopy(item.label, \"BottomNavigation item label\");\n if (item.accessibilityLabel !== undefined) {\n validateTrimmedCopy(\n item.accessibilityLabel,\n \"BottomNavigation item accessibilityLabel\",\n );\n if (\n !normalizedCopy(item.accessibilityLabel).includes(\n normalizedCopy(item.label),\n )\n ) {\n throw new TypeError(\n \"BottomNavigation item accessibilityLabel must include the visible label\",\n );\n }\n }\n if (!isObject(item.icon)) {\n throw new TypeError(\"BottomNavigation item icon must be an object\");\n }\n if (item.icon.decorative !== undefined && item.icon.decorative !== true) {\n throw new TypeError(\"BottomNavigation item icon must be decorative\");\n }\n rejectUnknownKeys(item.icon, iconKeys, \"item icon\");\n validateTrimmedCopy(item.icon.name, \"BottomNavigation item icon name\");\n if (item.disabled !== undefined && typeof item.disabled !== \"boolean\") {\n throw new TypeError(\"BottomNavigation item disabled must be a boolean\");\n }\n if (item.badge !== undefined) validateBadge(item.badge);\n if (item.prominent !== undefined && typeof item.prominent !== \"boolean\") {\n throw new TypeError(\"BottomNavigation item prominent must be a boolean\");\n }\n}\n\nconst presentations = new Set<BottomNavigationPresentation>([\"bar\", \"floating\", \"capsule\"]);\nconst distributions = new Set<BottomNavigationDistribution>([\"equal\", \"center-gap\"]);\nconst densities = new Set<BottomNavigationDensity>([\"compact\", \"regular\"]);\nconst directions = new Set<BottomNavigationDirection>([\"ltr\", \"rtl\"]);\nconst keyboardBehaviors = new Set<BottomNavigationKeyboardBehavior>([\n \"hide\",\n \"remain\",\n]);\nconst labelModes = new Set<BottomNavigationLabels>([\"visible\", \"hidden\"]);\nconst iconSizes = new Set<BottomNavigationIconSize>([\"standard\", \"large\", \"xlarge\"]);\nconst shapes = new Set<BottomNavigationShape>([\"standard\", \"rounded\", \"pill\", \"compact\", \"square\"]);\nconst iconEmphases = new Set<BottomNavigationIconEmphasis>([\"scale\", \"lift\"]);\n\nexport function validateBottomNavigationConfiguration(\n configuration: BottomNavigationConfiguration,\n itemCount: number,\n): void {\n if (!isObject(configuration)) {\n throw new TypeError(\"BottomNavigation configuration must be an object\");\n }\n rejectUnknownKeys(configuration, configurationKeys, \"configuration\");\n if (\n !Number.isSafeInteger(itemCount) ||\n itemCount < bottomNavigationBehaviorDefaults.minItems ||\n itemCount > bottomNavigationBehaviorDefaults.maxItems\n ) {\n throw new RangeError(\n `BottomNavigation configuration requires ${bottomNavigationBehaviorDefaults.minItems} to ${bottomNavigationBehaviorDefaults.maxItems} destinations`,\n );\n }\n if (\n configuration.presentation !== undefined &&\n !presentations.has(configuration.presentation)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation presentation: ${String(configuration.presentation)}`,\n );\n }\n if (\n configuration.distribution !== undefined &&\n !distributions.has(configuration.distribution)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation distribution: ${String(configuration.distribution)}`,\n );\n }\n if (configuration.density !== undefined && !densities.has(configuration.density)) {\n throw new TypeError(\n `Unsupported BottomNavigation density: ${String(configuration.density)}`,\n );\n }\n if (\n configuration.direction !== undefined &&\n !directions.has(configuration.direction)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation direction: ${String(configuration.direction)}`,\n );\n }\n if (\n configuration.keyboardBehavior !== undefined &&\n !keyboardBehaviors.has(configuration.keyboardBehavior)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation keyboardBehavior: ${String(configuration.keyboardBehavior)}`,\n );\n }\n if (configuration.labels !== undefined && !labelModes.has(configuration.labels)) {\n throw new TypeError(\n `Unsupported BottomNavigation labels: ${String(configuration.labels)}`,\n );\n }\n if (configuration.selection !== undefined && ![\"emphasis\", \"tile\"].includes(configuration.selection)) {\n throw new TypeError(\"Unsupported BottomNavigation selection\");\n }\n // Spint's selected card must not inherit capsule's hidden names or unequal widths.\n if (configuration.selection === \"tile\" &&\n (configuration.presentation !== \"floating\" || configuration.distribution === \"center-gap\" || configuration.labels === \"hidden\")) {\n throw new TypeError(\"BottomNavigation tile selection requires floating, equal distribution and visible labels\");\n }\n if (configuration.surface !== undefined && ![\"flat\", \"raised\"].includes(configuration.surface)) {\n throw new TypeError(\"Unsupported BottomNavigation surface\");\n }\n // The lower edges belong to the tile row; an emphasis bar has no selected card to lift.\n if (configuration.surface === \"raised\" && configuration.selection !== \"tile\") {\n throw new TypeError(\"BottomNavigation raised surface requires tile selection\");\n }\n if (configuration.tone !== undefined) {\n if (![\"brand\", \"neutral\"].includes(configuration.tone)) {\n throw new TypeError(\"Unsupported BottomNavigation tone\");\n }\n // Raised surfaces own their sunken fill; accepting tone there would silently ignore the requested background.\n if (configuration.selection !== \"tile\" || configuration.surface === \"raised\") {\n throw new TypeError(\"BottomNavigation tone requires flat tile selection\");\n }\n }\n // Capsule actions sit beside the destination surface, so reserving a central gap would duplicate their space.\n if (configuration.presentation === \"capsule\" && configuration.distribution === \"center-gap\") {\n throw new TypeError(\"BottomNavigation capsule uses an adjacent action, not center-gap\");\n }\n if (configuration.iconSize !== undefined && !iconSizes.has(configuration.iconSize)) {\n throw new TypeError(\n `Unsupported BottomNavigation iconSize: ${String(configuration.iconSize)}`,\n );\n }\n if (configuration.shape !== undefined && !shapes.has(configuration.shape)) {\n throw new TypeError(`Unsupported BottomNavigation shape: ${String(configuration.shape)}`);\n }\n // A shape reframes the floating surface only: bar spans the viewport, capsule is already a pill, and the tile\n // row owns its own inner padding and card radius.\n if (\n configuration.shape !== undefined &&\n configuration.shape !== \"standard\" &&\n (configuration.presentation !== \"floating\" || configuration.selection === \"tile\")\n ) {\n throw new TypeError(\"BottomNavigation shape requires floating presentation and emphasis selection\");\n }\n if (configuration.iconEmphasis !== undefined && !iconEmphases.has(configuration.iconEmphasis)) {\n throw new TypeError(\n `Unsupported BottomNavigation iconEmphasis: ${String(configuration.iconEmphasis)}`,\n );\n }\n if (configuration.distribution === \"center-gap\" && itemCount % 2 !== 0) {\n throw new RangeError(\n \"BottomNavigation center-gap distribution requires an even destination count\",\n );\n }\n}\n\nexport function resolveBottomNavigationConfiguration(\n configuration: BottomNavigationConfiguration,\n itemCount: number,\n): ResolvedBottomNavigationConfiguration {\n validateBottomNavigationConfiguration(configuration, itemCount);\n return {\n presentation:\n configuration.presentation ?? bottomNavigationRecipeDefaults.presentation,\n distribution:\n configuration.distribution ?? bottomNavigationRecipeDefaults.distribution,\n density: configuration.density ?? bottomNavigationRecipeDefaults.density,\n direction: configuration.direction ?? bottomNavigationBehaviorDefaults.direction,\n keyboardBehavior:\n configuration.keyboardBehavior ??\n bottomNavigationBehaviorDefaults.keyboardBehavior,\n labels: configuration.labels ?? bottomNavigationBehaviorDefaults.labels,\n selection: configuration.selection ?? bottomNavigationBehaviorDefaults.selection,\n surface: configuration.surface ?? bottomNavigationBehaviorDefaults.surface,\n tone: configuration.tone ?? bottomNavigationBehaviorDefaults.tone,\n iconSize: configuration.iconSize ?? bottomNavigationBehaviorDefaults.iconSize,\n shape: configuration.shape ?? bottomNavigationBehaviorDefaults.shape,\n iconEmphasis: configuration.iconEmphasis ?? bottomNavigationBehaviorDefaults.iconEmphasis,\n };\n}\n\nexport function validateBottomNavigationDescriptor<\n Key extends string,\n IconName extends string,\n>(descriptor: BottomNavigationDescriptor<Key, IconName>): void {\n if (!isObject(descriptor)) {\n throw new TypeError(\"BottomNavigation descriptor must be an object\");\n }\n rejectUnknownKeys(descriptor, descriptorKeys, \"descriptor\");\n validateTrimmedCopy(\n descriptor.accessibilityLabel,\n \"BottomNavigation accessibilityLabel\",\n );\n if (!Array.isArray(descriptor.items)) {\n throw new TypeError(\"BottomNavigation items must be an array\");\n }\n validateTrimmedCopy(\n descriptor.selectedKey,\n \"BottomNavigation selectedKey\",\n );\n if (\n descriptor.items.length < bottomNavigationBehaviorDefaults.minItems ||\n descriptor.items.length > bottomNavigationBehaviorDefaults.maxItems\n ) {\n throw new RangeError(\n `BottomNavigation must contain ${bottomNavigationBehaviorDefaults.minItems} to ${bottomNavigationBehaviorDefaults.maxItems} destinations`,\n );\n }\n\n const ids = new Set<Key>();\n for (const item of descriptor.items) {\n validateItem(item);\n if (ids.has(item.id)) {\n throw new TypeError(`Duplicate BottomNavigation item id: ${item.id}`);\n }\n ids.add(item.id);\n }\n\n const selected = descriptor.items.find(\n (item) => item.id === descriptor.selectedKey,\n );\n if (!selected) {\n throw new RangeError(\n `BottomNavigation selectedKey must exist: ${descriptor.selectedKey}`,\n );\n }\n if (selected.disabled) {\n throw new RangeError(\"BottomNavigation selected destination must be enabled\");\n }\n const prominentIndex = descriptor.items.findIndex((item) => item.prominent === true);\n if (prominentIndex !== -1) {\n // The lifted circle is centered over the bar; any other slot would sit off-center and overlap a neighbour.\n if (\n descriptor.items.length % 2 === 0 ||\n prominentIndex !== (descriptor.items.length - 1) / 2 ||\n descriptor.items.filter((item) => item.prominent === true).length > 1\n ) {\n throw new RangeError(\n \"BottomNavigation prominent destination must be the single middle item of an odd item count\",\n );\n }\n }\n}\n\n/**\n * A prominent destination needs the plain row: center-gap reserves the same slot for a primaryAction, capsule\n * places actions beside the surface, and a tile card would paint behind the lifted circle.\n */\nexport function validateBottomNavigationProminence(\n items: readonly Readonly<{ prominent?: boolean }>[],\n configuration: ResolvedBottomNavigationConfiguration,\n): void {\n if (!items.some((item) => item.prominent === true)) return;\n if (\n configuration.distribution !== \"equal\" ||\n configuration.presentation === \"capsule\" ||\n configuration.selection === \"tile\"\n ) {\n throw new TypeError(\n \"BottomNavigation prominent destination requires equal distribution, bar or floating presentation and emphasis selection\",\n );\n }\n}\n\nexport function resolveBottomNavigationItem<\n Key extends string,\n IconName extends string,\n>(\n item: BottomNavigationItemDescriptor<Key, IconName>,\n): ResolvedBottomNavigationItemDescriptor<Key, IconName> {\n validateItem(item);\n const baseAccessibilityLabel = item.accessibilityLabel ?? item.label;\n const visibleBadgeLabel = item.badge\n ? formatCounterBadgeCount(item.badge.count, item.badge.max)\n : null;\n const badge = visibleBadgeLabel\n ? ({\n visibleLabel: visibleBadgeLabel,\n hiddenFromAccessibility: true,\n } as const)\n : null;\n\n return {\n id: item.id,\n label: item.label,\n icon: { name: item.icon.name, decorative: true },\n disabled: item.disabled ?? false,\n prominent: item.prominent ?? false,\n badge,\n resolvedAccessibilityLabel:\n badge && item.badge\n ? `${baseAccessibilityLabel}, ${item.badge.accessibilityLabel}`\n : baseAccessibilityLabel,\n };\n}\n\nexport function resolveBottomNavigationDescriptor<\n Key extends string,\n IconName extends string,\n>(\n descriptor: BottomNavigationDescriptor<Key, IconName>,\n): ResolvedBottomNavigationDescriptor<Key, IconName> {\n validateBottomNavigationDescriptor(descriptor);\n return {\n accessibilityLabel: descriptor.accessibilityLabel,\n items: descriptor.items.map(resolveBottomNavigationItem),\n selectedKey: descriptor.selectedKey,\n };\n}\n\n/**\n * Produces navigation intent without mutating selectedKey. A renderer forwards\n * the request to its router, which updates selectedKey only after navigation.\n */\nexport function resolveBottomNavigationActivation<\n Key extends string,\n IconName extends string,\n>(\n descriptor: BottomNavigationDescriptor<Key, IconName>,\n key: Key,\n): BottomNavigationActivation<Key> | null {\n validateBottomNavigationDescriptor(descriptor);\n const item = descriptor.items.find((candidate) => candidate.id === key);\n if (!item || item.disabled) return null;\n return {\n key,\n reason: key === descriptor.selectedKey ? \"reselect\" : \"navigate\",\n };\n}\n"]}
|
package/dist/card.d.ts
CHANGED
|
@@ -40,9 +40,9 @@ export declare const cardRecipe: {
|
|
|
40
40
|
readonly alignItems: "center";
|
|
41
41
|
};
|
|
42
42
|
readonly title: {
|
|
43
|
-
readonly variant: "
|
|
43
|
+
readonly variant: "bodyLarge";
|
|
44
44
|
readonly tone: "primary";
|
|
45
|
-
readonly emphasis: "
|
|
45
|
+
readonly emphasis: "medium";
|
|
46
46
|
};
|
|
47
47
|
readonly description: {
|
|
48
48
|
readonly variant: "body";
|
package/dist/card.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../src/card.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../src/card.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0GtB,CAAC"}
|
package/dist/card.js
CHANGED
|
@@ -50,10 +50,11 @@ export const cardRecipe = {
|
|
|
50
50
|
// Short copy and independent commands share one vertical center (BurnTok profile, 2026-10-20).
|
|
51
51
|
alignItems: "center",
|
|
52
52
|
},
|
|
53
|
+
// Card titles stay below page titles in dense content flows (BurnTok review, 2026-10-25).
|
|
53
54
|
title: {
|
|
54
|
-
variant: "
|
|
55
|
+
variant: "bodyLarge",
|
|
55
56
|
tone: "primary",
|
|
56
|
-
emphasis: "
|
|
57
|
+
emphasis: "medium",
|
|
57
58
|
},
|
|
58
59
|
description: {
|
|
59
60
|
variant: "body",
|
package/dist/card.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.js","sourceRoot":"","sources":["../src/card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EACL,YAAY,GAGb,MAAM,mBAAmB,CAAC;AAI3B;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE;QACL,MAAM;QACN,OAAO;QACP,iBAAiB;QACjB,uBAAuB;QACvB,aAAa;QACb,QAAQ;QACR,aAAa;QACb,MAAM;QACN,QAAQ;QACR,SAAS;QACT,OAAO;QACP,aAAa;QACb,SAAS;QACT,SAAS;KACD;IACV,QAAQ,EAAE;QACR,8EAA8E;QAC9E,0EAA0E;QAC1E,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,OAAO;QACpB,OAAO,EAAE,IAAI;KACd;IACD,YAAY,EAAE,UAAU;IACxB,mFAAmF;IACnF,4FAA4F;IAC5F,WAAW,EAAE,EAAE,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE;IAC7G,wGAAwG;IACxG,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE;IACxF,8FAA8F;IAC9F,mFAAmF;IACnF,eAAe,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,SAAS,EAAE;IACvE,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE;IAClD,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC,EAAE;QACnB,GAAG,EAAE,OAAO,CAAC,EAAE;KAChB;IACD,MAAM,EAAE;QACN,GAAG,EAAE,OAAO,CAAC,EAAE;QACf,+FAA+F;QAC/F,UAAU,EAAE,QAAQ;KACrB;IACD,KAAK,EAAE;QACL,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"card.js","sourceRoot":"","sources":["../src/card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EACL,YAAY,GAGb,MAAM,mBAAmB,CAAC;AAI3B;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE;QACL,MAAM;QACN,OAAO;QACP,iBAAiB;QACjB,uBAAuB;QACvB,aAAa;QACb,QAAQ;QACR,aAAa;QACb,MAAM;QACN,QAAQ;QACR,SAAS;QACT,OAAO;QACP,aAAa;QACb,SAAS;QACT,SAAS;KACD;IACV,QAAQ,EAAE;QACR,8EAA8E;QAC9E,0EAA0E;QAC1E,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,OAAO;QACpB,OAAO,EAAE,IAAI;KACd;IACD,YAAY,EAAE,UAAU;IACxB,mFAAmF;IACnF,4FAA4F;IAC5F,WAAW,EAAE,EAAE,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE;IAC7G,wGAAwG;IACxG,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE;IACxF,8FAA8F;IAC9F,mFAAmF;IACnF,eAAe,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,SAAS,EAAE;IACvE,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE;IAClD,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC,EAAE;QACnB,GAAG,EAAE,OAAO,CAAC,EAAE;KAChB;IACD,MAAM,EAAE;QACN,GAAG,EAAE,OAAO,CAAC,EAAE;QACf,+FAA+F;QAC/F,UAAU,EAAE,QAAQ;KACrB;IACD,0FAA0F;IAC1F,KAAK,EAAE;QACL,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,QAAQ;KACnB;IACD,WAAW,EAAE;QACX,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,SAAS;KACpB;IACD,OAAO,EAAE;QACP,+FAA+F;QAC/F,GAAG,EAAE,OAAO,CAAC,EAAE;QACf,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAC7B,aAAa,EAAE,OAAO,CAAC,EAAE;KAC1B;CA4CF,CAAC","sourcesContent":["import { control, glyph, spacing } from \"./foundations.js\";\nimport {\n buttonRecipe,\n type SurfacePadding,\n type SurfaceTone,\n} from \"./base-recipes.js\";\n\nexport type CardHeadingLevel = 2 | 3 | 4;\n\n/**\n * Shared Card anatomy. Renderers own their host nodes (`article` on Web,\n * `View` on Native), while these slots and defaults stay identical.\n */\nexport const cardRecipe = {\n slots: [\n \"root\",\n \"media\",\n \"backgroundMedia\",\n \"backgroundInteraction\",\n \"mediaBadges\",\n \"badges\",\n \"mediaAction\",\n \"body\",\n \"header\",\n \"leading\",\n \"title\",\n \"description\",\n \"content\",\n \"actions\",\n ] as const,\n defaults: {\n // Today Baseball's schedule cards establish the shared raised card treatment.\n // Keep plain Surface defaults independent so layout containers stay flat.\n tone: \"raised\",\n selected: false,\n bordered: true,\n headingLevel: 3,\n badgesAlign: \"start\",\n padding: \"md\",\n },\n selectedTone: \"selected\",\n // BurnTok's compact 3-column picker (2026-10-10) needs the whole card to activate.\n // Reuse control state opacity instead of a product Pressable with a second visual contract.\n interaction: { disabledOpacity: buttonRecipe.opacity.disabled, pressedOpacity: buttonRecipe.opacity.pressed },\n // A playable cover is one target beside independent creator/comment actions (BurnTok screen migration).\n mediaAction: { inset: spacing.sm, diameter: control.minTouchTarget, iconSize: glyph.sm },\n // Decorative artwork needs fixed contrast independent of brand onPrimary (which can be dark).\n // A 60% black scrim keeps white card text readable even over a white source image.\n backgroundMedia: { scrim: \"rgba(0, 0, 0, 0.6)\", foreground: \"#ffffff\" },\n quotation: { gap: spacing.xs, markSize: glyph.md },\n body: {\n padding: spacing.md,\n gap: spacing.xs,\n },\n header: {\n gap: spacing.sm,\n // Short copy and independent commands share one vertical center (BurnTok profile, 2026-10-20).\n alignItems: \"center\",\n },\n // Card titles stay below page titles in dense content flows (BurnTok review, 2026-10-25).\n title: {\n variant: \"bodyLarge\",\n tone: \"primary\",\n emphasis: \"medium\",\n },\n description: {\n variant: \"body\",\n tone: \"muted\",\n emphasis: \"regular\",\n },\n actions: {\n // Button groups share the 8px actionGroupRecipe contract in both renderers (2026-10-21 audit).\n gap: spacing.xs,\n paddingHorizontal: spacing.md,\n paddingBottom: spacing.md,\n },\n} as const satisfies {\n slots: readonly [\n \"root\",\n \"media\",\n \"backgroundMedia\",\n \"backgroundInteraction\",\n \"mediaBadges\",\n \"badges\",\n \"mediaAction\",\n \"body\",\n \"header\",\n \"leading\",\n \"title\",\n \"description\",\n \"content\",\n \"actions\",\n ];\n defaults: {\n tone: SurfaceTone;\n selected: boolean;\n bordered: boolean;\n headingLevel: CardHeadingLevel;\n badgesAlign: \"start\" | \"center\";\n padding: SurfacePadding;\n };\n selectedTone: SurfaceTone;\n interaction: { disabledOpacity: number; pressedOpacity: number };\n mediaAction: { inset: number; diameter: number; iconSize: number };\n backgroundMedia: { scrim: string; foreground: string };\n quotation: { gap: number; markSize: number };\n body: { padding: number; gap: number };\n header: { gap: number; alignItems: \"center\" };\n title: {\n variant: \"bodyLarge\";\n tone: \"primary\";\n emphasis: \"medium\";\n };\n description: {\n variant: \"body\";\n tone: \"muted\";\n emphasis: \"regular\";\n };\n actions: { gap: number; paddingHorizontal: number; paddingBottom: number };\n};\n"]}
|
package/dist/carousel.d.ts
CHANGED
package/dist/carousel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../src/carousel.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IACzE,EAAE,EAAE,EAAE,CAAC;IACP,wGAAwG;IACxG,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,MAAM,2BAA2B,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IAC7E,UAAU,EAAE,EAAE,CAAC;IACf,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAC1B,kBAAkB,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;CACnC,CAAC,CAAC;AAEH;;+EAE+E;AAC/E,MAAM,MAAM,6BAA6B,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IAC/E,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,iBAAiB,CAAC,EAAE,EAAE,CAAC;IACvB,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC;CACxC,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,IACpD,2BAA2B,CAAC,EAAE,CAAC,GAC/B,6BAA6B,CAAC,EAAE,CAAC,CAAC;AAEtC,MAAM,MAAM,kBAAkB,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IACpE,MAAM,EAAE,SAAS,uBAAuB,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/C,UAAU,EAAE,EAAE,CAAC;IACf,oEAAoE;IACpE,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CACnC,CAAC,CAAC;AAQH,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,MAAM,EACrD,KAAK,EAAE,uBAAuB,CAAC,EAAE,CAAC,GACjC,IAAI,CAMN;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,sBAAsB,GAC/B,IAAI,CAKN;AAED,wBAAgB,0BAA0B,CAAC,EAAE,SAAS,MAAM,EAC1D,UAAU,EAAE,kBAAkB,CAAC,EAAE,CAAC,GACjC,IAAI,CAoBN;AAED,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,6BAA6B,GAAG,CAC1C,IAAI,EAAE,0BAA0B,KAC7B,MAAM,CAAC;AAEZ,MAAM,MAAM,+BAA+B,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,IACpE,uBAAuB,CAAC,EAAE,CAAC,GACzB,QAAQ,CAAC;IACP,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC,CAAC;AAEP,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,qBAAqB,EAAE,6BAA6B,CAAC;CACtD,CAAC,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,SAAS,MAAM,EACzD,UAAU,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAClC,OAAO,EAAE,sBAAsB,GAC9B,SAAS,+BAA+B,CAAC,EAAE,CAAC,EAAE,CAsBhD;AAED,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,SAAS,MAAM,EAC3D,UAAU,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAClC,MAAM,EAAE,wBAAwB,GAC/B,EAAE,CAYJ;AAED,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,mEAAmE;IACnE,aAAa,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,sBAAsB,GAAG,SAAS,EAC5C,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAIT;AAED,eAAO,MAAM,wBAAwB;;CAEe,CAAC;AAErD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;CA4BQ,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAC7C,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,QAAQ,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE5F,wGAAwG;AACxG,MAAM,MAAM,kCAAkC,GAAG,CAAC,IAAI,EAAE,+BAA+B,KAAK,MAAM,CAAC;AAEnG,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC,CAAC;AAEH,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,uBAAuB,GAAG,IAAI,CAczF;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,uBAAuB,EACnC,qBAAqB,EAAE,kCAAkC,GACxD,SAAS,wBAAwB,EAAE,CAiBrC;AAED,6FAA6F;AAC7F,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,uBAAuB,EACnC,MAAM,EAAE,wBAAwB,GAC/B,MAAM,CAKR;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;AAEpC,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../src/carousel.ts"],"names":[],"mappings":"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"}
|
package/dist/carousel.js
CHANGED
package/dist/carousel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carousel.js","sourceRoot":"","sources":["../src/carousel.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BehaviorContract } from \"./behaviors.js\";\nimport type { ColorReference } from \"./color-references.js\";\nimport type { SemanticIconName } from \"./icon.js\";\nimport { focusIndicatorContract } from \"./component-contracts.js\";\nimport { control, motionPreset, opacity, spacing } from \"./foundations.js\";\nimport { assertFiniteNumber } from \"./number-field.js\";\nimport { semanticColors } from \"./semantic-colors.js\";\n\n/**\n * Ant Design Carousel's default infinite loop is intentionally not reproduced;\n * autoplay remains opt-in in both libraries — automatic movement can obscure what this contract treats as\n * non-negotiable: a reliable answer to \"where am I, and where does it end\".\n * See docs/carousel.md for the accessibility rationale on every point below.\n */\nexport type CarouselSlideDescriptor<Id extends string = string> = Readonly<{\n id: Id;\n /** Accessible name for the slide, e.g. \"8/19 두산 vs LG\". The slide's visual content is product-owned. */\n label: string;\n}>;\n\nexport type CarouselAutoplayConfig = Readonly<{\n /** Minimum time a slide stays current before an automatic advance. */\n intervalMs: number;\n}>;\n\n/**\n * Renderer-facing prop shape only — mirrors SelectSelection's controlled/\n * uncontrolled duality, but the resolver below always takes a concrete,\n * already-resolved `currentKey` (see CarouselDescriptor) so validation and\n * position math never have to branch on which mode the product chose.\n */\nexport type ControlledCarouselSelection<Id extends string = string> = Readonly<{\n currentKey: Id;\n defaultCurrentKey?: never;\n onCurrentKeyChange(key: Id): void;\n}>;\n\n/** After mount, removing the current slide selects the slide at its previous\n * position, clamped to the new last position, and emits onCurrentKeyChange once.\n * An invalid initial default and an empty collection still fail validation. */\nexport type UncontrolledCarouselSelection<Id extends string = string> = Readonly<{\n currentKey?: never;\n defaultCurrentKey?: Id;\n onCurrentKeyChange?: (key: Id) => void;\n}>;\n\nexport type CarouselSelection<Id extends string = string> =\n | ControlledCarouselSelection<Id>\n | UncontrolledCarouselSelection<Id>;\n\nexport type CarouselDescriptor<Id extends string = string> = Readonly<{\n slides: readonly CarouselSlideDescriptor<Id>[];\n currentKey: Id;\n /** Absent by default. Autoplay is opt-in — see docs/carousel.md. */\n autoplay?: CarouselAutoplayConfig;\n}>;\n\nfunction assertNonEmpty(value: string, field: string): void {\n if (value.trim().length === 0) {\n throw new TypeError(`Carousel ${field} must not be empty`);\n }\n}\n\nexport function validateCarouselSlide<Id extends string>(\n slide: CarouselSlideDescriptor<Id>,\n): void {\n assertNonEmpty(slide.id, \"slide id\");\n if (slide.id !== slide.id.trim()) {\n throw new TypeError(\"Carousel slide id must not start or end with whitespace\");\n }\n assertNonEmpty(slide.label, \"slide label\");\n}\n\nexport function validateCarouselAutoplayConfig(\n autoplay: CarouselAutoplayConfig,\n): void {\n assertFiniteNumber(autoplay.intervalMs, \"autoplay.intervalMs\");\n if (autoplay.intervalMs <= 0) {\n throw new RangeError(\"Carousel autoplay.intervalMs must be greater than zero\");\n }\n}\n\nexport function validateCarouselDescriptor<Id extends string>(\n descriptor: CarouselDescriptor<Id>,\n): void {\n if (descriptor.slides.length === 0) {\n throw new RangeError(\"Carousel must contain at least one slide\");\n }\n const ids = new Set<Id>();\n for (const slide of descriptor.slides) {\n validateCarouselSlide(slide);\n if (ids.has(slide.id)) {\n throw new TypeError(`Duplicate Carousel slide id: ${slide.id}`);\n }\n ids.add(slide.id);\n }\n if (!ids.has(descriptor.currentKey)) {\n throw new RangeError(\n `Carousel currentKey does not match any slide id: ${String(descriptor.currentKey)}`,\n );\n }\n if (descriptor.autoplay) {\n validateCarouselAutoplayConfig(descriptor.autoplay);\n }\n}\n\nexport type CarouselAccessibleNameInfo = Readonly<{\n position: number;\n total: number;\n label: string;\n}>;\n\n/**\n * Same reason Steps and Timeline do not assemble their own accessible name:\n * counter-word grammar and phrase order are product-owned copy decisions.\n */\nexport type ComposeCarouselAccessibleName = (\n info: CarouselAccessibleNameInfo,\n) => string;\n\nexport type ResolvedCarouselSlideDescriptor<Id extends string = string> =\n CarouselSlideDescriptor<Id> &\n Readonly<{\n /** 1-indexed so position and label both preserve reading order for renderers. */\n position: number;\n total: number;\n current: boolean;\n /**\n * True for every slide but the current one. A renderer must exclude an\n * inert slide's interactive content from both focus and the\n * accessibility tree — a hidden slide whose link can still receive\n * focus is worse than one that is simply unreachable until the user\n * advances to it (see docs/carousel.md).\n */\n inert: boolean;\n accessibleName: string;\n }>;\n\nexport type ResolveCarouselOptions = Readonly<{\n composeAccessibleName: ComposeCarouselAccessibleName;\n}>;\n\n/**\n * Attaches order, current/inert, and the composed accessible name used by\n * both the slide group and its indicator dot — one composer, reused for\n * every render target, the same way Steps reuses a single composer.\n */\nexport function resolveCarouselDescriptor<Id extends string>(\n descriptor: CarouselDescriptor<Id>,\n options: ResolveCarouselOptions,\n): readonly ResolvedCarouselSlideDescriptor<Id>[] {\n validateCarouselDescriptor(descriptor);\n if (typeof options.composeAccessibleName !== \"function\") {\n throw new TypeError(\"Carousel composeAccessibleName must be a function\");\n }\n\n const total = descriptor.slides.length;\n return descriptor.slides.map((slide, index) => {\n const position = index + 1;\n const current = slide.id === descriptor.currentKey;\n const accessibleName = options.composeAccessibleName({\n position,\n total,\n label: slide.label,\n });\n if (typeof accessibleName !== \"string\" || accessibleName.trim().length === 0) {\n throw new TypeError(\n \"Carousel composeAccessibleName must return a non-empty string\",\n );\n }\n return { ...slide, position, total, current, inert: !current, accessibleName };\n });\n}\n\nexport type CarouselNavigationIntent = \"next\" | \"previous\" | \"first\" | \"last\";\n\n/**\n * Clamps at the first/last slide instead of wrapping — infinite loop is out\n * of scope (see docs/carousel.md), so there is no modulo here at all, unlike\n * getCollectionNavigationTarget's `loop` parameter elsewhere in this package.\n */\nexport function getCarouselNavigationTarget<Id extends string>(\n descriptor: CarouselDescriptor<Id>,\n intent: CarouselNavigationIntent,\n): Id {\n validateCarouselDescriptor(descriptor);\n const { slides, currentKey } = descriptor;\n if (intent === \"first\") return slides[0]!.id;\n if (intent === \"last\") return slides.at(-1)!.id;\n const currentIndex = slides.findIndex((slide) => slide.id === currentKey);\n const delta = intent === \"next\" ? 1 : -1;\n const clampedIndex = Math.min(\n Math.max(currentIndex + delta, 0),\n slides.length - 1,\n );\n return slides[clampedIndex]!.id;\n}\n\nexport type CarouselAutoplayInputs = Readonly<{\n /** True whenever a platform reduce-motion preference is active. */\n reducedMotion: boolean;\n /** Renderer-combined pointer hover, focus-within, and drag signal. */\n paused: boolean;\n}>;\n\n/**\n * Autoplay is never active without an explicit config, under reduce motion,\n * or while the user is hovering, focusing, or dragging the carousel — the\n * three guards the brief requires are one function so a renderer cannot wire\n * an autoplay timer that forgets one of them.\n */\nexport function isCarouselAutoplayActive(\n autoplay: CarouselAutoplayConfig | undefined,\n inputs: CarouselAutoplayInputs,\n): boolean {\n if (!autoplay) return false;\n validateCarouselAutoplayConfig(autoplay);\n return !inputs.reducedMotion && !inputs.paused;\n}\n\nexport const carouselBehaviorDefaults = {\n autoplay: false,\n} as const satisfies Readonly<{ autoplay: boolean }>;\n\nexport const carouselBehavior = {\n controlled: [\"currentKey\", \"defaultCurrentKey\", \"onCurrentKeyChange\"],\n inputs: [\"autoplay\", \"reducedMotion\", \"dragged\"],\n defaults: carouselBehaviorDefaults,\n stateAxes: {\n interaction: [\"idle\", \"dragged\"],\n value: [\"selected\"],\n },\n web: {\n roles: [\"region\", \"group\"],\n keyboard: [\"Tab\", \"Enter\", \"Space\", \"ArrowLeft\", \"ArrowRight\"],\n focus: \"native\",\n },\n native: {\n roles: [\"adjustable\"],\n states: [\"selected\"],\n actions: [\"increment\", \"decrement\"],\n },\n scenarios: [\n \"current-position-is-announced-with-a-readable-name-not-dots-alone\",\n \"inactive-slide-content-is-excluded-from-focus-and-the-accessibility-tree\",\n \"previous-next-and-dot-controls-stay-in-tab-order-regardless-of-current-slide\",\n \"arrow-keys-move-one-slide-on-web-swipe-moves-one-slide-on-native\",\n \"boundary-slides-clamp-instead-of-wrapping-because-loop-is-out-of-scope\",\n \"autoplay-is-opt-in-and-off-by-default\",\n \"autoplay-never-runs-when-reduced-motion-is-active\",\n \"autoplay-pauses-on-hover-focus-or-drag-and-does-not-announce-automatic-transitions\",\n ],\n} as const satisfies BehaviorContract;\n\n/**\n * PageIndicator is Carousel's position dot row on its own, for a product-owned pager (a paging FlatList or\n * scroll-snap row) that Carousel cannot host because Carousel owns its slides. It reuses `carouselRecipe.dot`\n * and the same clamped navigation, so both rows look and behave the same. Added 2026-10-18 for the Utilverse\n * launcher, which drew its own dots under a native pager.\n */\nexport type PageIndicatorDescriptor = Readonly<{\n /** Number of pages, at least 1. */\n count: number;\n /** Zero-based current page. */\n currentIndex: number;\n /** Limit the visible window around the current page; omitted shows every page. */\n maxVisibleDots?: number;\n}>;\n\nexport type PageIndicatorAccessibleNameInfo = Readonly<{ position: number; total: number }>;\n\n/** Product-owned copy for one page, e.g. \"Home page 2 of 5\" — counter grammar is not the renderer's. */\nexport type ComposePageIndicatorAccessibleName = (info: PageIndicatorAccessibleNameInfo) => string;\n\nexport type ResolvedPageIndicatorDot = Readonly<{\n index: number;\n /** 1-indexed reading position. */\n position: number;\n total: number;\n current: boolean;\n accessibleName: string;\n}>;\n\nexport function validatePageIndicatorDescriptor(descriptor: PageIndicatorDescriptor): void {\n if (!Number.isSafeInteger(descriptor.count) || descriptor.count < 1) {\n throw new RangeError(\"PageIndicator count must be a positive integer\");\n }\n if (\n !Number.isSafeInteger(descriptor.currentIndex) ||\n descriptor.currentIndex < 0 ||\n descriptor.currentIndex >= descriptor.count\n ) {\n throw new RangeError(`PageIndicator currentIndex is out of range: ${String(descriptor.currentIndex)}`);\n }\n if (descriptor.maxVisibleDots !== undefined && (!Number.isSafeInteger(descriptor.maxVisibleDots) || descriptor.maxVisibleDots < 1)) {\n throw new RangeError(\"PageIndicator maxVisibleDots must be a positive integer\");\n }\n}\n\nexport function resolvePageIndicator(\n descriptor: PageIndicatorDescriptor,\n composeAccessibleName: ComposePageIndicatorAccessibleName,\n): readonly ResolvedPageIndicatorDot[] {\n validatePageIndicatorDescriptor(descriptor);\n if (typeof composeAccessibleName !== \"function\") {\n throw new TypeError(\"PageIndicator composeAccessibleName must be a function\");\n }\n // Product-owned launchers can contain many pages. Keep the current page in a bounded window without\n // renumbering it: accessibility names and navigation still address the complete pager.\n const length = Math.min(descriptor.count, descriptor.maxVisibleDots ?? descriptor.count);\n const start = Math.max(0, Math.min(descriptor.currentIndex - Math.floor(length / 2), descriptor.count - length));\n return Array.from({ length }, (_, offset) => {\n const index = start + offset;\n const accessibleName = composeAccessibleName({ position: index + 1, total: descriptor.count });\n if (typeof accessibleName !== \"string\" || accessibleName.trim().length === 0) {\n throw new TypeError(\"PageIndicator composeAccessibleName must return a non-empty string\");\n }\n return { index, position: index + 1, total: descriptor.count, current: index === descriptor.currentIndex, accessibleName };\n });\n}\n\n/** Clamps like getCarouselNavigationTarget: a pager indicator has an end, it never wraps. */\nexport function getPageIndicatorTarget(\n descriptor: PageIndicatorDescriptor,\n intent: CarouselNavigationIntent,\n): number {\n validatePageIndicatorDescriptor(descriptor);\n if (intent === \"first\") return 0;\n if (intent === \"last\") return descriptor.count - 1;\n return Math.min(Math.max(descriptor.currentIndex + (intent === \"next\" ? 1 : -1), 0), descriptor.count - 1);\n}\n\nexport type CarouselSize = \"medium\";\n\nexport const carouselRecipe = {\n slots: [\n \"root\",\n \"track\",\n \"slide\",\n \"dots\",\n \"dot\",\n \"previousControl\",\n \"nextControl\",\n ] as const,\n defaults: { size: \"medium\" },\n sizes: {\n medium: {\n gap: spacing.sm,\n controlHitTarget: control.minTouchTarget,\n controlIcon: \"sm\",\n },\n },\n dot: {\n diameter: 8,\n compactGap: spacing.xs,\n hitTarget: control.minTouchTarget,\n color: {\n inactive: semanticColors.border.strong,\n current: semanticColors.content.brand,\n },\n },\n /** Previous/next chrome is composed from IconButton (ghost tone) rather than owning new button visuals. */\n control: {\n icons: {\n previous: \"chevronStart\",\n next: \"chevronEnd\",\n } as const satisfies Readonly<{ previous: SemanticIconName; next: SemanticIconName }>,\n },\n states: {\n focus: focusIndicatorContract,\n draggedOpacity: opacity.dragged,\n },\n /**\n * Manual slide-to-slide movement crossfades rather than snapping under\n * Reduce Motion, reusing the existing \"context\" preset instead of a new\n * token — autoplay itself simply does not run at all (isCarouselAutoplayActive).\n */\n transition: motionPreset.context,\n} as const satisfies {\n slots: readonly string[];\n defaults: { size: CarouselSize };\n sizes: Record<\n CarouselSize,\n { gap: number; controlHitTarget: number; controlIcon: string }\n >;\n dot: {\n diameter: number;\n compactGap: number;\n hitTarget: number;\n color: Record<\"inactive\" | \"current\", ColorReference>;\n };\n control: {\n icons: Readonly<{ previous: SemanticIconName; next: SemanticIconName }>;\n };\n states: {\n focus: typeof focusIndicatorContract;\n draggedOpacity: number;\n };\n transition: typeof motionPreset.context;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"carousel.js","sourceRoot":"","sources":["../src/carousel.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BehaviorContract } from \"./behaviors.js\";\nimport type { ColorReference } from \"./color-references.js\";\nimport type { SemanticIconName } from \"./icon.js\";\nimport { focusIndicatorContract } from \"./component-contracts.js\";\nimport { control, motionPreset, opacity, spacing } from \"./foundations.js\";\nimport { assertFiniteNumber } from \"./number-field.js\";\nimport { semanticColors } from \"./semantic-colors.js\";\n\n/**\n * Ant Design Carousel's default infinite loop is intentionally not reproduced;\n * autoplay remains opt-in in both libraries — automatic movement can obscure what this contract treats as\n * non-negotiable: a reliable answer to \"where am I, and where does it end\".\n * See docs/carousel.md for the accessibility rationale on every point below.\n */\nexport type CarouselSlideDescriptor<Id extends string = string> = Readonly<{\n id: Id;\n /** Accessible name for the slide, e.g. \"8/19 두산 vs LG\". The slide's visual content is product-owned. */\n label: string;\n}>;\n\nexport type CarouselAutoplayConfig = Readonly<{\n /** Minimum time a slide stays current before an automatic advance. */\n intervalMs: number;\n}>;\n\n/**\n * Renderer-facing prop shape only — mirrors SelectSelection's controlled/\n * uncontrolled duality, but the resolver below always takes a concrete,\n * already-resolved `currentKey` (see CarouselDescriptor) so validation and\n * position math never have to branch on which mode the product chose.\n */\nexport type ControlledCarouselSelection<Id extends string = string> = Readonly<{\n currentKey: Id;\n defaultCurrentKey?: never;\n onCurrentKeyChange(key: Id): void;\n}>;\n\n/** After mount, removing the current slide selects the slide at its previous\n * position, clamped to the new last position, and emits onCurrentKeyChange once.\n * An invalid initial default and an empty collection still fail validation. */\nexport type UncontrolledCarouselSelection<Id extends string = string> = Readonly<{\n currentKey?: never;\n defaultCurrentKey?: Id;\n onCurrentKeyChange?: (key: Id) => void;\n}>;\n\nexport type CarouselSelection<Id extends string = string> =\n | ControlledCarouselSelection<Id>\n | UncontrolledCarouselSelection<Id>;\n\nexport type CarouselDescriptor<Id extends string = string> = Readonly<{\n slides: readonly CarouselSlideDescriptor<Id>[];\n currentKey: Id;\n /** Absent by default. Autoplay is opt-in — see docs/carousel.md. */\n autoplay?: CarouselAutoplayConfig;\n}>;\n\nfunction assertNonEmpty(value: string, field: string): void {\n if (value.trim().length === 0) {\n throw new TypeError(`Carousel ${field} must not be empty`);\n }\n}\n\nexport function validateCarouselSlide<Id extends string>(\n slide: CarouselSlideDescriptor<Id>,\n): void {\n assertNonEmpty(slide.id, \"slide id\");\n if (slide.id !== slide.id.trim()) {\n throw new TypeError(\"Carousel slide id must not start or end with whitespace\");\n }\n assertNonEmpty(slide.label, \"slide label\");\n}\n\nexport function validateCarouselAutoplayConfig(\n autoplay: CarouselAutoplayConfig,\n): void {\n assertFiniteNumber(autoplay.intervalMs, \"autoplay.intervalMs\");\n if (autoplay.intervalMs <= 0) {\n throw new RangeError(\"Carousel autoplay.intervalMs must be greater than zero\");\n }\n}\n\nexport function validateCarouselDescriptor<Id extends string>(\n descriptor: CarouselDescriptor<Id>,\n): void {\n if (descriptor.slides.length === 0) {\n throw new RangeError(\"Carousel must contain at least one slide\");\n }\n const ids = new Set<Id>();\n for (const slide of descriptor.slides) {\n validateCarouselSlide(slide);\n if (ids.has(slide.id)) {\n throw new TypeError(`Duplicate Carousel slide id: ${slide.id}`);\n }\n ids.add(slide.id);\n }\n if (!ids.has(descriptor.currentKey)) {\n throw new RangeError(\n `Carousel currentKey does not match any slide id: ${String(descriptor.currentKey)}`,\n );\n }\n if (descriptor.autoplay) {\n validateCarouselAutoplayConfig(descriptor.autoplay);\n }\n}\n\nexport type CarouselAccessibleNameInfo = Readonly<{\n position: number;\n total: number;\n label: string;\n}>;\n\n/**\n * Same reason Steps and Timeline do not assemble their own accessible name:\n * counter-word grammar and phrase order are product-owned copy decisions.\n */\nexport type ComposeCarouselAccessibleName = (\n info: CarouselAccessibleNameInfo,\n) => string;\n\nexport type ResolvedCarouselSlideDescriptor<Id extends string = string> =\n CarouselSlideDescriptor<Id> &\n Readonly<{\n /** 1-indexed so position and label both preserve reading order for renderers. */\n position: number;\n total: number;\n current: boolean;\n /**\n * True for every slide but the current one. A renderer must exclude an\n * inert slide's interactive content from both focus and the\n * accessibility tree — a hidden slide whose link can still receive\n * focus is worse than one that is simply unreachable until the user\n * advances to it (see docs/carousel.md).\n */\n inert: boolean;\n accessibleName: string;\n }>;\n\nexport type ResolveCarouselOptions = Readonly<{\n composeAccessibleName: ComposeCarouselAccessibleName;\n}>;\n\n/**\n * Attaches order, current/inert, and the composed accessible name used by\n * both the slide group and its indicator dot — one composer, reused for\n * every render target, the same way Steps reuses a single composer.\n */\nexport function resolveCarouselDescriptor<Id extends string>(\n descriptor: CarouselDescriptor<Id>,\n options: ResolveCarouselOptions,\n): readonly ResolvedCarouselSlideDescriptor<Id>[] {\n validateCarouselDescriptor(descriptor);\n if (typeof options.composeAccessibleName !== \"function\") {\n throw new TypeError(\"Carousel composeAccessibleName must be a function\");\n }\n\n const total = descriptor.slides.length;\n return descriptor.slides.map((slide, index) => {\n const position = index + 1;\n const current = slide.id === descriptor.currentKey;\n const accessibleName = options.composeAccessibleName({\n position,\n total,\n label: slide.label,\n });\n if (typeof accessibleName !== \"string\" || accessibleName.trim().length === 0) {\n throw new TypeError(\n \"Carousel composeAccessibleName must return a non-empty string\",\n );\n }\n return { ...slide, position, total, current, inert: !current, accessibleName };\n });\n}\n\nexport type CarouselNavigationIntent = \"next\" | \"previous\" | \"first\" | \"last\";\n\n/**\n * Clamps at the first/last slide instead of wrapping — infinite loop is out\n * of scope (see docs/carousel.md), so there is no modulo here at all, unlike\n * getCollectionNavigationTarget's `loop` parameter elsewhere in this package.\n */\nexport function getCarouselNavigationTarget<Id extends string>(\n descriptor: CarouselDescriptor<Id>,\n intent: CarouselNavigationIntent,\n): Id {\n validateCarouselDescriptor(descriptor);\n const { slides, currentKey } = descriptor;\n if (intent === \"first\") return slides[0]!.id;\n if (intent === \"last\") return slides.at(-1)!.id;\n const currentIndex = slides.findIndex((slide) => slide.id === currentKey);\n const delta = intent === \"next\" ? 1 : -1;\n const clampedIndex = Math.min(\n Math.max(currentIndex + delta, 0),\n slides.length - 1,\n );\n return slides[clampedIndex]!.id;\n}\n\nexport type CarouselAutoplayInputs = Readonly<{\n /** True whenever a platform reduce-motion preference is active. */\n reducedMotion: boolean;\n /** Renderer-combined pointer hover, focus-within, and drag signal. */\n paused: boolean;\n}>;\n\n/**\n * Autoplay is never active without an explicit config, under reduce motion,\n * or while the user is hovering, focusing, or dragging the carousel — the\n * three guards the brief requires are one function so a renderer cannot wire\n * an autoplay timer that forgets one of them.\n */\nexport function isCarouselAutoplayActive(\n autoplay: CarouselAutoplayConfig | undefined,\n inputs: CarouselAutoplayInputs,\n): boolean {\n if (!autoplay) return false;\n validateCarouselAutoplayConfig(autoplay);\n return !inputs.reducedMotion && !inputs.paused;\n}\n\nexport const carouselBehaviorDefaults = {\n autoplay: false,\n} as const satisfies Readonly<{ autoplay: boolean }>;\n\nexport const carouselBehavior = {\n controlled: [\"currentKey\", \"defaultCurrentKey\", \"onCurrentKeyChange\"],\n inputs: [\"autoplay\", \"reducedMotion\", \"dragged\"],\n defaults: carouselBehaviorDefaults,\n stateAxes: {\n interaction: [\"idle\", \"dragged\"],\n value: [\"selected\"],\n },\n web: {\n roles: [\"region\", \"group\"],\n keyboard: [\"Tab\", \"Enter\", \"Space\", \"ArrowLeft\", \"ArrowRight\"],\n focus: \"native\",\n },\n native: {\n roles: [\"adjustable\"],\n states: [\"selected\"],\n actions: [\"increment\", \"decrement\"],\n },\n scenarios: [\n \"current-position-is-announced-with-a-readable-name-not-dots-alone\",\n \"inactive-slide-content-is-excluded-from-focus-and-the-accessibility-tree\",\n \"previous-next-and-dot-controls-stay-in-tab-order-regardless-of-current-slide\",\n \"arrow-keys-move-one-slide-on-web-swipe-moves-one-slide-on-native\",\n \"boundary-slides-clamp-instead-of-wrapping-because-loop-is-out-of-scope\",\n \"autoplay-is-opt-in-and-off-by-default\",\n \"autoplay-never-runs-when-reduced-motion-is-active\",\n \"autoplay-pauses-on-hover-focus-or-drag-and-does-not-announce-automatic-transitions\",\n ],\n} as const satisfies BehaviorContract;\n\n/**\n * PageIndicator is Carousel's position dot row on its own, for a product-owned pager (a paging FlatList or\n * scroll-snap row) that Carousel cannot host because Carousel owns its slides. It reuses `carouselRecipe.dot`\n * and the same clamped navigation, so both rows look and behave the same. Added 2026-10-18 for the Utilverse\n * launcher, which drew its own dots under a native pager.\n */\nexport type PageIndicatorDescriptor = Readonly<{\n /** Number of pages, at least 1. */\n count: number;\n /** Zero-based current page. */\n currentIndex: number;\n /** Limit the visible window around the current page; omitted shows every page. */\n maxVisibleDots?: number;\n}>;\n\nexport type PageIndicatorAccessibleNameInfo = Readonly<{ position: number; total: number }>;\n\n/** Product-owned copy for one page, e.g. \"Home page 2 of 5\" — counter grammar is not the renderer's. */\nexport type ComposePageIndicatorAccessibleName = (info: PageIndicatorAccessibleNameInfo) => string;\n\nexport type ResolvedPageIndicatorDot = Readonly<{\n index: number;\n /** 1-indexed reading position. */\n position: number;\n total: number;\n current: boolean;\n accessibleName: string;\n}>;\n\nexport function validatePageIndicatorDescriptor(descriptor: PageIndicatorDescriptor): void {\n if (!Number.isSafeInteger(descriptor.count) || descriptor.count < 1) {\n throw new RangeError(\"PageIndicator count must be a positive integer\");\n }\n if (\n !Number.isSafeInteger(descriptor.currentIndex) ||\n descriptor.currentIndex < 0 ||\n descriptor.currentIndex >= descriptor.count\n ) {\n throw new RangeError(`PageIndicator currentIndex is out of range: ${String(descriptor.currentIndex)}`);\n }\n if (descriptor.maxVisibleDots !== undefined && (!Number.isSafeInteger(descriptor.maxVisibleDots) || descriptor.maxVisibleDots < 1)) {\n throw new RangeError(\"PageIndicator maxVisibleDots must be a positive integer\");\n }\n}\n\nexport function resolvePageIndicator(\n descriptor: PageIndicatorDescriptor,\n composeAccessibleName: ComposePageIndicatorAccessibleName,\n): readonly ResolvedPageIndicatorDot[] {\n validatePageIndicatorDescriptor(descriptor);\n if (typeof composeAccessibleName !== \"function\") {\n throw new TypeError(\"PageIndicator composeAccessibleName must be a function\");\n }\n // Product-owned launchers can contain many pages. Keep the current page in a bounded window without\n // renumbering it: accessibility names and navigation still address the complete pager.\n const length = Math.min(descriptor.count, descriptor.maxVisibleDots ?? descriptor.count);\n const start = Math.max(0, Math.min(descriptor.currentIndex - Math.floor(length / 2), descriptor.count - length));\n return Array.from({ length }, (_, offset) => {\n const index = start + offset;\n const accessibleName = composeAccessibleName({ position: index + 1, total: descriptor.count });\n if (typeof accessibleName !== \"string\" || accessibleName.trim().length === 0) {\n throw new TypeError(\"PageIndicator composeAccessibleName must return a non-empty string\");\n }\n return { index, position: index + 1, total: descriptor.count, current: index === descriptor.currentIndex, accessibleName };\n });\n}\n\n/** Clamps like getCarouselNavigationTarget: a pager indicator has an end, it never wraps. */\nexport function getPageIndicatorTarget(\n descriptor: PageIndicatorDescriptor,\n intent: CarouselNavigationIntent,\n): number {\n validatePageIndicatorDescriptor(descriptor);\n if (intent === \"first\") return 0;\n if (intent === \"last\") return descriptor.count - 1;\n return Math.min(Math.max(descriptor.currentIndex + (intent === \"next\" ? 1 : -1), 0), descriptor.count - 1);\n}\n\nexport type CarouselSize = \"medium\";\n\nexport const carouselRecipe = {\n slots: [\n \"root\",\n \"track\",\n \"slide\",\n \"dots\",\n \"dot\",\n \"previousControl\",\n \"nextControl\",\n ] as const,\n defaults: { size: \"medium\" },\n sizes: {\n medium: {\n gap: spacing.sm,\n controlHitTarget: control.minTouchTarget,\n controlIcon: \"sm\",\n },\n },\n dot: {\n diameter: 8,\n compactGap: spacing.xs,\n hitTarget: control.minTouchTarget,\n compactHitWidth: spacing.lg,\n color: {\n inactive: semanticColors.border.strong,\n current: semanticColors.content.brand,\n },\n },\n /** Previous/next chrome is composed from IconButton (ghost tone) rather than owning new button visuals. */\n control: {\n icons: {\n previous: \"chevronStart\",\n next: \"chevronEnd\",\n } as const satisfies Readonly<{ previous: SemanticIconName; next: SemanticIconName }>,\n },\n states: {\n focus: focusIndicatorContract,\n draggedOpacity: opacity.dragged,\n },\n /**\n * Manual slide-to-slide movement crossfades rather than snapping under\n * Reduce Motion, reusing the existing \"context\" preset instead of a new\n * token — autoplay itself simply does not run at all (isCarouselAutoplayActive).\n */\n transition: motionPreset.context,\n} as const satisfies {\n slots: readonly string[];\n defaults: { size: CarouselSize };\n sizes: Record<\n CarouselSize,\n { gap: number; controlHitTarget: number; controlIcon: string }\n >;\n dot: {\n diameter: number;\n compactGap: number;\n hitTarget: number;\n compactHitWidth: number;\n color: Record<\"inactive\" | \"current\", ColorReference>;\n };\n control: {\n icons: Readonly<{ previous: SemanticIconName; next: SemanticIconName }>;\n };\n states: {\n focus: typeof focusIndicatorContract;\n draggedOpacity: number;\n };\n transition: typeof motionPreset.context;\n};\n"]}
|