geoiq-frontend-ui-kit 2.0.2 → 2.0.4

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 (217) hide show
  1. package/dist/components/organisms/image-editor/components/line-session-bar.d.ts +20 -0
  2. package/dist/components/organisms/image-editor/components/line-session-bar.d.ts.map +1 -0
  3. package/dist/components/organisms/image-editor/components/panel-insert.d.ts.map +1 -1
  4. package/dist/components/organisms/image-editor/components/panel-selected.d.ts.map +1 -1
  5. package/dist/components/organisms/image-editor/components/panel.d.ts.map +1 -1
  6. package/dist/components/organisms/image-editor/components/saved-layers-list.d.ts +9 -0
  7. package/dist/components/organisms/image-editor/components/saved-layers-list.d.ts.map +1 -0
  8. package/dist/components/organisms/image-editor/image-editor-modal.d.ts.map +1 -1
  9. package/dist/components/organisms/image-editor/image-editor.types.d.ts +73 -0
  10. package/dist/components/organisms/image-editor/image-editor.types.d.ts.map +1 -1
  11. package/dist/components/organisms/image-editor/use-image-editor.d.ts.map +1 -1
  12. package/dist/components/ui/request-credits-view/component/request-credit-dialog.d.ts.map +1 -1
  13. package/dist/index.es100.js +147 -120
  14. package/dist/index.es100.js.map +1 -1
  15. package/dist/index.es101.js +16 -11
  16. package/dist/index.es101.js.map +1 -1
  17. package/dist/index.es102.js +7 -41
  18. package/dist/index.es102.js.map +1 -1
  19. package/dist/index.es103.js +21 -10
  20. package/dist/index.es103.js.map +1 -1
  21. package/dist/index.es104.js +7 -74
  22. package/dist/index.es104.js.map +1 -1
  23. package/dist/index.es105.js +177 -30
  24. package/dist/index.es105.js.map +1 -1
  25. package/dist/index.es106.js +45 -16
  26. package/dist/index.es106.js.map +1 -1
  27. package/dist/index.es107.js +42 -20
  28. package/dist/index.es107.js.map +1 -1
  29. package/dist/index.es108.js +22 -12
  30. package/dist/index.es108.js.map +1 -1
  31. package/dist/index.es109.js +122 -98
  32. package/dist/index.es109.js.map +1 -1
  33. package/dist/index.es11.js +1 -1
  34. package/dist/index.es110.js +33 -62
  35. package/dist/index.es110.js.map +1 -1
  36. package/dist/index.es111.js +60 -52
  37. package/dist/index.es111.js.map +1 -1
  38. package/dist/index.es112.js +10 -41
  39. package/dist/index.es112.js.map +1 -1
  40. package/dist/index.es113.js +21 -11
  41. package/dist/index.es113.js.map +1 -1
  42. package/dist/index.es114.js +42 -92
  43. package/dist/index.es114.js.map +1 -1
  44. package/dist/index.es115.js +37 -16
  45. package/dist/index.es115.js.map +1 -1
  46. package/dist/index.es116.js +12 -99
  47. package/dist/index.es116.js.map +1 -1
  48. package/dist/index.es117.js +92 -13
  49. package/dist/index.es117.js.map +1 -1
  50. package/dist/index.es118.js +13 -101
  51. package/dist/index.es118.js.map +1 -1
  52. package/dist/index.es119.js +71 -20
  53. package/dist/index.es119.js.map +1 -1
  54. package/dist/index.es12.js +1 -1
  55. package/dist/index.es120.js +34 -25
  56. package/dist/index.es120.js.map +1 -1
  57. package/dist/index.es121.js +20 -22
  58. package/dist/index.es121.js.map +1 -1
  59. package/dist/index.es122.js +16 -45
  60. package/dist/index.es122.js.map +1 -1
  61. package/dist/index.es123.js +11 -34
  62. package/dist/index.es123.js.map +1 -1
  63. package/dist/index.es124.js +96 -61
  64. package/dist/index.es124.js.map +1 -1
  65. package/dist/index.es125.js +57 -174
  66. package/dist/index.es125.js.map +1 -1
  67. package/dist/index.es126.js +50 -17
  68. package/dist/index.es126.js.map +1 -1
  69. package/dist/index.es127.js +2 -2
  70. package/dist/index.es128.js +2 -2
  71. package/dist/index.es129.js +1 -1
  72. package/dist/index.es130.js +1 -1
  73. package/dist/index.es131.js +2 -2
  74. package/dist/index.es132.js +35 -38
  75. package/dist/index.es132.js.map +1 -1
  76. package/dist/index.es133.js +41 -7
  77. package/dist/index.es133.js.map +1 -1
  78. package/dist/index.es134.js +88 -7
  79. package/dist/index.es134.js.map +1 -1
  80. package/dist/index.es135.js +14 -34
  81. package/dist/index.es135.js.map +1 -1
  82. package/dist/index.es136.js +269 -35
  83. package/dist/index.es136.js.map +1 -1
  84. package/dist/index.es137.js +7 -2
  85. package/dist/index.es137.js.map +1 -1
  86. package/dist/index.es138.js +23 -25
  87. package/dist/index.es138.js.map +1 -1
  88. package/dist/index.es139.js +169 -15
  89. package/dist/index.es139.js.map +1 -1
  90. package/dist/index.es140.js +82 -7
  91. package/dist/index.es140.js.map +1 -1
  92. package/dist/index.es141.js +73 -21
  93. package/dist/index.es141.js.map +1 -1
  94. package/dist/index.es142.js +3 -168
  95. package/dist/index.es142.js.map +1 -1
  96. package/dist/index.es143.js +56 -82
  97. package/dist/index.es143.js.map +1 -1
  98. package/dist/index.es144.js +119 -4
  99. package/dist/index.es144.js.map +1 -1
  100. package/dist/index.es145.js +405 -56
  101. package/dist/index.es145.js.map +1 -1
  102. package/dist/index.es146.js +25 -110
  103. package/dist/index.es146.js.map +1 -1
  104. package/dist/index.es147.js +60 -314
  105. package/dist/index.es147.js.map +1 -1
  106. package/dist/index.es148.js +29 -24
  107. package/dist/index.es148.js.map +1 -1
  108. package/dist/index.es149.js +21 -64
  109. package/dist/index.es149.js.map +1 -1
  110. package/dist/index.es150.js +36 -30
  111. package/dist/index.es150.js.map +1 -1
  112. package/dist/index.es151.js +211 -24
  113. package/dist/index.es151.js.map +1 -1
  114. package/dist/index.es152.js +141 -35
  115. package/dist/index.es152.js.map +1 -1
  116. package/dist/index.es153.js +141 -140
  117. package/dist/index.es153.js.map +1 -1
  118. package/dist/index.es154.js +45 -142
  119. package/dist/index.es154.js.map +1 -1
  120. package/dist/index.es155.js +353 -45
  121. package/dist/index.es155.js.map +1 -1
  122. package/dist/index.es156.js +14 -10
  123. package/dist/index.es156.js.map +1 -1
  124. package/dist/index.es157.js +10 -42
  125. package/dist/index.es157.js.map +1 -1
  126. package/dist/index.es158.js +44 -5
  127. package/dist/index.es158.js.map +1 -1
  128. package/dist/index.es159.js +5 -11
  129. package/dist/index.es159.js.map +1 -1
  130. package/dist/index.es16.js +1 -1
  131. package/dist/index.es160.js +10 -10
  132. package/dist/index.es160.js.map +1 -1
  133. package/dist/index.es161.js +11 -2
  134. package/dist/index.es161.js.map +1 -1
  135. package/dist/index.es162.js +2 -91
  136. package/dist/index.es162.js.map +1 -1
  137. package/dist/index.es163.js +2 -213
  138. package/dist/index.es163.js.map +1 -1
  139. package/dist/index.es164.js +23 -52
  140. package/dist/index.es164.js.map +1 -1
  141. package/dist/index.es165.js +88 -33
  142. package/dist/index.es165.js.map +1 -1
  143. package/dist/index.es166.js +52 -31
  144. package/dist/index.es166.js.map +1 -1
  145. package/dist/index.es167.js +32 -29
  146. package/dist/index.es167.js.map +1 -1
  147. package/dist/index.es168.js +26 -84
  148. package/dist/index.es168.js.map +1 -1
  149. package/dist/index.es169.js +27 -111
  150. package/dist/index.es169.js.map +1 -1
  151. package/dist/index.es170.js +97 -285
  152. package/dist/index.es170.js.map +1 -1
  153. package/dist/index.es171.js +251 -30
  154. package/dist/index.es171.js.map +1 -1
  155. package/dist/index.es172.js +63 -11
  156. package/dist/index.es172.js.map +1 -1
  157. package/dist/index.es173.js +284 -82
  158. package/dist/index.es173.js.map +1 -1
  159. package/dist/index.es174.js +29 -70
  160. package/dist/index.es174.js.map +1 -1
  161. package/dist/index.es175.js +10 -114
  162. package/dist/index.es175.js.map +1 -1
  163. package/dist/index.es176.js +23 -106
  164. package/dist/index.es176.js.map +1 -1
  165. package/dist/index.es177.js +19 -82
  166. package/dist/index.es177.js.map +1 -1
  167. package/dist/index.es178.js +63 -109
  168. package/dist/index.es178.js.map +1 -1
  169. package/dist/index.es179.js +63 -117
  170. package/dist/index.es179.js.map +1 -1
  171. package/dist/index.es180.js +112 -23
  172. package/dist/index.es180.js.map +1 -1
  173. package/dist/index.es181.js +103 -18
  174. package/dist/index.es181.js.map +1 -1
  175. package/dist/index.es182.js +86 -5
  176. package/dist/index.es182.js.map +1 -1
  177. package/dist/index.es183.js +133 -0
  178. package/dist/index.es183.js.map +1 -0
  179. package/dist/index.es184.js +133 -0
  180. package/dist/index.es184.js.map +1 -0
  181. package/dist/index.es185.js +9 -0
  182. package/dist/index.es185.js.map +1 -0
  183. package/dist/index.es19.js +1 -1
  184. package/dist/index.es2.js +21 -21
  185. package/dist/index.es2.js.map +1 -1
  186. package/dist/index.es20.js +1 -1
  187. package/dist/index.es21.js +3 -3
  188. package/dist/index.es22.js +1 -1
  189. package/dist/index.es25.js +1 -1
  190. package/dist/index.es27.js +1 -1
  191. package/dist/index.es28.js +2 -2
  192. package/dist/index.es30.js +1 -1
  193. package/dist/index.es32.js +1 -1
  194. package/dist/index.es33.js +1 -1
  195. package/dist/index.es45.js +48 -46
  196. package/dist/index.es45.js.map +1 -1
  197. package/dist/index.es46.js +2 -2
  198. package/dist/index.es47.js +1 -1
  199. package/dist/index.es48.js +1 -1
  200. package/dist/index.es53.js +1 -1
  201. package/dist/index.es54.js +1 -1
  202. package/dist/index.es57.js +1 -1
  203. package/dist/index.es59.js +1 -1
  204. package/dist/index.es67.js +2 -2
  205. package/dist/index.es68.js +1 -1
  206. package/dist/index.es71.js +1 -1
  207. package/dist/index.es72.js +7 -7
  208. package/dist/index.es73.js +2 -2
  209. package/dist/index.es85.js +1 -1
  210. package/dist/index.es97.js +16 -11
  211. package/dist/index.es97.js.map +1 -1
  212. package/dist/index.es98.js +89 -262
  213. package/dist/index.es98.js.map +1 -1
  214. package/dist/index.es99.js +13 -87
  215. package/dist/index.es99.js.map +1 -1
  216. package/dist/styles.css +55 -0
  217. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.es98.js","sources":["../src/components/ui/report-snippet-view/report-snippet-view-components.tsx"],"sourcesContent":["import React, { FC } from 'react'\nimport { ReportSnippetViewNS } from './report-snippet-view.types'\n\nimport { FONT_FAMILY } from '@/lib/constants'\n\nimport { Dialog } from '@/components/organisms/dialog'\nimport { ChevronLeft, ChevronRight, X } from 'lucide-react'\nimport { Typography } from '@/components/atoms/typography'\nimport {\n BarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n} from 'recharts'\nimport { trendBoxStyles, trendValueStyles } from './report-snippet-view-style'\n\nconst ReportSnippetGalleryView: FC<{\n onToggle: () => void\n isOpen: boolean\n data?: ReportSnippetViewNS.StreetViewData\n galleryActiveIndex: number\n setgalleryActiveIndex: React.Dispatch<React.SetStateAction<number>>\n}> = ({\n data,\n onToggle,\n isOpen,\n galleryActiveIndex,\n setgalleryActiveIndex,\n}) => {\n // Current active item\n\n const isDataAvailable = data && data.length\n\n // Handle next click\n const handleNext = () => {\n if (!data) return\n setgalleryActiveIndex((prevIndex) => (prevIndex + 1) % data?.length)\n }\n\n // Handle previous click\n const handlePrev = () => {\n if (!data) return\n setgalleryActiveIndex(\n (prevIndex) => (prevIndex - 1 + data.length) % data.length\n )\n }\n\n const handleThumbnailClick = (index: number) => {\n setgalleryActiveIndex(index)\n }\n\n const toggleGallery = () => {\n onToggle()\n }\n\n return (\n <Dialog\n open={isOpen}\n trigger={null}\n contentClassName=\"bg-transparent w-fit border-0\"\n onInteractOutside={toggleGallery}\n body={\n <div className=\"flex flex-col items-center justify-center w-full h-full max-w-3xl mx-auto\">\n <X\n size={24}\n color=\"white\"\n className=\"absolute z-50 cursor-pointer -right-10 -top-10\"\n onClick={toggleGallery}\n />\n\n {/* Main Carousel */}\n <div className=\"relative\">\n <div className=\"relative \">\n {isDataAvailable && (\n <img\n key={data[galleryActiveIndex].image_url}\n src={data[galleryActiveIndex].image_url}\n alt={`Street ${galleryActiveIndex + 1}`}\n className=\"w-[500px] max-h-[80vh] object-contain flex-shrink-0\"\n />\n )}\n </div>\n\n {/* Navigation Buttons */}\n <div className=\"relative top-[-50%] left-[-10%] flex row w-[120%] justify-between\">\n <div role=\"button\" tabIndex={0} onClick={handlePrev}>\n <ChevronLeft size={30} color=\"white\" />\n </div>\n <div role=\"button\" tabIndex={0} onClick={handleNext}>\n <ChevronRight size={30} color=\"white\" />\n </div>\n </div>\n </div>\n\n {/* Thumbnails */}\n <div className=\"flex justify-center p-2 mt-4 space-x-2 rounded-lg\">\n {isDataAvailable &&\n data.map((item, index) => (\n <img\n key={index}\n src={item.image_url}\n alt={`Thumbnail ${index + 1}`}\n onClick={() => handleThumbnailClick(index)}\n className={`w-20 h-auto rounded-lg cursor-pointer ${\n index === galleryActiveIndex\n ? 'ring-2 ring-primary-1'\n : 'ring-2 ring-transparent'\n } hover:ring-gray-300`}\n />\n ))}\n </div>\n </div>\n }\n />\n )\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars\nconst CustomTooltipFootfall = ({ active, payload, label, year }: any) => {\n if (active && payload && payload.length) {\n const year = payload[0]?.payload?.year\n const footfall = payload[0]?.value\n return (\n <div className=\"flex flex-col bg-light-1 p-4 rounded-lg shadow-md min-w-[200px] gap-1\">\n {/* Month Information */}\n <Typography variant={'body6'} className=\"text-primary\">\n {`${label}'${year}`}\n </Typography>\n\n {/* Separator */}\n <div className=\"my-2 w-full h-px border border-stroke-1\" />\n\n {/* Footfall/Visits Information */}\n <div className=\"flex\">\n <div\n className=\"h-4 w-1 rounded-lg\"\n style={{ backgroundColor: '#6D48EF' }}\n />\n <Typography variant={'body6'} className=\"text-secondary mx-1\">\n Visits\n </Typography>\n <Typography variant={'body4'} className=\"text-secondary ml-auto\">\n {` ${footfall}`}\n </Typography>\n </div>\n </div>\n )\n }\n return null\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst CustomTooltipCannibalisation = ({ active, payload, label }: any) => {\n if (active && payload && payload.length) {\n const distance = payload[0]?.payload?.distance\n const cannibalisation = payload[0]?.value\n return (\n <div className=\"flex bg-light-1 items-center justify-between rounded-lg shadow-md min-w-45 max-w-80 gap-2 p-2\">\n {/* Month Information */}\n <Typography variant={'body6'} className=\"text-primary\">\n {\n <div className=\"flex h-full justify-between items-center p-2 gap-4\">\n <div>{label}</div>\n <div> {distance + 'km'}</div>\n </div>\n }\n </Typography>\n {/* Footfall/Visits Information */}\n <Typography\n variant={'body4'}\n className=\"text-normal text-danger-1 ml-auto p-2\"\n >\n {`${cannibalisation}%`}\n </Typography>\n </div>\n )\n }\n return null\n}\n\n{\n /*--------- Store insights ----------*/\n}\ninterface StoreInsightsSectionProps {\n insights: ReportSnippetViewNS.CatchmentInsights[]\n // customButton?: React.ReactNode\n}\n\nconst StoreInsightsSection: FC<StoreInsightsSectionProps> = ({ insights }) => {\n return (\n <div>\n <div className=\"flex flex-row mb-4 justify-between\">\n <Typography variant=\"body4\" className=\"text-light-2\">\n Store Insight:\n </Typography>\n </div>\n\n <div className=\"bg-light-2 p-3 border border-neutral-1 rounded-lg\">\n <Typography variant=\"body4\" className=\"text-light-2 mb-2\">\n Presence of other brands in catchment:\n </Typography>\n\n {/* Render store insights data */}\n <div className=\"flex gap-1 flex-wrap\">\n {insights.map((item) => (\n <div\n key={item.type}\n className=\"flex items-center gap-1 bg-light-1 px-2 py-1 rounded-full border border-neutral-1\"\n >\n {/* Icon */}\n <img\n src={item.iconUrl}\n alt={`${item.type} Icon`}\n className=\"w-4 h-4\"\n />\n\n {/* Name and Count */}\n <Typography variant=\"body6\" className=\"text-light-2\">\n {item.count}\n </Typography>\n <div className=\"flex items-center gap-1\">\n <Typography variant=\"body6\" className=\"text-light-2\">\n {item.type === 'competitor' ? 'Competitors' : 'Complementary'}\n </Typography>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\n{\n /*--------- Store Overview ----------*/\n}\ninterface StoreOverviewSectionProps {\n highlights: ReportSnippetViewNS.StoreHighlights[]\n}\n\nconst StoreOverviewSection: FC<StoreOverviewSectionProps> = ({\n highlights,\n}) => {\n return (\n <div>\n <Typography variant={'body4'} className=\"text-light-2 mb-2\">\n Store Overview:\n </Typography>\n <div className=\"bg-light-2 p-1 border border-neutral-1 rounded-lg\">\n <div className=\"flex justify-evenly items-center\">\n {highlights.map((item, index) => (\n <React.Fragment key={index}>\n <div className=\"flex flex-col items-center justify-center text-center gap-1 p-\">\n {/* Trend Box */}\n <div\n className={trendBoxStyles({\n trend: item.trend?.toString() as '1' | '-1' | '0' | null,\n })}\n >\n {item.trend === 1 && (\n <img\n src=\"https://frontend-static-files.geoiq.io/strapi/trending_up_9d73d6fac5.svg\"\n alt=\"High Trend\"\n className={'w-3 h-3'}\n />\n )}\n {item.trend === -1 && (\n <img\n src=\"https://frontend-static-files.geoiq.io/strapi/trending_down_87adc7f3a6.svg\"\n alt=\"Low Trend\"\n className={'w-3 h-3'}\n />\n )}\n {item.value && item.trend ? (\n <Typography\n variant=\"body5\"\n className={trendValueStyles({\n trend: item.trend?.toString() as\n | '1'\n | '-1'\n | '0'\n | null,\n })}\n >\n {`${item.value}%`}\n </Typography>\n ) : (\n <Typography variant=\"body5\" className=\"text-sm\">\n -\n </Typography>\n )}\n </div>\n\n {/* Name */}\n {item.name && (\n <Typography variant={'body6'} className=\"text-light-2\">\n {item.name}\n </Typography>\n )}\n </div>\n\n {/* Separator */}\n {index < highlights.length - 1 && (\n <div className=\"border-l border-stroke-light-1 h-20 mx-1\" />\n )}\n </React.Fragment>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\n{\n /*----------------- Footfall Trends ------------------*/\n}\ninterface FootfallChartSectionProps {\n data: ReportSnippetViewNS.FootfallChartData[]\n}\n\nconst FootfallChartSection: FC<FootfallChartSectionProps> = ({ data }) => {\n if (!data || data.every((item) => item.footfall === null)) {\n return null\n }\n return (\n <div className=\"w-full h-full bg-light-2 border border-neutral-1 p-3 rounded-lg\">\n {/* Section heading */}\n <Typography variant={'body4'} className=\"text-light-2 mb-4\">\n Footfall trends\n </Typography>\n\n {/* Bar Chart */}\n <ResponsiveContainer width=\"100%\" height={300}>\n <BarChart\n data={data}\n margin={{\n top: 3,\n right: 3,\n bottom: -10,\n left: 3,\n }}\n barSize={24}\n >\n <CartesianGrid strokeDasharray=\"10 10\" />\n <XAxis\n dataKey=\"month\"\n style={{\n font: FONT_FAMILY,\n fontSize: '12px',\n fontWeight: '500',\n color: '#4A4A4A',\n }}\n />\n <YAxis\n className=\"text-4-grey\"\n style={{ fontSize: '12px', fontWeight: '500' }}\n tickFormatter={(val) => {\n if (val > 1000000) {\n return `${val / 1000000}M`\n }\n if (val > 1000) {\n return `${val / 1000}K`\n }\n return val\n }}\n label={{\n value: 'AVG FOOTFALL FOR A 3-MONTH PERIOD',\n angle: -90,\n position: 'insideLeft',\n dy: -5,\n style: {\n textAnchor: 'middle',\n fontSize: '12px',\n fontWeight: '500',\n },\n }}\n />\n <Tooltip content={<CustomTooltipFootfall />} />\n <Bar\n dataKey=\"footfall\"\n fill=\"#6D48EF\"\n radius={[4, 4, 4, 4]}\n style={{ cursor: 'pointer' }}\n />\n </BarChart>\n </ResponsiveContainer>\n </div>\n )\n}\n\n{\n /* -----------------Cannibalisation Effect------------------ */\n}\ninterface CannibalisationChartSectionProps {\n data: ReportSnippetViewNS.CannibalisationChartData[]\n}\n\nconst CannibalisationChartSection: FC<CannibalisationChartSectionProps> = ({\n data,\n}) => {\n if (!data || data.every((item) => item.cannibalisation === null)) {\n return null\n }\n const formatXAxisLabel = (label: string) => {\n const barCount = data.length\n let maxLength\n\n if (barCount <= 1) {\n maxLength = 50\n } else if (barCount <= 6) {\n maxLength = 22 - (barCount - 1) * 4\n } else {\n maxLength = 6\n }\n\n return label.length > maxLength ? `${label.slice(0, maxLength)}...` : label\n }\n return (\n <div className=\"w-full h-full bg-light-2 border border-neutral-1 p-3 rounded-lg\">\n {/* Section heading */}\n <Typography variant={'body4'} className=\"text-light-2 mb-4\">\n Cannibalisation effects\n </Typography>\n\n {/* Bar Chart */}\n <ResponsiveContainer width=\"100%\" height={300}>\n <BarChart\n data={data}\n margin={{\n top: 3,\n right: 3,\n bottom: 5,\n left: 3,\n }}\n barSize={24}\n >\n <CartesianGrid strokeDasharray=\"10 10\" />\n <XAxis\n dataKey=\"store_name\"\n tickFormatter={formatXAxisLabel}\n tickMargin={10}\n tick={(props) => {\n const { x, y, payload } = props\n return (\n <text x={x} y={y} textAnchor={'end'} fill=\"#666\">\n <tspan x={x} style={{ fontSize: 12 }}>\n {formatXAxisLabel(payload.value)}\n </tspan>\n <tspan\n x={x}\n dy=\"1.5em\"\n style={{\n fontSize: 10,\n whiteSpace: 'nowrap',\n paddingTop: '2px',\n }}\n >\n {data[payload.index].distance + ' kms'}\n </tspan>\n </text>\n )\n }}\n />\n <YAxis\n className=\"text-4-grey\"\n style={{ fontSize: '12px', fontWeight: '500' }}\n tickFormatter={(val) => {\n if (val > 1000000) {\n return `${val / 1000000}M`\n }\n if (val > 1000) {\n return `${val / 1000}K`\n }\n return val\n }}\n label={{\n value: 'CANNIBALISATION IN %',\n angle: -90,\n position: 'insideLeft',\n dy: -5,\n style: {\n textAnchor: 'middle',\n fontSize: '12px',\n fontWeight: '500',\n },\n }}\n domain={[0, 100]}\n />\n <Tooltip content={<CustomTooltipCannibalisation />} />\n <Bar\n dataKey=\"cannibalisation\"\n fill=\"#F93232\"\n radius={[4, 4, 4, 4]}\n style={{ cursor: 'pointer' }}\n />\n </BarChart>\n </ResponsiveContainer>\n </div>\n )\n}\n\nexport {\n ReportSnippetGalleryView,\n StoreInsightsSection,\n StoreOverviewSection,\n FootfallChartSection,\n CannibalisationChartSection,\n}\n"],"names":["ReportSnippetGalleryView","data","onToggle","isOpen","galleryActiveIndex","setgalleryActiveIndex","isDataAvailable","handleNext","prevIndex","handlePrev","handleThumbnailClick","index","toggleGallery","React","Dialog","X","ChevronLeft","ChevronRight","item","CustomTooltipFootfall","active","payload","label","year","footfall","Typography","CustomTooltipCannibalisation","distance","cannibalisation","StoreInsightsSection","insights","StoreOverviewSection","highlights","trendBoxStyles","trendValueStyles","FootfallChartSection","ResponsiveContainer","BarChart","CartesianGrid","XAxis","FONT_FAMILY","YAxis","val","Tooltip","Bar","CannibalisationChartSection","formatXAxisLabel","barCount","maxLength","props","x","y"],"mappings":"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"}
1
+ {"version":3,"file":"index.es98.js","sources":["../src/components/organisms/image-editor/image-editor-modal.tsx"],"sourcesContent":["import { Loader2, Save, X } from 'lucide-react'\nimport React, { useEffect, useRef, useState } from 'react'\n\nimport { Button } from '@/components/atoms/button'\n\nimport { ImageEditorEngine, ImageEditorUiState } from './image-editor.types'\nimport { ImageEditorPortalContext } from './components/portal-context'\nimport { Panel } from './components/panel'\nimport { Ribbon } from './components/ribbon'\nimport { Stage, StageHandle } from './components/stage'\nimport { LineSessionBar } from './components/line-session-bar'\nimport { StatusBar } from './components/status-bar'\n\nexport interface ImageEditorModalProps {\n engine: ImageEditorEngine\n ui: ImageEditorUiState | null\n isOpen: boolean\n saveLabel: string\n}\n\nexport function ImageEditorModal({\n engine,\n ui,\n isOpen,\n saveLabel,\n}: ImageEditorModalProps) {\n const rootRef = useRef<HTMLDivElement | null>(null)\n const [rootEl, setRootEl] = useState<HTMLDivElement | null>(null)\n const stageRef = useRef<StageHandle>(null)\n const fileInputRef = useRef<HTMLInputElement>(null)\n const mountedRef = useRef(false)\n\n useEffect(() => {\n if (mountedRef.current) return\n const s = stageRef.current\n if (!s?.canvas || !s.overlay || !s.textEditor || !s.stage) return\n engine.mount({\n canvas: s.canvas,\n overlay: s.overlay,\n textEditor: s.textEditor,\n stage: s.stage,\n })\n mountedRef.current = true\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ui != null])\n\n useEffect(() => {\n if (!isOpen || !rootRef.current) return\n if (!rootRef.current.hasAttribute('tabindex'))\n rootRef.current.setAttribute('tabindex', '-1')\n const t = setTimeout(\n () => rootRef.current?.focus({ preventScroll: true }),\n 0\n )\n return () => clearTimeout(t)\n }, [isOpen])\n\n useEffect(() => {\n if (!isOpen) return\n engine.refitStage()\n }, [isOpen, engine])\n\n if (!ui) return null\n\n return (\n <div\n ref={(node) => {\n rootRef.current = node\n setRootEl(node)\n }}\n className=\"fixed inset-0 z-[2147483000] flex items-center justify-center bg-[rgba(24,22,18,.55)] backdrop-blur-sm\"\n style={{\n display: isOpen ? 'flex' : 'none',\n pointerEvents: 'auto',\n }}\n onMouseDown={(e) => {\n if (e.target === e.currentTarget && ui.closeOnBackdrop) engine.close()\n }}\n >\n <ImageEditorPortalContext.Provider value={rootEl}>\n <div className=\"image-editor-modal-panel flex flex-col overflow-hidden bg-light-2 shadow-2xl\">\n <div className=\"flex items-center gap-3 border-b border-neutral-1 bg-light-3 px-4 py-3\">\n <Button\n variant=\"primary\"\n size=\"sm\"\n disabled={!ui.hasImage || ui.isLoadingImage || ui.isSaving}\n onClick={engine.save}\n className=\"w-auto\"\n prefixIcon={\n ui.isSaving ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Save className=\"h-4 w-4\" />\n )\n }\n >\n {ui.isSaving ? 'Saving…' : saveLabel}\n </Button>\n <button\n type=\"button\"\n title=\"Close\"\n onClick={() => engine.close()}\n className=\"ml-auto flex h-[30px] w-[30px] items-center justify-center rounded-lg border border-neutral-1 bg-white text-light-4 hover:bg-light-3 hover:text-light-2\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n\n <Ribbon\n ui={ui}\n engine={engine}\n onOpenFile={() => fileInputRef.current?.click()}\n />\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n hidden\n onChange={(e) => {\n const file = e.target.files?.[0]\n if (file) engine.openFile(file)\n e.target.value = ''\n }}\n />\n\n <div className=\"image-editor-stage-panel-wrap relative flex min-h-0 flex-1\">\n <LineSessionBar ui={ui} engine={engine} />\n <Stage\n ref={stageRef}\n ui={ui}\n onChooseImage={() => fileInputRef.current?.click()}\n onDropFile={(file) => engine.openFile(file)}\n />\n <Panel ui={ui} engine={engine} />\n </div>\n\n <StatusBar ui={ui} />\n </div>\n </ImageEditorPortalContext.Provider>\n </div>\n )\n}\n"],"names":["ImageEditorModal","engine","ui","isOpen","saveLabel","rootRef","useRef","rootEl","setRootEl","useState","stageRef","fileInputRef","mountedRef","useEffect","s","t","React","node","ImageEditorPortalContext","Button","Loader2","Save","X","Ribbon","file","LineSessionBar","Stage","Panel","StatusBar"],"mappings":"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"}
@@ -1,91 +1,17 @@
1
- import * as e from "react";
2
- import { Slot as o } from "@radix-ui/react-slot";
3
- import { ChevronRight as l, MoreHorizontal as c } from "lucide-react";
4
- import { cn as m } from "./index.es89.js";
5
- const i = e.forwardRef(({ ...r }, a) => /* @__PURE__ */ e.createElement("nav", { ref: a, "aria-label": "breadcrumb", ...r }));
6
- i.displayName = "Breadcrumb";
7
- const d = e.forwardRef(({ className: r, ...a }, t) => /* @__PURE__ */ e.createElement(
8
- "ol",
9
- {
10
- ref: t,
11
- className: m(
12
- "flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5",
13
- r
14
- ),
15
- ...a
16
- }
17
- ));
18
- d.displayName = "BreadcrumbList";
19
- const p = e.forwardRef(({ className: r, ...a }, t) => /* @__PURE__ */ e.createElement(
20
- "li",
21
- {
22
- ref: t,
23
- className: m("inline-flex items-center gap-1.5", r),
24
- ...a
25
- }
26
- ));
27
- p.displayName = "BreadcrumbItem";
28
- const u = e.forwardRef(({ asChild: r, className: a, ...t }, s) => {
29
- const n = r ? o : "a";
30
- return /* @__PURE__ */ e.createElement(
31
- n,
32
- {
33
- ref: s,
34
- className: m("transition-colors hover:text-foreground", a),
35
- ...t
1
+ function i() {
2
+ return typeof window > "u" ? null : window.ReactNativeWebView ?? null;
3
+ }
4
+ function n(t) {
5
+ const e = i();
6
+ if (e)
7
+ try {
8
+ e.postMessage(
9
+ JSON.stringify({ type: "IMAGE_EDITOR", payload: { data: { open: t } } })
10
+ );
11
+ } catch {
36
12
  }
37
- );
38
- });
39
- u.displayName = "BreadcrumbLink";
40
- const f = e.forwardRef(({ className: r, ...a }, t) => /* @__PURE__ */ e.createElement(
41
- "span",
42
- {
43
- ref: t,
44
- role: "link",
45
- "aria-disabled": "true",
46
- "aria-current": "page",
47
- className: m("font-normal text-foreground", r),
48
- ...a
49
- }
50
- ));
51
- f.displayName = "BreadcrumbPage";
52
- const b = ({
53
- children: r,
54
- className: a,
55
- ...t
56
- }) => /* @__PURE__ */ e.createElement(
57
- "li",
58
- {
59
- role: "presentation",
60
- "aria-hidden": "true",
61
- className: m("[&>svg]:size-3.5", a),
62
- ...t
63
- },
64
- r ?? /* @__PURE__ */ e.createElement(l, null)
65
- );
66
- b.displayName = "BreadcrumbSeparator";
67
- const N = ({
68
- className: r,
69
- ...a
70
- }) => /* @__PURE__ */ e.createElement(
71
- "span",
72
- {
73
- role: "presentation",
74
- "aria-hidden": "true",
75
- className: m("flex h-9 w-9 items-center justify-center", r),
76
- ...a
77
- },
78
- /* @__PURE__ */ e.createElement(c, { className: "h-4 w-4" }),
79
- /* @__PURE__ */ e.createElement("span", { className: "sr-only" }, "More")
80
- );
81
- N.displayName = "BreadcrumbElipssis";
13
+ }
82
14
  export {
83
- i as Breadcrumb,
84
- N as BreadcrumbEllipsis,
85
- p as BreadcrumbItem,
86
- u as BreadcrumbLink,
87
- d as BreadcrumbList,
88
- f as BreadcrumbPage,
89
- b as BreadcrumbSeparator
15
+ n as notifyNativeImageEditorState
90
16
  };
91
17
  //# sourceMappingURL=index.es99.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es99.js","sources":["../src/components/molecules/breadcrumb/breadcrumb-components.tsx"],"sourcesContent":["import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { ChevronRight, MoreHorizontal } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<'nav'> & {\n separator?: React.ReactNode\n }\n>(({ ...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" {...props} />)\nBreadcrumb.displayName = 'Breadcrumb'\n\nconst BreadcrumbList = React.forwardRef<\n HTMLOListElement,\n React.ComponentPropsWithoutRef<'ol'>\n>(({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n 'flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5',\n className\n )}\n {...props}\n />\n))\nBreadcrumbList.displayName = 'BreadcrumbList'\n\nconst BreadcrumbItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentPropsWithoutRef<'li'>\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n))\nBreadcrumbItem.displayName = 'BreadcrumbItem'\n\nconst BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<'a'> & {\n asChild?: boolean\n }\n>(({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a'\n\n return (\n <Comp\n ref={ref}\n className={cn('transition-colors hover:text-foreground', className)}\n {...props}\n />\n )\n})\nBreadcrumbLink.displayName = 'BreadcrumbLink'\n\nconst BreadcrumbPage = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<'span'>\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('font-normal text-foreground', className)}\n {...props}\n />\n))\nBreadcrumbPage.displayName = 'BreadcrumbPage'\n\nconst BreadcrumbSeparator = ({\n children,\n className,\n ...props\n}: React.ComponentProps<'li'>) => (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n)\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator'\n\nconst BreadcrumbEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<'span'>) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex h-9 w-9 items-center justify-center', className)}\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n)\nBreadcrumbEllipsis.displayName = 'BreadcrumbElipssis'\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n"],"names":["Breadcrumb","React","props","ref","BreadcrumbList","className","cn","BreadcrumbItem","BreadcrumbLink","asChild","Comp","Slot","BreadcrumbPage","BreadcrumbSeparator","children","ChevronRight","BreadcrumbEllipsis","MoreHorizontal"],"mappings":";;;;AAMA,MAAMA,IAAaC,EAAM,WAKvB,CAAC,EAAE,GAAGC,EAAA,GAASC,MAAQ,gBAAAF,EAAA,cAAC,SAAI,KAAAE,GAAU,cAAW,cAAc,GAAGD,GAAO,CAAE;AAC7EF,EAAW,cAAc;AAEzB,MAAMI,IAAiBH,EAAM,WAG3B,CAAC,EAAE,WAAAI,GAAW,GAAGH,EAAA,GAASC,MAC1B,gBAAAF,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAE;AAAA,IACA,WAAWG;AAAA,MACT;AAAA,MACAD;AAAA,IAAA;AAAA,IAED,GAAGH;AAAA,EAAA;AACN,CACD;AACDE,EAAe,cAAc;AAE7B,MAAMG,IAAiBN,EAAM,WAG3B,CAAC,EAAE,WAAAI,GAAW,GAAGH,EAAA,GAASC,MAC1B,gBAAAF,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAE;AAAA,IACA,WAAWG,EAAG,oCAAoCD,CAAS;AAAA,IAC1D,GAAGH;AAAA,EAAA;AACN,CACD;AACDK,EAAe,cAAc;AAE7B,MAAMC,IAAiBP,EAAM,WAK3B,CAAC,EAAE,SAAAQ,GAAS,WAAAJ,GAAW,GAAGH,EAAA,GAASC,MAAQ;AAC3C,QAAMO,IAAOD,IAAUE,IAAO;AAE9B,SACE,gBAAAV,EAAA;AAAA,IAACS;AAAA,IAAA;AAAA,MACC,KAAAP;AAAA,MACA,WAAWG,EAAG,2CAA2CD,CAAS;AAAA,MACjE,GAAGH;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;AACDM,EAAe,cAAc;AAE7B,MAAMI,IAAiBX,EAAM,WAG3B,CAAC,EAAE,WAAAI,GAAW,GAAGH,EAAA,GAASC,MAC1B,gBAAAF,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAE;AAAA,IACA,MAAK;AAAA,IACL,iBAAc;AAAA,IACd,gBAAa;AAAA,IACb,WAAWG,EAAG,+BAA+BD,CAAS;AAAA,IACrD,GAAGH;AAAA,EAAA;AACN,CACD;AACDU,EAAe,cAAc;AAE7B,MAAMC,IAAsB,CAAC;AAAA,EAC3B,UAAAC;AAAA,EACA,WAAAT;AAAA,EACA,GAAGH;AACL,MACE,gBAAAD,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,eAAY;AAAA,IACZ,WAAWK,EAAG,oBAAoBD,CAAS;AAAA,IAC1C,GAAGH;AAAA,EAAA;AAAA,EAEHY,qCAAaC,GAAA,IAAa;AAC7B;AAEFF,EAAoB,cAAc;AAElC,MAAMG,IAAqB,CAAC;AAAA,EAC1B,WAAAX;AAAA,EACA,GAAGH;AACL,MACE,gBAAAD,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,eAAY;AAAA,IACZ,WAAWK,EAAG,4CAA4CD,CAAS;AAAA,IAClE,GAAGH;AAAA,EAAA;AAAA,EAEJ,gBAAAD,EAAA,cAACgB,GAAA,EAAe,WAAU,UAAA,CAAU;AAAA,EACpC,gBAAAhB,EAAA,cAAC,QAAA,EAAK,WAAU,UAAA,GAAU,MAAI;AAChC;AAEFe,EAAmB,cAAc;"}
1
+ {"version":3,"file":"index.es99.js","sources":["../src/components/organisms/image-editor/native-bridge.ts"],"sourcesContent":["type ReactNativeWebViewBridge = { postMessage: (message: string) => void }\n\nfunction getNativeBridge(): ReactNativeWebViewBridge | null {\n if (typeof window === 'undefined') return null\n const host = window as unknown as {\n ReactNativeWebView?: ReactNativeWebViewBridge\n }\n return host.ReactNativeWebView ?? null\n}\n\n/** No-op outside a React Native WebView. */\nexport function notifyNativeImageEditorState(open: boolean): void {\n const bridge = getNativeBridge()\n if (!bridge) return\n\n try {\n bridge.postMessage(\n JSON.stringify({ type: 'IMAGE_EDITOR', payload: { data: { open } } })\n )\n } catch {\n // noop\n }\n}\n"],"names":["getNativeBridge","notifyNativeImageEditorState","open","bridge"],"mappings":"AAEA,SAASA,IAAmD;AAC1D,SAAI,OAAO,SAAW,MAAoB,OAC7B,OAGD,sBAAsB;AACpC;AAGO,SAASC,EAA6BC,GAAqB;AAChE,QAAMC,IAASH,EAAA;AACf,MAAKG;AAEL,QAAI;AACF,MAAAA,EAAO;AAAA,QACL,KAAK,UAAU,EAAE,MAAM,gBAAgB,SAAS,EAAE,MAAM,EAAE,MAAAD,EAAA,IAAO,CAAG;AAAA,MAAA;AAAA,IAExE,QAAQ;AAAA,IAER;AACF;"}
package/dist/styles.css CHANGED
@@ -799,6 +799,9 @@ video {
799
799
  .bottom-2{
800
800
  bottom: 0.5rem;
801
801
  }
802
+ .bottom-3{
803
+ bottom: 0.75rem;
804
+ }
802
805
  .left-0{
803
806
  left: 0px;
804
807
  }
@@ -838,6 +841,9 @@ video {
838
841
  .right-2{
839
842
  right: 0.5rem;
840
843
  }
844
+ .right-2\.5{
845
+ right: 0.625rem;
846
+ }
841
847
  .right-4{
842
848
  right: 1rem;
843
849
  }
@@ -868,6 +874,9 @@ video {
868
874
  .z-10{
869
875
  z-index: 10;
870
876
  }
877
+ .z-20{
878
+ z-index: 20;
879
+ }
871
880
  .z-30{
872
881
  z-index: 30;
873
882
  }
@@ -924,6 +933,10 @@ video {
924
933
  margin-top: 0.5rem;
925
934
  margin-bottom: 0.5rem;
926
935
  }
936
+ .my-3{
937
+ margin-top: 0.75rem;
938
+ margin-bottom: 0.75rem;
939
+ }
927
940
  .my-3\.5{
928
941
  margin-top: 0.875rem;
929
942
  margin-bottom: 0.875rem;
@@ -982,6 +995,9 @@ video {
982
995
  .mr-auto{
983
996
  margin-right: auto;
984
997
  }
998
+ .mt-0\.5{
999
+ margin-top: 0.125rem;
1000
+ }
985
1001
  .mt-1{
986
1002
  margin-top: 0.25rem;
987
1003
  }
@@ -1202,6 +1218,9 @@ video {
1202
1218
  .min-h-0{
1203
1219
  min-height: 0px;
1204
1220
  }
1221
+ .min-h-9{
1222
+ min-height: 2.25rem;
1223
+ }
1205
1224
  .min-h-\[160px\]{
1206
1225
  min-height: 160px;
1207
1226
  }
@@ -1211,6 +1230,9 @@ video {
1211
1230
  .min-h-\[42px\]{
1212
1231
  min-height: 42px;
1213
1232
  }
1233
+ .min-h-\[44px\]{
1234
+ min-height: 44px;
1235
+ }
1214
1236
  .min-h-\[52px\]{
1215
1237
  min-height: 52px;
1216
1238
  }
@@ -1579,6 +1601,9 @@ video {
1579
1601
  .resize{
1580
1602
  resize: both;
1581
1603
  }
1604
+ .list-none{
1605
+ list-style-type: none;
1606
+ }
1582
1607
  .grid-flow-col{
1583
1608
  grid-auto-flow: column;
1584
1609
  }
@@ -1980,6 +2005,9 @@ video {
1980
2005
  --tw-bg-opacity: 1;
1981
2006
  background-color: rgb(var(--neutral-950) / var(--tw-bg-opacity, 1));
1982
2007
  }
2008
+ .bg-dark-2\/95{
2009
+ background-color: rgb(var(--neutral-950) / 0.95);
2010
+ }
1983
2011
  .bg-gray-100{
1984
2012
  --tw-bg-opacity: 1;
1985
2013
  background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
@@ -2148,6 +2176,10 @@ video {
2148
2176
  padding-left: 0px;
2149
2177
  padding-right: 0px;
2150
2178
  }
2179
+ .px-0\.5{
2180
+ padding-left: 0.125rem;
2181
+ padding-right: 0.125rem;
2182
+ }
2151
2183
  .px-1{
2152
2184
  padding-left: 0.25rem;
2153
2185
  padding-right: 0.25rem;
@@ -2276,6 +2308,9 @@ video {
2276
2308
  .pt-3{
2277
2309
  padding-top: 0.75rem;
2278
2310
  }
2311
+ .pt-3\.5{
2312
+ padding-top: 0.875rem;
2313
+ }
2279
2314
  .pt-4{
2280
2315
  padding-top: 1rem;
2281
2316
  }
@@ -2405,6 +2440,9 @@ video {
2405
2440
  .leading-relaxed{
2406
2441
  line-height: 1.625;
2407
2442
  }
2443
+ .leading-snug{
2444
+ line-height: 1.375;
2445
+ }
2408
2446
  .tracking-\[-0\.015rem\]{
2409
2447
  letter-spacing: -0.015rem;
2410
2448
  }
@@ -2417,6 +2455,9 @@ video {
2417
2455
  .tracking-tight{
2418
2456
  letter-spacing: -0.025em;
2419
2457
  }
2458
+ .tracking-wide{
2459
+ letter-spacing: 0.025em;
2460
+ }
2420
2461
  .tracking-wider{
2421
2462
  letter-spacing: 0.05em;
2422
2463
  }
@@ -2504,6 +2545,9 @@ video {
2504
2545
  .text-white\/70{
2505
2546
  color: rgb(255 255 255 / 0.7);
2506
2547
  }
2548
+ .text-white\/85{
2549
+ color: rgb(255 255 255 / 0.85);
2550
+ }
2507
2551
  .underline{
2508
2552
  text-decoration-line: underline;
2509
2553
  }
@@ -2618,6 +2662,10 @@ video {
2618
2662
  .filter{
2619
2663
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
2620
2664
  }
2665
+ .backdrop-blur{
2666
+ --tw-backdrop-blur: blur(8px);
2667
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
2668
+ }
2621
2669
  .backdrop-blur-sm{
2622
2670
  --tw-backdrop-blur: blur(4px);
2623
2671
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
@@ -2940,6 +2988,9 @@ svg.lucide {
2940
2988
  --tw-bg-opacity: 1;
2941
2989
  background-color: rgb(var(--primary-500) / var(--tw-bg-opacity, 1));
2942
2990
  }
2991
+ .hover\:bg-white\/10:hover{
2992
+ background-color: rgb(255 255 255 / 0.1);
2993
+ }
2943
2994
  .hover\:stroke-light-1:hover{
2944
2995
  stroke: rgb(var(--neutral-700) / 1);
2945
2996
  }
@@ -3405,6 +3456,10 @@ svg.lucide {
3405
3456
  }
3406
3457
  @media (min-width: 640px){
3407
3458
 
3459
+ .sm\:inline{
3460
+ display: inline;
3461
+ }
3462
+
3408
3463
  .sm\:max-w-sm{
3409
3464
  max-width: 24rem;
3410
3465
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "geoiq-frontend-ui-kit",
3
3
  "private": false,
4
- "version": "2.0.2",
4
+ "version": "2.0.4",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",
7
7
  "module": "dist/index.es.js",
@@ -14,6 +14,7 @@
14
14
  "dev": "vite",
15
15
  "build": "npm run lint && tsc && vite build && npm run build:styles",
16
16
  "build:styles": "postcss src/index.css -o dist/styles.css && cp ui-kit-preset.js dist/",
17
+ "prepublishOnly": "rm -rf dist && npm run build",
17
18
  "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 50",
18
19
  "format": "prettier --write .",
19
20
  "format:check": "prettier --check .",