pixelize-design-library 2.4.2-beta.26 → 2.4.2-beta.28

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.
Files changed (38) hide show
  1. package/dist/Components/Button/Button.styles.js +22 -2
  2. package/dist/Components/DatePicker/CalendarPanel.d.ts +5 -0
  3. package/dist/Components/DatePicker/CalendarPanel.js +23 -4
  4. package/dist/Components/DatePicker/DatePickerProps.d.ts +21 -0
  5. package/dist/Components/DatePicker/RangeDatePicker.js +2 -2
  6. package/dist/Components/DatePicker/dayStates.d.ts +56 -0
  7. package/dist/Components/DatePicker/dayStates.js +87 -0
  8. package/dist/Theme/assertPalette.d.ts +1 -1
  9. package/dist/Theme/assertPalette.js +3 -2
  10. package/dist/Theme/chakra/createBrandTheme.js +7 -0
  11. package/dist/Theme/chakra/focusRing.styles.d.ts +52 -0
  12. package/dist/Theme/chakra/focusRing.styles.js +46 -0
  13. package/dist/Theme/tokens/brands/index.js +6 -1
  14. package/dist/Theme/tokens/brands/zinc/palette.dark.d.ts +1 -0
  15. package/dist/Theme/tokens/builders/buildDarkPalette.js +6 -1
  16. package/dist/Theme/tokens/builders/focusRing.d.ts +52 -0
  17. package/dist/Theme/tokens/builders/focusRing.js +92 -0
  18. package/dist/Theme/tokens/builders/index.d.ts +1 -0
  19. package/dist/Theme/tokens/builders/index.js +1 -0
  20. package/dist/Theme/tokens/builders/outlineRung.d.ts +8 -2
  21. package/dist/Theme/tokens/builders/outlineRung.js +8 -2
  22. package/dist/Theme/tokens/types.d.ts +21 -1
  23. package/dist/esm/Components/Button/Button.styles.js +22 -2
  24. package/dist/esm/Components/DatePicker/CalendarPanel.js +23 -4
  25. package/dist/esm/Components/DatePicker/RangeDatePicker.js +2 -2
  26. package/dist/esm/Components/DatePicker/dayStates.js +79 -0
  27. package/dist/esm/Theme/assertPalette.js +3 -2
  28. package/dist/esm/Theme/chakra/createBrandTheme.js +7 -0
  29. package/dist/esm/Theme/chakra/focusRing.styles.js +40 -0
  30. package/dist/esm/Theme/tokens/brands/index.js +6 -1
  31. package/dist/esm/Theme/tokens/builders/buildDarkPalette.js +6 -1
  32. package/dist/esm/Theme/tokens/builders/focusRing.js +85 -0
  33. package/dist/esm/Theme/tokens/builders/index.js +1 -0
  34. package/dist/esm/Theme/tokens/builders/outlineRung.js +8 -2
  35. package/dist/esm/index.js +10 -0
  36. package/dist/index.d.ts +6 -1
  37. package/dist/index.js +26 -2
  38. package/package.json +1 -1
@@ -4,6 +4,7 @@ import { pickAccentText, onFilled } from "./accentText.js";
4
4
  import { withSidebarTokens } from "./sidebarAccent.js";
5
5
  import { buildMutedText } from "./mutedText.js";
6
6
  import { buildSemanticText, buildOnSemantic } from "./semanticText.js";
