@caratlogic/design-system 0.0.5 → 0.0.7

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.
package/README.md CHANGED
@@ -50,4 +50,4 @@ import { Input } from '@caratlogic/design-system/ui';
50
50
  yarn install
51
51
  yarn build
52
52
  yarn test
53
- ```
53
+ ```
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextArea.hooks.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/RichTextArea/RichTextArea.hooks.tsx"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,EAC/C,QAAQ,EAAE,OAAO,GAChB,MAAM,GAAG,IAAI,CAsBf"}
1
+ {"version":3,"file":"RichTextArea.hooks.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/RichTextArea/RichTextArea.hooks.tsx"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,EAC/C,QAAQ,EAAE,OAAO,GAChB,MAAM,GAAG,IAAI,CA4Bf"}
@@ -1,4 +1,4 @@
1
- export declare const EDITOR_EXTENSIONS: (import("@tiptap/core").Extension<import("@tiptap/starter-kit").StarterKitOptions, any> | import("@tiptap/core").Mark<import("@tiptap/extension-underline").UnderlineOptions, any> | import("@tiptap/core").Mark<import("@tiptap/extension-text-style").TextStyleOptions, any> | import("@tiptap/core").Extension<import("@tiptap/extension-text-style").ColorOptions, any> | import("@tiptap/core").Mark<import("@tiptap/extension-highlight").HighlightOptions, any>)[];
1
+ export declare const EDITOR_EXTENSIONS: (import("@tiptap/core").Extension<import("@tiptap/starter-kit").StarterKitOptions, any> | import("@tiptap/core").Mark<import("@tiptap/extension-text-style").TextStyleOptions, any> | import("@tiptap/core").Extension<import("@tiptap/extension-text-style").ColorOptions, any> | import("@tiptap/core").Mark<import("@tiptap/extension-highlight").HighlightOptions, any>)[];
2
2
  export declare const HIGHLIGHT_COLORS: {
3
3
  value: string;
4
4
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextArea.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/RichTextArea/RichTextArea.utils.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,iBAAiB,2cAe7B,CAAC;AAIF,eAAO,MAAM,gBAAgB;;;GAM5B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,OAAO,KAAG,MAIhD,CAAC;AAEJ,eAAO,MAAM,uBAAuB,QAAO,MAkBxC,CAAC"}
1
+ {"version":3,"file":"RichTextArea.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/RichTextArea/RichTextArea.utils.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,gXAc7B,CAAC;AAIF,eAAO,MAAM,gBAAgB;;;GAM5B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,OAAO,KAAG,MAIhD,CAAC;AAEJ,eAAO,MAAM,uBAAuB,QAAO,MAkBxC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ImageCropModal.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/FileUploader/ImageCropModal.tsx"],"names":[],"mappings":"AAOA,OAAO,qCAAqC,CAAC;AAkD7C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,CAAC,WAAW,EAAE,IAAI,KAAK,IAAI,CAAC;CACxC;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,SAAS,GACV,EAAE,mBAAmB,2CAuJrB"}
1
+ {"version":3,"file":"ImageCropModal.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/FileUploader/ImageCropModal.tsx"],"names":[],"mappings":"AAOA,OAAO,qCAAqC,CAAC;AAkD7C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,CAAC,WAAW,EAAE,IAAI,KAAK,IAAI,CAAC;CACxC;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,SAAS,GACV,EAAE,mBAAmB,2CAwJrB"}
package/dist/index.cjs.js CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
+ var sonner = require('sonner');
5
6
  var ReactDOM = require('react-dom');
6
7
  var reactRouterDom = require('react-router-dom');
7
8
 
@@ -3956,301 +3957,6 @@ const renderBadge = (text, type = BadgeType.SECONDARY, options) => {
3956
3957
  return (jsxRuntime.jsxs(Badge$1, { className: `text-xs flex items-center gap-1 ${className}`, children: [options?.showIcon && IconToRender && (jsxRuntime.jsx(IconToRender, { className: "w-3 h-3" })), text] }));
3957
3958
  };
3958
3959
 
