@mohasinac/appkit 4.52.1 → 4.52.3

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 (53) hide show
  1. package/dist/.build-stamp.json +4 -4
  2. package/dist/_internal/client/features/digital-code/CodeRevealPanel.js +4 -4
  3. package/dist/_internal/server/features/products/list-public.js +37 -1
  4. package/dist/features/about/components/PolicyPageView.js +1 -1
  5. package/dist/features/auctions/components/MarketplaceAuctionCard.js +2 -2
  6. package/dist/features/auth/components/SocialAuthButtons.js +1 -1
  7. package/dist/features/categories/components/CategoryBundlesListing.js +1 -1
  8. package/dist/features/categories/components/CategoryDetailPageView.js +8 -7
  9. package/dist/features/checkout/components/CheckoutStepper.js +1 -1
  10. package/dist/features/faq/components/FAQAccordion.js +1 -1
  11. package/dist/features/filters/FilterFacetSection.js +1 -1
  12. package/dist/features/filters/RangeFilter.js +1 -1
  13. package/dist/features/filters/SwitchFilter.js +1 -1
  14. package/dist/features/homepage/components/BeforeAfterCard.js +2 -2
  15. package/dist/features/homepage/components/CharacterHotspot.js +1 -1
  16. package/dist/features/homepage/components/FAQSection.js +1 -1
  17. package/dist/features/homepage/components/HeroBanner.js +1 -1
  18. package/dist/features/homepage/components/HeroCarousel.js +4 -4
  19. package/dist/features/homepage/components/HowItWorksSection.js +1 -1
  20. package/dist/features/homepage/components/SectionCarousel.js +1 -1
  21. package/dist/features/homepage/components/SecurityHighlightsSection.js +1 -1
  22. package/dist/features/homepage/components/TrustBadges.js +1 -1
  23. package/dist/features/homepage/components/WelcomeSection.js +1 -1
  24. package/dist/features/layout/AppLayoutShell.js +8 -1
  25. package/dist/features/layout/BackToTop.js +2 -2
  26. package/dist/features/layout/BottomActions.js +20 -5
  27. package/dist/features/layout/BottomChrome.d.ts +0 -29
  28. package/dist/features/layout/BottomChrome.js +72 -7
  29. package/dist/features/live/components/LiveItemDetailPageView.js +1 -1
  30. package/dist/features/products/components/ProductFeaturesSelector.d.ts +38 -1
  31. package/dist/features/products/components/ProductFeaturesSelector.js +133 -34
  32. package/dist/features/products/hooks/useProducts.js +18 -1
  33. package/dist/features/reviews/components/ReviewDetailShell.js +2 -1
  34. package/dist/features/reviews/components/ReviewSummary.js +1 -1
  35. package/dist/features/tester/seed-data/_happy-path.js +1 -1
  36. package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +1 -1
  37. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +3 -3
  38. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.d.ts +2 -0
  39. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +152 -0
  40. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.d.ts +2 -0
  41. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.js +89 -0
  42. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.d.ts +2 -0
  43. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.js +82 -0
  44. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.d.ts +2 -0
  45. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.js +84 -0
  46. package/dist/features/tester/seed-data/authored/index.js +8 -0
  47. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +2 -2
  48. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +157 -3
  49. package/dist/styles.css +74 -1
  50. package/dist/tailwind-utilities.css +1 -1
  51. package/dist/ui/components/RichTextEditor.js +1 -1
  52. package/dist/ui/rich-text/RichText.style.css +73 -0
  53. package/package.json +1 -1
@@ -120,5 +120,5 @@ export function RichTextEditor({ value, onChange, disabled = false, className =
120
120
  editor.innerHTML = safeValue;
121
121
  }
122
122
  }, [value]);
