@djangocfg/ui-tools 2.1.140 → 2.1.144

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 (81) hide show
  1. package/README.md +41 -1
  2. package/dist/{CronScheduler.client-MCNY3POV.mjs → CronScheduler.client-3O3VU4CI.mjs} +3 -3
  3. package/dist/{CronScheduler.client-MCNY3POV.mjs.map → CronScheduler.client-3O3VU4CI.mjs.map} +1 -1
  4. package/dist/{CronScheduler.client-3JXCOKFY.cjs → CronScheduler.client-A4GO6YBY.cjs} +11 -11
  5. package/dist/{CronScheduler.client-3JXCOKFY.cjs.map → CronScheduler.client-A4GO6YBY.cjs.map} +1 -1
  6. package/dist/{chunk-CY3CQS26.cjs → chunk-46VDB3BJ.cjs} +13 -13
  7. package/dist/{chunk-CY3CQS26.cjs.map → chunk-46VDB3BJ.cjs.map} +1 -1
  8. package/dist/{chunk-LTJX2JXE.mjs → chunk-5LBDYFWH.mjs} +2 -2
  9. package/dist/chunk-5LBDYFWH.mjs.map +1 -0
  10. package/dist/{chunk-TEFRA7GW.cjs → chunk-6RG7HOVF.cjs} +9 -9
  11. package/dist/{chunk-TEFRA7GW.cjs.map → chunk-6RG7HOVF.cjs.map} +1 -1
  12. package/dist/{chunk-XTBRWVIV.cjs → chunk-77HQWEQ6.cjs} +2 -2
  13. package/dist/chunk-77HQWEQ6.cjs.map +1 -0
  14. package/dist/{chunk-OVNC4KW6.mjs → chunk-7HP3GZFT.mjs} +2 -2
  15. package/dist/chunk-7HP3GZFT.mjs.map +1 -0
  16. package/dist/{chunk-AL7PTAS5.cjs → chunk-F2CMIIOH.cjs} +2 -2
  17. package/dist/{chunk-AL7PTAS5.cjs.map → chunk-F2CMIIOH.cjs.map} +1 -1
  18. package/dist/{chunk-EVGWYASL.cjs → chunk-KHHTBDWW.cjs} +2 -2
  19. package/dist/chunk-KHHTBDWW.cjs.map +1 -0
  20. package/dist/{chunk-2DSR7V2L.mjs → chunk-MADKYFI3.mjs} +3 -3
  21. package/dist/{chunk-2DSR7V2L.mjs.map → chunk-MADKYFI3.mjs.map} +1 -1
  22. package/dist/{chunk-QIAP4G5L.mjs → chunk-PZKAH7WQ.mjs} +2 -2
  23. package/dist/{chunk-QIAP4G5L.mjs.map → chunk-PZKAH7WQ.mjs.map} +1 -1
  24. package/dist/{chunk-4G4UGMOP.mjs → chunk-QKG4LERV.mjs} +3 -3
  25. package/dist/{chunk-4G4UGMOP.mjs.map → chunk-QKG4LERV.mjs.map} +1 -1
  26. package/dist/{components-Y64GTIMQ.cjs → components-7L3KMPQ5.cjs} +11 -11
  27. package/dist/{components-4YSJ5ALL.mjs.map → components-7L3KMPQ5.cjs.map} +1 -1
  28. package/dist/components-AALNUI3D.cjs +27 -0
  29. package/dist/{components-BSTP3VLD.cjs.map → components-AALNUI3D.cjs.map} +1 -1
  30. package/dist/components-GGZJFEII.mjs +5 -0
  31. package/dist/{components-C7ZL7OMY.mjs.map → components-GGZJFEII.mjs.map} +1 -1
  32. package/dist/{components-C7ZL7OMY.mjs → components-IPSHDNXP.mjs} +3 -3
  33. package/dist/{components-LDRFDV4A.cjs.map → components-IPSHDNXP.mjs.map} +1 -1
  34. package/dist/components-JOYIAXID.mjs +6 -0
  35. package/dist/components-JOYIAXID.mjs.map +1 -0
  36. package/dist/components-YC32T5D7.cjs +22 -0
  37. package/dist/components-YC32T5D7.cjs.map +1 -0
  38. package/dist/index.cjs +84 -84
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.mjs +11 -11
  41. package/dist/index.mjs.map +1 -1
  42. package/package.json +6 -6
  43. package/src/components/markdown/useCollapsibleContent.ts +1 -1
  44. package/src/stores/mediaCache.ts +2 -1
  45. package/src/tools/AudioPlayer/hooks/useHybridAudio.ts +1 -1
  46. package/src/tools/AudioPlayer/hooks/useHybridAudioAnalysis.ts +2 -1
  47. package/src/tools/CronScheduler/context/hooks.ts +1 -0
  48. package/src/tools/Gallery/hooks/useGallery.ts +2 -1
  49. package/src/tools/Gallery/hooks/useImageDimensions.ts +2 -1
  50. package/src/tools/Gallery/hooks/usePinchZoom.ts +1 -1
  51. package/src/tools/Gallery/hooks/usePreloadImages.ts +2 -1
  52. package/src/tools/Gallery/hooks/useSwipe.ts +2 -1
  53. package/src/tools/Gallery/hooks/useVirtualList.ts +1 -1
  54. package/src/tools/Gallery/hooks/useZoom.ts +1 -1
  55. package/src/tools/ImageViewer/hooks/useImageLoading.ts +6 -3
  56. package/src/tools/ImageViewer/hooks/useImageTransform.ts +3 -2
  57. package/src/tools/ImageViewer/utils/lqip.ts +1 -1
  58. package/src/tools/Map/Map.story.tsx +160 -2
  59. package/src/tools/Map/components/MapCluster.tsx +0 -3
  60. package/src/tools/Map/hooks/index.ts +1 -0
  61. package/src/tools/Map/hooks/useMap.ts +1 -1
  62. package/src/tools/Map/hooks/useMapControl.ts +4 -2
  63. package/src/tools/Map/hooks/useMapEvents.ts +4 -2
  64. package/src/tools/Map/hooks/useMapLayers.ts +4 -3
  65. package/src/tools/Map/hooks/useMapViewport.ts +4 -2
  66. package/src/tools/Map/hooks/useMarkers.ts +5 -3
  67. package/src/tools/Map/hooks/useSpiderfy.ts +183 -0
  68. package/src/tools/Map/utils/index.ts +9 -0
  69. package/src/tools/Map/utils/spiderfy.ts +239 -0
  70. package/src/tools/VideoPlayer/hooks/useVideoPlayerSettings.ts +1 -0
  71. package/src/tools/VideoPlayer/hooks/useVideoPositionCache.ts +2 -1
  72. package/dist/chunk-EVGWYASL.cjs.map +0 -1
  73. package/dist/chunk-LTJX2JXE.mjs.map +0 -1
  74. package/dist/chunk-OVNC4KW6.mjs.map +0 -1
  75. package/dist/chunk-XTBRWVIV.cjs.map +0 -1
  76. package/dist/components-4YSJ5ALL.mjs +0 -6
  77. package/dist/components-BSTP3VLD.cjs +0 -27
  78. package/dist/components-LDRFDV4A.cjs +0 -22
  79. package/dist/components-VZKUTDJK.mjs +0 -5
  80. package/dist/components-VZKUTDJK.mjs.map +0 -1
  81. package/dist/components-Y64GTIMQ.cjs.map +0 -1