3959
- function __insertCSS(code) {
3960
- if (typeof document == 'undefined') return
3961
- let head = document.head || document.getElementsByTagName('head')[0];
3962
- let style = document.createElement('style');
3963
- style.type = 'text/css';
3964
- head.appendChild(style)
3965
- ;style.styleSheet ? (style.styleSheet.cssText = code) : style.appendChild(document.createTextNode(code));
3966
- }
3967
- Array(12).fill(0);
3968
-
3969
- let toastsCounter = 1;
3970
- class Observer {
3971
- constructor(){
3972
- // We use arrow functions to maintain the correct `this` reference
3973
- this.subscribe = (subscriber)=>{
3974
- this.subscribers.push(subscriber);
3975
- return ()=>{
3976
- const index = this.subscribers.indexOf(subscriber);
3977
- this.subscribers.splice(index, 1);
3978
- };
3979
- };
3980
- this.publish = (data)=>{
3981
- this.subscribers.forEach((subscriber)=>subscriber(data));
3982
- };
3983
- this.addToast = (data)=>{
3984
- this.publish(data);
3985
- this.toasts = [
3986
- ...this.toasts,
3987
- data
3988
- ];
3989
- };
3990
- this.create = (data)=>{
3991
- var _data_id;
3992
- const { message, ...rest } = data;
3993
- const id = typeof (data == null ? void 0 : data.id) === 'number' || ((_data_id = data.id) == null ? void 0 : _data_id.length) > 0 ? data.id : toastsCounter++;
3994
- const alreadyExists = this.toasts.find((toast)=>{
3995
- return toast.id === id;
3996
- });
3997
- const dismissible = data.dismissible === undefined ? true : data.dismissible;
3998
- if (this.dismissedToasts.has(id)) {
3999
- this.dismissedToasts.delete(id);
4000
- }
4001
- if (alreadyExists) {
4002
- this.toasts = this.toasts.map((toast)=>{
4003
- if (toast.id === id) {
4004
- this.publish({
4005
- ...toast,
4006
- ...data,
4007
- id,
4008
- title: message
4009
- });
4010
- return {
4011
- ...toast,
4012
- ...data,
4013
- id,
4014
- dismissible,
4015
- title: message
4016
- };
4017
- }
4018
- return toast;
4019
- });
4020
- } else {
4021
- this.addToast({
4022
- title: message,
4023
- ...rest,
4024
- dismissible,
4025
- id
4026
- });
4027
- }
4028
- return id;
4029
- };
4030
- this.dismiss = (id)=>{
4031
- if (id) {
4032
- this.dismissedToasts.add(id);
4033
- requestAnimationFrame(()=>this.subscribers.forEach((subscriber)=>subscriber({
4034
- id,
4035
- dismiss: true
4036
- })));
4037
- } else {
4038
- this.toasts.forEach((toast)=>{
4039
- this.subscribers.forEach((subscriber)=>subscriber({
4040
- id: toast.id,
4041
- dismiss: true
4042
- }));
4043
- });
4044
- }
4045
- return id;
4046
- };
4047
- this.message = (message, data)=>{
4048
- return this.create({
4049
- ...data,
4050
- message
4051
- });
4052
- };
4053
- this.error = (message, data)=>{
4054
- return this.create({
4055
- ...data,
4056
- message,
4057
- type: 'error'
4058
- });
4059
- };
4060
- this.success = (message, data)=>{
4061
- return this.create({
4062
- ...data,
4063
- type: 'success',
4064
- message
4065
- });
4066
- };
4067
- this.info = (message, data)=>{
4068
- return this.create({
4069
- ...data,
4070
- type: 'info',
4071
- message
4072
- });
4073
- };
4074
- this.warning = (message, data)=>{
4075
- return this.create({
4076
- ...data,
4077
- type: 'warning',
4078
- message
4079
- });
4080
- };
4081
- this.loading = (message, data)=>{
4082
- return this.create({
4083
- ...data,
4084
- type: 'loading',
4085
- message
4086
- });
4087
- };
4088
- this.promise = (promise, data)=>{
4089
- if (!data) {
4090
- // Nothing to show
4091
- return;
4092
- }
4093
- let id = undefined;
4094
- if (data.loading !== undefined) {
4095
- id = this.create({
4096
- ...data,
4097
- promise,
4098
- type: 'loading',
4099
- message: data.loading,
4100
- description: typeof data.description !== 'function' ? data.description : undefined
4101
- });
4102
- }
4103
- const p = Promise.resolve(promise instanceof Function ? promise() : promise);
4104
- let shouldDismiss = id !== undefined;
4105
- let result;
4106
- const originalPromise = p.then(async (response)=>{
4107
- result = [
4108
- 'resolve',
4109
- response
4110
- ];
4111
- const isReactElementResponse = React.isValidElement(response);
4112
- if (isReactElementResponse) {
4113
- shouldDismiss = false;
4114
- this.create({
4115
- id,
4116
- type: 'default',
4117
- message: response
4118
- });
4119
- } else if (isHttpResponse(response) && !response.ok) {
4120
- shouldDismiss = false;
4121
- const promiseData = typeof data.error === 'function' ? await data.error(`HTTP error! status: ${response.status}`) : data.error;
4122
- const description = typeof data.description === 'function' ? await data.description(`HTTP error! status: ${response.status}`) : data.description;
4123
- const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);
4124
- const toastSettings = isExtendedResult ? promiseData : {
4125
- message: promiseData
4126
- };
4127
- this.create({
4128
- id,
4129
- type: 'error',
4130
- description,
4131
- ...toastSettings
4132
- });
4133
- } else if (response instanceof Error) {
4134
- shouldDismiss = false;
4135
- const promiseData = typeof data.error === 'function' ? await data.error(response) : data.error;
4136
- const description = typeof data.description === 'function' ? await data.description(response) : data.description;
4137
- const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);
4138
- const toastSettings = isExtendedResult ? promiseData : {
4139
- message: promiseData
4140
- };
4141
- this.create({
4142
- id,
4143
- type: 'error',
4144
- description,
4145
- ...toastSettings
4146
- });
4147
- } else if (data.success !== undefined) {
4148
- shouldDismiss = false;
4149
- const promiseData = typeof data.success === 'function' ? await data.success(response) : data.success;
4150
- const description = typeof data.description === 'function' ? await data.description(response) : data.description;
4151
- const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);
4152
- const toastSettings = isExtendedResult ? promiseData : {
4153
- message: promiseData
4154
- };
4155
- this.create({
4156
- id,
4157
- type: 'success',
4158
- description,
4159
- ...toastSettings
4160
- });
4161
- }
4162
- }).catch(async (error)=>{
4163
- result = [
4164
- 'reject',
4165
- error
4166
- ];
4167
- if (data.error !== undefined) {
4168
- shouldDismiss = false;
4169
- const promiseData = typeof data.error === 'function' ? await data.error(error) : data.error;
4170
- const description = typeof data.description === 'function' ? await data.description(error) : data.description;
4171
- const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);
4172
- const toastSettings = isExtendedResult ? promiseData : {
4173
- message: promiseData
4174
- };
4175
- this.create({
4176
- id,
4177
- type: 'error',
4178
- description,
4179
- ...toastSettings
4180
- });
4181
- }
4182
- }).finally(()=>{
4183
- if (shouldDismiss) {
4184
- // Toast is still in load state (and will be indefinitely — dismiss it)
4185
- this.dismiss(id);
4186
- id = undefined;
4187
- }
4188
- data.finally == null ? void 0 : data.finally.call(data);
4189
- });
4190
- const unwrap = ()=>new Promise((resolve, reject)=>originalPromise.then(()=>result[0] === 'reject' ? reject(result[1]) : resolve(result[1])).catch(reject));
4191
- if (typeof id !== 'string' && typeof id !== 'number') {
4192
- // cannot Object.assign on undefined
4193
- return {
4194
- unwrap
4195
- };
4196
- } else {
4197
- return Object.assign(id, {
4198
- unwrap
4199
- });
4200
- }
4201
- };
4202
- this.custom = (jsx, data)=>{
4203
- const id = (data == null ? void 0 : data.id) || toastsCounter++;
4204
- this.create({
4205
- jsx: jsx(id),
4206
- id,
4207
- ...data
4208
- });
4209
- return id;
4210
- };
4211
- this.getActiveToasts = ()=>{
4212
- return this.toasts.filter((toast)=>!this.dismissedToasts.has(toast.id));
4213
- };
4214
- this.subscribers = [];
4215
- this.toasts = [];
4216
- this.dismissedToasts = new Set();
4217
- }
4218
- }
4219
- const ToastState = new Observer();
4220
- // bind this to the toast function
4221
- const toastFunction = (message, data)=>{
4222
- const id = (data == null ? void 0 : data.id) || toastsCounter++;
4223
- ToastState.addToast({
4224
- title: message,
4225
- ...data,
4226
- id
4227
- });
4228
- return id;
4229
- };
4230
- const isHttpResponse = (data)=>{
4231
- return data && typeof data === 'object' && 'ok' in data && typeof data.ok === 'boolean' && 'status' in data && typeof data.status === 'number';
4232
- };
4233
- const basicToast = toastFunction;
4234
- const getHistory = ()=>ToastState.toasts;
4235
- const getToasts = ()=>ToastState.getActiveToasts();
4236
- // We use `Object.assign` to maintain the correct types as we would lose them otherwise
4237
- const toast = Object.assign(basicToast, {
4238
- success: ToastState.success,
4239
- info: ToastState.info,
4240
- warning: ToastState.warning,
4241
- error: ToastState.error,
4242
- custom: ToastState.custom,
4243
- message: ToastState.message,
4244
- promise: ToastState.promise,
4245
- dismiss: ToastState.dismiss,
4246
- loading: ToastState.loading
4247
- }, {
4248
- getHistory,
4249
- getToasts
4250
- });
4251
-
4252
- __insertCSS("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");
4253
-
4254
3960
  function AlertTitle({ className, ...props }) {
4255
3961
  return (jsxRuntime.jsx("div", { "data-slot": "alert-title", className: cn('col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight', className), ...props }));
4256
3962
  }