123
- return (_jsxs("div", { className: `appkit-rich-text-editor rounded-lg border border-zinc-200 bg-[var(--appkit-color-surface)] border-[var(--appkit-color-border)] bg-[var(--appkit-color-surface)] ${className}`, "data-section": "richtexteditor-div-582", children: [_jsx("div", { className: "appkit-rich-text-editor__toolbar flex flex-wrap gap-1 border-b p-2 border-[var(--appkit-color-border)]", "data-section": "richtexteditor-div-583", children: toolbarActions.map((action) => (_jsx("button", { type: "button", title: action.title, onClick: action.run, disabled: disabled, className: "appkit-rich-text-editor__btn rounded px-2 py-1 text-xs font-medium transition hover:bg-surface-hover disabled:cursor-not-allowed disabled:opacity-50 text-[var(--appkit-color-text-muted)]", children: action.label }, action.title))) }), _jsx("div", { ref: editorRef, role: "textbox", "aria-label": "Rich text editor", contentEditable: !disabled, suppressContentEditableWarning: true, "data-placeholder": placeholder, onInput: emitChange, onBlur: emitChange, className: `prose prose-sm max-w-none p-3 focus:outline-none dark:prose-invert ${minHeightClassName} ${disabled ? "cursor-not-allowed opacity-70" : ""}` })] }));
123
+ return (_jsxs("div", { className: `appkit-rich-text-editor rounded-lg border border-zinc-200 bg-[var(--appkit-color-surface)] border-[var(--appkit-color-border)] bg-[var(--appkit-color-surface)] ${className}`, "data-section": "richtexteditor-div-582", children: [_jsx("div", { className: "appkit-rich-text-editor__toolbar flex flex-wrap gap-1 border-b p-2 border-[var(--appkit-color-border)]", "data-section": "richtexteditor-div-583", children: toolbarActions.map((action) => (_jsx("button", { type: "button", title: action.title, onClick: action.run, disabled: disabled, className: "appkit-rich-text-editor__btn rounded px-2 py-1 text-xs font-medium transition hover:bg-surface-hover disabled:cursor-not-allowed disabled:opacity-50 text-[var(--appkit-color-text-muted)]", children: action.label }, action.title))) }), _jsx("div", { ref: editorRef, role: "textbox", "aria-label": "Rich text editor", contentEditable: !disabled, suppressContentEditableWarning: true, "data-placeholder": placeholder, onInput: emitChange, onBlur: emitChange, className: `prose max-w-none p-3 focus:outline-none ${minHeightClassName} ${disabled ? "cursor-not-allowed opacity-70" : ""}` })] }));
124
124
  }
@@ -42,6 +42,79 @@
42
42
 
43
43
 
44
44
 
