@bigbinary/neeto-folders-frontend 1.1.5 → 1.1.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
@@ -1,7 +1,7 @@
1
1
  # neeto-folders-nano
2
2
 
3
- The `neeto-folders-nano` acts as the source of truth for the new nano's structure,
4
- configs, data etc.
3
+ The `neeto-folders-nano` acts as the source of truth for the new nano's
4
+ structure, configs, data etc.
5
5
 
6
6
  ## Contents
7
7
 
@@ -37,13 +37,7 @@ configs, data etc.
37
37
  bundle install
38
38
  ```
39
39
 
40
- 3. Add this line to your application's `config/routes.rb` file
41
-
42
- ```ruby
43
- mount NeetoFoldersEngine::Engine => "/neeto_folders_engine"
44
- ```
45
-
46
- 4. Add required migrations in the `db/migrate` folder. Run the following
40
+ 3. Add required migrations in the `db/migrate` folder. Run the following
47
41
  commands to copy the migrations from the engine to the host application.
48
42
 
49
43
  ```shell
@@ -53,23 +47,60 @@ configs, data etc.
53
47
 
54
48
  #### Usage
55
49
 
56
- 1. Replace NeetoFoldersNano with your project name
50
+ 1. Define the folder model in your application by extending the
51
+ `NeetoFoldersEngine::Folder` base class. Below is the sample code in
52
+ NeetoRecord that defines a `RecordingFolder` model by extending the
53
+ `NeetoFoldersEngine::Folder` to manage recordings.
54
+
55
+ ```ruby
56
+ class RecordingFolder < NeetoFoldersEngine::Folder
57
+ has_many :recordings, -> { unscope(where: :deleted_at) }, foreign_key: :folder_id, dependent: :nullify
58
+ ```
57
59
 
58
- Create a `script.rb` file in the project root and paste the script from the
59
- following file.
60
+ `NeetoFoldersEngine` also expects a instance method `items` to be defined in
61
+ the extended class. This enables the `NeetoFoldersEngine` to keep track of
62
+ the count of items in the folder. Below is a sample code from NeetoRecord.
60
63
 
61
- [Replace project name script](./docs/engine/replace-project-name-script.md)
64
+ ```ruby
65
+ def items
66
+ recordings
67
+ end
68
+ ```
62
69
 
63
- 2. Run the file using the following command:
70
+ 2. Include the `NeetoFoldersEngine::Folderable` in the model which should belong
71
+ to a folder. Order of include is important. Include `Folderable` after
72
+ `Deletable` from neeto-commons-backend to allow `Folderable` to override the
73
+ `soft_delete` method.
64
74
 
65
- ```shell
66
- ruby script.rb
75
+ ```ruby
76
+ include NeetoFoldersEngine::Folderable
67
77
  ```
68
78
 
69
- Notes ⚠️
79
+ 3. `NeetoFoldersEngine` also exposes a controller class
80
+ `NeetoFoldersEngine::FoldersController` with `index`, `show`, `create`,
81
+ `update`, `destroy`, `bulk_update`, `bulk_destroy`, and `reorder` actions to
82
+ manage folders. The host application can extend this class to manage their
83
+ folders. Make sure the routes are properly configured to direct to these
84
+ actions.
70
85
 
71
- - Don't commit this file.
72
- - Project name should be given in PascalCase.
86
+ Similar to the `RecordingFolder < NeetoFoldersEngine::Folder`, the
87
+ `NeetoFoldersEngine::FoldersController` base controller expects a `folders`
88
+ method to be defined in the extended class that allows the controller to
89
+ target folder instances that belongs to a particular type. Given below is
90
+ sample definition in NeetoRecord which extracts recording folders that should
91
+ be managed by the extended controller.
92
+
93
+ ```ruby
94
+ class Api::V1::FoldersController < NeetoFoldersEngine::FoldersController
95
+
96
+ private
97
+
98
+ def folders
99
+ @_folders ||= @organization.recording_folders.includes(:recordings)
100
+ end
101
+ end
102
+
103
+ ```
73
104
 
74
105
  ### Frontend package
75
106
 
@@ -82,21 +113,248 @@ Notes ⚠️
82
113
  ```
83
114
 
84
115
  ### Instructions for development