7
+ import { buildFocusRing } from "./focusRing.js";
7
8
  /**
8
9
  * Derives a brand's dark palette from its light palette.
9
10
  *
@@ -238,6 +239,7 @@ export function buildDarkPalette(light) {
238
239
  ]));
239
240
  const white = light.white;
240
241
  const primary = liftBrand(light.primary, white);
242
+ const background = fromTargets(hueSource, SURFACE_TARGETS, SURFACE_SAT);
241
243
  const semantic = {
242
244
  success: liftAccent(light.semantic.success, white),
243
245
  error: liftAccent(light.semantic.error, white),
@@ -268,7 +270,7 @@ export function buildDarkPalette(light) {
268
270
  purple: reverseScale(light.purple),
269
271
  pink: reverseScale(light.pink),
270
272
  backgroundColor: namedSurfaces,
271
- background: fromTargets(hueSource, SURFACE_TARGETS, SURFACE_SAT),
273
+ background,
272
274
  text: fromTargets(hueSource, TEXT_TARGETS, TEXT_SAT),
273
275
  header: fromTargets(hueSource, TEXT_TARGETS, TEXT_SAT + 2),
274
276
  placeholder: fromTargets(hueSource, PLACEHOLDER_TARGETS, PLACEHOLDER_SAT),
@@ -285,6 +287,9 @@ export function buildDarkPalette(light) {
285
287
  semanticText: buildSemanticText(semantic, namedSurfaces.main),
286
288
  onPrimary: onFilled(primary[500], light.white, light.black),
287
289
  onSemantic: buildOnSemantic(semantic, light.white, light.black),
290
+ // The dark ring is derived from the LIFTED accent against the dark canvas, not copied from
291
+ // light: the two modes squeeze it from opposite sides, so a shared value fails one of them.
292
+ focusRing: buildFocusRing({ primary, background, backgroundColor: namedSurfaces }),
288
293
  // Sidebar is already near-black in light mode, so it needs no inversion.
289
294
  sidebar: withSidebarTokens(light),
290
295
  boxShadow: {
@@ -0,0 +1,85 @@
1
+ import { contrastRatio, hexToHsl, withLightness } from "./color.js";
2
+ import { AA_NON_TEXT } from "./outlineRung.js";
3
+ /** Same lightness granularity `buildDarkPalette` walks its accents at. */
4
+ const LIGHTNESS_STEP = 0.5;
5
+ /**
6
+ * The nearest re-lighting of `hex` that clears `target` against EVERY backdrop at once.
7
+ *
8
+ * Not `settleAcross`: that folds one `liftToContrast` per surface, and each lift walks AWAY from
9
+ * the surface it was handed. That is correct when every backdrop sits on the same side of the ink
10
+ * (its case — a set of light surfaces, or a set of dark ones), and wrong here, where a focus ring
11
+ * is squeezed BETWEEN a near-white canvas and a mid-dark button fill: the lift against the fill
12
+ * walks straight back across the canvas it had just cleared. Seeding `settleAcross` with
13
+ * `primary[500]` measured 1.08-1.99 on the light canvas for every brand for exactly that reason.
14
+ *
15
+ * Walking outward from the seed and testing every backdrop at each step keeps the result the
16
+ * CLOSEST passing colour to the brand accent, so the ring still reads as brand chrome. Contrast is
17
+ * a function of relative luminance alone, and lightness sweeps luminance monotonically from 0 to 1,
18
+ * so if any colour on this hue clears the set, this finds it.
19
+ */
20
+ export function settleBetween(hex, backdrops, target = AA_NON_TEXT) {
21
+ const clears = (candidate) => backdrops.every((backdrop) => contrastRatio(candidate, backdrop) >= target);
22
+ if (clears(hex))
23
+ return hex;
24
+ const { l } = hexToHsl(hex);
25
+ for (let step = LIGHTNESS_STEP; step <= 100; step += LIGHTNESS_STEP) {
26
+ const darker = withLightness(hex, l - step);
27
+ if (clears(darker))
28
+ return darker;
29
+ const lighter = withLightness(hex, l + step);
30
+ if (clears(lighter))
31
+ return lighter;
32
+ }
33
+ // Unreachable for every shipped brand (the gate proves it) — a brand whose fill and canvas are
34
+ // close enough to leave no gap would land here. Take the end that is least bad rather than throw
35
+ // at import time, and let `focusRing.test.ts` be what reports it.
36
+ const ends = [withLightness(hex, 0), withLightness(hex, 100)];
37
+ const worst = (candidate) => Math.min(...backdrops.map((backdrop) => contrastRatio(candidate, backdrop)));
38
+ return worst(ends[0]) >= worst(ends[1]) ? ends[0] : ends[1];
39
+ }
40
+ /**
41
+ * The three backdrops a focused button's ring is actually drawn against: the page canvas, a card
42
+ * surface, and — because a solid button's ring sits directly against its own fill — `primary[500]`.
43
+ *
44
+ * Deliberately NOT every named surface. `muted`/`accent`/`quaternary` are mid-tone, and a single
45
+ * band asked to clear those AND a dark brand fill has no solution at any hue — contrast is
46
+ * luminance alone, and `skyline`/`storefront` come out with an empty band. That is what the second
47
+ * tone is for: `halo` owns the fill-side adjacency instead.
48
+ */
49
+ export const focusRingBackdrops = (source) => [
50
+ source.backgroundColor.main,
51
+ source.background[50],
52
+ source.primary[500],
53
+ ];
54
+ /**
55
+ * The two-tone `:focus-visible` indicator.
56
+ *
57
+ * Chakra's stock ring (`shadows.outline`, a fixed `rgba(66,153,225,.6)`) measured 1.83:1 on the
58
+ * lavender canvas and 1.38:1 on a primary button — a focus indicator you cannot see, on all nine
59
+ * brands. It is one hardcoded blue, so no palette could have saved it.
60
+ *
61
+ * `halo` is the surface tone, drawn as the inner band so the indicator separates from a filled
62
+ * control whatever `colorScheme` painted it. `ring` is the brand accent, walked to the nearest
63
+ * lightness that clears 3:1 on all three backdrops at once — including the halo, so the two tones
64
+ * are always told apart.
65
+ */
66
+ export const buildFocusRing = (source) => {
67
+ const halo = settleBetween(source.background[50], [source.primary[500]]);
68
+ return {
69
+ halo,
70
+ ring: settleBetween(source.primary[500], [...focusRingBackdrops(source), halo]),
71
+ };
72
+ };
73
+ /**
74
+ * Re-derives the ring from the FINISHED palette, as the last step of the rung chain.
75
+ *
76
+ * `finalizeLightPalette` and `buildDarkPalette` seed it, but neither is the final word: a brand
77
+ * file may replace `primary` or `background` after the generic derivation runs — `zinc`'s dark
78
+ * palette replaces both, inverting the filled button to near-white — and a ring resolved against
79
+ * the pre-override values is then silently wrong. Same reason `withSurfaceRungs` re-lifts inks the
80
+ * finalizers already derived. `focusRing.test.ts` asserts this is a fixed point.
81
+ */
82
+ export const withFocusRing = (palette) => ({
83
+ ...palette,
84
+ focusRing: buildFocusRing(palette),
85
+ });
@@ -3,6 +3,7 @@ export * from "./buildBrandTokens.js";
3
3
  export * from "./buildDarkPalette.js";