@@ -4621,20 +4327,20 @@ function renderActionSlot(id, action, cancel) {
4621
4327
  return undefined;
4622
4328
  return (jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-1.5 self-center", children: [cancel ? (isDescriptor(cancel) ? (jsxRuntime.jsx(Button$1, { type: "button", size: "xs", variant: "outline", className: "h-7 bg-white text-xs px-3 font-medium", onClick: (e) => {
4623
4329
  cancel.onClick(e);
4624
- toast.dismiss(id);
4330
+ sonner.toast.dismiss(id);
4625
4331
  }, children: cancel.label })) : (cancel)) : null, action ? (isDescriptor(action) ? (jsxRuntime.jsx(Button$1, { type: "button", size: "xs", className: "h-7 text-xs px-3 font-medium", onClick: (e) => {
4626
4332
  action.onClick(e);
4627
- toast.dismiss(id);
4333
+ sonner.toast.dismiss(id);
4628
4334
  }, children: action.label })) : (action)) : null] }));
4629
4335
  }
4630
4336
  function emit(kind, title, options) {
4631
4337
  const { description, action, cancel, ...rest } = options ?? {};
4632
4338
  const hasActions = !!action || !!cancel;
4633
- return toast.custom((id) => {
4339
+ return sonner.toast.custom((id) => {
4634
4340
  // When the toast carries action buttons, drop them below the message as
4635
4341
  // their own row instead of crowding the right side next to the X.
4636
4342
  const renderedDescription = hasActions ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [description ?? null, jsxRuntime.jsx("div", { className: "mt-2 flex items-center justify-end gap-1.5", children: renderActionSlot(id, action, cancel) })] })) : ((description ?? (typeof title === 'string' ? undefined : title)));
4637
- return (jsxRuntime.jsx(Alert, { variant: VARIANT_BY_KIND[kind], appearance: "outline", title: typeof title === 'string' ? title : undefined, description: renderedDescription, onDismiss: () => toast.dismiss(id), className: 'gap-3 bg-card py-3 shadow-[0_10px_15px_-3px_rgba(0,0,0,0.10),0_4px_6px_-4px_rgba(0,0,0,0.10)] ' +
4343
+ return (jsxRuntime.jsx(Alert, { variant: VARIANT_BY_KIND[kind], appearance: "outline", title: typeof title === 'string' ? title : undefined, description: renderedDescription, onDismiss: () => sonner.toast.dismiss(id), className: 'gap-3 bg-card py-3 shadow-[0_10px_15px_-3px_rgba(0,0,0,0.10),0_4px_6px_-4px_rgba(0,0,0,0.10)] ' +
4638
4344
  (hasActions ? 'items-start' : 'items-center') +
4639
4345
  ' [&_[data-slot=alert-title]]:!col-auto [&_[data-slot=alert-description]]:!col-auto [&_[data-slot=alert-description]]:!block [&_[data-slot=alert-dismiss]]:self-start' }));
4640
4346
  }, rest);
@@ -4647,13 +4353,13 @@ const notify = {
4647
4353
  warning: (title, options) => emit('warning', title, options),
4648
4354
  error: (title, options) => emit('destructive', title, options),
4649
4355
  /** Dismiss one toast by id, or all if no id is supplied. */
4650
- dismiss: (id) => toast.dismiss(id),
4356
+ dismiss: (id) => sonner.toast.dismiss(id),
4651
4357
  /**
4652
4358
  * Promise helper — same call signature as sonner's `toast.promise`.
4653
4359
  * Return is widened to `unknown` so the emitted `.d.ts` doesn't reference
4654
4360
  * sonner's non-exported internal result type (TS4023).
4655
4361
  */
4656
- promise: toast.promise.bind(toast),
4362
+ promise: sonner.toast.promise.bind(sonner.toast),
4657
4363
  };
4658
4364
 
4659
4365
  const ActionButtonWithTooltip = ({ icon, tooltip, onClick, disabled = false, colorClass = 'h-5 w-5 p-0 bg-muted text-muted-foreground hover:bg-muted/80 transition-colors rounded-md', }) => {
@@ -65194,6 +64900,10 @@ var Highlight = Mark.create({
65194
64900
  }
65195
64901
  });
65196
64902
 
64903
+ // StarterKit v3 already bundles the Underline mark. Re-registering the
64904
+ // standalone @tiptap/extension-underline duplicates the mark, which corrupts
64905
+ // the ProseMirror schema and makes editor.getHTML() throw
64906
+ // ("Cannot read properties of null (reading 'cached')").
65197
64907
  const EDITOR_EXTENSIONS = [
65198
64908
  index_default.configure({
65199
64909
  paragraph: {
@@ -65205,7 +64915,6 @@ const EDITOR_EXTENSIONS = [
65205
64915
  levels: [1, 2, 3],
65206
64916
  },
65207
64917
  }),
65208
- Underline,
65209
64918
  TextStyle,
65210
64919
  Color,
65211
64920
  Highlight.configure({ multicolor: true }),
@@ -73703,7 +73412,7 @@ function ImageCropModal({ open, imageUrl, fileType, onCancel, onConfirm, }) {
73703
73412
  return (jsxRuntime.jsxs("button", { type: "button", onClick: () => setAspectKey(a.key), className: cn('flex cursor-pointer flex-col items-center justify-center gap-1 rounded-lg border px-3 py-3 text-xs transition-colors', selected
73704
73413
  ? 'border-primary bg-primary/10 text-primary'
73705
73414
  : 'border-transparent bg-[#FAFAFA] text-foreground hover:bg-muted/50 dark:bg-[#262626]'), children: [a.icon, jsxRuntime.jsx("span", { children: a.label })] }, a.key));
73706
- }) })] }), jsxRuntime.jsxs("div", { className: "bg-muted px-6 py-4", children: [jsxRuntime.jsx("div", { className: "flex max-h-[420px] items-center justify-center overflow-auto", children: jsxRuntime.jsx(S, { crop: crop, onChange: (c) => setCrop(c), onComplete: (c) => setCompletedCrop(c), aspect: aspect, keepSelection: true, children: jsxRuntime.jsx("img", { ref: imgRef, src: imageUrl, alt: "Crop preview", onLoad: handleImageLoad, className: "max-h-[400px] object-contain" }) }) }), jsxRuntime.jsx("p", { className: "mt-3 text-center text-sm text-muted-foreground", children: "Drag the handles or click and drag on the image to redefine the crop area" })] })] }));
73415
+ }) })] }), jsxRuntime.jsxs("div", { className: "bg-muted px-6 py-4", children: [jsxRuntime.jsx("div", { className: "flex max-h-[420px] items-center justify-center overflow-auto", children: jsxRuntime.jsx(S, { crop: crop, onChange: (c) => setCrop(c), onComplete: (c) => setCompletedCrop(c), aspect: aspect, keepSelection: true, className: "max-h-[400px]", children: jsxRuntime.jsx("img", { ref: imgRef, src: imageUrl, alt: "Crop preview", onLoad: handleImageLoad, className: "block h-auto max-h-[400px] w-auto" }) }) }), jsxRuntime.jsx("p", { className: "mt-3 text-center text-sm text-muted-foreground", children: "Drag the handles or click and drag on the image to redefine the crop area" })] })] }));
73707
73416
  }
