@innosolutions/inno-calendar 1.0.72 → 2.0.1

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 (200) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/LICENSE +48 -48
  3. package/README.md +333 -305
  4. package/dist/components/event/event-card.d.ts +4 -28
  5. package/dist/components/event/event-card.d.ts.map +1 -1
  6. package/dist/components/header/calendar-header.d.ts +14 -3
  7. package/dist/components/header/calendar-header.d.ts.map +1 -1
  8. package/dist/components/index.cjs +1 -1
  9. package/dist/components/index.d.ts +7 -6
  10. package/dist/components/index.d.ts.map +1 -1
  11. package/dist/components/index.mjs +48 -57
  12. package/dist/components/index.mjs.map +1 -1
  13. package/dist/components/inno-calendar.d.ts +139 -72
  14. package/dist/components/inno-calendar.d.ts.map +1 -1
  15. package/dist/components/primitives/field-layer.d.ts +22 -0
  16. package/dist/components/primitives/field-layer.d.ts.map +1 -0
  17. package/dist/components/primitives/index.d.ts +3 -0
  18. package/dist/components/primitives/index.d.ts.map +1 -1
  19. package/dist/components/primitives/multi-day-banner.d.ts.map +1 -1
  20. package/dist/components/primitives/quick-create.d.ts +44 -0
  21. package/dist/components/primitives/quick-create.d.ts.map +1 -0
  22. package/dist/components/primitives/recurrence-field.d.ts +102 -0
  23. package/dist/components/primitives/recurrence-field.d.ts.map +1 -0
  24. package/dist/components/primitives/week-all-day-row.d.ts.map +1 -1
  25. package/dist/components/primitives/when-row.d.ts +41 -0
  26. package/dist/components/primitives/when-row.d.ts.map +1 -0
  27. package/dist/components/shell/calendar-settings.d.ts +28 -0
  28. package/dist/components/shell/calendar-settings.d.ts.map +1 -0
  29. package/dist/components/shell/calendar-sidebar.d.ts +27 -0
  30. package/dist/components/shell/calendar-sidebar.d.ts.map +1 -0
  31. package/dist/components/shell/filter-panel.d.ts +10 -0
  32. package/dist/components/shell/filter-panel.d.ts.map +1 -0
  33. package/dist/components/shell/index.d.ts +5 -0
  34. package/dist/components/shell/index.d.ts.map +1 -0
  35. package/dist/components/shell/mini-month.d.ts +16 -0
  36. package/dist/components/shell/mini-month.d.ts.map +1 -0
  37. package/dist/components/ui/index.d.ts +0 -2
  38. package/dist/components/ui/index.d.ts.map +1 -1
  39. package/dist/components/views/agenda-view.d.ts +14 -15
  40. package/dist/components/views/agenda-view.d.ts.map +1 -1
  41. package/dist/components/views/day-events-expansion.d.ts +1 -1
  42. package/dist/components/views/day-events-expansion.d.ts.map +1 -1
  43. package/dist/components/views/day-view.d.ts +2 -6
  44. package/dist/components/views/day-view.d.ts.map +1 -1
  45. package/dist/components/views/index.d.ts +2 -1
  46. package/dist/components/views/index.d.ts.map +1 -1
  47. package/dist/components/views/month-view.d.ts +2 -12
  48. package/dist/components/views/month-view.d.ts.map +1 -1
  49. package/dist/components/views/resource-columns-view.d.ts +23 -0
  50. package/dist/components/views/resource-columns-view.d.ts.map +1 -0
  51. package/dist/components/views/timeline-view.d.ts +2 -6
  52. package/dist/components/views/timeline-view.d.ts.map +1 -1
  53. package/dist/components/views/week-view.d.ts +10 -6
  54. package/dist/components/views/week-view.d.ts.map +1 -1
  55. package/dist/components/views/year-view.d.ts +2 -6
  56. package/dist/components/views/year-view.d.ts.map +1 -1
  57. package/dist/core/constants.d.ts +39 -1
  58. package/dist/core/constants.d.ts.map +1 -1
  59. package/dist/core/context/drag-drop-context.d.ts +15 -1
  60. package/dist/core/context/drag-drop-context.d.ts.map +1 -1
  61. package/dist/core/context/event-card-context.d.ts +16 -0
  62. package/dist/core/context/event-card-context.d.ts.map +1 -0
  63. package/dist/core/context/inno-calendar-provider.d.ts +10 -1
  64. package/dist/core/context/inno-calendar-provider.d.ts.map +1 -1
  65. package/dist/core/context/slot-selection-context.d.ts +16 -0
  66. package/dist/core/context/slot-selection-context.d.ts.map +1 -1
  67. package/dist/core/index.cjs +1 -1
  68. package/dist/core/index.d.ts +3 -1
  69. package/dist/core/index.d.ts.map +1 -1
  70. package/dist/core/index.mjs +155 -149
  71. package/dist/core/index.mjs.map +1 -1
  72. package/dist/core/types.d.ts +44 -514
  73. package/dist/core/types.d.ts.map +1 -1
  74. package/dist/core/utils/date-input.d.ts +8 -0
  75. package/dist/core/utils/date-input.d.ts.map +1 -0
  76. package/dist/core/utils/grid-utils.d.ts.map +1 -1
  77. package/dist/core/utils/index.d.ts +1 -0
  78. package/dist/core/utils/index.d.ts.map +1 -1
  79. package/dist/core/utils/time-format.d.ts +33 -0
  80. package/dist/core/utils/time-format.d.ts.map +1 -0
  81. package/dist/core/utils/view-storage.d.ts +2 -2
  82. package/dist/core/utils/view-storage.d.ts.map +1 -1
  83. package/dist/core/z-layers.d.ts +21 -0
  84. package/dist/core/z-layers.d.ts.map +1 -0
  85. package/dist/index.cjs +1 -1
  86. package/dist/index.d.ts +0 -1
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.mjs +228 -234
  89. package/dist/index.mjs.map +1 -1
  90. package/dist/inno-calendar-DFEaWcSi.cjs +11 -0
  91. package/dist/inno-calendar-DFEaWcSi.cjs.map +1 -0
  92. package/dist/inno-calendar-R7LPGSJU.js +7454 -0
  93. package/dist/inno-calendar-R7LPGSJU.js.map +1 -0
  94. package/dist/lib/index.cjs +1 -1
  95. package/dist/lib/index.mjs +1 -1
  96. package/dist/position-utils-BH6T1FL5.js +1125 -0
  97. package/dist/position-utils-BH6T1FL5.js.map +1 -0
  98. package/dist/position-utils-BVt-Bp93.cjs +2 -0
  99. package/dist/position-utils-BVt-Bp93.cjs.map +1 -0
  100. package/dist/styles/index.css +1 -1
  101. package/dist/use-slot-selection-CSsSyfAi.cjs +2 -0
  102. package/dist/use-slot-selection-CSsSyfAi.cjs.map +1 -0
  103. package/dist/use-slot-selection-CT1z9v9X.js +357 -0
  104. package/dist/use-slot-selection-CT1z9v9X.js.map +1 -0
  105. package/dist/utils-B6yFEsav.js +9 -0
  106. package/dist/utils-B6yFEsav.js.map +1 -0
  107. package/dist/utils-IjLH3w2e.cjs +2 -0
  108. package/dist/utils-IjLH3w2e.cjs.map +1 -0
  109. package/dist/utils.cjs +1 -1
  110. package/dist/utils.d.ts +1 -1
  111. package/dist/utils.d.ts.map +1 -1
  112. package/dist/utils.mjs +108 -104
  113. package/dist/z-layers-CpHPAMdp.js +637 -0
  114. package/dist/z-layers-CpHPAMdp.js.map +1 -0
  115. package/dist/z-layers-D1DivrJg.cjs +2 -0
  116. package/dist/z-layers-D1DivrJg.cjs.map +1 -0
  117. package/package.json +117 -138
  118. package/AGENT.md +0 -1783
  119. package/dist/agenda-widget-B0t3TCcV.js +0 -4141
  120. package/dist/agenda-widget-B0t3TCcV.js.map +0 -1
  121. package/dist/agenda-widget-i2tjGr5U.cjs +0 -2
  122. package/dist/agenda-widget-i2tjGr5U.cjs.map +0 -1
  123. package/dist/components/calendar.d.ts +0 -45
  124. package/dist/components/calendar.d.ts.map +0 -1
  125. package/dist/components/event/event-page-transition.d.ts +0 -32
  126. package/dist/components/event/event-page-transition.d.ts.map +0 -1
  127. package/dist/components/filters/calendar-filter-sidebar.d.ts +0 -54
  128. package/dist/components/filters/calendar-filter-sidebar.d.ts.map +0 -1
  129. package/dist/components/filters/index.d.ts +0 -9
  130. package/dist/components/filters/index.d.ts.map +0 -1
  131. package/dist/components/filters/schedule-type-filter.d.ts +0 -31
  132. package/dist/components/filters/schedule-type-filter.d.ts.map +0 -1
  133. package/dist/components/filters/user-filter.d.ts +0 -31
  134. package/dist/components/filters/user-filter.d.ts.map +0 -1
  135. package/dist/components/header/components/index.d.ts +0 -8
  136. package/dist/components/header/components/index.d.ts.map +0 -1
  137. package/dist/components/integrated-calendar.d.ts +0 -37
  138. package/dist/components/integrated-calendar.d.ts.map +0 -1
  139. package/dist/components/settings/badge-variant-setting.d.ts +0 -25
  140. package/dist/components/settings/badge-variant-setting.d.ts.map +0 -1
  141. package/dist/components/settings/index.d.ts +0 -10
  142. package/dist/components/settings/index.d.ts.map +0 -1
  143. package/dist/components/settings/slot-duration-setting.d.ts +0 -20
  144. package/dist/components/settings/slot-duration-setting.d.ts.map +0 -1
  145. package/dist/components/settings/visible-hours-setting.d.ts +0 -23
  146. package/dist/components/settings/visible-hours-setting.d.ts.map +0 -1
  147. package/dist/components/settings/working-hours-setting.d.ts +0 -41
  148. package/dist/components/settings/working-hours-setting.d.ts.map +0 -1
  149. package/dist/components/ui/dialog.d.ts +0 -35
  150. package/dist/components/ui/dialog.d.ts.map +0 -1
  151. package/dist/components/ui/select.d.ts +0 -12
  152. package/dist/components/ui/select.d.ts.map +0 -1
  153. package/dist/components/widget/agenda-dropdown.d.ts +0 -20
  154. package/dist/components/widget/agenda-dropdown.d.ts.map +0 -1
  155. package/dist/components/widget/agenda-widget.d.ts +0 -27
  156. package/dist/components/widget/agenda-widget.d.ts.map +0 -1
  157. package/dist/components/widget/index.d.ts +0 -6
  158. package/dist/components/widget/index.d.ts.map +0 -1
  159. package/dist/index-D2U2F80P.cjs +0 -2
  160. package/dist/index-D2U2F80P.cjs.map +0 -1
  161. package/dist/index-DtaLkIY8.js +0 -2777
  162. package/dist/index-DtaLkIY8.js.map +0 -1
  163. package/dist/position-utils-D_KpwRus.js +0 -1053
  164. package/dist/position-utils-D_KpwRus.js.map +0 -1
  165. package/dist/position-utils-ksZ_IjXC.cjs +0 -2
  166. package/dist/position-utils-ksZ_IjXC.cjs.map +0 -1
  167. package/dist/presets/default/default-calendar.d.ts +0 -44
  168. package/dist/presets/default/default-calendar.d.ts.map +0 -1
  169. package/dist/presets/default/index.d.ts +0 -2
  170. package/dist/presets/default/index.d.ts.map +0 -1
  171. package/dist/presets/index.cjs +0 -2
  172. package/dist/presets/index.cjs.map +0 -1
  173. package/dist/presets/index.d.ts +0 -3
  174. package/dist/presets/index.d.ts.map +0 -1
  175. package/dist/presets/index.mjs +0 -6
  176. package/dist/presets/index.mjs.map +0 -1
  177. package/dist/presets/tailwind/index.d.ts +0 -2
  178. package/dist/presets/tailwind/index.d.ts.map +0 -1
  179. package/dist/presets/tailwind/tailwind-calendar.d.ts +0 -122
  180. package/dist/presets/tailwind/tailwind-calendar.d.ts.map +0 -1
  181. package/dist/slot-selection-context-CLYZU6ul.cjs +0 -2
  182. package/dist/slot-selection-context-CLYZU6ul.cjs.map +0 -1
  183. package/dist/slot-selection-context-Ct5cVcKW.js +0 -611
  184. package/dist/slot-selection-context-Ct5cVcKW.js.map +0 -1
  185. package/dist/tailwind-calendar-BbUb61uY.cjs +0 -2
  186. package/dist/tailwind-calendar-BbUb61uY.cjs.map +0 -1
  187. package/dist/tailwind-calendar-DrwGVSF-.js +0 -400
  188. package/dist/tailwind-calendar-DrwGVSF-.js.map +0 -1
  189. package/dist/use-calendar-BK0nQYJq.cjs +0 -2
  190. package/dist/use-calendar-BK0nQYJq.cjs.map +0 -1
  191. package/dist/use-calendar-DJI35SSd.js +0 -175
  192. package/dist/use-calendar-DJI35SSd.js.map +0 -1
  193. package/dist/use-slot-selection-CCE11R4j.cjs +0 -2
  194. package/dist/use-slot-selection-CCE11R4j.cjs.map +0 -1
  195. package/dist/use-slot-selection-CX1w8EdM.js +0 -188
  196. package/dist/use-slot-selection-CX1w8EdM.js.map +0 -1
  197. package/dist/week-view-BXmaRChB.cjs +0 -11
  198. package/dist/week-view-BXmaRChB.cjs.map +0 -1
  199. package/dist/week-view-BeasFcyR.js +0 -3520
  200. package/dist/week-view-BeasFcyR.js.map +0 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,116 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@innosolutions/inno-calendar`.
4
+
5
+ ## 2.0.1
6
+
7
+ ### Changed
8
+
9
+ - **`WhenRow` time pills accept typed times.** Each pill is now an input as
10
+ well as a list: type "9:07", "907", "9h07" or "2pm" and commit with Enter or
11
+ blur — a 7- or 20-minute appointment no longer has to exist in the slot
12
+ list. A typed end before the start on the same day rolls to the next day,
13
+ the same rule the list uses. Moving the start now preserves an odd typed
14
+ duration instead of rounding it back up to a slot (`Math.max(1, …)`, was
15
+ `Math.max(step, …)`).
16
+ - **One transient menu at a time, everywhere.** The time lists, the date
17
+ pills' calendar and the recurrence dropdown all share a single open slot
18
+ (`claimMenuSlot` in `FieldLayer`): opening any of them closes whichever
19
+ other one is showing, and a press anywhere else dismisses the open one —
20
+ now in capture phase, so a control that swallows the event can no longer
21
+ keep a menu alive. Menus never open on hover — only on click or focus.
22
+ - **Canceled events share one graphic code.** Every chip variant — day/week
23
+ block, month compact/full, all-day row, multi-day banner — now renders a
24
+ canceled event grey, struck through, 50% transparent and diagonally hatched
25
+ (`CANCELED_CHIP` in core constants). The banner and all-day pills previously
26
+ kept their category colour.
27
+
28
+ ## 2.0.0
29
+
30
+ A breaking release. The package keeps the parts that are the same in every
31
+ calendar — the grid, the header, the floating card, the detail popover, the
32
+ filter panel — and hands the parts that differ per application back to the
33
+ application, as components you pass in.
34
+
35
+ The three overlapping ways to customise v1 (`slots`, `classNames`, render
36
+ props) are down to one: render props.
37
+
38
+ ### Migrating
39
+
40
+ | v1 | v2 |
41
+ | --- | --- |
42
+ | `slots={{ eventCard: MyCard }}` | `eventCard={(event, { compact }) => <MyCard … />}` |
43
+ | `slots={{ dayCellHeader, dayCellFooter }}` | — no replacement; the month cell is the package's |
44
+ | `renderEventDetail={({ event, onClose }) => …}` | `eventDetail={(event, { close, edit }) => …}` |
45
+ | `eventValues={(event) => toDraft(event)}` | `eventForm` receives the event; read it yourself |
46
+ | `classNames={{ … }}` (40 keys) | — no replacement yet; see *Styling* below |
47
+ | `import { DefaultCalendar } from '…/presets'` | compose `InnoCalendar` directly |
48
+ | `@tanstack/react-query` as a peer | removed; the package never imported it |
49
+
50
+ ### Removed
51
+
52
+ - **`slots`** and every `I*SlotProps` type (20 of them). The four slots that
53
+ were actually rendered — `eventCard` in the timeline and resource views,
54
+ `dayCellHeader` and `dayCellFooter` in the month view — are gone; the two
55
+ event-card ones fall through to the built-in card, which is what they did
56
+ when unset.
57
+ - **`classNames`** and `ICalendarClassNames`, 40 keys deep. Nothing consumed
58
+ it, and it never covered enough to keep an app out of the generated class
59
+ chains anyway.
60
+ - **`eventValues`** — superseded by `eventForm`, which is handed the event.
61
+ - **`renderEventDetail`** — superseded by `eventDetail`.
62
+ - **`/presets` subpath** and the `DefaultCalendar` / `TailwindCalendar`
63
+ components behind it. 917 lines nothing imported.
64
+ - **`Dialog` and `Select`** from the UI barrel — zero importers; `Sheet` uses
65
+ the Radix dialog primitive directly.
66
+ - **`@tanstack/react-query` peer dependency.** It was declared but never
67
+ imported. Hosts no longer need a `QueryClientProvider` around the calendar.
68
+
69
+ `core/types.ts` lost 541 lines to those removals; the package is 26,845 →
70
+ 21,522 source lines.
71
+
72
+ ### Fixed
73
+
74
+ - **`lucide-react` and three Radix packages were imported but not declared.**
75
+ They sat in `devDependencies` while `src` imported them, so a consumer
76
+ without them already installed got missing modules at runtime. They are now
77
+ real `dependencies`, and the build externalises them so the host resolves one
78
+ copy rather than a duplicate bundled inside the library.
79
+ - **`peerDependenciesMeta` was inert** — every key named a package that was not
80
+ in `peerDependencies`, which is the only thing that block annotates.
81
+ - **The detail popover ran off the screen.** It was three separate
82
+ `PopoverContent`s at two different widths; only one capped its height. They
83
+ are one `DetailPopover` now, capped to
84
+ `--radix-popover-content-available-height`, and below 640px it is a bottom
85
+ sheet rather than a popover — flipping a 384px card inside a 360px viewport
86
+ only changes which half falls off.
87
+ - **A dialog opened from inside a card dismissed the card underneath it.**
88
+ Radix treats a portalled child as "outside"; the card now ignores focus and
89
+ pointer events that land inside one. The selector is exported as `PORTALLED`.
90
+ - **`openForm()` did not open on the same slot the Add button does.** With no
91
+ range it now delegates to the header's own "open on now", snapping to the
92
+ slot and anchoring beside the current-time line. `openForm({ event })` falls
93
+ back to the event's own times instead of to *now*.
94
+ - **The mobile filter sheet stayed open** when its Create button opened the
95
+ card behind it.
96
+
97
+ ### Added
98
+
99
+ - `eventCard`, `eventDetail`, `eventForm` and `filters` render props — the one
100
+ extension mechanism.
101
+ - `QuickCreate`, `WhenRow`, `RecurrenceField` and `FieldLayer` as exported
102
+ primitives, so an app can build a form body that behaves like the built-in
103
+ one.
104
+ - `IC_Z_CARD`, `IC_Z_LAYER`, `IC_Z_MODAL` — stacking levels for anything a
105
+ consumer portals over a calendar surface.
106
+ - `CONTROL` and `CONTROL_ICON` — the shape every header control takes, shared
107
+ so Create, Today and the view menu cannot drift apart again.
108
+ - `COMPACT_WIDTH` — the single width at which floating surfaces stop floating.
109
+
110
+ ### Styling
111
+
112
+ The CSS custom properties (`--inno-primary`, `--inno-hour-height`, the ten
113
+ event colours, …) cover theme and dimensions and are unchanged. What `classNames`
114
+ offered beyond them — a hook on 40 individual elements — has no replacement.
115
+ Anything that specific is CSS against the package's own class names for now,
116
+ which is not yet a contract.
package/LICENSE CHANGED
@@ -1,48 +1,48 @@
1
- InnoSolutions Proprietary License
2
-
3
- Copyright (c) 2026 InnoSolutions. All rights reserved.
4
-
5
- This software, including its source code, compiled artifacts, and associated
6
- documentation files (collectively, the "Software"), is the confidential and
7
- proprietary property of InnoSolutions. The Software is licensed, not sold.
8
-
9
- 1. GRANT OF INTERNAL USE.
10
- InnoSolutions and its employees, contractors, and other authorized team
11
- members (collectively, "InnoSolutions Personnel") may use, copy, modify,
12
- build upon, and incorporate the Software, in whole or in part, solely for
13
- the purpose of developing and operating products, applications, and
14
- services that are owned, controlled, or operated by InnoSolutions
15
- ("InnoSolutions Projects").
16
-
17
- 2. RESTRICTIONS.
18
- Except as expressly permitted in Section 1, no person or entity may use,
19
- copy, reproduce, modify, adapt, merge, publish, distribute, sublicense,
20
- sell, lease, transmit, or create derivative works of the Software, in whole
21
- or in part, by any means, without a prior written agreement executed with
22
- InnoSolutions and on the terms that InnoSolutions requires. Any use outside
23
- an InnoSolutions Project, by anyone other than InnoSolutions Personnel,
24
- requires such a separate written agreement.
25
-
26
- 3. OWNERSHIP.
27
- All right, title, and interest in and to the Software, including all
28
- intellectual property rights, remain exclusively with InnoSolutions. No
29
- ownership rights are transferred by this license.
30
-
31
- 4. CONFIDENTIALITY.
32
- The Software is confidential. Recipients must not disclose the Software to
33
- any third party except as expressly authorized in writing by InnoSolutions.
34
-
35
- 5. TERMINATION.
36
- Any use, reproduction, or distribution of the Software in violation of this
37
- license automatically terminates the rights granted herein.
38
-
39
- 6. DISCLAIMER OF WARRANTY.
40
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
41
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
42
- FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL
43
- INNOSOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER
44
- IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR IN
45
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
46
-
47
- For licensing inquiries or to request an agreement to use the Software outside
48
- the terms above, contact InnoSolutions.
1
+ InnoSolutions Proprietary License
2
+
3
+ Copyright (c) 2026 InnoSolutions. All rights reserved.
4
+
5
+ This software, including its source code, compiled artifacts, and associated
6
+ documentation files (collectively, the "Software"), is the confidential and
7
+ proprietary property of InnoSolutions. The Software is licensed, not sold.
8
+
9
+ 1. GRANT OF INTERNAL USE.
10
+ InnoSolutions and its employees, contractors, and other authorized team
11
+ members (collectively, "InnoSolutions Personnel") may use, copy, modify,
12
+ build upon, and incorporate the Software, in whole or in part, solely for
13
+ the purpose of developing and operating products, applications, and
14
+ services that are owned, controlled, or operated by InnoSolutions
15
+ ("InnoSolutions Projects").
16
+
17
+ 2. RESTRICTIONS.
18
+ Except as expressly permitted in Section 1, no person or entity may use,
19
+ copy, reproduce, modify, adapt, merge, publish, distribute, sublicense,
20
+ sell, lease, transmit, or create derivative works of the Software, in whole
21
+ or in part, by any means, without a prior written agreement executed with
22
+ InnoSolutions and on the terms that InnoSolutions requires. Any use outside
23
+ an InnoSolutions Project, by anyone other than InnoSolutions Personnel,
24
+ requires such a separate written agreement.
25
+
26
+ 3. OWNERSHIP.
27
+ All right, title, and interest in and to the Software, including all
28
+ intellectual property rights, remain exclusively with InnoSolutions. No
29
+ ownership rights are transferred by this license.
30
+
31
+ 4. CONFIDENTIALITY.
32
+ The Software is confidential. Recipients must not disclose the Software to
33
+ any third party except as expressly authorized in writing by InnoSolutions.
34
+
35
+ 5. TERMINATION.
36
+ Any use, reproduction, or distribution of the Software in violation of this
37
+ license automatically terminates the rights granted herein.
38
+
39
+ 6. DISCLAIMER OF WARRANTY.
40
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
41
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
42
+ FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL
43
+ INNOSOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER
44
+ IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR IN
45
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
46
+
47
+ For licensing inquiries or to request an agreement to use the Software outside
48
+ the terms above, contact InnoSolutions.