4
4
  export * from "./chartColorsFromTheme.js";
5
5
  export * from "./color.js";
6
+ export * from "./focusRing.js";
6
7
  export * from "./scrollbar.js";
7
8
  export * from "./gradientInk.js";
8
9
  export * from "./placeholderInk.js";
@@ -12,8 +12,14 @@ export const AA_NON_TEXT = 3;
12
12
  * At 3:1 a container border is text-weight and the UI reads as a wireframe; every mainstream
13
13
  * system draws this line far lighter (Tailwind gray-200 1.24, Chakra gray.200 1.30, Material
14
14
  * outline-variant 1.61). 1.4.11 asks that a control be identifiable, not that its resting
15
- * border carry the whole job: the fill, the label and the focus ring do that, and the focus
16
- * ring is still held to `AA_NON_TEXT`.
15
+ * border carry the whole job: the fill, the label and the focus ring do that.
16
+ *
17
+ * That defence was untrue when it was written. Buttons defined no `_focusVisible` at all, so the
18
+ * focus ring was Chakra's stock `shadows.outline` — a fixed blue measuring 1.38:1 on a primary
19
+ * button — and nothing in the library was held to `AA_NON_TEXT` at the moment of focus. It is
20
+ * true now: `focusRing` (`builders/focusRing.ts`) is derived per brand per mode and gated at 3:1
21
+ * on the canvas, on a card and on the button's own fill by `builders/focusRing.test.ts`. If that
22
+ * gate is ever relaxed, this constant loses its justification with it.
17
23
  */
