libreqda 1.2.0__py3-none-any.whl

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 (255) hide show
  1. CHANGELOG.md +481 -0
  2. libreqda-1.2.0.dist-info/LICENSE.txt +28 -0
  3. libreqda-1.2.0.dist-info/METADATA +131 -0
  4. libreqda-1.2.0.dist-info/RECORD +255 -0
  5. libreqda-1.2.0.dist-info/WHEEL +4 -0
  6. libreqda-1.2.0.dist-info/entry_points.txt +4 -0
  7. scripts/babelrc +8 -0
  8. scripts/dist/LICENSE.txt +33 -0
  9. scripts/dist/RELEASE.txt +23 -0
  10. scripts/dist/macos/libreqda.icns +0 -0
  11. scripts/dist/macos/macos.spec +43 -0
  12. scripts/dist/macos/plist.patch +10 -0
  13. scripts/dist/macos/taguette.icns +0 -0
  14. scripts/dist/macos/taguette_console_wrapper +4 -0
  15. scripts/dist/macos.sh +32 -0
  16. scripts/dist/pyinstaller_entrypoint.py +19 -0
  17. scripts/dist/windows/windows-installer.iss +51 -0
  18. scripts/dist/windows/windows.spec +39 -0
  19. scripts/edugain/worker_update_edugain_idps.py +89 -0
  20. scripts/edugain/worker_update_edugain_idps.sh +9 -0
  21. scripts/make_password_reset_link.py +56 -0
  22. scripts/make_theme.py +99 -0
  23. scripts/new_db_revision.sh +8 -0
  24. scripts/register_user.py +76 -0
  25. scripts/update_pot.sh +33 -0
  26. scripts/update_translations.sh +17 -0
  27. scripts/validate.py +140 -0
  28. scripts/wipe_and_disable_user.py +90 -0
  29. taguette/__init__.py +13 -0
  30. taguette/access_control.py +145 -0
  31. taguette/convert.py +623 -0
  32. taguette/database/__init__.py +177 -0
  33. taguette/database/base.py +9 -0
  34. taguette/database/copy.py +433 -0
  35. taguette/database/models.py +920 -0
  36. taguette/demodata.py +688 -0
  37. taguette/export.py +500 -0
  38. taguette/extract.py +287 -0
  39. taguette/import_codebook.py +110 -0
  40. taguette/l10n/de_DE/LC_MESSAGES/taguette_javascript.mo +0 -0
  41. taguette/l10n/de_DE/LC_MESSAGES/taguette_main.mo +0 -0
  42. taguette/l10n/el_EL/LC_MESSAGES/taguette_javascript.mo +0 -0
  43. taguette/l10n/el_GR/LC_MESSAGES/taguette_javascript.mo +0 -0
  44. taguette/l10n/el_GR/LC_MESSAGES/taguette_main.mo +0 -0
  45. taguette/l10n/en_US/LC_MESSAGES/taguette_javascript.mo +0 -0
  46. taguette/l10n/en_US/LC_MESSAGES/taguette_main.mo +0 -0
  47. taguette/l10n/es_ES/LC_MESSAGES/taguette_javascript.mo +0 -0
  48. taguette/l10n/es_ES/LC_MESSAGES/taguette_main.mo +0 -0
  49. taguette/l10n/fr_FR/LC_MESSAGES/taguette_javascript.mo +0 -0
  50. taguette/l10n/fr_FR/LC_MESSAGES/taguette_main.mo +0 -0
  51. taguette/l10n/id_ID/LC_MESSAGES/taguette_javascript.mo +0 -0
  52. taguette/l10n/id_ID/LC_MESSAGES/taguette_main.mo +0 -0
  53. taguette/l10n/it_IT/LC_MESSAGES/taguette_javascript.mo +0 -0
  54. taguette/l10n/it_IT/LC_MESSAGES/taguette_main.mo +0 -0
  55. taguette/l10n/nl_NL/LC_MESSAGES/taguette_javascript.mo +0 -0
  56. taguette/l10n/nl_NL/LC_MESSAGES/taguette_main.mo +0 -0
  57. taguette/l10n/pt_PT/LC_MESSAGES/taguette_javascript.mo +0 -0
  58. taguette/l10n/pt_PT/LC_MESSAGES/taguette_main.mo +0 -0
  59. taguette/l10n/sv_SE/LC_MESSAGES/taguette_javascript.mo +0 -0
  60. taguette/l10n/sv_SE/LC_MESSAGES/taguette_main.mo +0 -0
  61. taguette/loki_handler.py +107 -0
  62. taguette/main.py +649 -0
  63. taguette/migrations/env.py +72 -0
  64. taguette/migrations/script.py.mako +24 -0
  65. taguette/migrations/versions/09c662cd9483_make_documents_filename_not_null.py +39 -0
  66. taguette/migrations/versions/1b29e68900c1_add_user_roles.py +55 -0
  67. taguette/migrations/versions/1b96a606551d_update_user_to_have_a_display_name.py +34 -0
  68. taguette/migrations/versions/2467bab602b7_add_color_column_to_tags_table.py +33 -0
  69. taguette/migrations/versions/382db36f20f4_add_user_disabled.py +66 -0
  70. taguette/migrations/versions/43d6c240309d_remove_document_groups.py +81 -0
  71. taguette/migrations/versions/447d636f72c5_cascades.py +40 -0
  72. taguette/migrations/versions/491de2dc7cd7_add_indexes.py +51 -0
  73. taguette/migrations/versions/4c55b3b3ff30_user_login_length.py +58 -0
  74. taguette/migrations/versions/61a4abcc8769_user_with_parent_for_permissions.py +40 -0
  75. taguette/migrations/versions/6489b5f9cfb5_increase_password_hash_size.py +34 -0
  76. taguette/migrations/versions/679f625e6e6a_fix_unique_tags.py +59 -0
  77. taguette/migrations/versions/77c4543a5b9b_add_parent_id_column_to_collection_table.py +41 -0
  78. taguette/migrations/versions/7c94b7a31e69_add_is_archived_column_to_projets.py +39 -0
  79. taguette/migrations/versions/7f56de97e3c8_change_edugain_displayname_length.py +42 -0
  80. taguette/migrations/versions/807c0cc0ecf6_remove_invalid_hltags.py +43 -0
  81. taguette/migrations/versions/80b1cc9d4c22_add_user_email.py +35 -0
  82. taguette/migrations/versions/91ade71ccf4d_add_user_language.py +28 -0
  83. taguette/migrations/versions/955db2e523d1_add_collections_tables_and_associations_.py +60 -0
  84. taguette/migrations/versions/a1b2c3d4e5f6_add_user_hide_code_counts.py +28 -0
  85. taguette/migrations/versions/b23f3b7a638e_add_user_password_change_date.py +36 -0
  86. taguette/migrations/versions/b7c1e2d3f4a5_add_project_compact_layout.py +28 -0
  87. taguette/migrations/versions/bc8e0e0677e9_rename_command_fields.py +126 -0
  88. taguette/migrations/versions/bce44849c2f2_lowercase_logins.py +96 -0
  89. taguette/migrations/versions/ca076140922f_update_user_for_external_logins.py +32 -0
  90. taguette/migrations/versions/d86c45d7aa8a_add_document_direction.py +127 -0
  91. taguette/migrations/versions/db5e31a0233d_remove_blank_highlights.py +88 -0
  92. taguette/migrations/versions/dd37d9027a24_unique_tags.py +68 -0
  93. taguette/migrations/versions/de678cef2a94_add_project_id_to_collections_and_.py +41 -0
  94. taguette/migrations/versions/e459991d960e_add_table_edugainidps.py +39 -0
  95. taguette/migrations/versions/e4cf92942271_add_index.py +29 -0
  96. taguette/migrations/versions/e4e090a5b511_remove_commands_document_id_fk.py +38 -0
  97. taguette/migrations/versions/e9a9f1c77971_add_favorite_column_to_document.py +32 -0
  98. taguette/migrations/versions/ecb4065de575_don_t_use_server_default_now_timezone_.py +44 -0
  99. taguette/migrations/versions/fbdc29566f62_edugain_fix_field_type.py +42 -0
  100. taguette/migrations/versions/fdc6eb54b034_add_parent_id_column_to_tags_table.py +31 -0
  101. taguette/static/README.md +34 -0
  102. taguette/static/alt_templates/.gitkeep +0 -0
  103. taguette/static/assets/test/logos/monsters-university-logo.png +0 -0
  104. taguette/static/css/custom.css +1696 -0
  105. taguette/static/css/fa-all.min.css +5 -0
  106. taguette/static/css/themed.css +3 -0
  107. taguette/static/css/themed.css.map +25 -0
  108. taguette/static/css/vendor/bootstrap-treeview.min.css +1 -0
  109. taguette/static/css/vendor/bootstrap.min.css +6 -0
  110. taguette/static/css/vendor/font/context-menu-icons.eot +0 -0
  111. taguette/static/css/vendor/font/context-menu-icons.ttf +0 -0
  112. taguette/static/css/vendor/font/context-menu-icons.woff +0 -0
  113. taguette/static/css/vendor/font/context-menu-icons.woff2 +0 -0
  114. taguette/static/css/vendor/hierarchy-select.min.css +1 -0
  115. taguette/static/css/vendor/introjs.min.css +2 -0
  116. taguette/static/css/vendor/jquery.contextMenu.min.css +16 -0
  117. taguette/static/favicon.ico +0 -0
  118. taguette/static/js/codebook-viz.js +428 -0
  119. taguette/static/js/collection/context-menu.js +180 -0
  120. taguette/static/js/collection/hierarchy-select.js +71 -0
  121. taguette/static/js/collection/manager.js +217 -0
  122. taguette/static/js/document/context-menu.js +92 -0
  123. taguette/static/js/document/custom-select.js +82 -0
  124. taguette/static/js/document/manager.js +943 -0
  125. taguette/static/js/document/treeview.js +593 -0
  126. taguette/static/js/highlight/README.md +18 -0
  127. taguette/static/js/highlight/crud.js +119 -0
  128. taguette/static/js/highlight/extracts.js +497 -0
  129. taguette/static/js/highlight/loader.js +109 -0
  130. taguette/static/js/highlight/renderer.js +405 -0
  131. taguette/static/js/login.js +15 -0
  132. taguette/static/js/permissions.js +153 -0
  133. taguette/static/js/polling-event.js +145 -0
  134. taguette/static/js/project/intro.js +524 -0
  135. taguette/static/js/project/manager.js +0 -0
  136. taguette/static/js/project/search.js +124 -0
  137. taguette/static/js/tag/context-menu.js +133 -0
  138. taguette/static/js/tag/explore-codes.js +400 -0
  139. taguette/static/js/tag/hierarchy-select.js +69 -0
  140. taguette/static/js/tag/manager.js +545 -0
  141. taguette/static/js/tag/treeview.js +613 -0
  142. taguette/static/js/taguette.js +1790 -0
  143. taguette/static/js/utilities.js +714 -0
  144. taguette/static/js/vendor/bootstrap-treeview-custum.js +421 -0
  145. taguette/static/js/vendor/bootstrap-treeview-custum.min.js +1 -0
  146. taguette/static/js/vendor/bootstrap-treeview-default.min.js +1 -0
  147. taguette/static/js/vendor/bootstrap.bundle.min.js +7 -0
  148. taguette/static/js/vendor/bootstrap.bundle.min.js.map +1 -0
  149. taguette/static/js/vendor/hierarchy-select.min.js +1 -0
  150. taguette/static/js/vendor/introjs.min.js +17 -0
  151. taguette/static/js/vendor/jquery-3.7.1.js +2 -0
  152. taguette/static/js/vendor/jquery.contextMenu.min.js +2 -0
  153. taguette/static/libreqda.ico +0 -0
  154. taguette/static/logo-h.png +0 -0
  155. taguette/static/logo.png +0 -0
  156. taguette/static/logo_blanc.png +0 -0
  157. taguette/static/missing.png +0 -0
  158. taguette/static/robots.txt +2 -0
  159. taguette/static/scss/components/_badge.scss +42 -0
  160. taguette/static/scss/components/_button.scss +169 -0
  161. taguette/static/scss/components/_checkbox.scss +40 -0
  162. taguette/static/scss/components/_context_menu.scss +28 -0
  163. taguette/static/scss/components/_custom_select.scss +150 -0
  164. taguette/static/scss/components/_dropdown.scss +43 -0
  165. taguette/static/scss/components/_form.scss +54 -0
  166. taguette/static/scss/components/_modal.scss +57 -0
  167. taguette/static/scss/components/_project_card.scss +163 -0
  168. taguette/static/scss/components/_tag.scss +308 -0
  169. taguette/static/scss/components/_treeview.scss +76 -0
  170. taguette/static/scss/custom.scss +809 -0
  171. taguette/static/scss/layout/_credits.scss +62 -0
  172. taguette/static/scss/layout/_footer.scss +6 -0
  173. taguette/static/scss/layout/_navigation.scss +165 -0
  174. taguette/static/scss/layout/_sidebar.scss +37 -0
  175. taguette/static/scss/themes/default/_variables.scss +103 -0
  176. taguette/static/scss/themes/default/theme.css +3 -0
  177. taguette/static/scss/themes/default/theme.css.map +26 -0
  178. taguette/static/scss/themes/default/theme.scss +4 -0
  179. taguette/static/webfonts/BadScript-OFL.txt +94 -0
  180. taguette/static/webfonts/BadScript.ttf +0 -0
  181. taguette/static/webfonts/Montserrat-Light.ttf +0 -0
  182. taguette/static/webfonts/Montserrat-OFL.txt +93 -0
  183. taguette/static/webfonts/fa-brands-400.eot +0 -0
  184. taguette/static/webfonts/fa-brands-400.svg +1184 -0
  185. taguette/static/webfonts/fa-brands-400.ttf +0 -0
  186. taguette/static/webfonts/fa-brands-400.woff +0 -0
  187. taguette/static/webfonts/fa-brands-400.woff2 +0 -0
  188. taguette/static/webfonts/fa-regular-400.eot +0 -0
  189. taguette/static/webfonts/fa-regular-400.svg +467 -0
  190. taguette/static/webfonts/fa-regular-400.ttf +0 -0
  191. taguette/static/webfonts/fa-regular-400.woff +0 -0
  192. taguette/static/webfonts/fa-regular-400.woff2 +0 -0
  193. taguette/static/webfonts/fa-solid-900.eot +0 -0
  194. taguette/static/webfonts/fa-solid-900.svg +2618 -0
  195. taguette/static/webfonts/fa-solid-900.ttf +0 -0
  196. taguette/static/webfonts/fa-solid-900.woff +0 -0
  197. taguette/static/webfonts/fa-solid-900.woff2 +0 -0
  198. taguette/templates/alt_templates/.gitkeep +0 -0
  199. taguette/templates/archived_projects.html +50 -0
  200. taguette/templates/auth/account.html +74 -0
  201. taguette/templates/auth/cilogon.login.html +89 -0
  202. taguette/templates/auth/email_reset_password.html +5 -0
  203. taguette/templates/auth/external_account.html +60 -0
  204. taguette/templates/auth/login.html +144 -0
  205. taguette/templates/auth/reset_password.html +27 -0
  206. taguette/templates/auth/token_needed.html +7 -0
  207. taguette/templates/base.html +209 -0
  208. taguette/templates/bug_report.html +158 -0
  209. taguette/templates/cookies_prompt.html +15 -0
  210. taguette/templates/downloads.html +127 -0
  211. taguette/templates/email_bug_report.txt +9 -0
  212. taguette/templates/email_reset_password.txt +5 -0
  213. taguette/templates/error.html +8 -0
  214. taguette/templates/export_codebook.html +20 -0
  215. taguette/templates/export_document.html +20 -0
  216. taguette/templates/export_highlights.html +47 -0
  217. taguette/templates/index.html +347 -0
  218. taguette/templates/maintenance.html +8 -0
  219. taguette/templates/messages.js +74 -0
  220. taguette/templates/modal/change_document.html +68 -0
  221. taguette/templates/modal/create_collection.html +100 -0
  222. taguette/templates/modal/create_document.html +84 -0
  223. taguette/templates/modal/create_highlight.html +38 -0
  224. taguette/templates/modal/create_tag.html +73 -0
  225. taguette/templates/modal/explore_codes.html +58 -0
  226. taguette/templates/modal/manage_collaborators.html +44 -0
  227. taguette/templates/modal/merge_tag.html +49 -0
  228. taguette/templates/new_password.html +32 -0
  229. taguette/templates/partials/alert.html +16 -0
  230. taguette/templates/partials/codebook_viz_modal.html +34 -0
  231. taguette/templates/partials/confirm.html +17 -0
  232. taguette/templates/partials/document_toolbar.html +37 -0
  233. taguette/templates/partials/hlinfo.html +13 -0
  234. taguette/templates/partials/project_card.html +44 -0
  235. taguette/templates/partials/project_card_archived.html +41 -0
  236. taguette/templates/partials/project_sidebar.html +99 -0
  237. taguette/templates/partials/spinner.html +11 -0
  238. taguette/templates/permissions.html +54 -0
  239. taguette/templates/project.html +288 -0
  240. taguette/templates/project_delete.html +17 -0
  241. taguette/templates/project_import.html +122 -0
  242. taguette/templates/project_import_codebook.html +34 -0
  243. taguette/templates/project_import_codebook_confirm.html +49 -0
  244. taguette/templates/project_new.html +31 -0
  245. taguette/templates/tos.html +8 -0
  246. taguette/templates/trans.js +7 -0
  247. taguette/templates/welcome.html +15 -0
  248. taguette/utils.py +177 -0
  249. taguette/validate.py +141 -0
  250. taguette/version_check.py +102 -0
  251. taguette/web/__init__.py +252 -0
  252. taguette/web/api.py +1835 -0
  253. taguette/web/base.py +864 -0
  254. taguette/web/export.py +338 -0
  255. taguette/web/views.py +1618 -0