package/README.md CHANGED
@@ -132,7 +132,7 @@ function LocationMap() {
132
132
  | `MapContainer` | Main map container with controls |
133
133
  | `MapMarker` | Custom marker with React children |
134
134
  | `MapPopup` | Popup attached to marker |
135
- | `MapCluster` | Clustered markers |
135
+ | `MapCluster` | Clustered markers with spiderfy |
136
136
  | `MapSource` / `MapLayer` | Custom GeoJSON layers |
137
137
  | `MapControls` | Navigation controls |
138
138
  | `MapLegend` | Map legend component |
@@ -140,6 +140,46 @@ function LocationMap() {
140
140
  | `DrawControl` | Drawing tools (optional) |
141
141
  | `GeocoderControl` | Search/geocoding (optional) |
142
142
 
143
+ ### Overlapping Markers
144
+
145
+ When multiple markers are at the same location, use `offsetOverlappingMarkers` to spread them out before rendering:
146
+
147
+ ```tsx
148
+ import { MapCluster } from '@djangocfg/ui-tools/map';
149
+ import { offsetOverlappingMarkers } from '@djangocfg/ui-tools/map';
150
+
151
+ // Pre-process data to offset overlapping points
152
+ const processedData = useMemo(() => {
153
+ const markers = geojson.features.map((f, i) => ({
154
+ id: f.properties?.id || `point-${i}`,
155
+ longitude: f.geometry.coordinates[0],
156
+ latitude: f.geometry.coordinates[1],
157
+ data: f.properties,
158
+ }));
159
+
160
+ const offsetMarkers = offsetOverlappingMarkers(markers, {
161
+ spiralRadius: 0.0003, // ~30m spread
162
+ });
163
+
164
+ return {
165
+ type: 'FeatureCollection',
166
+ features: offsetMarkers.map((m) => ({
167
+ type: 'Feature',
168
+ properties: m.data,
169
+ geometry: { type: 'Point', coordinates: [m.longitude, m.latitude] },
170
+ })),
171
+ };
172
+ }, [geojson]);
173
+
174
+ <MapCluster sourceId="points" data={processedData} />
175
+ ```
176
+
177
+ | Utility | Description |
178
+ |---------|-------------|
179
+ | `offsetOverlappingMarkers(markers, options)` | Spread overlapping markers using Fermat spiral |
180
+ | `hasOverlappingMarkers(markers)` | Check if any markers overlap |
181
+ | `getOverlapStats(markers)` | Get statistics about overlapping markers |
182
+
143
183
  ### Map Hooks
144
184
 
145
185
  | Hook | Description |
@@ -1,4 +1,4 @@
1
- import { useCronType, ScheduleTypeSelector, TimeSelector, DayChips, MonthDayGrid, CustomInput, SchedulePreview, CronSchedulerProvider } from './chunk-QIAP4G5L.mjs';
1
+ import { useCronType, ScheduleTypeSelector, TimeSelector, DayChips, MonthDayGrid, CustomInput, SchedulePreview, CronSchedulerProvider } from './chunk-PZKAH7WQ.mjs';
2
2
  import { __name } from './chunk-CGILA3WO.mjs';
3
3
  import { cn } from '@djangocfg/ui-core/lib';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -63,5 +63,5 @@ __name(CronScheduler, "CronScheduler");
63
63
  var CronScheduler_client_default = CronScheduler;
64
64
 
65
65
  export { CronScheduler, CronScheduler_client_default as default };
66
- //# sourceMappingURL=CronScheduler.client-MCNY3POV.mjs.map
67
- //# sourceMappingURL=CronScheduler.client-MCNY3POV.mjs.map
66
+ //# sourceMappingURL=CronScheduler.client-3O3VU4CI.mjs.map
67
+ //# sourceMappingURL=CronScheduler.client-3O3VU4CI.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tools/CronScheduler/CronScheduler.client.tsx"],"names":[],"mappings":";;;;;AAmCA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,WAAA,EAAY;AAE7B,EAAA,4BACG,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,WAAA,EAAa,SAAS,CAAA,EAEvC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,wBAAqB,QAAA,EAAoB,CAAA;AAAA,IAGzC,SAAS,QAAA,oBACR,GAAA,CAAC,YAAA,EAAA,EAAa,MAAA,EAAQ,YAAY,QAAA,EAAoB,CAAA;AAAA,IAIvD,SAAS,QAAA,oBACR,GAAA,CAAC,QAAA,EAAA,EAAS,QAAA,EAAoB,aAAW,IAAA,EAAC,CAAA;AAAA,IAI3C,SAAS,SAAA,oBACR,GAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAoB,aAAW,IAAA,EAAC,CAAA;AAAA,IAI/C,IAAA,KAAS,QAAA,oBACR,GAAA,CAAC,WAAA,EAAA,EAAY,QAAA,EAAoB,CAAA;AAAA,IAIlC,WAAA,oBACC,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,kBAAA,EAAkB,IAAA;AAAA,QAClB;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;AA5CS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AA2EF,SAAS,aAAA,CAAc;AAAA,EAC5B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,OAAA;AAAA,EACd,WAAA,GAAc,IAAA;AAAA,EACd,kBAAA,GAAqB,KAAA;AAAA,EACrB,SAAA,GAAY,KAAA;AAAA,EACZ,UAAA,GAAa,KAAA;AAAA,EACb,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EAAuB;AACrB,EAAA,uBACE,GAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,WAAA;AAAA,UACA,kBAAA;AAAA,UACA,SAAA;AAAA,UACA,UAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;AA3BgB,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AA6BhB,IAAO,4BAAA,GAAQ","file":"CronScheduler.client-MCNY3POV.mjs","sourcesContent":["'use client';\n\n/**\n * CronScheduler Client Component\n *\n * Compact cron expression builder following Apple HIG principles.\n * Uses context-based architecture for state management.\n */\n\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { CronSchedulerProvider } from './context/CronSchedulerContext';\nimport { useCronType } from './context/hooks';\nimport {\n ScheduleTypeSelector,\n TimeSelector,\n DayChips,\n MonthDayGrid,\n CustomInput,\n SchedulePreview,\n} from './components';\nimport type { CronSchedulerProps } from './types';\n\n// ============================================================================\n// Inner Component (uses context)\n// ============================================================================\n\ninterface CronSchedulerInnerProps {\n showPreview: boolean;\n showCronExpression: boolean;\n allowCopy: boolean;\n timeFormat: '12h' | '24h';\n disabled: boolean;\n className?: string;\n}\n\nfunction CronSchedulerInner({\n showPreview,\n showCronExpression,\n allowCopy,\n timeFormat,\n disabled,\n className,\n}: CronSchedulerInnerProps) {\n const { type } = useCronType();\n\n return (\n <div className={cn('space-y-3', className)}>\n {/* Schedule Type Selector */}\n <ScheduleTypeSelector disabled={disabled} />\n\n {/* Time Selector (shown for daily, weekly, monthly) */}\n {type !== 'custom' && (\n <TimeSelector format={timeFormat} disabled={disabled} />\n )}\n\n {/* Day Chips (weekly only) */}\n {type === 'weekly' && (\n <DayChips disabled={disabled} showPresets />\n )}\n\n {/* Month Day Grid (monthly only) */}\n {type === 'monthly' && (\n <MonthDayGrid disabled={disabled} showPresets />\n )}\n\n {/* Custom Input (custom only) */}\n {type === 'custom' && (\n <CustomInput disabled={disabled} />\n )}\n\n {/* Preview - always show cron expression */}\n {showPreview && (\n <SchedulePreview\n showCronExpression\n allowCopy={allowCopy}\n />\n )}\n </div>\n );\n}\n\n// ============================================================================\n// Main Component (with Provider)\n// ============================================================================\n\n/**\n * CronScheduler - Compact cron expression builder\n *\n * A user-friendly interface for creating cron schedules without\n * needing to know cron syntax. Follows Apple HIG design principles.\n *\n * @example\n * // Basic usage\n * <CronScheduler\n * value={cronExpression}\n * onChange={setCronExpression}\n * />\n *\n * @example\n * // With all options\n * <CronScheduler\n * value=\"0 9 * * 1-5\"\n * onChange={handleChange}\n * defaultType=\"weekly\"\n * showPreview\n * showCronExpression\n * allowCopy\n * timeFormat=\"24h\"\n * />\n */\nexport function CronScheduler({\n value,\n onChange,\n defaultType = 'daily',\n showPreview = true,\n showCronExpression = false,\n allowCopy = false,\n timeFormat = '24h',\n disabled = false,\n className,\n}: CronSchedulerProps) {\n return (\n <CronSchedulerProvider\n value={value}\n onChange={onChange}\n defaultType={defaultType}\n >\n <CronSchedulerInner\n showPreview={showPreview}\n showCronExpression={showCronExpression}\n allowCopy={allowCopy}\n timeFormat={timeFormat}\n disabled={disabled}\n className={className}\n />\n </CronSchedulerProvider>\n );\n}\n\nexport default CronScheduler;\n"]}
1
+ {"version":3,"sources":["../src/tools/CronScheduler/CronScheduler.client.tsx"],"names":[],"mappings":";;;;;AAmCA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,WAAA,EAAY;AAE7B,EAAA,4BACG,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,WAAA,EAAa,SAAS,CAAA,EAEvC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,wBAAqB,QAAA,EAAoB,CAAA;AAAA,IAGzC,SAAS,QAAA,oBACR,GAAA,CAAC,YAAA,EAAA,EAAa,MAAA,EAAQ,YAAY,QAAA,EAAoB,CAAA;AAAA,IAIvD,SAAS,QAAA,oBACR,GAAA,CAAC,QAAA,EAAA,EAAS,QAAA,EAAoB,aAAW,IAAA,EAAC,CAAA;AAAA,IAI3C,SAAS,SAAA,oBACR,GAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAoB,aAAW,IAAA,EAAC,CAAA;AAAA,IAI/C,IAAA,KAAS,QAAA,oBACR,GAAA,CAAC,WAAA,EAAA,EAAY,QAAA,EAAoB,CAAA;AAAA,IAIlC,WAAA,oBACC,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,kBAAA,EAAkB,IAAA;AAAA,QAClB;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;AA5CS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AA2EF,SAAS,aAAA,CAAc;AAAA,EAC5B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,OAAA;AAAA,EACd,WAAA,GAAc,IAAA;AAAA,EACd,kBAAA,GAAqB,KAAA;AAAA,EACrB,SAAA,GAAY,KAAA;AAAA,EACZ,UAAA,GAAa,KAAA;AAAA,EACb,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EAAuB;AACrB,EAAA,uBACE,GAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,WAAA;AAAA,UACA,kBAAA;AAAA,UACA,SAAA;AAAA,UACA,UAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;AA3BgB,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AA6BhB,IAAO,4BAAA,GAAQ","file":"CronScheduler.client-3O3VU4CI.mjs","sourcesContent":["'use client';\n\n/**\n * CronScheduler Client Component\n *\n * Compact cron expression builder following Apple HIG principles.\n * Uses context-based architecture for state management.\n */\n\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { CronSchedulerProvider } from './context/CronSchedulerContext';\nimport { useCronType } from './context/hooks';\nimport {\n ScheduleTypeSelector,\n TimeSelector,\n DayChips,\n MonthDayGrid,\n CustomInput,\n SchedulePreview,\n} from './components';\nimport type { CronSchedulerProps } from './types';\n\n// ============================================================================\n// Inner Component (uses context)\n// ============================================================================\n\ninterface CronSchedulerInnerProps {\n showPreview: boolean;\n showCronExpression: boolean;\n allowCopy: boolean;\n timeFormat: '12h' | '24h';\n disabled: boolean;\n className?: string;\n}\n\nfunction CronSchedulerInner({\n showPreview,\n showCronExpression,\n allowCopy,\n timeFormat,\n disabled,\n className,\n}: CronSchedulerInnerProps) {\n const { type } = useCronType();\n\n return (\n <div className={cn('space-y-3', className)}>\n {/* Schedule Type Selector */}\n <ScheduleTypeSelector disabled={disabled} />\n\n {/* Time Selector (shown for daily, weekly, monthly) */}\n {type !== 'custom' && (\n <TimeSelector format={timeFormat} disabled={disabled} />\n )}\n\n {/* Day Chips (weekly only) */}\n {type === 'weekly' && (\n <DayChips disabled={disabled} showPresets />\n )}\n\n {/* Month Day Grid (monthly only) */}\n {type === 'monthly' && (\n <MonthDayGrid disabled={disabled} showPresets />\n )}\n\n {/* Custom Input (custom only) */}\n {type === 'custom' && (\n <CustomInput disabled={disabled} />\n )}\n\n {/* Preview - always show cron expression */}\n {showPreview && (\n <SchedulePreview\n showCronExpression\n allowCopy={allowCopy}\n />\n )}\n </div>\n );\n}\n\n// ============================================================================\n// Main Component (with Provider)\n// ============================================================================\n\n/**\n * CronScheduler - Compact cron expression builder\n *\n * A user-friendly interface for creating cron schedules without\n * needing to know cron syntax. Follows Apple HIG design principles.\n *\n * @example\n * // Basic usage\n * <CronScheduler\n * value={cronExpression}\n * onChange={setCronExpression}\n * />\n *\n * @example\n * // With all options\n * <CronScheduler\n * value=\"0 9 * * 1-5\"\n * onChange={handleChange}\n * defaultType=\"weekly\"\n * showPreview\n * showCronExpression\n * allowCopy\n * timeFormat=\"24h\"\n * />\n */\nexport function CronScheduler({\n value,\n onChange,\n defaultType = 'daily',\n showPreview = true,\n showCronExpression = false,\n allowCopy = false,\n timeFormat = '24h',\n disabled = false,\n className,\n}: CronSchedulerProps) {\n return (\n <CronSchedulerProvider\n value={value}\n onChange={onChange}\n defaultType={defaultType}\n >\n <CronSchedulerInner\n showPreview={showPreview}\n showCronExpression={showCronExpression}\n allowCopy={allowCopy}\n timeFormat={timeFormat}\n disabled={disabled}\n className={className}\n />\n </CronSchedulerProvider>\n );\n}\n\nexport default CronScheduler;\n"]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var chunkAL7PTAS5_cjs = require('./chunk-AL7PTAS5.cjs');
5
+ var chunkF2CMIIOH_cjs = require('./chunk-F2CMIIOH.cjs');
6
6
  var chunkWGEGR3DF_cjs = require('./chunk-WGEGR3DF.cjs');
7
7
  var lib = require('@djangocfg/ui-core/lib');
8
8
  var jsxRuntime = require('react/jsx-runtime');
@@ -15,15 +15,15 @@ function CronSchedulerInner({
15
15
  disabled,
16
16
  className
17
17
  }) {
18
- const { type } = chunkAL7PTAS5_cjs.useCronType();
18
+ const { type } = chunkF2CMIIOH_cjs.useCronType();
19
19
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: lib.cn("space-y-3", className), children: [
20
- /* @__PURE__ */ jsxRuntime.jsx(chunkAL7PTAS5_cjs.ScheduleTypeSelector, { disabled }),
21
- type !== "custom" && /* @__PURE__ */ jsxRuntime.jsx(chunkAL7PTAS5_cjs.TimeSelector, { format: timeFormat, disabled }),
22
- type === "weekly" && /* @__PURE__ */ jsxRuntime.jsx(chunkAL7PTAS5_cjs.DayChips, { disabled, showPresets: true }),
23
- type === "monthly" && /* @__PURE__ */ jsxRuntime.jsx(chunkAL7PTAS5_cjs.MonthDayGrid, { disabled, showPresets: true }),
24
- type === "custom" && /* @__PURE__ */ jsxRuntime.jsx(chunkAL7PTAS5_cjs.CustomInput, { disabled }),
20
+ /* @__PURE__ */ jsxRuntime.jsx(chunkF2CMIIOH_cjs.ScheduleTypeSelector, { disabled }),
21
+ type !== "custom" && /* @__PURE__ */ jsxRuntime.jsx(chunkF2CMIIOH_cjs.TimeSelector, { format: timeFormat, disabled }),
22
+ type === "weekly" && /* @__PURE__ */ jsxRuntime.jsx(chunkF2CMIIOH_cjs.DayChips, { disabled, showPresets: true }),
23
+ type === "monthly" && /* @__PURE__ */ jsxRuntime.jsx(chunkF2CMIIOH_cjs.MonthDayGrid, { disabled, showPresets: true }),
24
+ type === "custom" && /* @__PURE__ */ jsxRuntime.jsx(chunkF2CMIIOH_cjs.CustomInput, { disabled }),
25
25
  showPreview && /* @__PURE__ */ jsxRuntime.jsx(
26
- chunkAL7PTAS5_cjs.SchedulePreview,
26
+ chunkF2CMIIOH_cjs.SchedulePreview,
27
27
  {
28
28
  showCronExpression: true,
29
29
  allowCopy
@@ -44,7 +44,7 @@ function CronScheduler({
44
44
  className
45
45
  }) {
46
46
  return /* @__PURE__ */ jsxRuntime.jsx(
47
- chunkAL7PTAS5_cjs.CronSchedulerProvider,
47
+ chunkF2CMIIOH_cjs.CronSchedulerProvider,
48
48
  {
49
49
  value,
50
50
  onChange,
@@ -68,5 +68,5 @@ var CronScheduler_client_default = CronScheduler;
68
68
 
69
69
  exports.CronScheduler = CronScheduler;
70
70
  exports.default = CronScheduler_client_default;
71
- //# sourceMappingURL=CronScheduler.client-3JXCOKFY.cjs.map
72
- //# sourceMappingURL=CronScheduler.client-3JXCOKFY.cjs.map
71
+ //# sourceMappingURL=CronScheduler.client-A4GO6YBY.cjs.map
72
+ //# sourceMappingURL=CronScheduler.client-A4GO6YBY.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tools/CronScheduler/CronScheduler.client.tsx"],"names":["useCronType","cn","jsx","ScheduleTypeSelector","TimeSelector","DayChips","MonthDayGrid","CustomInput","SchedulePreview","__name","CronSchedulerProvider"],"mappings":";;;;;;;;;AAmCA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAIA,6BAAA,EAAY;AAE7B,EAAA,uCACG,KAAA,EAAA,EAAI,SAAA,EAAWC,MAAA,CAAG,WAAA,EAAa,SAAS,CAAA,EAEvC,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAACC,0CAAqB,QAAA,EAAoB,CAAA;AAAA,IAGzC,SAAS,QAAA,oBACRD,cAAA,CAACE,8BAAA,EAAA,EAAa,MAAA,EAAQ,YAAY,QAAA,EAAoB,CAAA;AAAA,IAIvD,SAAS,QAAA,oBACRF,cAAA,CAACG,0BAAA,EAAA,EAAS,QAAA,EAAoB,aAAW,IAAA,EAAC,CAAA;AAAA,IAI3C,SAAS,SAAA,oBACRH,cAAA,CAACI,8BAAA,EAAA,EAAa,QAAA,EAAoB,aAAW,IAAA,EAAC,CAAA;AAAA,IAI/C,IAAA,KAAS,QAAA,oBACRJ,cAAA,CAACK,6BAAA,EAAA,EAAY,QAAA,EAAoB,CAAA;AAAA,IAIlC,WAAA,oBACCL,cAAA;AAAA,MAACM,iCAAA;AAAA,MAAA;AAAA,QACC,kBAAA,EAAkB,IAAA;AAAA,QAClB;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;AA5CSC,wBAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AA2EF,SAAS,aAAA,CAAc;AAAA,EAC5B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,OAAA;AAAA,EACd,WAAA,GAAc,IAAA;AAAA,EACd,kBAAA,GAAqB,KAAA;AAAA,EACrB,SAAA,GAAY,KAAA;AAAA,EACZ,UAAA,GAAa,KAAA;AAAA,EACb,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EAAuB;AACrB,EAAA,uBACEP,cAAA;AAAA,IAACQ,uCAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MAEA,QAAA,kBAAAR,cAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,WAAA;AAAA,UACA,kBAAA;AAAA,UACA,SAAA;AAAA,UACA,UAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;AA3BgBO,wBAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AA6BhB,IAAO,4BAAA,GAAQ","file":"CronScheduler.client-3JXCOKFY.cjs","sourcesContent":["'use client';\n\n/**\n * CronScheduler Client Component\n *\n * Compact cron expression builder following Apple HIG principles.\n * Uses context-based architecture for state management.\n */\n\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { CronSchedulerProvider } from './context/CronSchedulerContext';\nimport { useCronType } from './context/hooks';\nimport {\n ScheduleTypeSelector,\n TimeSelector,\n DayChips,\n MonthDayGrid,\n CustomInput,\n SchedulePreview,\n} from './components';\nimport type { CronSchedulerProps } from './types';\n\n// ============================================================================\n// Inner Component (uses context)\n// ============================================================================\n\ninterface CronSchedulerInnerProps {\n showPreview: boolean;\n showCronExpression: boolean;\n allowCopy: boolean;\n timeFormat: '12h' | '24h';\n disabled: boolean;\n className?: string;\n}\n\nfunction CronSchedulerInner({\n showPreview,\n showCronExpression,\n allowCopy,\n timeFormat,\n disabled,\n className,\n}: CronSchedulerInnerProps) {\n const { type } = useCronType();\n\n return (\n <div className={cn('space-y-3', className)}>\n {/* Schedule Type Selector */}\n <ScheduleTypeSelector disabled={disabled} />\n\n {/* Time Selector (shown for daily, weekly, monthly) */}\n {type !== 'custom' && (\n <TimeSelector format={timeFormat} disabled={disabled} />\n )}\n\n {/* Day Chips (weekly only) */}\n {type === 'weekly' && (\n <DayChips disabled={disabled} showPresets />\n )}\n\n {/* Month Day Grid (monthly only) */}\n {type === 'monthly' && (\n <MonthDayGrid disabled={disabled} showPresets />\n )}\n\n {/* Custom Input (custom only) */}\n {type === 'custom' && (\n <CustomInput disabled={disabled} />\n )}\n\n {/* Preview - always show cron expression */}\n {showPreview && (\n <SchedulePreview\n showCronExpression\n allowCopy={allowCopy}\n />\n )}\n </div>\n );\n}\n\n// ============================================================================\n// Main Component (with Provider)\n// ============================================================================\n\n/**\n * CronScheduler - Compact cron expression builder\n *\n * A user-friendly interface for creating cron schedules without\n * needing to know cron syntax. Follows Apple HIG design principles.\n *\n * @example\n * // Basic usage\n * <CronScheduler\n * value={cronExpression}\n * onChange={setCronExpression}\n * />\n *\n * @example\n * // With all options\n * <CronScheduler\n * value=\"0 9 * * 1-5\"\n * onChange={handleChange}\n * defaultType=\"weekly\"\n * showPreview\n * showCronExpression\n * allowCopy\n * timeFormat=\"24h\"\n * />\n */\nexport function CronScheduler({\n value,\n onChange,\n defaultType = 'daily',\n showPreview = true,\n showCronExpression = false,\n allowCopy = false,\n timeFormat = '24h',\n disabled = false,\n className,\n}: CronSchedulerProps) {\n return (\n <CronSchedulerProvider\n value={value}\n onChange={onChange}\n defaultType={defaultType}\n >\n <CronSchedulerInner\n showPreview={showPreview}\n showCronExpression={showCronExpression}\n allowCopy={allowCopy}\n timeFormat={timeFormat}\n disabled={disabled}\n className={className}\n />\n </CronSchedulerProvider>\n );\n}\n\nexport default CronScheduler;\n"]}
1
+ {"version":3,"sources":["../src/tools/CronScheduler/CronScheduler.client.tsx"],"names":["useCronType","cn","jsx","ScheduleTypeSelector","TimeSelector","DayChips","MonthDayGrid","CustomInput","SchedulePreview","__name","CronSchedulerProvider"],"mappings":";;;;;;;;;AAmCA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAIA,6BAAA,EAAY;AAE7B,EAAA,uCACG,KAAA,EAAA,EAAI,SAAA,EAAWC,MAAA,CAAG,WAAA,EAAa,SAAS,CAAA,EAEvC,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAACC,0CAAqB,QAAA,EAAoB,CAAA;AAAA,IAGzC,SAAS,QAAA,oBACRD,cAAA,CAACE,8BAAA,EAAA,EAAa,MAAA,EAAQ,YAAY,QAAA,EAAoB,CAAA;AAAA,IAIvD,SAAS,QAAA,oBACRF,cAAA,CAACG,0BAAA,EAAA,EAAS,QAAA,EAAoB,aAAW,IAAA,EAAC,CAAA;AAAA,IAI3C,SAAS,SAAA,oBACRH,cAAA,CAACI,8BAAA,EAAA,EAAa,QAAA,EAAoB,aAAW,IAAA,EAAC,CAAA;AAAA,IAI/C,IAAA,KAAS,QAAA,oBACRJ,cAAA,CAACK,6BAAA,EAAA,EAAY,QAAA,EAAoB,CAAA;AAAA,IAIlC,WAAA,oBACCL,cAAA;AAAA,MAACM,iCAAA;AAAA,MAAA;AAAA,QACC,kBAAA,EAAkB,IAAA;AAAA,QAClB;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;AA5CSC,wBAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AA2EF,SAAS,aAAA,CAAc;AAAA,EAC5B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,OAAA;AAAA,EACd,WAAA,GAAc,IAAA;AAAA,EACd,kBAAA,GAAqB,KAAA;AAAA,EACrB,SAAA,GAAY,KAAA;AAAA,EACZ,UAAA,GAAa,KAAA;AAAA,EACb,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EAAuB;AACrB,EAAA,uBACEP,cAAA;AAAA,IAACQ,uCAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MAEA,QAAA,kBAAAR,cAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,WAAA;AAAA,UACA,kBAAA;AAAA,UACA,SAAA;AAAA,UACA,UAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;AA3BgBO,wBAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AA6BhB,IAAO,4BAAA,GAAQ","file":"CronScheduler.client-A4GO6YBY.cjs","sourcesContent":["'use client';\n\n/**\n * CronScheduler Client Component\n *\n * Compact cron expression builder following Apple HIG principles.\n * Uses context-based architecture for state management.\n */\n\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { CronSchedulerProvider } from './context/CronSchedulerContext';\nimport { useCronType } from './context/hooks';\nimport {\n ScheduleTypeSelector,\n TimeSelector,\n DayChips,\n MonthDayGrid,\n CustomInput,\n SchedulePreview,\n} from './components';\nimport type { CronSchedulerProps } from './types';\n\n// ============================================================================\n// Inner Component (uses context)\n// ============================================================================\n\ninterface CronSchedulerInnerProps {\n showPreview: boolean;\n showCronExpression: boolean;\n allowCopy: boolean;\n timeFormat: '12h' | '24h';\n disabled: boolean;\n className?: string;\n}\n\nfunction CronSchedulerInner({\n showPreview,\n showCronExpression,\n allowCopy,\n timeFormat,\n disabled,\n className,\n}: CronSchedulerInnerProps) {\n const { type } = useCronType();\n\n return (\n <div className={cn('space-y-3', className)}>\n {/* Schedule Type Selector */}\n <ScheduleTypeSelector disabled={disabled} />\n\n {/* Time Selector (shown for daily, weekly, monthly) */}\n {type !== 'custom' && (\n <TimeSelector format={timeFormat} disabled={disabled} />\n )}\n\n {/* Day Chips (weekly only) */}\n {type === 'weekly' && (\n <DayChips disabled={disabled} showPresets />\n )}\n\n {/* Month Day Grid (monthly only) */}\n {type === 'monthly' && (\n <MonthDayGrid disabled={disabled} showPresets />\n )}\n\n {/* Custom Input (custom only) */}\n {type === 'custom' && (\n <CustomInput disabled={disabled} />\n )}\n\n {/* Preview - always show cron expression */}\n {showPreview && (\n <SchedulePreview\n showCronExpression\n allowCopy={allowCopy}\n />\n )}\n </div>\n );\n}\n\n// ============================================================================\n// Main Component (with Provider)\n// ============================================================================\n\n/**\n * CronScheduler - Compact cron expression builder\n *\n * A user-friendly interface for creating cron schedules without\n * needing to know cron syntax. Follows Apple HIG design principles.\n *\n * @example\n * // Basic usage\n * <CronScheduler\n * value={cronExpression}\n * onChange={setCronExpression}\n * />\n *\n * @example\n * // With all options\n * <CronScheduler\n * value=\"0 9 * * 1-5\"\n * onChange={handleChange}\n * defaultType=\"weekly\"\n * showPreview\n * showCronExpression\n * allowCopy\n * timeFormat=\"24h\"\n * />\n */\nexport function CronScheduler({\n value,\n onChange,\n defaultType = 'daily',\n showPreview = true,\n showCronExpression = false,\n allowCopy = false,\n timeFormat = '24h',\n disabled = false,\n className,\n}: CronSchedulerProps) {\n return (\n <CronSchedulerProvider\n value={value}\n onChange={onChange}\n defaultType={defaultType}\n >\n <CronSchedulerInner\n showPreview={showPreview}\n showCronExpression={showCronExpression}\n allowCopy={allowCopy}\n timeFormat={timeFormat}\n disabled={disabled}\n className={className}\n />\n </CronSchedulerProvider>\n );\n}\n\nexport default CronScheduler;\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkF2N7P5XU_cjs = require('./chunk-F2N7P5XU.cjs');
4
- var chunkXTBRWVIV_cjs = require('./chunk-XTBRWVIV.cjs');
4
+ var chunk77HQWEQ6_cjs = require('./chunk-77HQWEQ6.cjs');
5
5
  var chunkWGEGR3DF_cjs = require('./chunk-WGEGR3DF.cjs');
6
6
  var react = require('react');
7
7
  require('@vidstack/react/player/styles/base.css');
@@ -87,7 +87,7 @@ var VidstackProvider = react.forwardRef(
87
87
  cachePosterUrl,
88
88
  saveVideoPosition,
89
89
  getVideoPosition
90
- } = chunkXTBRWVIV_cjs.useVideoCache();
90
+ } = chunk77HQWEQ6_cjs.useVideoCache();
91
91
  const sourceKey = react.useMemo(() => {
92
92
  switch (source.type) {
93
93
  case "youtube":
@@ -322,7 +322,7 @@ var VidstackProvider = react.forwardRef(
322
322
  );
323
323
  VidstackProvider.displayName = "VidstackProvider";
324
324
  function useVideoPlayerSettings2() {
325
- const { settings, saveSettings } = chunkXTBRWVIV_cjs.useVideoPlayerSettings();
325
+ const { settings, saveSettings } = chunk77HQWEQ6_cjs.useVideoPlayerSettings();
326
326
  const updateVolume = react.useCallback(
327
327
  (volume) => {
328
328
  saveSettings({ volume: Math.max(0, Math.min(1, volume)) });
@@ -612,11 +612,11 @@ var StreamProvider = react.forwardRef(
612
612
  const videoRef = react.useRef(null);
613
613
  const contentKeyRef = react.useRef(null);
614
614
  const lastSavedTimeRef = react.useRef(0);
615
- const getOrCreateBlobUrl = chunkXTBRWVIV_cjs.useMediaCacheStore.getState().getOrCreateBlobUrl;
616
- const releaseBlobUrl = chunkXTBRWVIV_cjs.useMediaCacheStore.getState().releaseBlobUrl;
617
- const getOrCreateStreamUrl = chunkXTBRWVIV_cjs.useMediaCacheStore.getState().getOrCreateStreamUrl;
618
- const saveVideoPosition = chunkXTBRWVIV_cjs.useMediaCacheStore.getState().saveVideoPosition;
619
- const getVideoPosition = chunkXTBRWVIV_cjs.useMediaCacheStore.getState().getVideoPosition;
615
+ const getOrCreateBlobUrl = chunk77HQWEQ6_cjs.useMediaCacheStore.getState().getOrCreateBlobUrl;
616
+ const releaseBlobUrl = chunk77HQWEQ6_cjs.useMediaCacheStore.getState().releaseBlobUrl;
617
+ const getOrCreateStreamUrl = chunk77HQWEQ6_cjs.useMediaCacheStore.getState().getOrCreateStreamUrl;
618
+ const saveVideoPosition = chunk77HQWEQ6_cjs.useMediaCacheStore.getState().saveVideoPosition;
619
+ const getVideoPosition = chunk77HQWEQ6_cjs.useMediaCacheStore.getState().getVideoPosition;
620
620
  const { settings: savedSettings, updateVolume } = useVideoPlayerSettings2();
621
621
  const retry = react.useCallback(() => {
622
622
  setHasError(false);
@@ -672,14 +672,14 @@ var StreamProvider = react.forwardRef(
672
672
  return () => {
673
673
  isMountedRef.current = false;
674
674
  if (contentKeyRef.current) {
675
- chunkXTBRWVIV_cjs.useMediaCacheStore.getState().releaseBlobUrl(contentKeyRef.current);
675
+ chunk77HQWEQ6_cjs.useMediaCacheStore.getState().releaseBlobUrl(contentKeyRef.current);
676
676
  contentKeyRef.current = null;
677
677
  }
678
678
  };
679
679
  }, []);
680
680
  react.useEffect(() => {
681
681
  if (contentKeyRef.current) {
682
- const newKey = source.type === "blob" ? chunkXTBRWVIV_cjs.generateContentKey(source.data) : null;
682
+ const newKey = source.type === "blob" ? chunk77HQWEQ6_cjs.generateContentKey(source.data) : null;
683
683
  if (newKey !== contentKeyRef.current) {
684
684
  releaseBlobUrl(contentKeyRef.current);
685
685
  contentKeyRef.current = null;
@@ -701,7 +701,7 @@ var StreamProvider = react.forwardRef(
701
701
  }
702
702
  case "blob": {
703
703
  const blobSource = source;
704
- const contentKey = chunkXTBRWVIV_cjs.generateContentKey(blobSource.data);
704
+ const contentKey = chunk77HQWEQ6_cjs.generateContentKey(blobSource.data);
705
705
  contentKeyRef.current = contentKey;
706
706
  const url = getOrCreateBlobUrl(
707
707
  contentKey,
@@ -1353,5 +1353,5 @@ exports.resolveFileSource = resolveFileSource;
1353
1353
  exports.resolvePlayerMode = resolvePlayerMode;
1354
1354
  exports.resolveStreamSource = resolveStreamSource;
1355
1355
  exports.useVideoPlayerContext = useVideoPlayerContext;
1356
- //# sourceMappingURL=chunk-CY3CQS26.cjs.map
1357
- //# sourceMappingURL=chunk-CY3CQS26.cjs.map
1356
+ //# sourceMappingURL=chunk-46VDB3BJ.cjs.map
1357
+ //# sourceMappingURL=chunk-46VDB3BJ.cjs.map