18
24
  export const CHROME_BORDER = 1.5;
19
25
  // The resting rule between two surfaces — a card edge, a divider, a menu outline. Lighter than
package/dist/esm/index.js CHANGED
@@ -126,6 +126,12 @@ export { buildDarkPalette } from "./Theme/tokens/builders/buildDarkPalette.js";
126
126
  // status chips and generated avatars. Consumers pass a scale/seed and get tokens that already
127
127
  // clear the bar, instead of pinning hexes that go stale when a palette moves.
128
128
  export { AA_NON_TEXT, liftToContrast, withOutlineRung, } from "./Theme/tokens/builders/outlineRung.js";
129
+ // The two-tone `:focus-visible` indicator, derived per brand per mode. `buildFocusRing` resolves
130
+ // the pair from a palette; `focusVisibleStyles` is the ready-made Chakra pseudo-selector block a
131
+ // consumer's own control can spread to get the same ring Button draws. Both exist because Chakra's
132
+ // `shadows.outline` is one hardcoded blue that fails WCAG 1.4.11 on every Pixelize palette.
133
+ export { buildFocusRing, settleBetween, withFocusRing } from "./Theme/tokens/builders/focusRing.js";
134
+ export { focusRingShadow, focusVisibleRing, focusVisibleStyles, FOCUS_VISIBLE_OVER_STATE, FOCUS_HALO_WIDTH, FOCUS_RING_WIDTH, } from "./Theme/chakra/focusRing.styles.js";
129
135
  export { AVATAR_SEEDS, avatarFillFor, meetsBodyText, resolveAvatarFill, resolveStatusTone, } from "./Theme/tokens/builders/statusTone.js";
130
136
  // WCAG contrast + accent-picking helpers this library uses internally to keep text readable
131
137
  // against any canvas/fill a palette produces. Pure and dependency-free — consumers building