73708
73417
  async function getCroppedBlob(img, crop, mime) {
73709
73418
  const canvas = document.createElement('canvas');
@@ -76213,6 +75922,8 @@ function useRichTextareaEditor(value, onChange, disabled) {
76213
75922
  content: value,
76214
75923
  editable: !disabled,
76215
75924
  onUpdate: ({ editor }) => {
75925
+ if (editor.isDestroyed)
75926
+ return;
76216
75927
  onChange?.(editor.getHTML());
76217
75928
  },
76218
75929
  editorProps: {
@@ -76222,7 +75933,12 @@ function useRichTextareaEditor(value, onChange, disabled) {
76222
75933
  },
76223
75934
  });
76224
75935
  React.useEffect(() => {
76225
- if (editor && value !== editor.getHTML()) {
75936
+ // `editor.getHTML()` reads `editor.schema`, which TipTap sets to null when
75937
+ // the editor is destroyed. React StrictMode (dev) and editor re-creation
75938
+ // can run this effect against a destroyed editor, so guard before calling
75939
+ // any schema-dependent method — otherwise DOMSerializer.fromSchema(null)
75940
+ // throws "Cannot read properties of null (reading 'cached')".
75941
+ if (editor && !editor.isDestroyed && value !== editor.getHTML()) {
76226
75942
  editor.commands.setContent(value);
76227
75943
  }
76228
75944
  }, [value, editor]);