playbook_ui 14.12.0.pre.alpha.playrailsinputmaskissue5933 → 14.12.0.pre.alpha.testingwithfas5686

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +0 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/CustomCell.tsx +1 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +4 -11
  5. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +10 -9
  6. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +21 -34
  7. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +13 -8
  8. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +0 -2
  9. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1 -1
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_loading_react.md → _advanced_table_loading.md} +2 -2
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -1
  12. data/app/pb_kits/playbook/pb_advanced_table/index.js +6 -9
  13. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +1 -3
  14. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +5 -9
  15. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +0 -2
  16. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +6 -9
  17. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +0 -2
  18. data/app/pb_kits/playbook/pb_avatar/_avatar.scss +0 -14
  19. data/app/pb_kits/playbook/pb_avatar/_avatar.tsx +7 -11
  20. data/app/pb_kits/playbook/pb_avatar/avatar.html.erb +7 -6
  21. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_badge_component_overlay.jsx +3 -9
  22. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_circle_icon_component_overlay.jsx +2 -6
  23. data/app/pb_kits/playbook/pb_button/button.rb +1 -1
  24. data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +1 -1
  25. data/app/pb_kits/playbook/pb_date/_date.tsx +4 -14
  26. data/app/pb_kits/playbook/pb_date/docs/_date_default.jsx +1 -2
  27. data/app/pb_kits/playbook/pb_date/docs/_date_unstyled.jsx +5 -13
  28. data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +6 -1
  29. data/app/pb_kits/playbook/pb_filter/filter.html.erb +5 -1
  30. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/example.yml +0 -1
  31. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/index.js +5 -7
  32. data/app/pb_kits/playbook/pb_form_group/form_group.html.erb +6 -1
  33. data/app/pb_kits/playbook/pb_form_pill/form_pill.html.erb +1 -1
  34. data/app/pb_kits/playbook/pb_icon/_icon.tsx +1 -1
  35. data/app/pb_kits/playbook/pb_icon/icon.rb +1 -1
  36. data/app/pb_kits/playbook/pb_icon/icon.test.js +8 -8
  37. data/app/pb_kits/playbook/pb_link/_link.tsx +0 -18
  38. data/app/pb_kits/playbook/pb_link/docs/example.yml +3 -5
  39. data/app/pb_kits/playbook/pb_link/docs/index.js +1 -2
  40. data/app/pb_kits/playbook/pb_link/link.html.erb +1 -1
  41. data/app/pb_kits/playbook/pb_link/link.rb +0 -6
  42. data/app/pb_kits/playbook/pb_link/link.test.jsx +0 -30
  43. data/app/pb_kits/playbook/pb_nav/_nav_item.test.js +2 -2
  44. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_tooltip.html.erb +6 -6
  45. data/app/pb_kits/playbook/pb_table/docs/_table_with_background_kit.html.erb +9 -6
  46. data/app/pb_kits/playbook/pb_table/docs/_table_with_background_kit.jsx +9 -6
  47. data/app/pb_kits/playbook/pb_table/styles/_desktop_collapse.scss +0 -26
  48. data/app/pb_kits/playbook/pb_table/styles/_mobile.scss +1 -0
  49. data/app/pb_kits/playbook/pb_table/styles/_mobile_collapse.scss +0 -25
  50. data/app/pb_kits/playbook/pb_table/styles/_tablet_collapse.scss +0 -25
  51. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_mask.html.erb +1 -1
  52. data/app/pb_kits/playbook/pb_text_input/index.js +83 -52
  53. data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +1 -3
  54. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_default.html.erb +1 -1
  55. data/app/pb_kits/playbook/pb_tooltip/index.js +27 -45
  56. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +1 -5
  57. data/app/pb_kits/playbook/pb_user/_user.tsx +0 -3
  58. data/app/pb_kits/playbook/pb_user/docs/example.yml +0 -2
  59. data/app/pb_kits/playbook/pb_user/docs/index.js +0 -1
  60. data/app/pb_kits/playbook/pb_user/user.html.erb +1 -1
  61. data/app/pb_kits/playbook/pb_user/user.rb +0 -1
  62. data/app/pb_kits/playbook/pb_user/user.test.js +0 -14
  63. data/dist/chunks/_typeahead-DkuPTikq.js +36 -0
  64. data/dist/chunks/_weekday_stacked-DWgU5uIW.js +45 -0
  65. data/dist/chunks/{lib-DjpLC8uO.js → lib-kMuhBuU7.js} +1 -1
  66. data/dist/chunks/{pb_form_validation-S56UaHZl.js → pb_form_validation-DBJ0wZuS.js} +1 -1
  67. data/dist/chunks/vendor.js +1 -1
  68. data/dist/menu.yml +0 -6
  69. data/dist/playbook-doc.js +1 -1
  70. data/dist/playbook-rails-react-bindings.js +1 -1
  71. data/dist/playbook-rails.js +1 -1
  72. data/dist/playbook.css +1 -1
  73. data/lib/playbook/pb_forms_helper.rb +4 -13
  74. data/lib/playbook/version.rb +1 -1
  75. metadata +8 -32
  76. data/app/pb_kits/playbook/pb_advanced_table/Utilities/ActionBarAnimationHelper.ts +0 -26
  77. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading.html.erb +0 -33
  78. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading_rails.md +0 -1
  79. data/app/pb_kits/playbook/pb_copy_button/_copy_button.scss +0 -4
  80. data/app/pb_kits/playbook/pb_copy_button/_copy_button.tsx +0 -92
  81. data/app/pb_kits/playbook/pb_copy_button/copy_button.html.erb +0 -15
  82. data/app/pb_kits/playbook/pb_copy_button/copy_button.rb +0 -28
  83. data/app/pb_kits/playbook/pb_copy_button/copy_button.test.jsx +0 -64
  84. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_default.html.erb +0 -2
  85. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_default.jsx +0 -21
  86. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_from.html.erb +0 -5
  87. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_from.jsx +0 -45
  88. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_from.md +0 -1
  89. data/app/pb_kits/playbook/pb_copy_button/docs/example.yml +0 -8
  90. data/app/pb_kits/playbook/pb_copy_button/docs/index.js +0 -2
  91. data/app/pb_kits/playbook/pb_copy_button/index.js +0 -47
  92. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_auto_close.html.erb +0 -58
  93. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_auto_close_rails.md +0 -3
  94. data/app/pb_kits/playbook/pb_link/docs/_link_target.html.erb +0 -15
  95. data/app/pb_kits/playbook/pb_link/docs/_link_target.jsx +0 -29
  96. data/app/pb_kits/playbook/pb_user/docs/_user_light_weight.html.erb +0 -42
  97. data/app/pb_kits/playbook/pb_user/docs/_user_light_weight.jsx +0 -59
  98. data/app/pb_kits/playbook/pb_user/docs/_user_light_weight.md +0 -2
  99. data/dist/chunks/_typeahead-qhstadx9.js +0 -36
  100. data/dist/chunks/_weekday_stacked-CAHsfiaG.js +0 -45
  101. data/lib/playbook/pb_forms_global_props_helper.rb +0 -136
  102. /data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/{_fixed_confirmation_toast_auto_close_react.md → _fixed_confirmation_toast_auto_close.md} +0 -0