@@ -138,6 +144,10 @@ export { isDarkCanvas, onFilled, onGradient, accentTextOnCanvas, pickAccentText,
138
144
  // primitives; `compositeOver` flattens a translucent color onto a backdrop first (an alpha
139
145
  // color has no defined luminance on its own, so measure the composited result, not the tint).
140
146
  export { hexToRgb, hexToRgba, compositeOver, rgbToHex, rgbToHsl, hslToRgb, hexToHsl, hslToHex, withLightness, mix, relativeLuminance, contrastRatio, } from "./Theme/tokens/builders/color.js";
147
+ // Calendar day marking (`DatePicker` + `isRange`). Exported so a consumer can build a legend,
148
+ // or a summary line, from the SAME keys, tokens and phrasing the calendar itself paints and
149
+ // announces — a hand-copied legend is how a legend goes stale.
150
+ export { DAY_STATE_KEYS, DAY_CLASS as CALENDAR_DAY_CLASS, isDayStateKey, resolveDayStateVisual, describeDayStates, } from "./Components/DatePicker/dayStates.js";
141
151
  export { scrollbarStyles, globalScrollbarStyles, SCROLLBAR_WIDTH, } from "./Theme/tokens/builders/scrollbar.js";
142
152
  export { placeholderInk, placeholderInkOn, fieldSurfaces } from "./Theme/tokens/builders/placeholderInk.js";
143
153
  export { resolveGradient, gradientCss, inkSafeGradient as inkSafeGradientToken, } from "./Theme/tokens/builders/gradientInk.js";
package/dist/index.d.ts CHANGED
@@ -112,9 +112,12 @@ export { brandThemes } from "./Theme";
112
112
  export { lightPalettes, darkPalettes, palettes, themeNames, } from "./Theme/tokens/brands";
113
113
  export { buildDarkPalette } from "./Theme/tokens/builders/buildDarkPalette";
114
114
  export { AA_NON_TEXT, liftToContrast, withOutlineRung, } from "./Theme/tokens/builders/outlineRung";
115
+ export { buildFocusRing, settleBetween, withFocusRing } from "./Theme/tokens/builders/focusRing";
116
+ export type { FocusRingSource } from "./Theme/tokens/builders/focusRing";
117
+ export { focusRingShadow, focusVisibleRing, focusVisibleStyles, FOCUS_VISIBLE_OVER_STATE, FOCUS_HALO_WIDTH, FOCUS_RING_WIDTH, } from "./Theme/chakra/focusRing.styles";
115
118
  export { AVATAR_SEEDS, avatarFillFor, meetsBodyText, resolveAvatarFill, resolveStatusTone, } from "./Theme/tokens/builders/statusTone";
116
119
  export type { StatusTone } from "./Theme/tokens/builders/statusTone";
117
- export type { ColorMode, ResolvedColorMode, ThemeName, PaletteProps, ColorScale, BrandScale, SemanticColors, NamedSurfaces, } from "./Theme/tokens/types";
120
+ export type { ColorMode, ResolvedColorMode, ThemeName, PaletteProps, ColorScale, BrandScale, SemanticColors, NamedSurfaces, FocusRingTokens, } from "./Theme/tokens/types";
118
121
  export { statusGradient, inkSafeGradient, chipFill, chipBorder, ACCENT_GRADIENT, STATUS_INK, } from "./Components/PlanPill/planPillGradient";
119
122
  export { isDarkCanvas, onFilled, onGradient, accentTextOnCanvas, pickAccentText, AA_NORMAL_TEXT, DARK_CANVAS_LUMINANCE, } from "./Theme/tokens/builders/accentText";
120
123
  export { hexToRgb, hexToRgba, compositeOver, rgbToHex, rgbToHsl, hslToRgb, hexToHsl, hslToHex, withLightness, mix, relativeLuminance, contrastRatio, } from "./Theme/tokens/builders/color";
@@ -137,6 +140,8 @@ export type { chakraSelectProps as SelectProps, OptionProp as SelectOption, } fr
137
140
  export type { SearchSelectProps, Options as SearchSelectOption } from "./Components/SearchSelect/SearchSelectProps";
138
141
  export type { MultiSelectProps, MultiSelctOPtions as MultiSelectOption } from "./Components/MultiSelect/MultiSelectProps";
139
142
  export type { SearchProps } from "./Components/Search/SearchProps";
143
+ export { DAY_STATE_KEYS, DAY_CLASS as CALENDAR_DAY_CLASS, isDayStateKey, resolveDayStateVisual, describeDayStates, } from "./Components/DatePicker/dayStates";
144
+ export type { DayStateKey, DayStates, DayStateVisual, RenderDayContent, } from "./Components/DatePicker/dayStates";
140
145
  export type { DatePickerProps, TimePickerProps, SingleDatePickerProps, RangeDatePickerProps, RangeDate, PickerType, } from "./Components/DatePicker/DatePickerProps";
141
146
  export type { TextInputProps } from "./Components/Input/TextInputProps";
142
147
  export type { InputTextAreaProps } from "./Components/InputTextArea/InputTextAreaProps";
package/dist/index.js CHANGED
@@ -42,8 +42,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
42
42
  Object.defineProperty(exports, "__esModule", { value: true });
43
43
  exports.UserDetails = exports.splitMonthsAndDays = exports.resolvePlanBadge = exports.formatPlanRemaining = exports.formatPlanExpiry = exports.formatPlanElapsed = exports.PlanBadge = exports.PlanPill = exports.UpgradeButton = exports.LimitReachedModal = exports.OrgSwitcher = exports.StageItem = exports.StageProgress = exports.CopyButton = exports.ScrollToTop = exports.PdfViewer = exports.MoreItems = exports.LazyWrapper = exports.FormWrapper = exports.FilterSidebar = exports.FileUploader = exports.FileUpload = exports.FilePreviewTrigger = exports.FilePreview = exports.FieldSelectModal = exports.WorkspaceTrayPreview = exports.WorkspaceTray = exports.WorkspaceWindow = exports.EmptyState = exports.Editor = exports.Dropdown = exports.DrawerFooter = exports.DrawerBody = exports.DrawerHeader = exports.Drawer = exports.DatePicker = exports.ContactForm = exports.Checkbox = exports.Card = exports.ButtonGroupIcon = exports.Button = exports.Breadcrumbs = exports.ApexRadialChart = exports.ApexAreaChart = exports.ApexLineChart = exports.ApexPolarChart = exports.ApexPieChart = exports.ApexBarChart = exports.AlertDialog = exports.Accordian = void 0;
44
44
  exports.Timeline = exports.TextInput = exports.Tag = exports.TableToggle = exports.Table = exports.SegmentedControl = exports.ToggleSwitch = exports.Switch = exports.Skeletons = exports.ScrollbarBox = exports.Slider = exports.SideBar = exports.SelectSearch = exports.SearchSelect = exports.SelectV2 = exports.Select = exports.Search = exports.Reorder = exports.RadioButtonGroup = exports.RadioButton = exports.ProgressBar = exports.ProfilePhotoViewer = exports.ProfileCardFooter = exports.ProfileCardBody = exports.ProfileCardHeader = exports.ProfileCard = exports.ProductDetails = exports.ProductCard = exports.PinInput = exports.PhoneNumberInput = exports.PaymentCard = exports.NumberInput = exports.MultiSelect = exports.NoteTextArea = exports.Notification = exports.NavigationBar = exports.ModalFooter = exports.ModalBody = exports.ModalHeader = exports.Modal = exports.Loading = exports.KanbanBoard = exports.InputSwitch = exports.InputTextArea = exports.HeaderActions = exports.Header = exports.OrganizationDetails = exports.SignInActivityTable = exports.CustomModulesTable = exports.RolesPermission = void 0;
45
- exports.hexToRgb = exports.DARK_CANVAS_LUMINANCE = exports.AA_NORMAL_TEXT = exports.pickAccentText = exports.accentTextOnCanvas = exports.onGradient = exports.onFilled = exports.isDarkCanvas = exports.STATUS_INK = exports.ACCENT_GRADIENT = exports.chipBorder = exports.chipFill = exports.inkSafeGradient = exports.statusGradient = exports.resolveStatusTone = exports.resolveAvatarFill = exports.meetsBodyText = exports.avatarFillFor = exports.AVATAR_SEEDS = exports.withOutlineRung = exports.liftToContrast = exports.AA_NON_TEXT = exports.buildDarkPalette = exports.themeNames = exports.palettes = exports.darkPalettes = exports.lightPalettes = exports.brandThemes = exports.AppearanceSettings = exports.useFontSizeSync = exports.resolveFontSize = exports.isFontSize = exports.FONT_SIZE_OPTIONS = exports.DEFAULT_FONT_SIZE = exports.ThemeSwitcher = exports.useThemeMode = exports.PixelizeThemeProvider = exports.createAccountHandoff = exports.resolveReturnUrl = exports.isAllowedReturnUrl = exports.debounce = exports.ThemesList = exports.useCustomTheme = exports.useIsTruncated = exports.useSidebarPrefs = exports.VerifyEmailOtp = exports.useToaster = exports.OverflowToolTip = exports.ToolTip = exports.Toaster = void 0;
46
- exports.inkSafeGradientToken = exports.gradientCss = exports.resolveGradient = exports.fieldSurfaces = exports.placeholderInkOn = exports.placeholderInk = exports.SCROLLBAR_WIDTH = exports.globalScrollbarStyles = exports.scrollbarStyles = exports.contrastRatio = exports.relativeLuminance = exports.mix = exports.withLightness = exports.hslToHex = exports.hexToHsl = exports.hslToRgb = exports.rgbToHsl = exports.rgbToHex = exports.compositeOver = exports.hexToRgba = void 0;
45
+ exports.ACCENT_GRADIENT = exports.chipBorder = exports.chipFill = exports.inkSafeGradient = exports.statusGradient = exports.resolveStatusTone = exports.resolveAvatarFill = exports.meetsBodyText = exports.avatarFillFor = exports.AVATAR_SEEDS = exports.FOCUS_RING_WIDTH = exports.FOCUS_HALO_WIDTH = exports.FOCUS_VISIBLE_OVER_STATE = exports.focusVisibleStyles = exports.focusVisibleRing = exports.focusRingShadow = exports.withFocusRing = exports.settleBetween = exports.buildFocusRing = exports.withOutlineRung = exports.liftToContrast = exports.AA_NON_TEXT = exports.buildDarkPalette = exports.themeNames = exports.palettes = exports.darkPalettes = exports.lightPalettes = exports.brandThemes = exports.AppearanceSettings = exports.useFontSizeSync = exports.resolveFontSize = exports.isFontSize = exports.FONT_SIZE_OPTIONS = exports.DEFAULT_FONT_SIZE = exports.ThemeSwitcher = exports.useThemeMode = exports.PixelizeThemeProvider = exports.createAccountHandoff = exports.resolveReturnUrl = exports.isAllowedReturnUrl = exports.debounce = exports.ThemesList = exports.useCustomTheme = exports.useIsTruncated = exports.useSidebarPrefs = exports.VerifyEmailOtp = exports.useToaster = exports.OverflowToolTip = exports.ToolTip = exports.Toaster = void 0;
46
+ exports.inkSafeGradientToken = exports.gradientCss = exports.resolveGradient = exports.fieldSurfaces = exports.placeholderInkOn = exports.placeholderInk = exports.SCROLLBAR_WIDTH = exports.globalScrollbarStyles = exports.scrollbarStyles = exports.describeDayStates = exports.resolveDayStateVisual = exports.isDayStateKey = exports.CALENDAR_DAY_CLASS = exports.DAY_STATE_KEYS = exports.contrastRatio = exports.relativeLuminance = exports.mix = exports.withLightness = exports.hslToHex = exports.hexToHsl = exports.hslToRgb = exports.rgbToHsl = exports.rgbToHex = exports.compositeOver = exports.hexToRgba = exports.hexToRgb = exports.DARK_CANVAS_LUMINANCE = exports.AA_NORMAL_TEXT = exports.pickAccentText = exports.accentTextOnCanvas = exports.onGradient = exports.onFilled = exports.isDarkCanvas = exports.STATUS_INK = void 0;
47
47
  const Accordion_1 = __importDefault(require("./Components/Accordion/Accordion"));
48
48
  exports.Accordian = Accordion_1.default;
49
49
  const AlertDialog_1 = __importDefault(require("./Components/AlertDialog/AlertDialog"));
@@ -291,6 +291,21 @@ var outlineRung_1 = require("./Theme/tokens/builders/outlineRung");
291
291
  Object.defineProperty(exports, "AA_NON_TEXT", { enumerable: true, get: function () { return outlineRung_1.AA_NON_TEXT; } });
292
292
  Object.defineProperty(exports, "liftToContrast", { enumerable: true, get: function () { return outlineRung_1.liftToContrast; } });
293
293
  Object.defineProperty(exports, "withOutlineRung", { enumerable: true, get: function () { return outlineRung_1.withOutlineRung; } });
294
+ // The two-tone `:focus-visible` indicator, derived per brand per mode. `buildFocusRing` resolves
295
+ // the pair from a palette; `focusVisibleStyles` is the ready-made Chakra pseudo-selector block a
296
+ // consumer's own control can spread to get the same ring Button draws. Both exist because Chakra's
297
+ // `shadows.outline` is one hardcoded blue that fails WCAG 1.4.11 on every Pixelize palette.
298
+ var focusRing_1 = require("./Theme/tokens/builders/focusRing");
299
+ Object.defineProperty(exports, "buildFocusRing", { enumerable: true, get: function () { return focusRing_1.buildFocusRing; } });
300
+ Object.defineProperty(exports, "settleBetween", { enumerable: true, get: function () { return focusRing_1.settleBetween; } });
301
+ Object.defineProperty(exports, "withFocusRing", { enumerable: true, get: function () { return focusRing_1.withFocusRing; } });
302
+ var focusRing_styles_1 = require("./Theme/chakra/focusRing.styles");
303
+ Object.defineProperty(exports, "focusRingShadow", { enumerable: true, get: function () { return focusRing_styles_1.focusRingShadow; } });
304
+ Object.defineProperty(exports, "focusVisibleRing", { enumerable: true, get: function () { return focusRing_styles_1.focusVisibleRing; } });
305
+ Object.defineProperty(exports, "focusVisibleStyles", { enumerable: true, get: function () { return focusRing_styles_1.focusVisibleStyles; } });
306
+ Object.defineProperty(exports, "FOCUS_VISIBLE_OVER_STATE", { enumerable: true, get: function () { return focusRing_styles_1.FOCUS_VISIBLE_OVER_STATE; } });
307
+ Object.defineProperty(exports, "FOCUS_HALO_WIDTH", { enumerable: true, get: function () { return focusRing_styles_1.FOCUS_HALO_WIDTH; } });
308
+ Object.defineProperty(exports, "FOCUS_RING_WIDTH", { enumerable: true, get: function () { return focusRing_styles_1.FOCUS_RING_WIDTH; } });
294
309
  var statusTone_1 = require("./Theme/tokens/builders/statusTone");
295
310
  Object.defineProperty(exports, "AVATAR_SEEDS", { enumerable: true, get: function () { return statusTone_1.AVATAR_SEEDS; } });
296
311
  Object.defineProperty(exports, "avatarFillFor", { enumerable: true, get: function () { return statusTone_1.avatarFillFor; } });
@@ -333,6 +348,15 @@ Object.defineProperty(exports, "withLightness", { enumerable: true, get: functio
333
348
  Object.defineProperty(exports, "mix", { enumerable: true, get: function () { return color_1.mix; } });
334
349
  Object.defineProperty(exports, "relativeLuminance", { enumerable: true, get: function () { return color_1.relativeLuminance; } });
335
350
  Object.defineProperty(exports, "contrastRatio", { enumerable: true, get: function () { return color_1.contrastRatio; } });
351
+ // Calendar day marking (`DatePicker` + `isRange`). Exported so a consumer can build a legend,
352
+ // or a summary line, from the SAME keys, tokens and phrasing the calendar itself paints and
353
+ // announces — a hand-copied legend is how a legend goes stale.
354
+ var dayStates_1 = require("./Components/DatePicker/dayStates");
355
+ Object.defineProperty(exports, "DAY_STATE_KEYS", { enumerable: true, get: function () { return dayStates_1.DAY_STATE_KEYS; } });
356
+ Object.defineProperty(exports, "CALENDAR_DAY_CLASS", { enumerable: true, get: function () { return dayStates_1.DAY_CLASS; } });
357
+ Object.defineProperty(exports, "isDayStateKey", { enumerable: true, get: function () { return dayStates_1.isDayStateKey; } });
358
+ Object.defineProperty(exports, "resolveDayStateVisual", { enumerable: true, get: function () { return dayStates_1.resolveDayStateVisual; } });
359
+ Object.defineProperty(exports, "describeDayStates", { enumerable: true, get: function () { return dayStates_1.describeDayStates; } });
336
360
  var scrollbar_1 = require("./Theme/tokens/builders/scrollbar");
337
361
  Object.defineProperty(exports, "scrollbarStyles", { enumerable: true, get: function () { return scrollbar_1.scrollbarStyles; } });
338
362
  Object.defineProperty(exports, "globalScrollbarStyles", { enumerable: true, get: function () { return scrollbar_1.globalScrollbarStyles; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelize-design-library",
3
- "version": "2.4.2-beta.26",
3
+ "version": "2.4.2-beta.28",
4
4
  "description": "React component library for Pixelize apps: themeable Chakra-based components, design tokens and light/dark brand theming.",
5
5
  "keywords": [
6
6
  "react",