45
+ /* --------------------------------------------------------------------------
46
+ * THE PROSE PALETTE — rebound to appkit theme tokens.
47
+ *
48
+ * 🛑 `dark:prose-invert` CANNOT COMPILE IN THIS PROJECT. Do not "fix" dark-mode
49
+ * rich text by adding it to a call site, and do not add
50
+ * `@source inline("dark:prose-invert")` to globals.css.
51
+ *
52
+ * Every `proseClass` string in appkit carries `dark:prose-invert` and NONE of
53
+ * them has ever generated a rule, because:
54
+ * - the consumer build excludes appkit from scanning
55
+ * (`src/app/globals.css` → `@source not "../../appkit"`), and
56
+ * - `appkit/tailwind.config.js` does not load `@tailwindcss/typography`,
57
+ * so appkit's own `dist/tailwind-utilities.css` cannot emit it either.
58
+ *
59
+ * So `--tw-prose-invert-*` is DEFINED and never switched on. Every rich-text
60
+ * surface on the site — product and auction descriptions, blog posts, policy
61
+ * pages, FAQ answers, category `contentBody`, pre-orders, classifieds, digital
62
+ * codes, live items, prize draws, events — rendered the light-theme palette in
63
+ * every theme: body at gray-700 and links at gray-900, i.e. near-black on a
64
+ * dark page. The links were effectively invisible.
65
+ *
66
+ * It was not merely unstyled, it was OVERRIDING: `important: true` in
67
+ * `tailwind.config.js` emits `.prose :where(a) { color: var(--tw-prose-links)
68
+ * !important }`, which beat the themed `.dark .appkit-rich-text a` rule further
69
+ * down this file. All that theme-aware CSS was dead on arrival.
70
+ *
71
+ * Rebinding the VARIABLES fixes it at the only point both problems meet: every
72
+ * prose rule reads `var(--tw-prose-*)`, so one block re-themes body, links,
73
+ * headings, bold, lists, quotes, captions, code and tables at once — in both
74
+ * built-in themes AND in any admin-authored custom theme, which `prose-invert`
75
+ * could never have done (its palette is hardcoded Tailwind grays).
76
+ *
77
+ * 🛑 The specificity is deliberate and must not be lowered. `.prose` declares
78
+ * these variables with `!important`, so an equal-importance override is decided
79
+ * by EMISSION ORDER between two separate stylesheets — the non-deterministic
80
+ * trap of Root Cause #79. `:root .prose` is (0,2,0) against `.prose`'s (0,1,0),
81
+ * so specificity decides and the outcome does not depend on bundle order. The
82
+ * dark block at (0,3,0) also outranks `.dark .prose-invert` (0,2,0), so this
83
+ * stays correct even if someone later makes `prose-invert` compile.
84
+ *
85
+ * Not scoped to `.appkit-rich-text` on purpose: `PolicyPageView` and the scams
86
+ * FAQ page apply `prose` to a bare `<div>` and had the identical defect.
87
+ * -------------------------------------------------------------------------- */
88
+ :root .prose {
89
+ --tw-prose-body: var(--appkit-color-text-muted) !important;
90
+ --tw-prose-headings: var(--appkit-color-text) !important;
91
+ --tw-prose-lead: var(--appkit-color-text-muted) !important;
92
+ --tw-prose-links: var(--appkit-color-primary-600) !important;
93
+ --tw-prose-bold: var(--appkit-color-text) !important;
94
+ --tw-prose-counters: var(--appkit-color-text-faint) !important;
95
+ --tw-prose-bullets: var(--appkit-color-text-faint) !important;
96
+ --tw-prose-hr: var(--appkit-color-border) !important;
97
+ --tw-prose-quotes: var(--appkit-color-text) !important;
98
+ --tw-prose-quote-borders: var(--appkit-color-primary) !important;
99
+ --tw-prose-captions: var(--appkit-color-text-faint) !important;
100
+ --tw-prose-kbd: var(--appkit-color-text) !important;
101
+ --tw-prose-kbd-shadows: 24 24 27 !important;
102
+ --tw-prose-code: var(--appkit-color-text) !important;
103
+ --tw-prose-pre-code: var(--appkit-color-slate-200) !important;
104
+ --tw-prose-pre-bg: var(--appkit-color-slate-800) !important;
105
+ --tw-prose-th-borders: var(--appkit-color-border) !important;
106
+ --tw-prose-td-borders: var(--appkit-color-border) !important;
107
+ }
108
+
109
+ /* Only the values that are genuinely theme-specific. Everything above already
110
+ * inverts, because `--appkit-color-text`/`-text-muted`/`-border` are redefined
111
+ * per theme in tokens.css — which is the whole point of binding to them. */
112
+ :root.dark .prose {
113
+ --tw-prose-links: var(--appkit-color-secondary-400) !important;
114
+ --tw-prose-kbd-shadows: 250 250 250 !important;
115
+ --tw-prose-pre-bg: var(--appkit-color-surface) !important;
116
+ }
117
+
45
118
  /* --------------------------------------------------------------------------
46
119
  * Base wrapper. All selectors are scoped to .appkit-rich-text so they
47
120
  * never leak into surrounding UI.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mohasinac/appkit",
3
- "version": "4.52.1",
3
+ "version": "4.52.3",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public"