@@ -1,10 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "pb_forms_global_props_helper"
4
-
5
3
  module Playbook
6
4
  module PbFormsHelper
7
- include Playbook::PbFormsGlobalPropsHelper
8
5
  # Renders a pb form with ::Playbook::Forms::Builder, that can render
9
6
  # Playbook kits in the most railsie way.
10
7
  #
@@ -26,17 +23,11 @@ module Playbook
26
23
  # @param validate [Boolean] whether validation should be triggered or not
27
24
  # @see [#form_with] for other options
28
25
  def pb_form_with(data: {}, validate: false, loading: false, **kwargs, &block)
29
- global_props, form_options = extract_all_props(kwargs)
30
-
31
- classnames = ["pb-form"]
32
- classnames << form_options[:class] if form_options[:class].present?
33
- classnames << "pb_form_loading" if loading
34
- classnames.concat(generate_prop_classes(global_props))
35
-
36
26
  data = data.merge("pb-form-validation" => validate)
37
-
38
- options = form_options.merge(
39
- class: classnames.compact.join(" "),
27
+ classname = ["pb-form", kwargs[:class]].join(" ")
28
+ classname += " pb_form_loading" if loading
29
+ options = kwargs.merge(
30
+ class: classname,
40
31
  data: data,
41
32
  builder: ::Playbook::Forms::Builder
42
33
  )
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Playbook
4
4
  PREVIOUS_VERSION = "14.12.0"
5
- VERSION = "14.12.0.pre.alpha.playrailsinputmaskissue5933"
5
+ VERSION = "14.12.0.pre.alpha.testingwithfas5686"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playbook_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 14.12.0.pre.alpha.playrailsinputmaskissue5933
4
+ version: 14.12.0.pre.alpha.testingwithfas5686
5
5
  platform: ruby
6
6
  authors:
7
7
  - Power UX
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2025-02-05 00:00:00.000000000 Z
12
+ date: 2025-01-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -265,7 +265,6 @@ files:
265
265
  - app/pb_kits/playbook/pb_advanced_table/README.md
266
266
  - app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx
267
267
  - app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx
268
- - app/pb_kits/playbook/pb_advanced_table/Utilities/ActionBarAnimationHelper.ts
269
268
  - app/pb_kits/playbook/pb_advanced_table/Utilities/BrowserCheck.tsx
270
269
  - app/pb_kits/playbook/pb_advanced_table/Utilities/ExpansionControlHelpers.tsx
271
270
  - app/pb_kits/playbook/pb_advanced_table/Utilities/IconHelpers.tsx
@@ -301,10 +300,8 @@ files:
301
300
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_expanded_control.md
302
301
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_row_loading.jsx
303
302
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_row_loading.md
304
- - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading.html.erb
305
303
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading.jsx
306
- - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading_rails.md
307
- - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading_react.md
304
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading.md
308
305
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_no_subrows.jsx
309
306
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pagination.jsx
310
307
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pagination.md
@@ -799,19 +796,6 @@ files:
799
796
  - app/pb_kits/playbook/pb_contact/docs/_description.md
800
797
  - app/pb_kits/playbook/pb_contact/docs/example.yml
801
798
  - app/pb_kits/playbook/pb_contact/docs/index.js
802
- - app/pb_kits/playbook/pb_copy_button/_copy_button.scss
803
- - app/pb_kits/playbook/pb_copy_button/_copy_button.tsx
804
- - app/pb_kits/playbook/pb_copy_button/copy_button.html.erb
805
- - app/pb_kits/playbook/pb_copy_button/copy_button.rb
806
- - app/pb_kits/playbook/pb_copy_button/copy_button.test.jsx
807
- - app/pb_kits/playbook/pb_copy_button/docs/_copy_button_default.html.erb
808
- - app/pb_kits/playbook/pb_copy_button/docs/_copy_button_default.jsx
809
- - app/pb_kits/playbook/pb_copy_button/docs/_copy_button_from.html.erb
810
- - app/pb_kits/playbook/pb_copy_button/docs/_copy_button_from.jsx
811
- - app/pb_kits/playbook/pb_copy_button/docs/_copy_button_from.md
812
- - app/pb_kits/playbook/pb_copy_button/docs/example.yml
813
- - app/pb_kits/playbook/pb_copy_button/docs/index.js
814
- - app/pb_kits/playbook/pb_copy_button/index.js
815
799
  - app/pb_kits/playbook/pb_currency/_currency.scss
816
800
  - app/pb_kits/playbook/pb_currency/_currency.tsx
817
801
  - app/pb_kits/playbook/pb_currency/currency.html.erb
@@ -1349,10 +1333,8 @@ files:
1349
1333
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss
1350
1334
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx
1351
1335
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_description.md
1352
- - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_auto_close.html.erb
1353
1336
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_auto_close.jsx
1354
- - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_auto_close_rails.md
1355
- - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_auto_close_react.md
1337
+ - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_auto_close.md
1356
1338
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_children.html.erb
1357
1339
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_children.jsx
1358
1340
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_children.md
@@ -1844,8 +1826,6 @@ files:
1844
1826
  - app/pb_kits/playbook/pb_link/docs/_link_icon.jsx
1845
1827
  - app/pb_kits/playbook/pb_link/docs/_link_tag.html.erb
1846
1828
  - app/pb_kits/playbook/pb_link/docs/_link_tag.jsx
1847
- - app/pb_kits/playbook/pb_link/docs/_link_target.html.erb
1848
- - app/pb_kits/playbook/pb_link/docs/_link_target.jsx
1849
1829
  - app/pb_kits/playbook/pb_link/docs/_link_underline.html.erb
1850
1830
  - app/pb_kits/playbook/pb_link/docs/_link_underline.jsx
1851
1831
  - app/pb_kits/playbook/pb_link/docs/example.yml
@@ -3164,9 +3144,6 @@ files:
3164
3144
  - app/pb_kits/playbook/pb_user/docs/_user_default.html.erb
3165
3145
  - app/pb_kits/playbook/pb_user/docs/_user_default.jsx
3166
3146
  - app/pb_kits/playbook/pb_user/docs/_user_horizontal_swift.md
3167
- - app/pb_kits/playbook/pb_user/docs/_user_light_weight.html.erb
3168
- - app/pb_kits/playbook/pb_user/docs/_user_light_weight.jsx
3169
- - app/pb_kits/playbook/pb_user/docs/_user_light_weight.md
3170
3147
  - app/pb_kits/playbook/pb_user/docs/_user_presence_indicator_swift.md
3171
3148
  - app/pb_kits/playbook/pb_user/docs/_user_props_table.md
3172
3149
  - app/pb_kits/playbook/pb_user/docs/_user_size.html.erb
@@ -3322,11 +3299,11 @@ files:
3322
3299
  - app/pb_kits/playbook/utilities/test/globalProps/truncate.test.js
3323
3300
  - app/pb_kits/playbook/utilities/text.ts
3324
3301
  - app/pb_kits/playbook/utilities/validEmojiChecker.ts
3325
- - dist/chunks/_typeahead-qhstadx9.js
3326
- - dist/chunks/_weekday_stacked-CAHsfiaG.js
3302
+ - dist/chunks/_typeahead-DkuPTikq.js
3303
+ - dist/chunks/_weekday_stacked-DWgU5uIW.js
3327
3304
  - dist/chunks/lazysizes-B7xYodB-.js
3328
- - dist/chunks/lib-DjpLC8uO.js
3329
- - dist/chunks/pb_form_validation-S56UaHZl.js
3305
+ - dist/chunks/lib-kMuhBuU7.js
3306
+ - dist/chunks/pb_form_validation-DBJ0wZuS.js
3330
3307
  - dist/chunks/vendor.js
3331
3308
  - dist/menu.yml
3332
3309
  - dist/playbook-doc.js
@@ -3378,7 +3355,6 @@ files:
3378
3355
  - lib/playbook/overflow.rb
3379
3356
  - lib/playbook/pagination_renderer.rb
3380
3357
  - lib/playbook/pb_doc_helper.rb
3381
- - lib/playbook/pb_forms_global_props_helper.rb
3382
3358
  - lib/playbook/pb_forms_helper.rb
3383
3359
  - lib/playbook/pb_kit_helper.rb
3384
3360
  - lib/playbook/position.rb
@@ -1,26 +0,0 @@
1
- export const showActionBar = (elem: HTMLElement) => {
2
- elem.style.display = "block";
3
- const height = elem.scrollHeight + "px";
4
- elem.style.height = height;
5
- elem.classList.add("is-visible");
6
- elem.style.overflow = "hidden";
7
-
8
- window.setTimeout(() => {
9
- if (elem.classList.contains("is-visible")) {
10
- elem.style.height = "";
11
- elem.style.overflow = "visible";
12
- }
13
- }, 300);
14
- };
15
-
16
- export const hideActionBar = (elem: HTMLElement) => {
17
- elem.style.height = elem.scrollHeight + "px";
18
- elem.offsetHeight;
19
- window.setTimeout(() => {
20
- elem.style.height = "0";
21
- elem.style.overflow = "hidden";
22
- }, 10);
23
- window.setTimeout(() => {
24
- elem.classList.remove("is-visible");
25
- }, 300);
26
- };
@@ -1,33 +0,0 @@
1
- <% column_definitions = [
2
- {
3
- accessor: "year",
4
- label: "Year",
5
- cellAccessors: ["quarter", "month", "day"],
6
- },
7
- {
8
- accessor: "newEnrollments",
9
- label: "New Enrollments",
10
- },
11
- {
12
- accessor: "scheduledMeetings",
13
- label: "Scheduled Meetings",
14
- },
15
- {
16
- accessor: "attendanceRate",
17
- label: "Attendance Rate",
18
- },
19
- {
20
- accessor: "completedClasses",
21
- label: "Completed Classes",
22
- },
23
- {
24
- accessor: "classCompletionRate",
25
- label: "Class Completion Rate",
26
- },
27
- {
28
- accessor: "graduatedStudents",
29
- label: "Graduated Students",
30
- }
31
- ] %>
32
-
33
- <%= pb_rails("advanced_table", props: { id: "beta_table", table_data: @table_data, column_definitions: column_definitions, loading: true }) %>
@@ -1 +0,0 @@
1
- The optional `loading` prop takes a boolean value that can be managed using state. If loading is true, the table will display the loading skeleton and once loading is false, the table will render with the data provided.
@@ -1,4 +0,0 @@
1
- .pb_copy_button_kit {
2
- width: fit-content;
3
- height: fit-content;
4
- }
@@ -1,92 +0,0 @@
1
-
2
- import React, { useState } from 'react'
3
- import classnames from 'classnames'
4
- import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
5
- import { globalProps } from '../utilities/globalProps'
6
-
7
- import Button from '../pb_button/_button'
8
- import Tooltip from '../pb_tooltip/_tooltip'
9
-
10
- type CopyButtonProps = {
11
- aria?: { [key: string]: string },
12
- className?: string,
13
- data?: { [key: string]: string },
14
- id?: string,
15
- from?: string,
16
- text?: string,
17
- tooltipPlacement?: "top" | "right" | "bottom" | "left",
18
- tooltipText?: string,
19
- value?: string,
20
- }
21
-
22
- const CopyButton = (props: CopyButtonProps) => {
23
- const {
24
- aria = {},
25
- className,
26
- data = {},
27
- from = '',
28
- id,
29
- text= 'Copy',
30
- tooltipPlacement= 'bottom',
31
- tooltipText = 'Copied!',
32
- value = '',
33
- } = props
34
-
35
- const [copied, setCopied] = useState(false)
36
-
37
- const ariaProps = buildAriaProps(aria)
38
- const dataProps = buildDataProps(data)
39
- const classes = classnames(buildCss('pb_copy_button_kit'), globalProps(props), className)
40
-
41
- const copy = () => {
42
- if (!from && !value) {
43
- return
44
- }
45
-
46
- if (value) {
47
- navigator.clipboard.writeText(value)
48
- } else if (from) {
49
- const copyElement = document.getElementById(from);
50
- let copyText = copyElement?.innerText
51
-
52
- if (copyElement instanceof HTMLTextAreaElement || copyElement instanceof HTMLInputElement) {
53
- copyText = copyElement.value;
54
- }
55
-
56
- if (copyText) {
57
- navigator.clipboard.writeText(copyText)
58
- }
59
- }
60
-
61
- setCopied(true)
62
-
63
- setTimeout(() => {
64
- setCopied(false)
65
- }, 1000);
66
- }
67
-
68
- return (
69
- <div
70
- {...ariaProps}
71
- {...dataProps}
72
- className={classes}
73
- id={id}
74
- >
75
- <Tooltip
76
- forceOpenTooltip={copied}
77
- placement={tooltipPlacement}
78
- showTooltip={false}
79
- text={tooltipText}
80
- >
81
- <Button
82
- icon='copy'
83
- onClick={copy}
84
- >
85
- { text }
86
- </Button>
87
- </Tooltip>
88
- </div>
89
- )
90
- }
91
-
92
- export default CopyButton
@@ -1,15 +0,0 @@
1
- <%= pb_content_tag do %>
2
- <%= pb_rails("button", props: { icon: "copy" }) do %>
3
- <%= object.text %>
4
- <% end %>
5
- <% if object.id %>
6
- <%= pb_rails("tooltip", props: {
7
- trigger_element_selector: "##{object.id}",
8
- position: object.tooltip_position,
9
- tooltip_id: "#{object.id}_tooltip",
10
- trigger_method: "click"
11
- }) do %>
12
- <%= object.tooltip_text %>
13
- <% end %>
14
- <% end %>
15
- <% end %>
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Playbook
4
- module PbCopyButton
5
- class CopyButton < ::Playbook::KitBase
6
- prop :text
7
- prop :tooltip_position,
8
- type: Playbook::Props::Enum,
9
- values: %w[top right bottom left],
10
- default: "top"
11
- prop :tooltip_text, type: Playbook::Props::String,
12
- default: "Copied!"
13
- prop :value
14
- prop :from
15
-
16
- def classname
17
- generate_classname("pb_copy_button_kit")
18
- end
19
-
20
- def data
21
- Hash(values[:data]).merge(
22
- "copy-value": value,
23
- "from": from
24
- )
25
- end
26
- end
27
- end
28
- end
@@ -1,64 +0,0 @@
1
- import React from 'react';
2
- import { CopyButton } from 'playbook-ui'
3
- import { ensureAccessible, renderKit, render, fireEvent, screen } from '../utilities/test-utils'
4
-
5
- const props = {
6
- data: { testid: 'default', value: 'copy' }
7
- }
8
-
9
- test('returns namespaced class name', () => {
10
- const kit = renderKit(CopyButton, props)
11
- expect(kit).toBeInTheDocument()
12
- expect(kit).toHaveClass('pb_copy_button_kit')
13
- })
14
-
15
- it('should be accessible', async () => {
16
- ensureAccessible(CopyButton, props)
17
- })
18
-
19
- // It's difficult to actually use navigator.clipboard.readText, so we mock
20
- it('copies the value to clipboard and pastes it into an input', async () => {
21
- Object.defineProperty(global, 'navigator', {
22
- value: {
23
- clipboard: {
24
- writeText: jest.fn().mockResolvedValueOnce(undefined),
25
- },
26
- },
27
- writable: true,
28
- })
29
-
30
- render(<CopyButton {...props} />)
31
-
32
- const copyButton = screen.getByTestId('default')
33
- fireEvent.click(copyButton)
34
-
35
- await navigator.clipboard.writeText('copy')
36
-
37
- expect(navigator.clipboard.writeText).toHaveBeenCalledWith("copy");
38
- })
39
-
40
- test('passes text and tooltip props to button', () => {
41
- render(
42
- <CopyButton
43
- data={{ testid: 'text-test' }}
44
- text={"text"}
45
- tooltipPlacement="right"
46
- tooltipText="Text copied!"
47
- value="copy"
48
- />
49
- )
50
-
51
- const content = screen.getByText("text")
52
- expect(content).toHaveTextContent("text")
53
-
54
- const kit = screen.getByTestId('text-test')
55
- const button = kit.querySelector('.pb_button_kit_primary_inline_enabled')
56
- expect(button).toBeInTheDocument()
57
-
58
- fireEvent.click(button)
59
- const tooltipContent = screen.getByText("Text copied!")
60
- expect(tooltipContent).toHaveTextContent("Text copied!")
61
-
62
- const tooltip = kit.querySelector('.pb_tooltip_kit')
63
- expect(tooltip).toBeInTheDocument()
64
- })
@@ -1,2 +0,0 @@
1
- <%= pb_rails("copy_button", props: { id: "default-copy-button", text: "Copy Text", value: "Playbook makes it easy to support bleeding edge, or legacy systems. Use Playbook’s 200+ components and end-to-end design language to create simple, intuitive and beautiful experiences with ease." } ) %>
2
- <%= pb_rails("textarea", props: { margin_top: "xs", placeholder: "Copy and paste here" }) %>
@@ -1,21 +0,0 @@
1
- import React from 'react'
2
- import { CopyButton, Textarea } from 'playbook-ui'
3
-
4
- const CopyButtonDefault = (props) => (
5
- <div>
6
- <CopyButton
7
- {...props}
8
- text="Copy Text"
9
- tooltipPlacement="right"
10
- tooltipText="Text copied!"
11
- value="Playbook makes it easy to support bleeding edge, or legacy systems. Use Playbook’s 200+ components and end-to-end design language to create simple, intuitive and beautiful experiences with ease."
12
- />
13
-
14
- <Textarea
15
- {...props}
16
- placeholder="Copy and paste here"
17
- />
18
- </div>
19
- )
20
-
21
- export default CopyButtonDefault
@@ -1,5 +0,0 @@
1
- <%= pb_rails("body", props: { id: "body", text: "Copy this body text!"}) %>
2
- <%= pb_rails("copy_button", props: { text: "Copy Body text", from: "body", id: "copy-body-button" }) %>
3
- <%= pb_rails("text_input", props: { margin_top: "xs", placeholder: "Copy and paste here" }) %>
4
- <%= pb_rails("copy_button", props: { text: "Copy Text Input", from: "copy-input", id: "copy-input-button" }) %>
5
- <%= pb_rails("text_input", props: { margin_top: "xs", id: "copy-input" , value: "Copy and paste here" }) %>
@@ -1,45 +0,0 @@
1
- import React, { useState } from 'react'
2
- import { CopyButton, Body, TextInput, Textarea } from 'playbook-ui'
3
-
4
- const CopyButtonFrom = (props) => {
5
- const [text, setText] = useState("Copy this text input text")
6
-
7
- const handleChange = (event) => {
8
- setText(event.target.value);
9
- }
10
-
11
- return (<div>
12
- <Body id="body">Copy this body text!</Body>
13
- <CopyButton
14
- {...props}
15
- from="body"
16
- marginBottom="sm"
17
- text="Copy Body text"
18
- tooltipPlacement="right"
19
- tooltipText="Body text copied!"
20
- />
21
-
22
- <TextInput
23
- {...props}
24
- id="textinput"
25
- onChange={handleChange}
26
- value={text}
27
- />
28
- <CopyButton
29
- {...props}
30
- from="textinput"
31
- marginBottom="sm"
32
- text="Copy Text Input"
33
- tooltipPlacement="right"
34
- tooltipText="Text input copied!"
35
- />
36
-
37
- <Textarea
38
- {...props}
39
- placeholder="Copy and paste here"
40
- />
41
- </div>
42
- )
43
- }
44
-
45
- export default CopyButtonFrom
@@ -1 +0,0 @@
1
- Provide an element's ID as the `from` parameter, and its text will be copied. If the element is an input, its `value` will be copied; otherwise, the `innerText` will be used. Additionally, if a `value` prop is provided, it will override the content from the `from` element and be copied instead.
@@ -1,8 +0,0 @@
1
- examples:
2
- rails:
3
- - copy_button_default: Default
4
- - copy_button_from: Copy From
5
-
6
- react:
7
- - copy_button_default: Default
8
- - copy_button_from: Copy From
@@ -1,2 +0,0 @@
1
- export { default as CopyButtonDefault } from './_copy_button_default.jsx'
2
- export { default as CopyButtonFrom } from './_copy_button_from.jsx'
@@ -1,47 +0,0 @@
1
- import PbEnhancedElement from "../pb_enhanced_element"
2
-
3
- export default class PbCopyButton extends PbEnhancedElement {
4
- static get selector() {
5
- return '.pb_copy_button_kit'
6
- }
7
-
8
- connect() {
9
- this.handleClick = this.handleClick.bind(this)
10
- this.button = this.element.querySelector('button')
11
- if (this.button) {
12
- this.button.addEventListener('click', this.handleClick)
13
- }
14
- }
15
-
16
- disconnect() {
17
- if (this.button) {
18
- this.button.removeEventListener('click', this.handleClick)
19
- }
20
- }
21
-
22
- handleClick() {
23
- const fromId = this.element.getAttribute('data-from')
24
- if (fromId) {
25
- const fromElement = document.querySelector(`#${fromId}`)
26
- if (fromElement) {
27
- let contentToCopy = ''
28
- if (fromElement.tagName.toLowerCase() === 'input') {
29
- contentToCopy = fromElement.value
30
- } else {
31
- contentToCopy = fromElement.innerText
32
- }
33
- navigator.clipboard.writeText(contentToCopy)
34
- .catch(err => console.error('Failed to copy text', err))
35
- return
36
- }
37
- }
38
-
39
- const textToCopy = this.element.getAttribute('data-copy-value')
40
- if (textToCopy) {
41
- navigator.clipboard.writeText(textToCopy)
42
- .catch(err => console.error('Failed to copy text', err))
43
- } else {
44
- console.warn('No data-copy-value attribute found or data-from element')
45
- }
46
- }
47
- }
@@ -1,58 +0,0 @@
1
- <%= pb_rails("button", props: { text: "Show Auto Close Toast", variant: "secondary", data: { toast: "#toast-auto-close" } }) %>
2
- <%= pb_rails("button", props: { text: "Show Closeable Auto Close Toast", variant: "secondary", data: { toast: "#toast-auto-close-closeable" } }) %>
3
-
4
- <%= pb_rails("fixed_confirmation_toast", props: {
5
- auto_close: 3000,
6
- classname: "toast-to-hide",
7
- id: "toast-auto-close",
8
- text: "I will disappear in 3 seconds.",
9
- status: "tip",
10
- vertical: "top",
11
- horizontal: "center"
12
- }) %>
13
-
14
- <%= pb_rails("fixed_confirmation_toast", props: {
15
- auto_close: 10000,
16
- closeable: true,
17
- id: "toast-auto-close-closeable",
18
- text: "I will disappear in 10 seconds.",
19
- status: "tip",
20
- vertical: "top",
21
- horizontal: "center"
22
- }) %>
23
-
24
- <script>
25
- document.addEventListener('DOMContentLoaded', () => {
26
- // Initialize toast elements and buttons
27
- const toasts = {
28
- '#toast-auto-close': document.querySelector("#toast-auto-close"),
29
- '#toast-auto-close-closeable': document.querySelector("#toast-auto-close-closeable")
30
- }
31
-
32
- const buttons = {
33
- '#toast-auto-close': document.querySelector("button[data-toast='#toast-auto-close']"),
34
- '#toast-auto-close-closeable': document.querySelector("button[data-toast='#toast-auto-close-closeable']")
35
- }
36
-
37
- // Store original toasts and remove them from DOM
38
- const originalToasts = {}
39
- Object.entries(toasts).forEach(([id, toast]) => {
40
- if (toast) {
41
- originalToasts[id] = toast.cloneNode(true)
42
- toast.remove()
43
- }
44
- })
45
-
46
- // Set up button click handlers
47
- Object.keys(buttons).forEach((toastId) => {
48
- const button = buttons[toastId]
49
- if (button) {
50
- button.onclick = () => {
51
- const newToast = originalToasts[toastId].cloneNode(true)
52
- newToast.style.display = "flex"
53
- document.body.appendChild(newToast)
54
- }
55
- }
56
- })
57
- })
58
- </script>
@@ -1,3 +0,0 @@
1
- Auto close is used when you want the confirmation toast to close automatically after a certain time. `auto_close` property will be a delay number in ms.
2
-
3
- The script tag in this code snippet is for demonstration purposes only. It clones the toasts in order to have it appear with a button click prompt and not upon initial page load. In a typical production environment the event triggering a fixed confirmation toast to appear would be handled by a controller or a separate javascript file.
@@ -1,15 +0,0 @@
1
- <div>
2
- <%= pb_rails("link", props: {
3
- href: "http://google.com",
4
- target: "blank",
5
- text: "Open In New Window"
6
- }) %>
7
- </div>
8
-
9
- <div>
10
- <%= pb_rails("link", props: {
11
- href: "https://playbook.powerapp.cloud/",
12
- target: "child",
13
- text: "Open In Child Tab",
14
- }) %>
15
- </div>