85
- Check the [Frontend package development guide](https://neeto-engineering.neetokb.com/p/a-d34cb4b0) for step-by-step instructions to develop the frontend package.
116
+
117
+ Check the
118
+ [Frontend package development guide](https://neeto-engineering.neetokb.com/p/a-d34cb4b0)
119
+ for step-by-step instructions to develop the frontend package.
86
120
 
87
121
  #### Usage
88
122
 
89
- 1. Import `WelcomeScreen` component from "@bigbinary/neeto-folders-frontend"
123
+ `neeto-folders-frontend` exports a set of components, hooks, utils and constants
124
+ to be integrated in the host application.
90
125
 
91
- ```javascript
92
- import React from "react";
126
+ Most of the above exports accepts a configuration object with certain
127
+ properties. Given below is the structure of default `config` object. You can
128
+ pass your own config object as argument or props to customize behaviors that
129
+ suits the host product. Define this constant in a constant file and customize
130
+ certain properties such as params as necessary.
93
131
 
94
- import { WelcomeScreen } from "@bigbinary/neeto-folders-frontend";
132
+ ```js
133
+ {
95
134
 
96
- const App = () => <WelcomeScreen />;
135
+ type: "FOLDER", // A unique type key for query keys.
136
+ maxDepth: 2, // Maximum allowed depth for folder tree
137
+ folderPath: "/folders/:folderId", // Path for handling URL redirections and params matching.
138
+ itemLabel: t("common.items"), // For displaying the item label in counts
139
+ itemKeys: [], // For invalidation purposes. Keys in this array will be invalidated along with folders.
140
+ params: {}, // Params to be passed to APIs along with other params. Can be used for sorting and similar.
141
+ api: { // Folder CRUD methods.
142
+ fetch: noop,
143
+ get: noop,
144
+ create: noop,
145
+ update: noop,
146
+ destroy: noop,
147
+ bulkUpdate: noop,
148
+ bulkDestroy: noop,
149
+ }
150
+ }
151
+ ```
97
152
 
98
- export default App;
99
- ```
153
+ #### Components
154
+
155
+ ```js
156
+ import * as components from "@bigbinary/neeto-folders-frontend/components";
157
+ ```
158
+
159
+ 1. `FoldersContext`: This component renders all alerts and panes related to
160
+ folders. Make sure this component is included in some part of your
161
+ application.
162
+
163
+ ###### Props:
164
+
165
+ - `config`: A config object to customize the folders behavior.
166
+
167
+ Sample usage:
168
+
169
+ ```jsx
170
+ import { FoldersContext } from "@bigbinary/neeto-folders-frontend/components";
171
+ // ....
172
+ <FoldersContext config={foldersConfig}>
173
+ <ApplicationComponent>
174
+ </FoldersContext>
175
+ ```
176
+
177
+ 2. `FoldersTree`: This component renders the folders in tree a tree structure.
178
+
179
+ ###### Props:
180
+
181
+ - `config`: A config object to customize the folders behavior.
182
+
183
+ Sample usage:
184
+
185
+ ```jsx
186
+ import { FoldersTree } from "@bigbinary/neeto-folders-frontend/components";
187
+ // ....
188
+ <FoldersTree config={foldersConfig} />;
189
+ ```
190
+
191
+ 3. `FoldersList`: Component renders list of folders. If no folder is
192
+ selected/active, renders list of root folders. If inside a selected folder,
193
+ renders list of sub-folders. The active folder is identified based on the
194
+ param in the URL that matches the `folderPath` in the `config` object.
195
+
196
+ ###### Props:
197
+
198
+ - `config`: A config object to customize the folders behavior.
199
+
200
+ - `selection`: An array of folder ids indicating id of selected folders for
201
+ bulk selection.
202
+
203
+ - `onSelect`: Callback triggered when checkbox is selected for a folder item
204
+ for bulk selection.
205
+
206
+ Sample usage:
207
+
208
+ ```jsx
209
+ import { FoldersList } from "@bigbinary/neeto-folders-frontend/components";
210
+ // ....
211
+ <FoldersList
212
+ config={foldersConfig}
213
+ onSelect={onSelectFolder}
214
+ selection={folderSelection}
215
+ />;
216
+ ```
217
+
218
+ 4. `MoveToFoldersPane`: This component can be used in host applications to move
219
+ items to a folder. Component renders current list of folders in pane with
220
+ radio buttons and invokes callbacks for folder selections.
221
+
222
+ ###### Props:
223
+
224
+ - `isOpen`: Boolean value that controls pane visibility.
225
+
226
+ - `item`: An item object that is to be moved to the folder.
227
+
228
+ - `config`: A config object to customize the folders behavior.
229
+
230
+ - `submitButtonProps`: Pane "Submit" button overrides.
231
+
232
+ - `cancelButtonProps`: Pane "Cancel" button overrides.
233
+
234
+ - `removeButtonProps`: Pane "Remove from folder" button overrides. Note that
235
+ the button will be hidden unless the `onRemove` prop is supplied.
236
+
237
+ - `onSubmit(folderId)`: Callback invoked with id of selected folder on
238
+ submit.
239
+
240
+ - `onClose()`: Callback invoked when the pane is closed.
241
+
242
+ - `onRemove()`: Callback invoked when the Remove from folder button is
243
+ pressed. Note that the button will be hidden unless this prop is supplied.
244
+
245
+ - `onSelect`: Callback triggered when checkbox is selected for a folder item
246
+ for bulk selection.
247
+
248
+ Sample usage:
249
+
250
+ ```jsx
251
+ import { MoveToFoldersPane } from "@bigbinary/neeto-folders-frontend/components";
252
+ // ....
253
+ <MoveToFoldersPane
254
+ item={itemToMove}
255
+ onSelect={onSelectFolder}
256
+ selection={folderSelection}
257
+ />;
258
+ ```
259
+
260
+ #### Hooks
261
+
262
+ ```js
263
+ import * as hooks from "@bigbinary/neeto-folders-frontend/hooks";
264
+ ```
265
+
266
+ 1. `useFolders(config)`: Hook that return the data for all folders in tree
267
+ structure.
268
+
269
+ ###### Arguments:
270
+
271
+ - `config`: A config object to customize the folders behavior.
272
+
273
+ ###### Returns:
274
+
275
+ - `isLoading`: `true` when data is being fetched for active folder. `false`
276
+ otherwise.
277
+
278
+ - `folders`: Data of all folders of given type in tree structure.
279
+
280
+ 2. `useFolder(config)`: Hook that return the data related to current active
281
+ folder based on URL param.
282
+
283
+ ###### Arguments:
284
+
285
+ - `config`: A config object to customize the folders behavior.
286
+
287
+ ###### Returns:
288
+
289
+ - `isLoading`: `true` when data is being fetched for active folder. `false`
290
+ otherwise.
291
+
292
+ - `folderId`: SID of the current active folder based on URL param.
293
+
294
+ - `folder`: Data of the current folder if exists.
295
+
296
+ 3. `useFolderActions(config)`: Hook that return a set of callbacks to trigger
297
+ actions from host application.
298
+
299
+ ###### Arguments:
300
+
301
+ - `config`: A config object to customize the folders behavior.
302
+
303
+ ###### Returns:
304
+
305
+ - `isPending`: `true` when action is in progress. `false` otherwise.
306
+
307
+ - `onAdd()`: Initiates the folder create action.
308
+
309
+ - `onEdit(folder)`: Initiates the folder edit action. Accepts `folder` data
310
+ as argument.
311
+
312
+ - `onMove(folder)`: Initiates the folder edit action. Accepts `folder` data
313
+ as argument.
314
+
315
+ - `onDelete(folder)`: Initiates the folders delete action. Accepts `folder`
316
+ data as argument.
317
+
318
+ - `onReorder()`: Initiates the reorder folder action. Opens the "Reorder"
319
+ pane.
320
+
321
+ #### Utils
322
+
323
+ ```js
324
+ import * as utils from "@bigbinary/neeto-folders-frontend/utils";
325
+ ```
326
+
327
+ 1. pathToFolder(folders, folderId):
328
+
329
+ ###### Arguments:
330
+
331
+ - `folders`: Folders data in tree structure, returned by the `useFolders`
332
+ hook.
333
+
334
+ - `folderId`: Target folder id.
335
+
336
+ Returns an flattened array of folders from root folder to current folder with
337
+ id `folderId`. Useful for showing breadcrumbs and similar.
338
+
339
+ #### Constants
340
+
341
+ ```js
342
+ import * as constants from "@bigbinary/neeto-folders-frontend/constants";
343
+ ```
344
+
345
+ 1. `QUERY_KEYS`: Use query keys to target React Query actions such as
346
+ invalidations.
347
+
348
+ - `[QUERY_KEYS.FOLDERS]`: Targets every query related to folders.
349
+
350
+ - `[QUERY_KEYS.FOLDERS, config.folderType]`: Targets every query related to
351
+ folders of particular type.
352
+
353
+ - `[QUERY_KEYS.FOLDERS, config.folderType, QUERY_KEYS.LIST]`: Targets folders
354
+ list.
355
+
356
+ - `[QUERY_KEYS.FOLDERS, config.folderType, QUERY_KEYS.DETAILS, folderId]`:
357
+ Target folder details of a folder with id `folderId`
100
358
 
101
359
  ## Instructions for Publishing
102
360
 
@@ -28,9 +28,8 @@ var ramda = require('ramda');
28
28
  var Button = require('@bigbinary/neetoui/Button');
29
29
  var neetoCist = require('@bigbinary/neeto-cist');
30
30
  var Radio = require('@bigbinary/neetoui/Radio');
31
- var Tooltip = require('@bigbinary/neetoui/Tooltip');
32
31
  var core = require('@dnd-kit/core');
33
- var Folder = require('@bigbinary/neeto-icons/Folder');
32
+ var Reorder = require('@bigbinary/neeto-icons/Reorder');
34
33
  var Toastr = require('@bigbinary/neetoui/Toastr');
35
34
  var reactDom = require('react-dom');
36
35
  var MoreDropdown = require('@bigbinary/neeto-molecules/MoreDropdown');
@@ -357,6 +356,7 @@ var AddEditPane = function AddEditPane(_ref) {
357
356
  children: function children() {
358
357
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
359
358
  children: [/*#__PURE__*/jsxRuntime.jsx(Pane.Body, {
359
+ className: "pb-6",
360
360
  children: /*#__PURE__*/jsxRuntime.jsxs(formik.Form, {
361
361
  className: "w-full space-y-5",
362
362
  children: [/*#__PURE__*/jsxRuntime.jsx(Input, {
@@ -413,12 +413,12 @@ var Node = function Node(_ref, ref) {
413
413
  }));
414
414
  folder.itemCount > 0 && metaInfo.push("".concat(folder.itemCount, " ").concat(itemLabel));
415
415
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
416
- className: "flex",
416
+ className: "flex w-full min-w-0",
417
417
  children: [Array.from({
418
418
  length: depth
419
419
  }).map(function (_, index) {
420
420
  return /*#__PURE__*/jsxRuntime.jsx("span", {
421
- className: "neeto-ui-border-gray-200 relative border-l",
421
+ className: "neeto-ui-border-gray-300 relative flex-shrink-0 border-l",
422
422
  style: {
423
423
  width: indentSize,
424
424
  left: Math.round(indentSize / 2)
@@ -432,12 +432,14 @@ var Node = function Node(_ref, ref) {
432
432
  children: [icon, /*#__PURE__*/jsxRuntime.jsxs("div", {
433
433
  className: "ml-2",
434
434
  children: [/*#__PURE__*/jsxRuntime.jsx(Typography, {
435
- style: "body3",
435
+ lineHeight: "snug",
436
+ style: "body1",
436
437
  weight: "medium",
437
438
  children: folder.name
438
439
  }), /*#__PURE__*/jsxRuntime.jsx(Typography, {
439
- className: "relative -top-0.5",
440
- style: "nano",
440
+ className: "relative mt-0.5",
441
+ lineHeight: "snug",
442
+ style: "body3",
441
443
  weight: "normal",
442
444
  children: metaInfo.join(" . ")
443
445
  })]
@@ -477,28 +479,26 @@ var _SelectableNode = function SelectableNode(_ref) {
477
479
  }));
478
480
  });
479
481
  };
480
- return /*#__PURE__*/jsxRuntime.jsx(Tooltip, {
481
- content: t("moveToFolder.notAllowed"),
482
- disabled: !isDisabled,
483
- position: "top",
484
- children: /*#__PURE__*/jsxRuntime.jsxs("div", {
485
- className: classNames({
486
- "opacity-40": isDisabled
482
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
483
+ "aria-disabled": isDisabled,
484
+ className: classNames({
485
+ "opacity-60": isDisabled
486
+ }),
487
+ title: isDisabled ? t("moveToFolder.notAllowed") : undefined,
488
+ children: [/*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$7(_objectSpread$7({}, _objectSpread$7(_objectSpread$7({}, rest), {}, {
489
+ depth: depth,
490
+ folder: folder
491
+ })), {}, {
492
+ icon: /*#__PURE__*/jsxRuntime.jsx(Radio.Item, {
493
+ readOnly: true,
494
+ checked: selection === folder.id,
495
+ className: "neeto-ui-radio__container",
496
+ name: "move-folder-option"
487
497
  }),
488
- children: [/*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$7(_objectSpread$7({}, _objectSpread$7(_objectSpread$7({}, rest), {}, {
489
- depth: depth,
490
- folder: folder
491
- })), {}, {
492
- icon: /*#__PURE__*/jsxRuntime.jsx(Radio.Item, {
493
- readOnly: true,
494
- checked: selection === folder.id,
495
- name: "move-folder-option"
496
- }),
497
- onClick: isDisabled ? neetoCist.noop : function () {
498
- return onSelect(folder);
499
- }
500
- })), renderChildren()]
501
- })
498
+ onClick: isDisabled ? neetoCist.noop : function () {
499
+ return onSelect(folder);
500
+ }
501
+ })), renderChildren()]
502
502
  });
503
503
  };
504
504
 
@@ -557,6 +557,7 @@ var PaneBody = function PaneBody(_ref) {
557
557
  onClick: onAddFolder
558
558
  })]
559
559
  }), /*#__PURE__*/jsxRuntime.jsx(Pane.Body, {
560
+ className: "pb-6",
560
561
  children: folders.map(function (folder) {
561
562
  return /*#__PURE__*/react.createElement(_SelectableNode, {
562
563
  folder: folder,
@@ -662,10 +663,11 @@ var _DraggableNode = function DraggableNode(_ref) {
662
663
  }));
663
664
  });
664
665
  };
665
- return /*#__PURE__*/jsxRuntime.jsxs("div", {
666
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
666
667
  children: [/*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$5(_objectSpread$5(_objectSpread$5({}, rest), {}, {
667
668
  className: classNames({
668
- "neeto-ui-bg-gray-100 opacity-50 ": isDragging,
669
+ "neeto-ui-rounded-lg hover:neeto-ui-bg-gray-100 w-full min-w-0 cursor-move transition-colors": true,
670
+ "neeto-ui-bg-gray-100 opacity-50": isDragging,
669
671
  "neeto-ui-border-primary-500 border": isOver,
670
672
  "border border-transparent": !isOver
671
673
  })
@@ -747,7 +749,9 @@ var ReorderFoldersPane = function ReorderFoldersPane(_ref) {
747
749
  });
748
750
  };
749
751
  var nodeProps = {
750
- icon: /*#__PURE__*/jsxRuntime.jsx(Folder, {}),
752
+ icon: /*#__PURE__*/jsxRuntime.jsx(Reorder, {
753
+ className: "neeto-ui-text-gray-500 relative -left-[0.3125rem] flex-shrink-0"
754
+ }),
751
755
  itemLabel: config.itemLabel
752
756
  };
753
757
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
@@ -896,7 +900,7 @@ var FolderTile = function FolderTile(_ref) {
896
900
  }), /*#__PURE__*/jsxRuntime.jsxs("span", {
897
901
  className: "flex min-w-0 flex-grow flex-col gap-2",
898
902
  children: [/*#__PURE__*/jsxRuntime.jsx(Typography, {
899
- className: "-mt-0.5 line-clamp-2 pr-8",
903
+ className: "-mt-0.5 line-clamp-2 break-words pr-8",
900
904
  lineHeight: "snug",
901
905
  style: "body1",
902
906
  title: folder.name,
@@ -996,7 +1000,7 @@ var FolderNode = function FolderNode(_ref) {
996
1000
  },
997
1001
  to: link,
998
1002
  children: /*#__PURE__*/jsxRuntime.jsx(Typography, {
999
- className: "line-clamp-1",
1003
+ className: "line-clamp-1 block truncate",
1000
1004
  component: "span",
1001
1005
  style: "body2",
1002
1006
  title: folder.name,
@@ -1075,7 +1079,7 @@ var FoldersTree = function FoldersTree(_ref) {
1075
1079
 
1076
1080
  var e=[],t=[];function n(n,r){if(n&&"undefined"!=typeof document){var a,s=!0===r.prepend?"prepend":"append",d=!0===r.singleTag,i="string"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName("head")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c();}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n));}function c(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a="prepend"===s?"afterbegin":"beforeend";return i.insertAdjacentElement(a,e),e}}
1077
1081
 
1078
- var css = ".neeto-sidebar-folders-tree__folder-node{color:inherit!important}.neeto-sidebar-folders-tree.ant-tree .ant-tree-node-content-wrapper{padding-inline:6px!important}.neeto-sidebar-folders-tree.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:rgb(var(--neeto-ui-white));color:rgb(var(--neeto-ui-accent-800))!important;font-weight:500}.neeto-sidebar-folders-tree.ant-tree .ant-tree-switcher .ant-tree-switcher-icon{position:relative}.neeto-folders-grid-view-wrapper{grid-template-columns:repeat(auto-fill,minmax(256px,1fr))}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9jb21wb25lbnRzL25lZXRvLWZvbGRlcnMtbmFuby5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUNFLHVCQUNGLENBRUEsb0VBQ0UsNEJBQ0YsQ0FFQSwyRkFFRSwyQ0FBQSxDQURBLCtDQUFBLENBRUEsZUFDRixDQUVBLGdGQUNFLGlCQUNGLENBRUEsaUNBQ0UseURBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIubmVldG8tc2lkZWJhci1mb2xkZXJzLXRyZWVfX2ZvbGRlci1ub2RlIHtcbiAgY29sb3I6IGluaGVyaXQgIWltcG9ydGFudDtcbn1cblxuLm5lZXRvLXNpZGViYXItZm9sZGVycy10cmVlLmFudC10cmVlIC5hbnQtdHJlZS1ub2RlLWNvbnRlbnQtd3JhcHBlciB7XG4gIHBhZGRpbmctaW5saW5lOiA2cHggIWltcG9ydGFudFxufVxuXG4ubmVldG8tc2lkZWJhci1mb2xkZXJzLXRyZWUuYW50LXRyZWUgLmFudC10cmVlLW5vZGUtY29udGVudC13cmFwcGVyLmFudC10cmVlLW5vZGUtc2VsZWN0ZWQge1xuICBjb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLWFjY2VudC04MDApKSAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktd2hpdGUpKTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLm5lZXRvLXNpZGViYXItZm9sZGVycy10cmVlLmFudC10cmVlIC5hbnQtdHJlZS1zd2l0Y2hlciAuYW50LXRyZWUtc3dpdGNoZXItaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm5lZXRvLWZvbGRlcnMtZ3JpZC12aWV3LXdyYXBwZXIge1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyNTZweCwgMWZyKSk7XG59XG4iXX0= */";
1082
+ var css = ".neeto-sidebar-folders-tree__folder-node{color:inherit!important}.neeto-sidebar-folders-tree.ant-tree .ant-tree-node-content-wrapper{min-width:0;padding-inline:6px!important}.neeto-sidebar-folders-tree.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:rgb(var(--neeto-ui-white));color:rgb(var(--neeto-ui-accent-800))!important;font-weight:500}.neeto-sidebar-folders-tree.ant-tree .ant-tree-switcher .ant-tree-switcher-icon{position:relative}.neeto-folders-grid-view-wrapper{grid-template-columns:repeat(auto-fill,minmax(256px,1fr))}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9jb21wb25lbnRzL25lZXRvLWZvbGRlcnMtbmFuby5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUNFLHVCQUNGLENBRUEsb0VBRUUsV0FBQSxDQURBLDRCQUVGLENBRUEsMkZBRUUsMkNBQUEsQ0FEQSwrQ0FBQSxDQUVBLGVBQ0YsQ0FFQSxnRkFDRSxpQkFDRixDQUVBLGlDQUNFLHlEQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLm5lZXRvLXNpZGViYXItZm9sZGVycy10cmVlX19mb2xkZXItbm9kZSB7XG4gIGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG59XG5cbi5uZWV0by1zaWRlYmFyLWZvbGRlcnMtdHJlZS5hbnQtdHJlZSAuYW50LXRyZWUtbm9kZS1jb250ZW50LXdyYXBwZXIge1xuICBwYWRkaW5nLWlubGluZTogNnB4ICFpbXBvcnRhbnQ7XG4gIG1pbi13aWR0aDogMDtcbn1cblxuLm5lZXRvLXNpZGViYXItZm9sZGVycy10cmVlLmFudC10cmVlIC5hbnQtdHJlZS1ub2RlLWNvbnRlbnQtd3JhcHBlci5hbnQtdHJlZS1ub2RlLXNlbGVjdGVkIHtcbiAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1hY2NlbnQtODAwKSkgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLXdoaXRlKSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5uZWV0by1zaWRlYmFyLWZvbGRlcnMtdHJlZS5hbnQtdHJlZSAuYW50LXRyZWUtc3dpdGNoZXIgLmFudC10cmVlLXN3aXRjaGVyLWljb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5uZWV0by1mb2xkZXJzLWdyaWQtdmlldy13cmFwcGVyIHtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMjU2cHgsIDFmcikpO1xufSJdfQ== */";
1079
1083
  n(css,{});
1080
1084
 
1081
1085
  exports.FoldersContext = FoldersContext;