@@ -0,0 +1,809 @@
1
+ /* Imports */
2
+
3
+ /* Abstracts */
4
+
5
+ /* Bootstrap Override */
6
+ //@import 'bootstrap/bootstrap';
7
+
8
+ /* Layout */
9
+ @import 'layout/navigation';
10
+ @import 'layout/sidebar';
11
+ @import 'layout/footer';
12
+ @import 'layout/credits';
13
+
14
+ /* Components */
15
+ @import 'components/badge';
16
+ @import 'components/button';
17
+ @import 'components/checkbox';
18
+ @import 'components/custom_select';
19
+ @import 'components/dropdown';
20
+ @import 'components/form';
21
+ @import 'components/modal';
22
+ @import 'components/project_card';
23
+ @import 'components/tag';
24
+ @import 'components/treeview';
25
+ @import 'components/context_menu';
26
+
27
+ /* Add Taguette font */
28
+ @font-face {
29
+ font-family: $font-family-brand;
30
+ font-display: swap;
31
+ src: url(../webfonts/BadScript.ttf);
32
+ }
33
+
34
+ /* Add body font */
35
+ @font-face {
36
+ font-family: $font-family-system;
37
+ font-display: fallback;
38
+ src: url(../webfonts/Montserrat-Light.ttf);
39
+ }
40
+
41
+ /* Change link colors */
42
+ .container-body a:not(.btn) {
43
+ color: $color-tertiary;
44
+ }
45
+
46
+ /* Disabled links */
47
+ #document-contents a:not([href]):not(.highlight) {
48
+ color: #216490;
49
+ }
50
+
51
+ /* Restore indentation for nested quotes/comments (Bootstrap resets
52
+ blockquote margins to 0, which flattened comment nesting in imported
53
+ documents even though it's preserved correctly in the HTML) */
54
+ #document-contents blockquote {
55
+ margin: 0.5em 0 0.5em 1.25em;
56
+ padding-left: 0.75em;
57
+ border-left: 3px solid #adb5bd;
58
+ }
59
+
60
+ /* Change body font */
61
+ body {
62
+ font-family: $font-family-body !important;
63
+ font-size: $font-size-body !important;
64
+ transition: all 0.3s ease-in-out;
65
+ background-color: $color-bg;
66
+ color: $color-bg-text;
67
+ }
68
+
69
+ /* Some space before content */
70
+ .container-body {
71
+ padding-top: 7em;
72
+ }
73
+
74
+ /* Border for the tab container */
75
+ .tab-content {
76
+ border-style: solid;
77
+ border-width: 1px;
78
+ border-color: $color-bg #dee2e6 #dee2e6 #dee2e6;
79
+ padding: 0.4em;
80
+ }
81
+
82
+ /* Left pane scrolls on overflow */
83
+ div.sticky-top {
84
+ overflow-x: hidden;
85
+ overflow-y: auto;
86
+ height: calc(100vh - 14em);
87
+ top: 6.25em;
88
+ transition: all 0.3s ease-in-out;
89
+ }
90
+
91
+ body.scrolled div.sticky-top {
92
+ height: calc(100vh - 5.25em);
93
+ top: 0;
94
+ transition: all 0.3s ease-in-out;
95
+ }
96
+
97
+ a.document-link-a {
98
+ word-break: break-all;
99
+ }
100
+
101
+ /* Work-around to make a whole element clickable while it contains links */
102
+ .overlay-outer {
103
+ position: relative;
104
+ }
105
+
106
+ .overlay-bottom {
107
+ position: absolute;
108
+ left: 0;
109
+ top: 0;
110
+ bottom: 0;
111
+ right: 0;
112
+ }
113
+
114
+ .overlay-top {
115
+ position: relative;
116
+ pointer-events: none;
117
+ z-index: 1;
118
+ }
119
+
120
+ .overlay-top a {
121
+ pointer-events: all;
122
+ }
123
+
124
+ li.document-link-current {
125
+ background-color: #F8F9FA;
126
+ }
127
+
128
+ li.document-link-current a.document-link-a {
129
+ font-weight: bold;
130
+ }
131
+
132
+ #ul-search-results {
133
+ padding-top: 0;
134
+ }
135
+
136
+ body.scrolled #ul-search-results {
137
+ display: none;
138
+ }
139
+
140
+ li.disabled.sticky {
141
+ padding-top: 0.5rem;
142
+ padding-bottom: 0.5rem;
143
+ position: sticky;
144
+ top: 30px;
145
+ background-color: $color-bg-accent;
146
+ color: $color-tertiary;
147
+ }
148
+
149
+ li.disabled.sticky.first {
150
+ font-weight: bold;
151
+ }
152
+
153
+ li.disabled.sticky.first {
154
+ top: 0;
155
+ }
156
+
157
+ span.pagination {
158
+ float: right;
159
+ }
160
+
161
+ .document-view {
162
+ border: 2px solid #dee2e6;
163
+ padding: 0.5em 0.5em 0.5em 0.5em;
164
+ position: relative;
165
+ text-align: initial;
166
+ /* Reset alignment so RTL works */
167
+ }
168
+
169
+ li.tag-current {
170
+ background-color: $color-toolbar;
171
+ }
172
+
173
+ .backlight {
174
+ color: #bbb;
175
+ }
176
+
177
+ /*#export-button {*/
178
+ /* position: absolute;*/
179
+ /* top: .1em;*/
180
+ /* right: .5em;*/
181
+ /*}*/
182
+
183
+ #document-view .highlight {
184
+ color: black;
185
+ text-decoration: none;
186
+ }
187
+
188
+ #document-view .flash-once {
189
+ animation: flashOnceBackground 2s;
190
+ }
191
+
192
+ @keyframes flashOnceBackground {
193
+ 0% {
194
+ background-color: $color-bg;
195
+ }
196
+
197
+ 50% {
198
+ background-color: $color-flash;
199
+ }
200
+
201
+ 100% {
202
+ background-color: $color-bg;
203
+ }
204
+ }
205
+
206
+ #hlinfo {
207
+ display: none;
208
+ position: absolute;
209
+ background-color: white;
210
+ border: 1px solid grey;
211
+ padding: 0.2em;
212
+ z-index: 9999999;
213
+ }
214
+
215
+ #hlinfo em {
216
+ text-decoration: underline;
217
+ font-style: normal;
218
+ }
219
+
220
+ .list-group-item-primary a {
221
+ color: #404041;
222
+ }
223
+
224
+ .list-group .sublist {
225
+ padding-left: 0;
226
+ margin: 5px -20px -12px 5px;
227
+ border-top: 1px solid #dee2e6;
228
+ display: flex;
229
+ flex-direction: column;
230
+ }
231
+
232
+ .list-group .sublist li {
233
+ padding: 12px 20px;
234
+ }
235
+
236
+ .expand-marker {
237
+ width: 7px;
238
+ }
239
+
240
+ .highlight-entry {
241
+ border: 3px dotted rgba(0, 0, 0, .125);
242
+ margin: 1rem 0;
243
+ padding: 1rem 0.6rem 1rem 0.6rem;
244
+ border-radius: 10px;
245
+ }
246
+
247
+ .draggable {
248
+ /*cursor: grab;*/
249
+ user-select: none;
250
+ }
251
+
252
+ .smooth-stroke {
253
+ transition: stroke-width 0.3s ease-in-out;
254
+ }
255
+
256
+ /* Left middle right panel styles */
257
+
258
+ #middle-panel {
259
+ padding-bottom: 150px;
260
+ }
261
+
262
+ .col-md-2-5 {
263
+ width: 20.8333% !important;
264
+ transition: all 0.3s ease-in-out;
265
+ }
266
+
267
+ .col-md-7-5 {
268
+ width: calc(100% - 41.6666%) !important;
269
+ }
270
+
271
+ @media (max-width: 768px) {
272
+
273
+ .col-md-2-5,
274
+ .col-md-7-5 {
275
+ width: 100% !important;
276
+ margin-bottom: 1rem;
277
+ }
278
+
279
+ .order-1 {
280
+ margin-bottom: 2rem;
281
+ }
282
+
283
+ .row .reduced-col,
284
+ div.reduced-col {
285
+ flex: 0 0 100% !important;
286
+ max-width: 100% !important;
287
+ height: 50px !important;
288
+ width: 100% !important;
289
+ }
290
+
291
+ .bordered-container {
292
+ height: auto !important;
293
+ }
294
+
295
+ }
296
+
297
+ .reduced-col {
298
+ flex: 0 0 5% !important;
299
+ max-width: 5% !important;
300
+ }
301
+
302
+ .reduced-col .panel-content {
303
+ display: none;
304
+ }
305
+
306
+ .expanded-col {
307
+ flex: 0 0 70% !important;
308
+ max-width: 70% !important;
309
+ }
310
+
311
+ .bordered-container {
312
+ border: 1px solid #ddd;
313
+ padding: 10px;
314
+ border-radius: 5px;
315
+ z-index: 0;
316
+ }
317
+
318
+ .expand-icon {
319
+ color: $color-tertiary;
320
+ min-width: 22px;
321
+ padding: 2px;
322
+ border-radius: 5px;
323
+ }
324
+
325
+ .expand-icon:hover {
326
+ border: 0.25px solid $color-tertiary;
327
+ }
328
+
329
+ /* --------------------RESPONSIVE DISPLAY HEADINGS--------------------------*/
330
+ @media (max-width: 575.98px) {
331
+ .display-1 {
332
+ font-size: 3rem;
333
+ font-weight: 300;
334
+ line-height: 1.0;
335
+ }
336
+
337
+ .display-2 {
338
+ font-size: 2.75rem;
339
+ font-weight: 300;
340
+ line-height: 1.0;
341
+ }
342
+
343
+ .display-3 {
344
+ font-size: 2.25rem;
345
+ font-weight: 300;
346
+ line-height: 1.0;
347
+ }
348
+
349
+ .display-4 {
350
+ font-size: 1.75rem;
351
+ font-weight: 300;
352
+ line-height: 1.0;
353
+ }
354
+ }
355
+
356
+ /*========================
357
+ Index project view custom
358
+ =========================*/
359
+
360
+ .main {
361
+ font-family: $font-family-system;
362
+ font-size: 1rem;
363
+ font-weight: 400;
364
+ line-height: 1.5;
365
+ color: rgb(33, 37, 41);
366
+ text-align: left;
367
+ }
368
+
369
+ /* Utility */
370
+ .min-width-0 { min-width: 0; }
371
+
372
+ /* document toolbar */
373
+
374
+ .toolbar-container {
375
+ position: sticky;
376
+ top: 3.25em;
377
+ z-index: 10;
378
+ border: 1px solid #ccc;
379
+ border-radius: 5px;
380
+ background-color: $color-toolbar;
381
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
382
+ transition: all 0.3s ease-in-out;
383
+ }
384
+
385
+ body.scrolled .toolbar-container {
386
+ top: 0;
387
+ transition: all 0.3s ease-in-out;
388
+ }
389
+
390
+ #clear-selection:hover i {
391
+ color: red;
392
+ }
393
+
394
+ #edit-selection:hover i {
395
+ color: $color-primary;
396
+ }
397
+
398
+ #clear-selection {
399
+ display: block;
400
+ text-align: right;
401
+ }
402
+
403
+ .introjs-tooltip {
404
+ min-width: 30vw;
405
+ max-width: 30vw;
406
+ }
407
+
408
+ .introjs-prevbutton {
409
+ display: none;
410
+ }
411
+
412
+ button#start-tutorial {
413
+ position: fixed;
414
+ right: 50px;
415
+ bottom: 50px;
416
+ }
417
+
418
+ .scroll-btn:hover {
419
+ transform: translateY(-3px);
420
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
421
+ }
422
+
423
+ .scroll-btn {
424
+ position: fixed;
425
+ bottom: 20px;
426
+ right: 30px;
427
+ z-index: 9999;
428
+ width: 40px;
429
+ height: 40px;
430
+ }
431
+
432
+ .badge-fixed-width {
433
+ width: 40px;
434
+ text-align: center;
435
+ display: inline-block;
436
+ }
437
+
438
+ line {
439
+ cursor: pointer;
440
+ }
441
+
442
+ /* Custom Logo Override */
443
+
444
+ @if variable-exists(logo-main) {
445
+ .navbar-brand .logo.not-scrolled {
446
+ background-image: url($logo-main);
447
+ }
448
+ }
449
+
450
+ @if variable-exists(logo-main) {
451
+ .navbar-brand .logo.scrolled {
452
+ background-image: url($logo-main);
453
+ }
454
+ }
455
+
456
+ /* ============================================
457
+ Collection Modal Styles
458
+ ============================================ */
459
+
460
+ #collection-add-documents-list .document-item .fw-bold {
461
+ max-width: 400px;
462
+ overflow: hidden;
463
+ text-overflow: ellipsis;
464
+ white-space: nowrap;
465
+ display: inline-block;
466
+ }
467
+
468
+ #collection-add-modal .modal-body .col-md-4,
469
+ #collection-add-modal .modal-body .col-md-8 {
470
+ border-right: 1px solid $color-border-light;
471
+ padding-right: 1.5rem;
472
+ }
473
+
474
+ #collection-add-modal .modal-body .col-md-8:last-child {
475
+ border-right: none;
476
+ padding-left: 1.5rem;
477
+ padding-right: 0;
478
+ }
479
+
480
+ /* Collection editing */
481
+
482
+ #collection-selected-documents-list {
483
+ min-height: 40px;
484
+ max-height: 200px;
485
+ overflow-y: auto;
486
+ }
487
+
488
+
489
+ @media (max-width: 767.98px) {
490
+
491
+ #collection-add-modal .modal-body .col-md-4,
492
+ #collection-add-modal .modal-body .col-md-8 {
493
+ border-right: none;
494
+ border-bottom: 1px solid $color-border-light;
495
+ padding-right: 0;
496
+ padding-bottom: 1.5rem;
497
+ margin-bottom: 1.5rem;
498
+ }
499
+
500
+ #collection-add-modal .modal-body .col-md-8:last-child {
501
+ border-bottom: none;
502
+ padding-left: 0;
503
+ padding-bottom: 0;
504
+ margin-bottom: 0;
505
+ }
506
+ }
507
+
508
+ /* Hierarchical collection display in document dispatch */
509
+ #document-files-list select option {
510
+ font-family: monospace;
511
+ font-size: 0.9em;
512
+ }
513
+
514
+ #document-files-list select option[style*="padding-left"] {
515
+ color: $color-gray-500;
516
+ font-style: italic;
517
+ }
518
+
519
+ /* Document selection in collection modal */
520
+ .document-item {
521
+ border: 1px solid $color-gray-300;
522
+ background-color: $color-gray-100;
523
+ cursor: pointer;
524
+ transition: all 0.2s ease;
525
+ }
526
+
527
+ .document-item:hover:not(.selected) {
528
+ background-color: $color-gray-200;
529
+ }
530
+
531
+ .document-item.selected {
532
+ background-color: $color-highlight-bg !important;
533
+ color: $color-gray-600;
534
+ border-color: $color-highlight-border;
535
+ }
536
+
537
+ /* Selected documents display */
538
+ .selected-document-badge {
539
+ display: inline-block;
540
+ background-color: $color-highlight-bg;
541
+ color: $color-gray-600;
542
+ border: 1px solid $color-highlight-border;
543
+ border-radius: 0.375rem;
544
+ padding: 0.25rem 0.5rem;
545
+ margin: 0.125rem;
546
+ font-size: 0.875rem;
547
+ max-width: 100%;
548
+
549
+ .d-flex > span:not(.remove-btn) {
550
+ max-width: 250px;
551
+ overflow: hidden;
552
+ text-overflow: ellipsis;
553
+ white-space: nowrap;
554
+ display: inline-block;
555
+ }
556
+ }
557
+
558
+ .selected-document-badge .remove-btn {
559
+ margin-left: 0.5rem;
560
+ cursor: pointer;
561
+ color: $color-gray-500;
562
+ font-size: 1.5rem;
563
+ flex-shrink: 0;
564
+ }
565
+
566
+ .selected-document-badge .remove-btn:hover {
567
+ color: $color-danger;
568
+ }
569
+
570
+ /* ============================================
571
+ Document File Item Styles
572
+ ============================================ */
573
+
574
+ .document-file-item {
575
+ background-color: $color-gray-100;
576
+ transition: background-color 0.2s ease;
577
+ }
578
+
579
+ .document-file-item:hover {
580
+ background-color: $color-gray-200;
581
+ }
582
+
583
+ .document-file-item .file-name {
584
+ font-weight: 500;
585
+ color: $color-gray-600;
586
+ max-width: 550px;
587
+ overflow: hidden;
588
+ text-overflow: ellipsis;
589
+ white-space: nowrap;
590
+ display: inline-block;
591
+ }
592
+
593
+ .document-file-item .collection-selector select {
594
+ border: 1px solid $color-gray-400;
595
+ border-radius: 0.375rem;
596
+ padding: 0.375rem 0.75rem;
597
+ font-size: 0.875rem;
598
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
599
+ }
600
+
601
+ .document-file-item .collection-selector select:focus {
602
+ border-color: $color-blue-focus;
603
+ outline: 0;
604
+ box-shadow: 0 0 0 0.2rem $color-blue-shadow;
605
+ }
606
+
607
+ .document-file-item .collection-selector button {
608
+ padding: 0.375rem 0.5rem;
609
+ font-size: 0.875rem;
610
+ }
611
+
612
+ .create-new-for-file {
613
+ min-width: 38px;
614
+ height: 31px;
615
+ display: flex;
616
+ align-items: center;
617
+ justify-content: center;
618
+ }
619
+
620
+ .create-new-for-file:hover {
621
+ background-color: $color-blue-primary;
622
+ border-color: $color-blue-primary;
623
+ color: white;
624
+ }
625
+
626
+ .new-collection-indicator {
627
+ white-space: nowrap;
628
+ left: 0;
629
+ top: 100%;
630
+ }
631
+
632
+ .text-direction-selector {
633
+ font-size: 0.875rem;
634
+ }
635
+
636
+ .text-direction-selector option {
637
+ padding: 0.25rem 0.5rem;
638
+ }
639
+
640
+ .collection-selector {
641
+ min-width: 332px;
642
+ }
643
+
644
+ .document-file-item .collection-selector select {
645
+ width: 300px;
646
+ flex-shrink: 0;
647
+ }
648
+
649
+ .document-file-item .collection-selector button {
650
+ flex-shrink: 0;
651
+ }
652
+
653
+ /* Mobile responsive styles for document file items */
654
+ @media (max-width: 767.98px) {
655
+ .document-file-item {
656
+ flex-direction: column !important;
657
+ align-items: flex-start !important;
658
+ gap: 0.75rem;
659
+ }
660
+
661
+ .document-file-item>div:first-child {
662
+ width: 100%;
663
+ }
664
+
665
+ .document-file-item .collection-selector {
666
+ width: 100%;
667
+ min-width: 100% !important;
668
+ flex-direction: column !important;
669
+ align-items: stretch !important;
670
+ gap: 0.5rem;
671
+ }
672
+
673
+ .document-file-item .collection-selector select {
674
+ width: 100% !important;
675
+ max-width: none !important;
676
+ margin-right: 0 !important;
677
+ order: 1;
678
+ }
679
+
680
+ .document-file-item .collection-selector button {
681
+ width: 100% !important;
682
+ order: 2;
683
+ }
684
+
685
+ #bulk-actions-container .d-flex {
686
+ flex-direction: column !important;
687
+ align-items: flex-start !important;
688
+ gap: 0.75rem;
689
+ }
690
+
691
+ #bulk-actions-container .d-flex>div,
692
+ #bulk-actions-container .d-flex>button {
693
+ width: 100%;
694
+ }
695
+
696
+ #assign-all-collection-select {
697
+ width: 100% !important;
698
+ max-width: none !important;
699
+ }
700
+ }
701
+
702
+ /*
703
+ Multi-Select Tip
704
+ */
705
+
706
+ #multi-select-tip {
707
+ margin-bottom: 1rem;
708
+ background-color: $color-success-bg !important;
709
+ border-left: 4px solid $color-success-border;
710
+ border-color: $color-success-border !important;
711
+ color: $color-success-text;
712
+ animation: slideInDown 0.4s ease-out;
713
+ }
714
+
715
+ #multi-select-tip .fa-lightbulb {
716
+ color: $color-success-border;
717
+ }
718
+
719
+ @keyframes slideInDown {
720
+ from {
721
+ opacity: 0;
722
+ transform: translateY(-20px);
723
+ }
724
+
725
+ to {
726
+ opacity: 1;
727
+ transform: translateY(0);
728
+ }
729
+ }
730
+
731
+ /*
732
+ Treeview Help & Popover
733
+ */
734
+
735
+ #treeview-help-icon,
736
+ #tag-treeview-help-icon {
737
+ padding: 0.4rem 0.6rem;
738
+ font-size: 1.5rem;
739
+ }
740
+
741
+ #treeview-help-icon:hover,
742
+ #tag-treeview-help-icon:hover {
743
+ background-color: $color-gray-100;
744
+ }
745
+
746
+ .popover {
747
+ max-width: 350px;
748
+ background-color: $color-success-bg;
749
+ border: 1px solid $color-success-border;
750
+ border-left: 4px solid $color-success-border;
751
+ }
752
+
753
+ .popover-header {
754
+ background-color: $color-success-bg !important;
755
+ color: $color-success-text !important;
756
+ border-bottom: 1px solid $color-success-border !important;
757
+ font-size: 1rem;
758
+ font-weight: 600;
759
+ }
760
+
761
+ .popover-body {
762
+ background-color: $color-success-bg;
763
+ color: $color-success-text;
764
+ font-size: 1rem;
765
+ }
766
+
767
+ .popover-arrow::before,
768
+ .popover-arrow::after {
769
+ border-right-color: $color-success-border !important;
770
+ }
771
+
772
+ .bs-popover-start>.popover-arrow::after {
773
+ border-left-color: $color-success-bg !important;
774
+ }
775
+
776
+ /*
777
+ Drag Hint Popup
778
+ */
779
+
780
+ .drag-hint-popup {
781
+ position: relative;
782
+ display: block;
783
+ background-color: $color-success-bg;
784
+ color: $color-success-text;
785
+ padding: 1rem 1rem;
786
+ border-radius: 0.375rem;
787
+ border-left: 4px solid $color-success-border;
788
+ border: 1px solid $color-success-border;
789
+ font-size: 1rem;
790
+ font-weight: normal;
791
+ z-index: 1000;
792
+ }
793
+
794
+ .drag-hint-popup i {
795
+ margin-right: 0.5rem;
796
+ color: $color-success-border;
797
+ }
798
+
799
+ @keyframes popupFadeIn {
800
+ from {
801
+ opacity: 0;
802
+ transform: translateY(-10px);
803
+ }
804
+
805
+ to {
806
+ opacity: 1;
807
+ transform: translateY(0);
808
+ }
809
+ }